diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 1d0bdc2da..60185037e 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -1,20 +1,20 @@ --- name: Bug report about: Create a report to help us improve -title: '' -labels: '' -assignees: '' - +title: "" +labels: "" +assignees: "" --- **What page is this happening on** -Copy the URL of the page this issue is happening on. +Copy the URL of the page this issue is happening on. **Describe the bug** A clear and concise description of what the bug is. **To Reproduce** Steps to reproduce the behavior: + 1. Go to '...' 2. Click on '....' 3. Scroll down to '....' @@ -27,15 +27,17 @@ A clear and concise description of what you expected to happen. If applicable, add screenshots to help explain your problem. **Desktop (please complete the following information):** - - OS: [e.g. iOS] - - Browser [e.g. chrome, safari] - - Version [e.g. 22] + +- OS: [e.g. iOS] +- Browser [e.g. chrome, safari] +- Version [e.g. 22] **Smartphone (please complete the following information):** - - Device: [e.g. iPhone6] - - OS: [e.g. iOS8.1] - - Browser [e.g. stock browser, safari] - - Version [e.g. 22] + +- Device: [e.g. iPhone6] +- OS: [e.g. iOS8.1] +- Browser [e.g. stock browser, safari] +- Version [e.g. 22] **Additional context** Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index bbcbbe7d6..2bc5d5f71 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -1,10 +1,9 @@ --- name: Feature request about: Suggest an idea for this project -title: '' -labels: '' -assignees: '' - +title: "" +labels: "" +assignees: "" --- **Is your feature request related to a problem? Please describe.** diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index b46f67195..763c631c1 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -12,7 +12,7 @@ jobs: strategy: matrix: - node-version: [12.x, 14.x, 15.x] + node-version: [18.x] steps: - uses: actions/checkout@v2 diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 86fd35289..1a27b72f5 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -12,7 +12,7 @@ jobs: strategy: matrix: - node-version: [12.x, 14.x, 15.x] + node-version: [18.x] steps: - uses: actions/checkout@v2 diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 923a56d9c..66c64b0bc 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -12,7 +12,7 @@ jobs: strategy: matrix: - node-version: [12.x, 14.x, 15.x] + node-version: [18.x] steps: - uses: actions/checkout@v2 diff --git a/README.md b/README.md index 1ba0ef7d5..e278214e8 100644 --- a/README.md +++ b/README.md @@ -44,7 +44,6 @@ cd .. Then run the following (from the top level directory) and answer all prompts: - ```shell yarn start:app:production ``` @@ -93,7 +92,7 @@ Of note, we use: - [`onInitialClientRender`](https://www.gatsbyjs.org/docs/browser-apis/#onInitialClientRender) - Any code that should run once after the client renders goes here. + Any code that should run once after the client renders goes here. This code pulls in and configures [gapi](https://github.com/google/google-api-javascript-client), a Google diff --git a/data/images/blackT2.png b/data/images/blackT2.png new file mode 100644 index 000000000..679064039 Binary files /dev/null and b/data/images/blackT2.png differ diff --git a/data/images/brownT.png b/data/images/brownT.png new file mode 100644 index 000000000..6ff2979f7 Binary files /dev/null and b/data/images/brownT.png differ diff --git a/data/images/greyT.png b/data/images/greyT.png new file mode 100644 index 000000000..235e52a70 Binary files /dev/null and b/data/images/greyT.png differ diff --git a/data/images/pinkT.png b/data/images/pinkT.png new file mode 100644 index 000000000..8580f9c50 Binary files /dev/null and b/data/images/pinkT.png differ diff --git a/data/images/yellowT.png b/data/images/yellowT.png new file mode 100644 index 000000000..6ddb26bbb Binary files /dev/null and b/data/images/yellowT.png differ diff --git a/data/products.json b/data/products.json new file mode 100644 index 000000000..5611ed8ad --- /dev/null +++ b/data/products.json @@ -0,0 +1,68 @@ +[ + { + "id": "1", + "title": "Compton T-Shirt", + "description": "Sint occaecat deserunt ex incididunt qui sint. Id minim magna labore pariatur nulla quis.", + "price": 15, + "brand": "Compton", + "category": "T-shirt", + "image": "images/yellowT.png", + "colors": ["Red", "Green", "Blue"], + "sizes": ["Small", "Medium", "Large"] + }, + { + "id": "2", + "title": "Comverges T-Shirt", + "description": "Sint occaecat deserunt ex incididunt qui sint. Id minim magna labore pariatur nulla quis.", + "price": 20, + "brand": "Comverges", + "category": "T-shirt", + "image": "images/greyT.png", + "colors": ["Red", "Green", "Blue"], + "sizes": ["Small", "Medium", "Large"] + }, + { + "id": "3", + "title": "Flexigen T-Shirt", + "description": "Sint occaecat deserunt ex incididunt qui sint. Id minim magna labore pariatur nulla quis.", + "price": 30, + "brand": "Flexigen", + "category": "T-shirt", + "image": "images/pinkT.png", + "colors": ["Red", "Green", "Blue"], + "sizes": ["Small", "Medium", "Large"] + }, + { + "id": "4", + "title": "Fuelworks T-Shirt", + "description": "Sint occaecat deserunt ex incididunt qui sint. Id minim magna labore pariatur nulla quis.", + "price": 40, + "brand": "Fuelworks", + "category": "T-shirt", + "image": "images/blackT2.png", + "colors": ["Red", "Green", "Blue"], + "sizes": ["Small", "Medium", "Large"] + }, + { + "id": "5", + "title": "Futuris T-Shirt", + "description": "Sint occaecat deserunt ex incididunt qui sint. Id minim magna labore pariatur nulla quis.", + "price": 50, + "brand": "Futuris", + "category": "T-shirt", + "image": "images/pinkT.png", + "colors": ["Red", "Green", "Blue"], + "sizes": ["Small", "Medium", "Large"] + }, + { + "id": "6", + "title": "Isoternia T-Shirt", + "description": "Sint occaecat deserunt ex incididunt qui sint. Id minim magna labore pariatur nulla quis.", + "price": 44, + "brand": "Isoternia", + "category": "T-shirt", + "image": "images/brownT.png", + "colors": ["Red", "Green", "Blue"], + "sizes": ["Small", "Medium", "Large"] + } +] diff --git a/font-preload-cache.json b/font-preload-cache.json index bf2495568..01bc02533 100644 --- a/font-preload-cache.json +++ b/font-preload-cache.json @@ -1 +1,178 @@ -{"timestamp":1620411978878,"hash":"125a313d2bc483045dd021179663cf24","assets":{"/dimensions-metrics-explorer/user/":{"https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2":true},"/dimensions-metrics-explorer/session/":{"https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2":true},"/dimensions-metrics-explorer/traffic-sources/":{"https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2":true},"/dimensions-metrics-explorer/adwords/":{"https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2":true},"/dimensions-metrics-explorer/goal-conversions/":{"https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2":true},"/dimensions-metrics-explorer/platform-or-device/":{"https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2":true},"/dimensions-metrics-explorer/geo-network/":{"https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2":true},"/dimensions-metrics-explorer/system/":{"https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2":true},"/dimensions-metrics-explorer/social-activities/":{"https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2":true},"/dimensions-metrics-explorer/page-tracking/":{"https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2":true},"/dimensions-metrics-explorer/content-grouping/":{"https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2":true},"/dimensions-metrics-explorer/internal-search/":{"https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2":true},"/dimensions-metrics-explorer/site-speed/":{"https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2":true},"/dimensions-metrics-explorer/app-tracking/":{"https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2":true},"/dimensions-metrics-explorer/event-tracking/":{"https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2":true},"/dimensions-metrics-explorer/ecommerce/":{"https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2":true},"/dimensions-metrics-explorer/social-interactions/":{"https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2":true},"/dimensions-metrics-explorer/user-timings/":{"https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2":true},"/dimensions-metrics-explorer/exceptions/":{"https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2":true},"/dimensions-metrics-explorer/content-experiments/":{"https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2":true},"/dimensions-metrics-explorer/custom-variables-or-columns/":{"https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2":true},"/dimensions-metrics-explorer/time/":{"https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2":true},"/dimensions-metrics-explorer/doubleclick-campaign-manager/":{"https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2":true},"/dimensions-metrics-explorer/audience/":{"https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2":true},"/dimensions-metrics-explorer/adsense/":{"https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2":true},"/dimensions-metrics-explorer/publisher/":{"https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2":true},"/dimensions-metrics-explorer/ad-exchange/":{"https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2":true},"/dimensions-metrics-explorer/doubleclick-for-publishers-backfill/":{"https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2":true},"/dimensions-metrics-explorer/doubleclick-for-publishers/":{"https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2":true},"/dimensions-metrics-explorer/lifetime-value-and-cohorts/":{"https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2":true},"/dimensions-metrics-explorer/channel-grouping/":{"https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2":true},"/dimensions-metrics-explorer/doubleclick-bid-manager/":{"https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2":true},"/dimensions-metrics-explorer/doubleclick-search/":{"https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2":true},"/dev-404-page/":{"https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2":true},"/404/":{"https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2":true},"/account-explorer/":{"https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2":true},"/bitly-auth/":{"https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2":true},"/campaign-url-builder/":{"https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2":true,"https://fonts.gstatic.com/s/sourcecodepro/v14/HI_SiYsKILxRpg3hIP6sJ7fM7PqlPevWnsUnxg.woff2":true},"/dimensions-metrics-explorer/":{"https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2":true,"https://fonts.gstatic.com/s/sourcecodepro/v14/HI_SiYsKILxRpg3hIP6sJ7fM7PqlPevWnsUnxg.woff2":true},"/enhanced-ecommerce/":{"https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2":true,"https://fonts.gstatic.com/s/sourcecodepro/v14/HI_SiYsKILxRpg3hIP6sJ7fM7PqlPevWnsUnxg.woff2":true},"/hit-builder/":{"https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2":true,"https://fonts.gstatic.com/s/sourcecodepro/v14/HI_SiYsKILxRpg3hIP6sJ7fM7PqlPevWnsUnxg.woff2":true},"/":{"https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2":true,"https://fonts.gstatic.com/s/sourcecodepro/v14/HI_SiYsKILxRpg3hIP6sJ7fM7PqlPevWnsUnxg.woff2":true},"/query-explorer/":{"https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2":true,"https://fonts.gstatic.com/s/sourcecodepro/v14/HI_SiYsKILxRpg3hIP6sJ7fM7PqlPevWnsUnxg.woff2":true},"/request-composer/":{"https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2":true,"https://fonts.gstatic.com/s/sourcecodepro/v14/HI_SiYsKILxRpg3hIP6sJ7fM7PqlPevWnsUnxg.woff2":true},"/spreadsheet-add-on/":{"https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2":true,"https://fonts.gstatic.com/s/sourcecodepro/v14/HI_SiYsKILxRpg3hIP6sJ7fM7PqlPevWnsUnxg.woff2":true},"/tag-assistant/":{"https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2":true,"https://fonts.gstatic.com/s/sourcecodepro/v14/HI_SiYsKILxRpg3hIP6sJ7fM7PqlPevWnsUnxg.woff2":true,"https://fonts.gstatic.com/s/roboto/v18/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2":true},"/ga4/campaign-url-builder/":{"https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2":true,"https://fonts.gstatic.com/s/sourcecodepro/v14/HI_SiYsKILxRpg3hIP6sJ7fM7PqlPevWnsUnxg.woff2":true},"/ga4/dimensions-metrics-explorer/":{"https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2":true,"https://fonts.gstatic.com/s/sourcecodepro/v14/HI_SiYsKILxRpg3hIP6sJ7fM7PqlPevWnsUnxg.woff2":true},"/ga4/event-builder/":{"https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2":true,"https://fonts.gstatic.com/s/sourcecodepro/v14/HI_SiYsKILxRpg3hIP6sJ7fM7PqlPevWnsUnxg.woff2":true},"/ga4/":{"https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2":true,"https://fonts.gstatic.com/s/sourcecodepro/v14/HI_SiYsKILxRpg3hIP6sJ7fM7PqlPevWnsUnxg.woff2":true},"/ga4/query-explorer/":{"https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2":true,"https://fonts.gstatic.com/s/sourcecodepro/v14/HI_SiYsKILxRpg3hIP6sJ7fM7PqlPevWnsUnxg.woff2":true},"/404.html":{"https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2":true,"https://fonts.gstatic.com/s/sourcecodepro/v14/HI_SiYsKILxRpg3hIP6sJ7fM7PqlPevWnsUnxg.woff2":true}}} \ No newline at end of file +{ + "timestamp": 1620411978878, + "hash": "125a313d2bc483045dd021179663cf24", + "assets": { + "/dimensions-metrics-explorer/user/": { + "https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2": true + }, + "/dimensions-metrics-explorer/session/": { + "https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2": true + }, + "/dimensions-metrics-explorer/traffic-sources/": { + "https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2": true + }, + "/dimensions-metrics-explorer/adwords/": { + "https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2": true + }, + "/dimensions-metrics-explorer/goal-conversions/": { + "https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2": true + }, + "/dimensions-metrics-explorer/platform-or-device/": { + "https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2": true + }, + "/dimensions-metrics-explorer/geo-network/": { + "https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2": true + }, + "/dimensions-metrics-explorer/system/": { + "https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2": true + }, + "/dimensions-metrics-explorer/social-activities/": { + "https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2": true + }, + "/dimensions-metrics-explorer/page-tracking/": { + "https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2": true + }, + "/dimensions-metrics-explorer/content-grouping/": { + "https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2": true + }, + "/dimensions-metrics-explorer/internal-search/": { + "https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2": true + }, + "/dimensions-metrics-explorer/site-speed/": { + "https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2": true + }, + "/dimensions-metrics-explorer/app-tracking/": { + "https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2": true + }, + "/dimensions-metrics-explorer/event-tracking/": { + "https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2": true + }, + "/dimensions-metrics-explorer/ecommerce/": { + "https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2": true + }, + "/dimensions-metrics-explorer/social-interactions/": { + "https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2": true + }, + "/dimensions-metrics-explorer/user-timings/": { + "https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2": true + }, + "/dimensions-metrics-explorer/exceptions/": { + "https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2": true + }, + "/dimensions-metrics-explorer/content-experiments/": { + "https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2": true + }, + "/dimensions-metrics-explorer/custom-variables-or-columns/": { + "https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2": true + }, + "/dimensions-metrics-explorer/time/": { + "https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2": true + }, + "/dimensions-metrics-explorer/doubleclick-campaign-manager/": { + "https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2": true + }, + "/dimensions-metrics-explorer/audience/": { + "https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2": true + }, + "/dimensions-metrics-explorer/adsense/": { + "https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2": true + }, + "/dimensions-metrics-explorer/publisher/": { + "https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2": true + }, + "/dimensions-metrics-explorer/ad-exchange/": { + "https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2": true + }, + "/dimensions-metrics-explorer/doubleclick-for-publishers-backfill/": { + "https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2": true + }, + "/dimensions-metrics-explorer/doubleclick-for-publishers/": { + "https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2": true + }, + "/dimensions-metrics-explorer/lifetime-value-and-cohorts/": { + "https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2": true + }, + "/dimensions-metrics-explorer/channel-grouping/": { + "https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2": true + }, + "/dimensions-metrics-explorer/doubleclick-bid-manager/": { + "https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2": true + }, + "/dimensions-metrics-explorer/doubleclick-search/": { + "https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2": true + }, + "/dev-404-page/": { + "https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2": true + }, + "/404/": { + "https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2": true + }, + "/account-explorer/": { + "https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2": true + }, + "/bitly-auth/": { + "https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2": true + }, + "/campaign-url-builder/": { + "https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2": true, + "https://fonts.gstatic.com/s/sourcecodepro/v14/HI_SiYsKILxRpg3hIP6sJ7fM7PqlPevWnsUnxg.woff2": true + }, + "/dimensions-metrics-explorer/": { + "https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2": true, + "https://fonts.gstatic.com/s/sourcecodepro/v14/HI_SiYsKILxRpg3hIP6sJ7fM7PqlPevWnsUnxg.woff2": true + }, + "/enhanced-ecommerce/": { + "https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2": true, + "https://fonts.gstatic.com/s/sourcecodepro/v14/HI_SiYsKILxRpg3hIP6sJ7fM7PqlPevWnsUnxg.woff2": true + }, + "/hit-builder/": { + "https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2": true, + "https://fonts.gstatic.com/s/sourcecodepro/v14/HI_SiYsKILxRpg3hIP6sJ7fM7PqlPevWnsUnxg.woff2": true + }, + "/": { + "https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2": true, + "https://fonts.gstatic.com/s/sourcecodepro/v14/HI_SiYsKILxRpg3hIP6sJ7fM7PqlPevWnsUnxg.woff2": true + }, + "/query-explorer/": { + "https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2": true, + "https://fonts.gstatic.com/s/sourcecodepro/v14/HI_SiYsKILxRpg3hIP6sJ7fM7PqlPevWnsUnxg.woff2": true + }, + "/request-composer/": { + "https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2": true, + "https://fonts.gstatic.com/s/sourcecodepro/v14/HI_SiYsKILxRpg3hIP6sJ7fM7PqlPevWnsUnxg.woff2": true + }, + "/spreadsheet-add-on/": { + "https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2": true, + "https://fonts.gstatic.com/s/sourcecodepro/v14/HI_SiYsKILxRpg3hIP6sJ7fM7PqlPevWnsUnxg.woff2": true + }, + "/tag-assistant/": { + "https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2": true, + "https://fonts.gstatic.com/s/sourcecodepro/v14/HI_SiYsKILxRpg3hIP6sJ7fM7PqlPevWnsUnxg.woff2": true, + "https://fonts.gstatic.com/s/roboto/v18/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2": true + }, + "/ga4/campaign-url-builder/": { + "https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2": true, + "https://fonts.gstatic.com/s/sourcecodepro/v14/HI_SiYsKILxRpg3hIP6sJ7fM7PqlPevWnsUnxg.woff2": true + }, + "/ga4/dimensions-metrics-explorer/": { + "https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2": true, + "https://fonts.gstatic.com/s/sourcecodepro/v14/HI_SiYsKILxRpg3hIP6sJ7fM7PqlPevWnsUnxg.woff2": true + }, + "/ga4/event-builder/": { + "https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2": true, + "https://fonts.gstatic.com/s/sourcecodepro/v14/HI_SiYsKILxRpg3hIP6sJ7fM7PqlPevWnsUnxg.woff2": true + }, + "/ga4/": { + "https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2": true, + "https://fonts.gstatic.com/s/sourcecodepro/v14/HI_SiYsKILxRpg3hIP6sJ7fM7PqlPevWnsUnxg.woff2": true + }, + "/ga4/query-explorer/": { + "https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2": true, + "https://fonts.gstatic.com/s/sourcecodepro/v14/HI_SiYsKILxRpg3hIP6sJ7fM7PqlPevWnsUnxg.woff2": true + }, + "/404.html": { + "https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2": true, + "https://fonts.gstatic.com/s/sourcecodepro/v14/HI_SiYsKILxRpg3hIP6sJ7fM7PqlPevWnsUnxg.woff2": true + } + } +} diff --git a/gatsby-browser.js b/gatsby-browser.js deleted file mode 100644 index 194357763..000000000 --- a/gatsby-browser.js +++ /dev/null @@ -1,15 +0,0 @@ -import * as React from "react" -import {StoreProvider} from "./src/components/ga4/EnhancedEcommerce/store-context" -import CustomLayout from "./gatsby/wrapRootElement.js" -import "./src/styles/ecommerce/variables.css" - -// TODO - look into making this work like gatsby-node & use typescript for the -// things that are imported/exported. - -export { onInitialClientRender } from "./gatsby/onInitialClientRender" -export const wrapPageElement = CustomLayout - -// Wrap every page using a StoreProvider object used by eCommerce demo. -export const wrapRootElement = ({ element }) => ( - {element} -) \ No newline at end of file diff --git a/gatsby-browser.tsx b/gatsby-browser.tsx new file mode 100644 index 000000000..10a382a88 --- /dev/null +++ b/gatsby-browser.tsx @@ -0,0 +1,9 @@ +import * as React from "react" +import type { GatsbyBrowser } from "gatsby" +import CustomLayout from "./gatsby/wrapRootElement" + +// TODO - look into making this work like gatsby-node & use typescript for the +// things that are imported/exported. + +export { onInitialClientRender } from "./gatsby/onInitialClientRender" +export const wrapPageElement: GatsbyBrowser["wrapPageElement"] = CustomLayout diff --git a/gatsby-config.js b/gatsby-config.ts similarity index 59% rename from gatsby-config.js rename to gatsby-config.ts index ff0ac8464..f277015eb 100644 --- a/gatsby-config.js +++ b/gatsby-config.ts @@ -1,28 +1,24 @@ -// Copyright 2020 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 type { GatsbyConfig } from "gatsby"; -module.exports = { - flags: { - PRESERVE_WEBPACK_CACHE: true, - // DEV_SSR: true, - }, +// @ts-ignore +const config: GatsbyConfig = { siteMetadata: { title: `Discover the Google Analytics Platform`, - siteUrl: "https://ga-dev-tools.web.app", + siteUrl: "https://ga-dev-tools.google", author: `Google Analytics Developer Relations`, }, + // More easily incorporate content into your pages through automatic TypeScript type generation and better GraphQL IntelliSense. + // If you use VSCode you can also use the GraphQL plugin + // Learn more at: https://gatsby.dev/graphql-typegen + graphqlTypegen: true, plugins: [ + { + resolve: `gatsby-source-filesystem`, + options: { + name: `data`, + path: `${__dirname}/data`, + }, + }, { resolve: `gatsby-plugin-manifest`, options: { @@ -35,7 +31,8 @@ module.exports = { { resolve: `gatsby-plugin-sitemap`, options: { - serialize: ({ path, modifiedGmt }) => { + serialize: ({path, modifiedGmt } : {path:string, + modifiedGmt:string}) => { return { url: path, lastmod: modifiedGmt, @@ -51,7 +48,6 @@ module.exports = { }, }, `gatsby-plugin-use-query-params`, - `gatsby-plugin-material-ui`, `gatsby-plugin-preload-fonts`, { resolve: `gatsby-plugin-google-fonts`, @@ -67,8 +63,6 @@ module.exports = { }, }, }, - `gatsby-plugin-typescript`, - `gatsby-plugin-react-helmet`, { resolve: `gatsby-source-filesystem`, options: { @@ -79,5 +73,9 @@ module.exports = { `gatsby-plugin-image`, `gatsby-plugin-sharp`, `gatsby-transformer-sharp`, - ], -} + `gatsby-transformer-json`, + `gatsby-plugin-emotion` + ] +}; + +export default config; diff --git a/gatsby-node.js b/gatsby-node.js index fa83042a3..1c2f2eb9d 100644 --- a/gatsby-node.js +++ b/gatsby-node.js @@ -14,15 +14,8 @@ const TsconfigPathsPlugin = require("tsconfig-paths-webpack-plugin") const fs = require("fs") -require("ts-node").register({ - compilerOptions: { - module: "commonjs", - target: "es2017", - }, -}) - // typescript files -exports.createPages = require("./gatsby/createPages").createPages +//exports.createPages = require("./gatsby/createPages").createPages exports.onCreateWebpackConfig = ({ actions }) => { actions.setWebpackConfig({ diff --git a/gatsby-ssr.tsx b/gatsby-ssr.tsx index b2e8ef273..8bae9bd7c 100644 --- a/gatsby-ssr.tsx +++ b/gatsby-ssr.tsx @@ -1,3 +1,15 @@ -import CustomLayout from "./gatsby/wrapRootElement.js" +import * as React from "react" +import type { GatsbySSR } from "gatsby" +//import {StoreProvider} from "./src/components/ga4/EnhancedEcommerce/store-context" +import CustomLayout from "./gatsby/wrapRootElement" +//import "./src/styles/ecommerce/variables.css" -export const wrapPageElement = CustomLayout +// TODO - look into making this work like gatsby-node & use typescript for the +// things that are imported/exported. + +export const wrapPageElement: GatsbySSR["wrapPageElement"] = CustomLayout + +// Wrap every page using a StoreProvider object used by eCommerce demo. +// export const wrapRootElement = ({ element }) => ( +// {element} +// ) diff --git a/gatsby/wrapRootElement.js b/gatsby/wrapRootElement.js deleted file mode 100644 index 4969d46e9..000000000 --- a/gatsby/wrapRootElement.js +++ /dev/null @@ -1,131 +0,0 @@ -import React from "react" -import CssBaseline from "@material-ui/core/CssBaseline" -import { ThemeProvider } from "@material-ui/core" -import { createTheme, withStyles } from "@material-ui/core/styles" -import orange from "@material-ui/core/colors/orange" -import deepOrange from "@material-ui/core/colors/deepOrange" -import Snackbar from "@material-ui/core/Snackbar" -import { - Provider as ReduxProvider, - useSelector, - useDispatch, -} from "react-redux" -import { createStore } from "redux" - -const reducer = (state = {}, action) => { - switch (action.type) { - case "setUser": - return { ...state, user: action.user } - case "setGapi": - return { ...state, gapi: action.gapi } - case "setToast": - return { ...state, toast: action.toast } - case "gapiStatus": - return { ...state, gapiStatus: action.status } - - default: - return state - } -} - -const globalTheme = createTheme({ - palette: { - primary: orange, - secondary: deepOrange, - }, - typography: palette => ({ - fontFamily: ['"Roboto"', "sans-serif"].join(", "), - h1: { - fontSize: "3.0em", - }, - h2: { - fontSize: "2.25em", - marginTop: "0.5em", - marginBottom: "0.5em", - }, - h3: { - fontSize: "1.75em", - marginTop: "0.5em", - marginBottom: "0.5em", - }, - h4: { - fontSize: "1.50em", - marginTop: "0.5em", - marginBottom: "0.5em", - }, - h5: { - fontSize: "1.25em", - marginTop: "0.5em", - marginBottom: "0.5em", - }, - }), -}) - -const styles = theme => ({ - "@global": { - "html, body, #gatsby-focus-wrapper, #___gatsby": { - height: "100%", - margin: 0, - padding: 0, - }, - p: { - paddingBottom: theme.spacing(2), - }, - a: { - color: theme.palette.primary[800], - textDecoration: "none", - "&:hover": { - textDecoration: "underline", - }, - }, - code: { - fontSize: theme.typography.body1.fontSize, - }, - }, -}) - -// This is a bit weird, but it's the easiest way to set global css that can use -// values from the theme object. -const MyBaseline = withStyles(styles)(() => { - return null -}) - -export const makeStore = () => createStore(reducer) -export const store = makeStore() - -const Toaster = () => { - const toast = useSelector(a => a.toast) - const dispatch = useDispatch() - if (toast === undefined) { - return null - } - return ( - { - dispatch({ type: "setToast", toast: undefined }) - }} - autoHideDuration={2000} - message={toast} - /> - ) -} - -export default ({ element }) => { - return ( - - - - - - {element} - - - - - ) -} diff --git a/gatsby/wrapRootElement.tsx b/gatsby/wrapRootElement.tsx new file mode 100644 index 000000000..a1d347276 --- /dev/null +++ b/gatsby/wrapRootElement.tsx @@ -0,0 +1,165 @@ +import React from "react" +import CssBaseline from "@mui/material/CssBaseline" +import { + ThemeProvider, + Theme, + createTheme +} from "@mui/material/styles" +import {orange, deepOrange} from "@mui/material/colors" +import Snackbar from "@mui/material/Snackbar" +import { + Provider as ReduxProvider, + useSelector, + useDispatch, +} from "react-redux" +import {legacy_createStore as createStore} from "redux" +import GlobalStyles from '@mui/material/GlobalStyles'; +import {PartialDeep} from 'type-fest'; + +type State = + { + user?: {}, + gapi?: PartialDeep, + toast?: string, + status?: string + } + +type Action = + | { type: 'setUser', user: {} | undefined } + | { type: 'setGapi', gapi: PartialDeep | undefined } + | { type: 'setToast', toast: string | undefined } + | { type: 'gapiStatus', status: string | undefined }; +const reducer = (state: State = {}, action: Action) => { + switch (action.type) { + case "setUser": + return { ...state, user: action.user } + case "setGapi": + return { ...state, gapi: action.gapi } + case "setToast": + return { ...state, toast: action.toast } + case "gapiStatus": + return { ...state, gapiStatus: action.status } + + default: + return state + } +} + +const globalTheme = createTheme({ + palette: { + primary: orange, + secondary: deepOrange, + }, + typography: palette => ({ + fontFamily: ["Roboto", "sans-serif"].join(", "), + h1: { + fontSize: "3.0em", + }, + h2: { + fontSize: "2.25em", + marginTop: "0.5em", + marginBottom: "0.5em", + }, + h3: { + fontSize: "1.75em", + marginTop: "0.5em", + marginBottom: "0.5em", + }, + h4: { + fontSize: "1.50em", + marginTop: "0.5em", + marginBottom: "0.5em", + }, + h5: { + fontSize: "1.25em", + marginTop: "0.5em", + marginBottom: "0.5em", + }, + }), + components: { + MuiCssBaseline: { + styleOverrides: { + "html, body, #gatsby-focus-wrapper, #___gatsby": { + height: "100%", + margin: 0, + padding: 0, + }, + p: (theme: Theme) => ({ + ...({paddingBottom: theme.spacing(2)}), + }), + a: (theme: Theme) => ({ + color: theme.palette.primary.dark, + textDecoration: "none", + "&:hover": { + textDecoration: "underline", + }, + }), + + }, + }, + }, +}) + +export const makeStore = () => createStore(reducer) +export const store = makeStore() + + +const Toaster = () => { + const toast = useSelector((a: State) => a.toast) + const dispatch = useDispatch() + if (toast === undefined) { + return null + } + return ( + { + dispatch({ type: "setToast", toast: undefined }) + }} + autoHideDuration={2000} + message={toast} + /> + ) +} + +const inputGlobalStyles = ({ + "html, body, #gatsby-focus-wrapper, #___gatsby": { + height: "100%", + margin: 0, + padding: 0, + }, + p: { + paddingBottom: theme.spacing(2), + }, + a: { + color: theme.palette.primary.dark, + textDecoration: "none", + "&:hover": { + textDecoration: "underline", + }, + }, + code: { + fontSize: theme.typography.body1.fontSize, + }, + })} +/>; + +export default ({ element }: any) => { + return ( + + + + {inputGlobalStyles} + + {element} + + + + + ) +} diff --git a/jest.config.js b/jest.config.js index 97d101886..167388308 100644 --- a/jest.config.js +++ b/jest.config.js @@ -20,6 +20,12 @@ module.exports = { "@/(.*)": "/src/$1", ".+\\.(css|styl|less|sass|scss)$": `identity-obj-proxy`, ".+\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$": `/__mocks__/file-mock.js`, + "^gatsby-core-utils/(.*)$": `gatsby-core-utils/dist/$1`, // Workaround for https://github.com/facebook/jest/issues/9771 + "^gatsby-plugin-utils/(.*)$": [ + `gatsby-plugin-utils/dist/$1`, + `gatsby-plugin-utils/$1`, + ], // Workaround for https://github.com/facebook/jest/issues/9771, + "^gatsby-page-utils/(.*)$": `gatsby-page-utils/dist/$1`, // Workaround for https://github.com/facebook/jest/issues/9771 }, testPathIgnorePatterns: [`node_modules`, `\\.cache`, `.*/public`], transformIgnorePatterns: [`node_modules/(?!(gatsby)/)`], diff --git a/lib/build/build.js b/lib/build/build.js index 07505647f..c97aa68f1 100644 --- a/lib/build/build.js +++ b/lib/build/build.js @@ -1,32 +1,29 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.build = void 0; -const check_config_1 = require("./check-config"); -const execa = require("execa"); +import { checkConfig } from "./check-config.js" +import { execa } from "execa" const checkTypes = async () => { - console.log("Checking typescript types..."); - await execa("yarn", ["run", "check-types"], { - stderr: "inherit", - stdout: "inherit", - stdin: "inherit", - }); -}; + console.log("Checking typescript types...") + await execa("yarn", ["run", "check-types"], { + stderr: "inherit", + stdout: "inherit", + stdin: "inherit", + }) +} // Building makes sure all necessary config items are provided, then runs gatsby build with all necessary environment variables. -exports.build = async (shouldCheckConfig = true) => { - if (shouldCheckConfig) { - await check_config_1.checkConfig({ all: false }); - } - await checkTypes(); - // Delete cache & public contents before a build to keep things neat. - await execa("yarn", ["run", "gatsby", "clean"], { - stderr: "inherit", - stdout: "inherit", - stdin: "inherit", - }); - await execa("yarn", ["run", "gatsby", "build"], { - stderr: "inherit", - stdout: "inherit", - stdin: "inherit", - }); - return; -}; +export const build = async (shouldCheckConfig = true) => { + if (shouldCheckConfig) { + await checkConfig({ all: false }) + } + await checkTypes() + // Delete cache & public contents before a build to keep things neat. + await execa("yarn", ["run", "gatsby", "clean"], { + stderr: "inherit", + stdout: "inherit", + stdin: "inherit", + }) + await execa("yarn", ["run", "gatsby", "build"], { + stderr: "inherit", + stdout: "inherit", + stdin: "inherit", + }) + return +} diff --git a/lib/build/check-config.js b/lib/build/check-config.js index 9641b5a31..87a407f70 100644 --- a/lib/build/check-config.js +++ b/lib/build/check-config.js @@ -1,281 +1,310 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.checkConfig = exports.SKIP_QUESTION = exports.writeEnvFile = void 0; -const fs = require("fs"); -const inquirer = require("inquirer"); -const types_1 = require("./types"); -exports.writeEnvFile = async (config, endpointName = "bitly_auth") => { - // If any questions are skipped, don't include them in the outgoing .env - // files so they are `undefined` for `process.env[ENV_NAME]`. - const gapiLine = config.gapiClientId === exports.SKIP_QUESTION - ? undefined - : `GAPI_CLIENT_ID=${config.gapiClientId}`; - const bitlyLine = config.bitlyClientId === exports.SKIP_QUESTION - ? undefined - : `BITLY_CLIENT_ID=${config.bitlyClientId}`; - const authEndpointLine = `AUTH_ENDPOINT=https://us-central1-${config.firebaseProjectId}.cloudfunctions.net/${endpointName}`; - const measurementIdLine = `GA_MEASUREMENT_ID=${config.measurementId}`; - [types_1.DotEnvProductionPath, types_1.DotEnvDevelopmentPath].map(path => fs.writeFileSync(path, [gapiLine, bitlyLine, authEndpointLine, measurementIdLine].join("\n"), { - encoding: types_1.Encoding, - })); -}; -const ensureNecessaryFiles = async (runtimeJson) => { - // TODO - Ideally this only re-writes a file if there's actually a difference - // between the current one and the new data. - // Create `runtime.json` if it doesn't exist. - const exists = fs.existsSync(types_1.RuntimeJsonPath); - if (!exists) { - fs.writeFileSync(types_1.RuntimeJsonPath, ""); - } - // Overwrite `runtime.json` with provided configuration. - fs.writeFileSync(types_1.RuntimeJsonPath, JSON.stringify(runtimeJson, null, " "), { - encoding: types_1.Encoding, - }); - return runtimeJson; -}; +import * as fs from "fs" +import { default as inquirer } from "inquirer" +import { + RuntimeJsonPath, + Encoding, + DotEnvProductionPath, + AnswerNames, + DotEnvDevelopmentPath, +} from "./types.js" +export const writeEnvFile = async (config, endpointName = "bitly_auth") => { + // If any questions are skipped, don't include them in the outgoing .env + // files so they are `undefined` for `process.env[ENV_NAME]`. + const gapiLine = + config.gapiClientId === SKIP_QUESTION + ? undefined + : `GAPI_CLIENT_ID=${config.gapiClientId}` + const bitlyLine = + config.bitlyClientId === SKIP_QUESTION + ? undefined + : `BITLY_CLIENT_ID=${config.bitlyClientId}` + const authEndpointLine = `AUTH_ENDPOINT=https://us-central1-${config.firebaseProjectId}.cloudfunctions.net/${endpointName}` + const measurementIdLine = `GA_MEASUREMENT_ID=${config.measurementId}` + ;[DotEnvProductionPath, DotEnvDevelopmentPath].map(path => + fs.writeFileSync( + path, + [gapiLine, bitlyLine, authEndpointLine, measurementIdLine].join("\n"), + { + encoding: Encoding, + } + ) + ) +} +const ensureNecessaryFiles = async runtimeJson => { + // TODO - Ideally this only re-writes a file if there's actually a difference + // between the current one and the new data. + // Create `runtime.json` if it doesn't exist. + const exists = fs.existsSync(RuntimeJsonPath) + if (!exists) { + fs.writeFileSync(RuntimeJsonPath, "") + } + // Overwrite `runtime.json` with provided configuration. + fs.writeFileSync(RuntimeJsonPath, JSON.stringify(runtimeJson, null, " "), { + encoding: Encoding, + }) + return runtimeJson +} // TODO - Make sure to account for these values in the code and log an // appropriate error for pages where they are required. -exports.SKIP_QUESTION = "Leave blank to skip"; +export const SKIP_QUESTION = "Leave blank to skip" // Given a filter, returns an array of questions to be asked to make sure all // required configuration data is present. The filter allows some questions to // be skipped if already provided. -const configQuestions = (filter) => { - var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m; - // TODO the `?.`s can be removed once this has stabilized. They're here now to - // be friendly as the runtimeJson type evolves. - return [ - { - name: types_1.AnswerNames.BaseUriProd, - type: "input", - message: "Domain of production service including https:// (production):", - default: ((_a = filter === null || filter === void 0 ? void 0 : filter.production) === null || _a === void 0 ? void 0 : _a.baseUri) || exports.SKIP_QUESTION, - when: () => { - var _a; - return filter.askAll || ((_a = filter === null || filter === void 0 ? void 0 : filter.production) === null || _a === void 0 ? void 0 : _a.baseUri) === undefined; - }, - }, - { - // TODO - Nice to have. Accept a value that lets the user create a new - // firebase project if they don't already have one. The firebase cli - // supports this so it shouldn't bee too tricky. This should probably use - // the --json flag for the cli so the data comes back in a useful format. - name: types_1.AnswerNames.FirebaseProjectIdProd, - type: "input", - message: "Firebase project ID (production):", - // TODO - See if listing is useful. Probably should only do it if there's not a ton. - default: ((_b = filter === null || filter === void 0 ? void 0 : filter.production) === null || _b === void 0 ? void 0 : _b.firebaseProjectId) || exports.SKIP_QUESTION, - when: () => { - var _a; - return (filter.askAll || ((_a = filter === null || filter === void 0 ? void 0 : filter.production) === null || _a === void 0 ? void 0 : _a.firebaseProjectId) === undefined); - }, - }, - { - name: types_1.AnswerNames.GapiClientIdProd, - type: "input", - // TODO - Check to see if there a way to make getting this value easier. - // (or at least provide a link to where the user can find this value) - message: "Google client ID (production):", - default: ((_c = filter === null || filter === void 0 ? void 0 : filter.production) === null || _c === void 0 ? void 0 : _c.gapiClientId) || exports.SKIP_QUESTION, - when: () => { - var _a; - return filter.askAll || ((_a = filter === null || filter === void 0 ? void 0 : filter.production) === null || _a === void 0 ? void 0 : _a.gapiClientId) === undefined; - }, - }, - { - name: types_1.AnswerNames.BitlyClientIdProd, - type: "input", - message: "Bit.ly client ID (production):", - default: ((_d = filter === null || filter === void 0 ? void 0 : filter.production) === null || _d === void 0 ? void 0 : _d.bitlyClientId) || exports.SKIP_QUESTION, - when: () => { - var _a; - return filter.askAll || ((_a = filter === null || filter === void 0 ? void 0 : filter.production) === null || _a === void 0 ? void 0 : _a.bitlyClientId) === undefined; - }, - }, - { - name: types_1.AnswerNames.BitlyClientSecretProd, - type: "input", - message: "Bit.ly client secret (production):", - default: ((_e = filter === null || filter === void 0 ? void 0 : filter.production) === null || _e === void 0 ? void 0 : _e.bitlyClientSecret) || exports.SKIP_QUESTION, - when: () => { - var _a; - return (filter.askAll || ((_a = filter === null || filter === void 0 ? void 0 : filter.production) === null || _a === void 0 ? void 0 : _a.bitlyClientSecret) === undefined); - }, - }, - { - name: types_1.AnswerNames.MeasurementIdProd, - type: "input", - message: "GA Measurement ID (production):", - default: ((_f = filter === null || filter === void 0 ? void 0 : filter.production) === null || _f === void 0 ? void 0 : _f.measurementId) || exports.SKIP_QUESTION, - when: () => { - var _a; - return filter.askAll || ((_a = filter === null || filter === void 0 ? void 0 : filter.production) === null || _a === void 0 ? void 0 : _a.measurementId) === undefined; - }, - }, - // Staging questions - { - name: types_1.AnswerNames.BaseUriStaging, - type: "input", - message: "Domain of service including https:// (staging):", - default: ((_g = filter === null || filter === void 0 ? void 0 : filter.staging) === null || _g === void 0 ? void 0 : _g.baseUri) || exports.SKIP_QUESTION, - when: () => { - var _a; - return filter.askAll || ((_a = filter === null || filter === void 0 ? void 0 : filter.staging) === null || _a === void 0 ? void 0 : _a.baseUri) === undefined; - }, - }, - { - name: types_1.AnswerNames.FirebaseProjectIdStaging, - type: "input", - message: "Firebase project ID (staging):", - // TODO - See if listing is useful. Probably should only do it if there's not a ton. - default: ((_h = filter === null || filter === void 0 ? void 0 : filter.staging) === null || _h === void 0 ? void 0 : _h.firebaseProjectId) || exports.SKIP_QUESTION, - when: () => { - var _a; - return filter.askAll || ((_a = filter === null || filter === void 0 ? void 0 : filter.staging) === null || _a === void 0 ? void 0 : _a.firebaseProjectId) === undefined; - }, - }, - { - name: types_1.AnswerNames.GapiClientIdStaging, - type: "input", - // TODO - Check to see if there a way to make getting this value easier. - // (or at least provide a link to where the user can find this value) - message: "Google client ID (staging):", - default: ((_j = filter === null || filter === void 0 ? void 0 : filter.staging) === null || _j === void 0 ? void 0 : _j.gapiClientId) || exports.SKIP_QUESTION, - when: () => { - var _a; - return filter.askAll || ((_a = filter === null || filter === void 0 ? void 0 : filter.staging) === null || _a === void 0 ? void 0 : _a.gapiClientId) === undefined; - }, - }, - { - name: types_1.AnswerNames.BitlyClientIdStaging, - type: "input", - message: "Bit.ly client ID (staging):", - default: ((_k = filter === null || filter === void 0 ? void 0 : filter.staging) === null || _k === void 0 ? void 0 : _k.bitlyClientId) || exports.SKIP_QUESTION, - when: () => { - var _a; - return filter.askAll || ((_a = filter === null || filter === void 0 ? void 0 : filter.staging) === null || _a === void 0 ? void 0 : _a.bitlyClientId) === undefined; - }, - }, - { - name: types_1.AnswerNames.BitlyClientSecretStaging, - type: "input", - message: "Bit.ly client secret (staging):", - default: ((_l = filter === null || filter === void 0 ? void 0 : filter.staging) === null || _l === void 0 ? void 0 : _l.bitlyClientSecret) || exports.SKIP_QUESTION, - when: () => { - var _a; - return filter.askAll || ((_a = filter === null || filter === void 0 ? void 0 : filter.staging) === null || _a === void 0 ? void 0 : _a.bitlyClientSecret) === undefined; - }, - }, - { - name: types_1.AnswerNames.MeasurementIdStaging, - type: "input", - message: "GA Measurement ID (staging):", - default: ((_m = filter === null || filter === void 0 ? void 0 : filter.staging) === null || _m === void 0 ? void 0 : _m.measurementId) || exports.SKIP_QUESTION, - when: () => { - var _a; - return filter.askAll || ((_a = filter === null || filter === void 0 ? void 0 : filter.staging) === null || _a === void 0 ? void 0 : _a.measurementId) === undefined; - }, - }, - ]; -}; +const configQuestions = filter => { + // TODO the `?.`s can be removed once this has stabilized. They're here now to + // be friendly as the runtimeJson type evolves. + return [ + { + name: AnswerNames.BaseUriProd, + type: "input", + message: "Domain of production service including https:// (production):", + default: filter?.production?.baseUri || SKIP_QUESTION, + when: () => { + return filter.askAll || filter?.production?.baseUri === undefined + }, + }, + { + // TODO - Nice to have. Accept a value that lets the user create a new + // firebase project if they don't already have one. The firebase cli + // supports this so it shouldn't bee too tricky. This should probably use + // the --json flag for the cli so the data comes back in a useful format. + name: AnswerNames.FirebaseProjectIdProd, + type: "input", + message: "Firebase project ID (production):", + // TODO - See if listing is useful. Probably should only do it if there's not a ton. + default: filter?.production?.firebaseProjectId || SKIP_QUESTION, + when: () => { + return ( + filter.askAll || filter?.production?.firebaseProjectId === undefined + ) + }, + }, + { + name: AnswerNames.GapiClientIdProd, + type: "input", + // TODO - Check to see if there a way to make getting this value easier. + // (or at least provide a link to where the user can find this value) + message: "Google client ID (production):", + default: filter?.production?.gapiClientId || SKIP_QUESTION, + when: () => { + return filter.askAll || filter?.production?.gapiClientId === undefined + }, + }, + { + name: AnswerNames.BitlyClientIdProd, + type: "input", + message: "Bit.ly client ID (production):", + default: filter?.production?.bitlyClientId || SKIP_QUESTION, + when: () => { + return filter.askAll || filter?.production?.bitlyClientId === undefined + }, + }, + { + name: AnswerNames.BitlyClientSecretProd, + type: "input", + message: "Bit.ly client secret (production):", + default: filter?.production?.bitlyClientSecret || SKIP_QUESTION, + when: () => { + return ( + filter.askAll || filter?.production?.bitlyClientSecret === undefined + ) + }, + }, + { + name: AnswerNames.MeasurementIdProd, + type: "input", + message: "GA Measurement ID (production):", + default: filter?.production?.measurementId || SKIP_QUESTION, + when: () => { + return filter.askAll || filter?.production?.measurementId === undefined + }, + }, + // Staging questions + { + name: AnswerNames.BaseUriStaging, + type: "input", + message: "Domain of service including https:// (staging):", + default: filter?.staging?.baseUri || SKIP_QUESTION, + when: () => { + return filter.askAll || filter?.staging?.baseUri === undefined + }, + }, + { + name: AnswerNames.FirebaseProjectIdStaging, + type: "input", + message: "Firebase project ID (staging):", + // TODO - See if listing is useful. Probably should only do it if there's not a ton. + default: filter?.staging?.firebaseProjectId || SKIP_QUESTION, + when: () => { + return filter.askAll || filter?.staging?.firebaseProjectId === undefined + }, + }, + { + name: AnswerNames.GapiClientIdStaging, + type: "input", + // TODO - Check to see if there a way to make getting this value easier. + // (or at least provide a link to where the user can find this value) + message: "Google client ID (staging):", + default: filter?.staging?.gapiClientId || SKIP_QUESTION, + when: () => { + return filter.askAll || filter?.staging?.gapiClientId === undefined + }, + }, + { + name: AnswerNames.BitlyClientIdStaging, + type: "input", + message: "Bit.ly client ID (staging):", + default: filter?.staging?.bitlyClientId || SKIP_QUESTION, + when: () => { + return filter.askAll || filter?.staging?.bitlyClientId === undefined + }, + }, + { + name: AnswerNames.BitlyClientSecretStaging, + type: "input", + message: "Bit.ly client secret (staging):", + default: filter?.staging?.bitlyClientSecret || SKIP_QUESTION, + when: () => { + return filter.askAll || filter?.staging?.bitlyClientSecret === undefined + }, + }, + { + name: AnswerNames.MeasurementIdStaging, + type: "input", + message: "GA Measurement ID (staging):", + default: filter?.staging?.measurementId || SKIP_QUESTION, + when: () => { + return filter.askAll || filter?.staging?.measurementId === undefined + }, + }, + ] +} // TODO - Check config should take a flag to force a reauth for firebase since // the token is short-lived. // Ensures that required config files exist. If they don't, prompt the user for // required values & creates necessary files. -exports.checkConfig = async (args) => { - console.log("Checking required configuration..."); - const exists = fs.existsSync(types_1.RuntimeJsonPath); - let filter = {}; - let currentConfig; - if (!exists || args.all) { - filter = { askAll: true }; - } - if (exists) { - // If there is already a config file, read it in to use as the default - // values. - currentConfig = JSON.parse(fs.readFileSync(types_1.RuntimeJsonPath, { encoding: types_1.Encoding })); - } - const questions = configQuestions(Object.assign({}, currentConfig, filter)); - const answers = await inquirer.prompt(questions); - const asRuntime = toRuntimeJson(answers, currentConfig); - const config = await ensureNecessaryFiles(asRuntime); - return config; -}; -const throwIfUndefined = (value) => { - if (value === undefined) { - throw new Error("Value cannot be undefined"); - } - else { - return value; - } -}; +export const checkConfig = async args => { + console.log("Checking required configuration...") + const exists = fs.existsSync(RuntimeJsonPath) + let filter = {} + let currentConfig + if (!exists || args.all) { + filter = { askAll: true } + } + if (exists) { + // If there is already a config file, read it in to use as the default + // values. + currentConfig = JSON.parse( + fs.readFileSync(RuntimeJsonPath, { encoding: Encoding }) + ) + } + const questions = configQuestions(Object.assign({}, currentConfig, filter)) + const answers = await inquirer.prompt(questions) + const asRuntime = toRuntimeJson(answers, currentConfig) + const config = await ensureNecessaryFiles(asRuntime) + return config +} +const throwIfUndefined = value => { + if (value === undefined) { + throw new Error("Value cannot be undefined") + } else { + return value + } +} const toRuntimeJson = (answers, currentConfig) => { - var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k; - const production = { - measurementId: throwIfUndefined(answers.measurementIdProd || (currentConfig === null || currentConfig === void 0 ? void 0 : currentConfig.production.measurementId)), - baseUri: answers.baseUriProd || ((_a = currentConfig === null || currentConfig === void 0 ? void 0 : currentConfig.production) === null || _a === void 0 ? void 0 : _a.baseUri) || - "http://localhost:5000", - firebaseProjectId: throwIfUndefined(answers.firebaseProjectIdProd || ((_b = currentConfig === null || currentConfig === void 0 ? void 0 : currentConfig.production) === null || _b === void 0 ? void 0 : _b.firebaseProjectId)), - gapiClientId: throwIfUndefined(answers.gapiClientIdProd || ((_c = currentConfig === null || currentConfig === void 0 ? void 0 : currentConfig.production) === null || _c === void 0 ? void 0 : _c.gapiClientId)), - bitlyClientId: throwIfUndefined(answers.bitlyClientIdProd || ((_d = currentConfig === null || currentConfig === void 0 ? void 0 : currentConfig.production) === null || _d === void 0 ? void 0 : _d.bitlyClientId)), - bitlyClientSecret: throwIfUndefined(answers.bitlyClientSecretProd || ((_e = currentConfig === null || currentConfig === void 0 ? void 0 : currentConfig.production) === null || _e === void 0 ? void 0 : _e.bitlyClientSecret)), - }; - const staging = { - measurementId: throwIfUndefined(answers.measurementIdStaging || (currentConfig === null || currentConfig === void 0 ? void 0 : currentConfig.staging.measurementId)), - // TODO - This could be a bit smarter. Especially if we support changing the port. - baseUri: answers.baseUriStaging || ((_f = currentConfig === null || currentConfig === void 0 ? void 0 : currentConfig.staging) === null || _f === void 0 ? void 0 : _f.baseUri) || - "http://localhost:5000", - firebaseProjectId: throwIfUndefined(answers.firebaseProjectIdStaging || ((_g = currentConfig === null || currentConfig === void 0 ? void 0 : currentConfig.staging) === null || _g === void 0 ? void 0 : _g.firebaseProjectId)), - gapiClientId: throwIfUndefined(answers.gapiClientIdStaging || ((_h = currentConfig === null || currentConfig === void 0 ? void 0 : currentConfig.staging) === null || _h === void 0 ? void 0 : _h.gapiClientId)), - bitlyClientId: throwIfUndefined(answers.bitlyClientIdStaging || ((_j = currentConfig === null || currentConfig === void 0 ? void 0 : currentConfig.staging) === null || _j === void 0 ? void 0 : _j.bitlyClientId)), - bitlyClientSecret: throwIfUndefined(answers.bitlyClientSecretStaging || ((_k = currentConfig === null || currentConfig === void 0 ? void 0 : currentConfig.staging) === null || _k === void 0 ? void 0 : _k.bitlyClientSecret)), - }; - const fullConfig = { production, staging }; - let asserted; - try { - asserted = assertAllValues(fullConfig); - } - catch (e) { - console.error(e.message); - process.exit(1); - } - return asserted; -}; -const assertAllValues = (runtimeJson) => { - if (runtimeJson.staging.gapiClientId === undefined) { - throw new Error("Missing the staging gapiClientId"); - } - if (runtimeJson.staging.firebaseProjectId === undefined) { - throw new Error("Missing the staging firebaseProjectId"); - } - if (runtimeJson.staging.bitlyClientSecret === undefined) { - throw new Error("Missing the staging bitly client secret"); - } - if (runtimeJson.staging.bitlyClientId === undefined) { - throw new Error("Missing the staging bitly client id"); - } - if (runtimeJson.staging.baseUri === undefined) { - throw new Error("Missing the staging base url"); - } - if (runtimeJson.staging.measurementId === undefined) { - throw new Error("Missing the staging measurement ID"); - } - if (runtimeJson.production.gapiClientId === undefined) { - throw new Error("Missing the production gapiClientId"); - } - if (runtimeJson.production.firebaseProjectId === undefined) { - throw new Error("Missing the production firebaseProjectId"); - } - if (runtimeJson.production.bitlyClientId === undefined) { - throw new Error("Missing the bitly clientId"); - } - if (runtimeJson.production.bitlyClientSecret === undefined) { - throw new Error("Missing the bitly clientSecret"); - } - if (runtimeJson.production.baseUri === undefined) { - throw new Error("Missing the production base url"); - } - if (runtimeJson.production.measurementId === undefined) { - throw new Error("Missing the production measurement ID"); - } - return runtimeJson; -}; + const production = { + measurementId: throwIfUndefined( + answers.measurementIdProd || currentConfig?.production.measurementId + ), + baseUri: + answers.baseUriProd || + currentConfig?.production?.baseUri || + "http://localhost:5000", + firebaseProjectId: throwIfUndefined( + answers.firebaseProjectIdProd || + currentConfig?.production?.firebaseProjectId + ), + gapiClientId: throwIfUndefined( + answers.gapiClientIdProd || currentConfig?.production?.gapiClientId + ), + bitlyClientId: throwIfUndefined( + answers.bitlyClientIdProd || currentConfig?.production?.bitlyClientId + ), + bitlyClientSecret: throwIfUndefined( + answers.bitlyClientSecretProd || + currentConfig?.production?.bitlyClientSecret + ), + } + const staging = { + measurementId: throwIfUndefined( + answers.measurementIdStaging || currentConfig?.staging.measurementId + ), + // TODO - This could be a bit smarter. Especially if we support changing the port. + baseUri: + answers.baseUriStaging || + currentConfig?.staging?.baseUri || + "http://localhost:5000", + firebaseProjectId: throwIfUndefined( + answers.firebaseProjectIdStaging || + currentConfig?.staging?.firebaseProjectId + ), + gapiClientId: throwIfUndefined( + answers.gapiClientIdStaging || currentConfig?.staging?.gapiClientId + ), + bitlyClientId: throwIfUndefined( + answers.bitlyClientIdStaging || currentConfig?.staging?.bitlyClientId + ), + bitlyClientSecret: throwIfUndefined( + answers.bitlyClientSecretStaging || + currentConfig?.staging?.bitlyClientSecret + ), + } + const fullConfig = { production, staging } + let asserted + try { + asserted = assertAllValues(fullConfig) + } catch (e) { + console.error(e.message) + process.exit(1) + } + return asserted +} +const assertAllValues = runtimeJson => { + if (runtimeJson.staging.gapiClientId === undefined) { + throw new Error("Missing the staging gapiClientId") + } + if (runtimeJson.staging.firebaseProjectId === undefined) { + throw new Error("Missing the staging firebaseProjectId") + } + if (runtimeJson.staging.bitlyClientSecret === undefined) { + throw new Error("Missing the staging bitly client secret") + } + if (runtimeJson.staging.bitlyClientId === undefined) { + throw new Error("Missing the staging bitly client id") + } + if (runtimeJson.staging.baseUri === undefined) { + throw new Error("Missing the staging base url") + } + if (runtimeJson.staging.measurementId === undefined) { + throw new Error("Missing the staging measurement ID") + } + if (runtimeJson.production.gapiClientId === undefined) { + throw new Error("Missing the production gapiClientId") + } + if (runtimeJson.production.firebaseProjectId === undefined) { + throw new Error("Missing the production firebaseProjectId") + } + if (runtimeJson.production.bitlyClientId === undefined) { + throw new Error("Missing the bitly clientId") + } + if (runtimeJson.production.bitlyClientSecret === undefined) { + throw new Error("Missing the bitly clientSecret") + } + if (runtimeJson.production.baseUri === undefined) { + throw new Error("Missing the production base url") + } + if (runtimeJson.production.measurementId === undefined) { + throw new Error("Missing the production measurement ID") + } + return runtimeJson +} diff --git a/lib/build/deploy-functions.js b/lib/build/deploy-functions.js index 3f3919168..2a313c138 100644 --- a/lib/build/deploy-functions.js +++ b/lib/build/deploy-functions.js @@ -1,82 +1,89 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.deployFunctions = exports.ensureFirebaseFunctionsConfig = exports.ensureFirebaseLoginStatus = void 0; -const execa = require("execa"); -const check_config_1 = require("./check-config"); -const _1 = require("."); -exports.ensureFirebaseLoginStatus = async ({ noLocalhost, }) => { - console.log("Logging out of firebase since tokens are shortlived..."); - await execa("yarn", ["run", "firebase", "logout"]); - if (noLocalhost) { - return execa("yarn", ["run", "firebase", "login", "--no-localhost"], { - stderr: "inherit", - stdout: "inherit", - stdin: "inherit", - }); - } - else { - return execa("yarn", ["run", "firebase", "login"], { - stderr: "inherit", - stdout: "inherit", - stdin: "inherit", - }); - } -}; -exports.ensureFirebaseFunctionsConfig = async (environment, config) => { - await exports.ensureFirebaseLoginStatus({ noLocalhost: config.noLocalhost }); - const environmentConfig = _1.configForEnvironment(environment, config); - const bitlyClientId = config.production.bitlyClientId === check_config_1.SKIP_QUESTION - ? "" - : `bitly.client_id=${environmentConfig.bitlyClientId}`; - const bitlyClientSecret = config.production.bitlyClientSecret === check_config_1.SKIP_QUESTION - ? "" - : `bitly.client_secret=${environmentConfig.bitlyClientSecret}`; - const bitlyBaseUri = `bitly.base_uri=${environmentConfig.baseUri}`; - // Don't call the command at all if all of these values were unset. - if ([bitlyClientSecret, bitlyClientId].every(a => a === "")) { - console.error("bitlyClientSecret and bitlyClientId are both required for functions deployment."); - process.exit(1); - } - console.log("Updating Firebase functions environment configuration..."); - try { - await execa("yarn", [ - "run", - "firebase", - "--project", - environmentConfig.firebaseProjectId, - "functions:config:set", - bitlyClientId, - bitlyClientSecret, - bitlyBaseUri, - ], {}); - } - catch (e) { - console.error("Couldn't update firebase functions config."); - process.exit(1); - } - return; -}; -exports.deployFunctions = async (args) => { - const config = await check_config_1.checkConfig({ - all: false, - }); - await exports.ensureFirebaseFunctionsConfig(args.environment, { - ...config, - noLocalhost: args.noLocalhost, - }); - const environmentConfig = _1.configForEnvironment(args.environment, config); - await execa("npm", [ +import { execa } from "execa" +import { checkConfig, SKIP_QUESTION } from "./check-config.js" +import { configForEnvironment } from "./index.js" +export const ensureFirebaseLoginStatus = async ({ noLocalhost }) => { + console.log("Logging out of firebase since tokens are shortlived...") + await execa("yarn", ["run", "firebase", "logout"]) + if (noLocalhost) { + return execa("yarn", ["run", "firebase", "login", "--no-localhost"], { + stderr: "inherit", + stdout: "inherit", + stdin: "inherit", + }) + } else { + return execa("yarn", ["run", "firebase", "login"], { + stderr: "inherit", + stdout: "inherit", + stdin: "inherit", + }) + } +} +export const ensureFirebaseFunctionsConfig = async (environment, config) => { + await ensureFirebaseLoginStatus({ noLocalhost: config.noLocalhost }) + const environmentConfig = configForEnvironment(environment, config) + const bitlyClientId = + config.production.bitlyClientId === SKIP_QUESTION + ? "" + : `bitly.client_id=${environmentConfig.bitlyClientId}` + const bitlyClientSecret = + config.production.bitlyClientSecret === SKIP_QUESTION + ? "" + : `bitly.client_secret=${environmentConfig.bitlyClientSecret}` + const bitlyBaseUri = `bitly.base_uri=${environmentConfig.baseUri}` + // Don't call the command at all if all of these values were unset. + if ([bitlyClientSecret, bitlyClientId].every(a => a === "")) { + console.error( + "bitlyClientSecret and bitlyClientId are both required for functions deployment." + ) + process.exit(1) + } + console.log("Updating Firebase functions environment configuration...") + try { + await execa( + "yarn", + [ "run", "firebase", - "--", "--project", environmentConfig.firebaseProjectId, - "deploy", - "--only", - "functions", - ], { - stderr: "inherit", - stdout: "inherit", - stdin: "inherit", - }); -}; + "functions:config:set", + bitlyClientId, + bitlyClientSecret, + bitlyBaseUri, + ], + {} + ) + } catch (e) { + console.error("Couldn't update firebase functions config.") + process.exit(1) + } + return +} +export const deployFunctions = async args => { + const config = await checkConfig({ + all: false, + }) + await ensureFirebaseFunctionsConfig(args.environment, { + ...config, + noLocalhost: args.noLocalhost, + }) + const environmentConfig = configForEnvironment(args.environment, config) + await execa( + "npm", + [ + "run", + "firebase", + "--", + "--project", + environmentConfig.firebaseProjectId, + "deploy", + "--only", + "functions", + ], + { + stderr: "inherit", + stdout: "inherit", + stdin: "inherit", + } + ) +} diff --git a/lib/build/develop.js b/lib/build/develop.js index 4f8de06ac..1ed7f6981 100644 --- a/lib/build/develop.js +++ b/lib/build/develop.js @@ -1,21 +1,18 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.develop = void 0; // yarn check-types && gatsby develop --host=0.0.0.0" -const check_config_1 = require("./check-config"); -const execa = require("execa"); -const _1 = require("."); -exports.develop = async (args) => { - const config = await check_config_1.checkConfig({ all: false }); - await check_config_1.writeEnvFile(_1.configForEnvironment(args.environment, config)); - // We use port 5000 because the generated oauth client for a firebase allows - // port 5000 by default on localhost. The developer can change this value, but - // they'll need to make sure that the host+post they use is set in the - // Authorized JavaScript origins. - await execa("yarn", ["gatsby", "develop", "--host=0.0.0.0", "--port=5000"], { - stderr: "inherit", - stdout: "inherit", - stdin: "inherit", - }); - return; -}; +import { checkConfig, writeEnvFile } from "./check-config.js" +import { execa } from "execa" +import { configForEnvironment } from "./index.js" +export const develop = async args => { + const config = await checkConfig({ all: false }) + await writeEnvFile(configForEnvironment(args.environment, config)) + // We use port 5000 because the generated oauth client for a firebase allows + // port 5000 by default on localhost. The developer can change this value, but + // they'll need to make sure that the host+post they use is set in the + // Authorized JavaScript origins. + await execa("yarn", ["gatsby", "develop", "--host=0.0.0.0", "--port=5000"], { + stderr: "inherit", + stdout: "inherit", + stdin: "inherit", + }) + return +} diff --git a/lib/build/index.js b/lib/build/index.js index 368ed5a02..357d25b8d 100644 --- a/lib/build/index.js +++ b/lib/build/index.js @@ -1,121 +1,119 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.configForEnvironment = void 0; -const argparse = require("argparse"); -const check_config_1 = require("./check-config"); -const build_1 = require("./build"); -const develop_1 = require("./develop"); -const serve_1 = require("./serve"); -const stage_1 = require("./stage"); -const types_1 = require("./types"); -const deploy_functions_1 = require("./deploy-functions"); -exports.configForEnvironment = (environment, config) => { - let environmentConfig; - switch (environment) { - case types_1.Environment.Staging: - environmentConfig = config.staging; - break; - case types_1.Environment.Production: - environmentConfig = config.production; - break; - default: - console.error(`Environment: ${environment} is not supported.`); - process.exit(1); - } - return environmentConfig; -}; +import argparse from "argparse" +import { checkConfig } from "./check-config.js" +import { build } from "./build.js" +import { develop } from "./develop.js" +import { serve } from "./serve.js" +import { stage } from "./stage.js" +import { Command, Environment } from "./types.js" +import { deployFunctions } from "./deploy-functions.js" +export const configForEnvironment = (environment, config) => { + let environmentConfig + switch (environment) { + case Environment.Staging: + environmentConfig = config.staging + break + case Environment.Production: + environmentConfig = config.production + break + default: + console.error(`Environment: ${environment} is not supported.`) + process.exit(1) + } + return environmentConfig +} // TODO - We should add some tests for pure functions in here for a bit more // confidence. const getParser = async () => { - const parser = new argparse.ArgumentParser({ - version: "1.0", - addHelp: true, - description: "Scripts for managing ga-dev-tools development.", - }); - const subparsers = parser.addSubparsers({ - title: "Sub command", - dest: "cmd", - }); - const checkConfigParser = subparsers.addParser(types_1.Command.CheckConfig, { - help: "Ensures that all necessary configuration files exist & have required values.", - }); - checkConfigParser.addArgument("--all", { - defaultValue: false, - dest: "all", - action: "storeTrue", - }); - const buildParser = subparsers.addParser(types_1.Command.Build, { - help: "Builds the project. Runs any necessary validation before building.", - }); - // TODO - It's probably worth implementing a workaround so this can be built - // using the development environment variables. Right now, this works great - // for local development, but it's less useful for the staging site. - const deployParser = subparsers.addParser(types_1.Command.Deploy, { - help: "Builds the project and deploys it to `--environment`.", - }); - const deployFunctionsParser = subparsers.addParser(types_1.Command.DeployFunctions, { - help: "Builds ./functions project and deploys it to `--environment`.", - }); - [deployParser, deployFunctionsParser].map(parser => parser.addArgument("--no-localhost", { - defaultValue: false, - dest: "noLocalhost", - action: "storeTrue", - })); - const developParser = subparsers.addParser(types_1.Command.Develop, { - help: "Runs a local dev server. Runs any necessary validation before serving.", - }); - const serveParser = subparsers.addParser(types_1.Command.Serve, { - help: "Serves the content in the build directory locally through the Firebase cli.", - }); - serveParser.addArgument("--skip_build", { - defaultValue: false, - dest: "skipBuild", - action: "storeTrue", - }); - [ - buildParser, - serveParser, - deployParser, - deployFunctionsParser, - developParser, - ].forEach(parser => { - parser.addArgument("--environment", { - required: true, - dest: "environment", - choices: Object.values(types_1.Environment), - }); - }); - return parser; -}; + const parser = new argparse.ArgumentParser({ + add_help: true, + description: "Scripts for managing ga-dev-tools development.", + }) + const subparsers = parser.add_subparsers({ + title: "Sub command", + dest: "cmd", + }) + const checkConfigParser = subparsers.add_parser(Command.CheckConfig, { + help: "Ensures that all necessary configuration files exist & have required values.", + }) + checkConfigParser.add_argument("--all", { + default: false, + dest: "all", + action: "storeTrue", + }) + const buildParser = subparsers.add_parser(Command.Build, { + help: "Builds the project. Runs any necessary validation before building.", + }) + // TODO - It's probably worth implementing a workaround so this can be built + // using the development environment variables. Right now, this works great + // for local development, but it's less useful for the staging site. + const deployParser = subparsers.add_parser(Command.Deploy, { + help: "Builds the project and deploys it to `--environment`.", + }) + const deployFunctionsParser = subparsers.add_parser(Command.DeployFunctions, { + help: "Builds ./functions project and deploys it to `--environment`.", + }) + ;[deployParser, deployFunctionsParser].map(parser => + parser.add_argument("--no-localhost", { + default: false, + dest: "noLocalhost", + action: "storeTrue", + }) + ) + const developParser = subparsers.add_parser(Command.Develop, { + help: "Runs a local dev server. Runs any necessary validation before serving.", + }) + const serveParser = subparsers.add_parser(Command.Serve, { + help: "Serves the content in the build directory locally through the Firebase cli.", + }) + serveParser.add_argument("--skip_build", { + default: false, + dest: "skipBuild", + action: "storeTrue", + }) + ;[ + buildParser, + serveParser, + deployParser, + deployFunctionsParser, + developParser, + ].forEach(parser => { + parser.add_argument("--environment", { + required: true, + dest: "environment", + choices: Object.values(Environment), + }) + }) + return parser +} const scripts = async () => { - const parser = await getParser(); - const args = parser.parseArgs(); - switch (args.cmd) { - case types_1.Command.CheckConfig: { - await check_config_1.checkConfig(args); - break; - } - case types_1.Command.Build: { - await build_1.build(); - break; - } - case types_1.Command.Develop: { - await develop_1.develop(args); - break; - } - case types_1.Command.Serve: { - await serve_1.serve(args); - break; - } - case types_1.Command.Deploy: { - await stage_1.stage(args); - break; - } - case types_1.Command.DeployFunctions: { - await deploy_functions_1.deployFunctions(args); - break; - } + const parser = await getParser() + const args = parser.parse_args() + switch (args.cmd) { + case Command.CheckConfig: { + await checkConfig(args) + break + } + case Command.Build: { + await build() + break + } + case Command.Develop: { + await develop(args) + break + } + case Command.Serve: { + await serve(args) + break + } + case Command.Deploy: { + await stage(args) + break + } + case Command.DeployFunctions: { + await deployFunctions(args) + break } - process.exit(0); -}; -scripts(); + } + process.exit(0) +} +scripts() diff --git a/lib/build/serve.js b/lib/build/serve.js index 97fe0e166..73b6dbd36 100644 --- a/lib/build/serve.js +++ b/lib/build/serve.js @@ -1,30 +1,31 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.serve = void 0; -const execa = require("execa"); -const build_1 = require("./build"); -const types_1 = require("./types"); -const check_config_1 = require("./check-config"); -exports.serve = async (args) => { - const config = await check_config_1.checkConfig({ all: false }); - let projectId; - if (args.environment === types_1.Environment.Staging) { - console.error(`Note: serving using the staging environment isn't fully supported. You should use "yarn start" instead to run locally.`); - process.exit(1); +import { execa } from "execa" +import { build } from "./build.js" +import { Environment } from "./types.js" +import { checkConfig } from "./check-config.js" +export const serve = async args => { + const config = await checkConfig({ all: false }) + let projectId + if (args.environment === Environment.Staging) { + console.error( + `Note: serving using the staging environment isn't fully supported. You should use "yarn start" instead to run locally.` + ) + process.exit(1) + } else if (args.environment === Environment.Production) { + projectId = config.production.firebaseProjectId + } else { + throw new Error("Unreachable") + } + if (!args.skipBuild) { + await build(false) + } + await execa( + "yarn", + ["run", "firebase", "--project", projectId, "serve", "--host", "0.0.0.0"], + { + stderr: "inherit", + stdout: "inherit", + stdin: "inherit", } - else if (args.environment === types_1.Environment.Production) { - projectId = config.production.firebaseProjectId; - } - else { - throw new Error("Unreachable"); - } - if (!args.skipBuild) { - await build_1.build(false); - } - await execa("yarn", ["run", "firebase", "--project", projectId, "serve", "--host", "0.0.0.0"], { - stderr: "inherit", - stdout: "inherit", - stdin: "inherit", - }); - return; -}; + ) + return +} diff --git a/lib/build/stage.js b/lib/build/stage.js index 48272705d..9b7e48cf4 100644 --- a/lib/build/stage.js +++ b/lib/build/stage.js @@ -1,48 +1,50 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.stage = void 0; -const execa = require("execa"); -const build_1 = require("./build"); -const check_config_1 = require("./check-config"); -const types_1 = require("./types"); -const deploy_functions_1 = require("./deploy-functions"); -exports.stage = async (args) => { - const config = await check_config_1.checkConfig({ - all: false, - }); - // Always create the .env.production file, but re-write it based on - // environment. - await check_config_1.writeEnvFile(args.environment === types_1.Environment.Production - ? config.production - : { - ...config.staging, - firebaseProjectId: config.production.firebaseProjectId, - }, args.environment === types_1.Environment.Staging - ? "bitly_auth_integration" - : undefined); - await deploy_functions_1.ensureFirebaseLoginStatus({ noLocalhost: args.noLocalhost }); - // TODO - should stage also do functions, or should they be managed - // separately? - // - // await ensureFirebaseFunctionsConfig({ - // ...config, - // noLocalhost: args.noLocalhost, - // }) - let projectId; - if (args.environment === types_1.Environment.Staging) { - projectId = config.staging.firebaseProjectId; +import { execa } from "execa" +import { build } from "./build.js" +import { checkConfig, writeEnvFile } from "./check-config.js" +import { Environment } from "./types.js" +import { ensureFirebaseLoginStatus } from "./deploy-functions.js" +export const stage = async args => { + const config = await checkConfig({ + all: false, + }) + // Always create the .env.production file, but re-write it based on + // environment. + await writeEnvFile( + args.environment === Environment.Production + ? config.production + : { + ...config.staging, + firebaseProjectId: config.production.firebaseProjectId, + }, + args.environment === Environment.Staging + ? "bitly_auth_integration" + : undefined + ) + await ensureFirebaseLoginStatus({ noLocalhost: args.noLocalhost }) + // TODO - should stage also do functions, or should they be managed + // separately? + // + // await ensureFirebaseFunctionsConfig({ + // ...config, + // noLocalhost: args.noLocalhost, + // }) + let projectId + if (args.environment === Environment.Staging) { + projectId = config.staging.firebaseProjectId + } else if (args.environment === Environment.Production) { + projectId = config.production.firebaseProjectId + } else { + throw new Error("unreachable") + } + await build(false) + await execa( + "yarn", + ["run", "firebase", "--project", projectId, "deploy", "--only", "hosting"], + { + stderr: "inherit", + stdout: "inherit", + stdin: "inherit", } - else if (args.environment === types_1.Environment.Production) { - projectId = config.production.firebaseProjectId; - } - else { - throw new Error("unreachable"); - } - await build_1.build(false); - await execa("yarn", ["run", "firebase", "--project", projectId, "deploy", "--only", "hosting"], { - stderr: "inherit", - stdout: "inherit", - stdin: "inherit", - }); - return; -}; + ) + return +} diff --git a/lib/build/types.js b/lib/build/types.js index 2a421585a..78d75238e 100644 --- a/lib/build/types.js +++ b/lib/build/types.js @@ -1,38 +1,35 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Command = exports.Environment = exports.AnswerNames = exports.DotEnvDevelopmentPath = exports.DotEnvProductionPath = exports.RuntimeJsonPath = exports.Encoding = exports.PWD = void 0; -const path = require("path"); -exports.PWD = process.cwd(); -exports.Encoding = "utf8"; -exports.RuntimeJsonPath = path.join(exports.PWD, "runtime.json"); -exports.DotEnvProductionPath = path.join(exports.PWD, ".env.production"); -exports.DotEnvDevelopmentPath = path.join(exports.PWD, ".env.development"); -var AnswerNames; -(function (AnswerNames) { - AnswerNames["BaseUriProd"] = "baseUriProd"; - AnswerNames["BaseUriStaging"] = "baseUriStaging"; - AnswerNames["FirebaseProjectIdProd"] = "firebaseProjectIdProd"; - AnswerNames["FirebaseProjectIdStaging"] = "firebaseProjectIdStaging"; - AnswerNames["GapiClientIdProd"] = "gapiClientIdProd"; - AnswerNames["GapiClientIdStaging"] = "gapiClientIdStaging"; - AnswerNames["BitlyClientIdProd"] = "bitlyClientIdProd"; - AnswerNames["BitlyClientIdStaging"] = "bitlyClientIdStaging"; - AnswerNames["BitlyClientSecretProd"] = "bitlyClientSecretProd"; - AnswerNames["BitlyClientSecretStaging"] = "bitlyClientSecretStaging"; - AnswerNames["MeasurementIdProd"] = "measurementIdProd"; - AnswerNames["MeasurementIdStaging"] = "measurementIdStaging"; -})(AnswerNames = exports.AnswerNames || (exports.AnswerNames = {})); -var Environment; -(function (Environment) { - Environment["Production"] = "production"; - Environment["Staging"] = "staging"; -})(Environment = exports.Environment || (exports.Environment = {})); -var Command; -(function (Command) { - Command["CheckConfig"] = "check-config"; - Command["Build"] = "build"; - Command["Develop"] = "develop"; - Command["Serve"] = "serve"; - Command["Deploy"] = "deploy"; - Command["DeployFunctions"] = "deploy-functions"; -})(Command = exports.Command || (exports.Command = {})); +import * as path from "path" +export const PWD = process.cwd() +export const Encoding = "utf8" +export const RuntimeJsonPath = path.join(PWD, "runtime.json") +export const DotEnvProductionPath = path.join(PWD, ".env.production") +export const DotEnvDevelopmentPath = path.join(PWD, ".env.development") +export var AnswerNames +;(function (AnswerNames) { + AnswerNames["BaseUriProd"] = "baseUriProd" + AnswerNames["BaseUriStaging"] = "baseUriStaging" + AnswerNames["FirebaseProjectIdProd"] = "firebaseProjectIdProd" + AnswerNames["FirebaseProjectIdStaging"] = "firebaseProjectIdStaging" + AnswerNames["GapiClientIdProd"] = "gapiClientIdProd" + AnswerNames["GapiClientIdStaging"] = "gapiClientIdStaging" + AnswerNames["BitlyClientIdProd"] = "bitlyClientIdProd" + AnswerNames["BitlyClientIdStaging"] = "bitlyClientIdStaging" + AnswerNames["BitlyClientSecretProd"] = "bitlyClientSecretProd" + AnswerNames["BitlyClientSecretStaging"] = "bitlyClientSecretStaging" + AnswerNames["MeasurementIdProd"] = "measurementIdProd" + AnswerNames["MeasurementIdStaging"] = "measurementIdStaging" +})(AnswerNames || (AnswerNames = {})) +export var Environment +;(function (Environment) { + Environment["Production"] = "production" + Environment["Staging"] = "staging" +})(Environment || (Environment = {})) +export var Command +;(function (Command) { + Command["CheckConfig"] = "check-config" + Command["Build"] = "build" + Command["Develop"] = "develop" + Command["Serve"] = "serve" + Command["Deploy"] = "deploy" + Command["DeployFunctions"] = "deploy-functions" +})(Command || (Command = {})) diff --git a/lib/package.json b/lib/package.json index cf52f3b9b..096a4f87a 100644 --- a/lib/package.json +++ b/lib/package.json @@ -1,17 +1,18 @@ { "dependencies": { - "argparse": "^1.0.10", - "execa": "^4.0.2", - "firebase-tools": "^9.10.0", - "inquirer": "^7.2.0" + "argparse": "^2.0.1", + "execa": "^7.1.1", + "firebase-tools": "^12.2.1", + "inquirer": "^9.2.6" }, "devDependencies": { - "@types/argparse": "^1.0.38", + "@types/argparse": "^2.0.10", "@types/execa": "^2.0.0", - "@types/inquirer": "^6.5.0", - "typescript": "^3.9.5" + "@types/inquirer": "^9.0.3", + "typescript": "^5.0.4" }, + "type": "module", "scripts": { "build": "tsc" } -} +} \ No newline at end of file diff --git a/lib/scripts/build.ts b/lib/scripts/build.ts index 2645e9d6d..6bd100572 100644 --- a/lib/scripts/build.ts +++ b/lib/scripts/build.ts @@ -1,5 +1,5 @@ -import { checkConfig } from "./check-config" -import * as execa from "execa" +import { checkConfig } from "./check-config.js" +import { execa } from "execa"; const checkTypes = async () => { console.log("Checking typescript types...") diff --git a/lib/scripts/check-config.ts b/lib/scripts/check-config.ts index 00281eceb..ec17f094e 100644 --- a/lib/scripts/check-config.ts +++ b/lib/scripts/check-config.ts @@ -1,5 +1,5 @@ import * as fs from "fs" -import * as inquirer from "inquirer" +import { default as inquirer, QuestionCollection } from "inquirer" import { RuntimeJson, RuntimeJsonPath, @@ -12,7 +12,7 @@ import { CommonConfig, AnswerNames, DotEnvDevelopmentPath, -} from "./types" +} from "./types.js" type ConfigQuestionFilter = { askAll?: true | undefined @@ -77,7 +77,7 @@ export const SKIP_QUESTION = "Leave blank to skip" // be skipped if already provided. const configQuestions = ( filter: ConfigQuestionFilter -): inquirer.QuestionCollection => { +): QuestionCollection => { // TODO the `?.`s can be removed once this has stabilized. They're here now to // be friendly as the runtimeJson type evolves. return [ @@ -310,7 +310,7 @@ const toRuntimeJson = ( let asserted: RuntimeJson try { asserted = assertAllValues(fullConfig) - } catch (e) { + } catch (e: any) { console.error(e.message) process.exit(1) } diff --git a/lib/scripts/deploy-functions.ts b/lib/scripts/deploy-functions.ts index 3679c6f85..eeb9c9d55 100644 --- a/lib/scripts/deploy-functions.ts +++ b/lib/scripts/deploy-functions.ts @@ -1,7 +1,7 @@ -import * as execa from "execa" -import { DeployFunctionsArgs, RuntimeJson, Environment } from "./types" -import { checkConfig, SKIP_QUESTION } from "./check-config" -import { configForEnvironment } from "." +import { execa } from "execa"; +import { DeployFunctionsArgs, RuntimeJson, Environment } from "./types.js" +import { checkConfig, SKIP_QUESTION } from "./check-config.js" +import { configForEnvironment } from "./index.js" export const ensureFirebaseLoginStatus = async ({ noLocalhost, diff --git a/lib/scripts/develop.ts b/lib/scripts/develop.ts index 5f6c2a13f..d5f790fc4 100644 --- a/lib/scripts/develop.ts +++ b/lib/scripts/develop.ts @@ -1,8 +1,8 @@ // yarn check-types && gatsby develop --host=0.0.0.0" -import { checkConfig, writeEnvFile } from "./check-config" -import * as execa from "execa" -import { configForEnvironment } from "." -import { DevelopArgs } from "./types" +import { checkConfig, writeEnvFile } from "./check-config.js" +import { execa } from "execa"; +import { configForEnvironment } from "./index.js" +import { DevelopArgs } from "./types.js" export const develop = async (args: DevelopArgs) => { const config = await checkConfig({ all: false }) diff --git a/lib/scripts/index.ts b/lib/scripts/index.ts index 679303d22..427bbbb03 100644 --- a/lib/scripts/index.ts +++ b/lib/scripts/index.ts @@ -1,9 +1,9 @@ -import * as argparse from "argparse" -import { checkConfig } from "./check-config" -import { build } from "./build" -import { develop } from "./develop" -import { serve } from "./serve" -import { stage } from "./stage" +import argparse from "argparse" +import { checkConfig } from "./check-config.js" +import { build } from "./build.js" +import { develop } from "./develop.js" +import { serve } from "./serve.js" +import { stage } from "./stage.js" import { Command, Args, @@ -11,8 +11,8 @@ import { RuntimeJson, StagingConfig, ProductionConfig, -} from "./types" -import { deployFunctions } from "./deploy-functions" +} from "./types.js" +import { deployFunctions } from "./deploy-functions.js" export const configForEnvironment = ( environment: Environment, @@ -38,60 +38,59 @@ export const configForEnvironment = ( const getParser = async (): Promise => { const parser = new argparse.ArgumentParser({ - version: "1.0", - addHelp: true, + add_help: true, description: "Scripts for managing ga-dev-tools development.", }) - const subparsers = parser.addSubparsers({ + const subparsers = parser.add_subparsers({ title: "Sub command", dest: "cmd", }) - const checkConfigParser = subparsers.addParser(Command.CheckConfig, { + const checkConfigParser = subparsers.add_parser(Command.CheckConfig, { help: "Ensures that all necessary configuration files exist & have required values.", }) - checkConfigParser.addArgument("--all", { - defaultValue: false, + checkConfigParser.add_argument("--all", { + default: false, dest: "all", action: "storeTrue", }) - const buildParser = subparsers.addParser(Command.Build, { + const buildParser = subparsers.add_parser(Command.Build, { help: "Builds the project. Runs any necessary validation before building.", }) // TODO - It's probably worth implementing a workaround so this can be built // using the development environment variables. Right now, this works great // for local development, but it's less useful for the staging site. - const deployParser = subparsers.addParser(Command.Deploy, { + const deployParser = subparsers.add_parser(Command.Deploy, { help: "Builds the project and deploys it to `--environment`.", }) - const deployFunctionsParser = subparsers.addParser(Command.DeployFunctions, { + const deployFunctionsParser = subparsers.add_parser(Command.DeployFunctions, { help: "Builds ./functions project and deploys it to `--environment`.", }) ;[deployParser, deployFunctionsParser].map(parser => - parser.addArgument("--no-localhost", { - defaultValue: false, + parser.add_argument("--no-localhost", { + default: false, dest: "noLocalhost", action: "storeTrue", }) ) - const developParser = subparsers.addParser(Command.Develop, { + const developParser = subparsers.add_parser(Command.Develop, { help: "Runs a local dev server. Runs any necessary validation before serving.", }) - const serveParser = subparsers.addParser(Command.Serve, { + const serveParser = subparsers.add_parser(Command.Serve, { help: "Serves the content in the build directory locally through the Firebase cli.", }) - serveParser.addArgument("--skip_build", { - defaultValue: false, + serveParser.add_argument("--skip_build", { + default: false, dest: "skipBuild", action: "storeTrue", }) @@ -104,7 +103,7 @@ const getParser = async (): Promise => { deployFunctionsParser, developParser, ].forEach(parser => { - parser.addArgument("--environment", { + parser.add_argument("--environment", { required: true, dest: "environment", choices: Object.values(Environment), @@ -116,7 +115,7 @@ const getParser = async (): Promise => { const scripts = async () => { const parser = await getParser() - const args = parser.parseArgs() as Args + const args = parser.parse_args() as Args switch (args.cmd) { case Command.CheckConfig: { diff --git a/lib/scripts/serve.ts b/lib/scripts/serve.ts index 5bcc985be..29c725307 100644 --- a/lib/scripts/serve.ts +++ b/lib/scripts/serve.ts @@ -1,7 +1,7 @@ -import * as execa from "execa" -import { build } from "./build" -import { ServeArgs, Environment } from "./types" -import { checkConfig } from "./check-config" +import { execa } from "execa"; +import { build } from "./build.js" +import { ServeArgs, Environment } from "./types.js" +import { checkConfig } from "./check-config.js" export const serve = async (args: ServeArgs) => { const config = await checkConfig({ all: false }) diff --git a/lib/scripts/stage.ts b/lib/scripts/stage.ts index ddffc50b4..644fcfad7 100644 --- a/lib/scripts/stage.ts +++ b/lib/scripts/stage.ts @@ -1,8 +1,8 @@ -import * as execa from "execa" -import { build } from "./build" -import { checkConfig, writeEnvFile } from "./check-config" -import { DeployArgs, Environment } from "./types" -import { ensureFirebaseLoginStatus } from "./deploy-functions" +import { execa } from "execa"; +import { build } from "./build.js" +import { checkConfig, writeEnvFile } from "./check-config.js" +import { DeployArgs, Environment } from "./types.js" +import { ensureFirebaseLoginStatus } from "./deploy-functions.js" export const stage = async (args: DeployArgs) => { const config = await checkConfig({ diff --git a/lib/tsconfig.json b/lib/tsconfig.json index 06658c3c0..19bd4fd80 100644 --- a/lib/tsconfig.json +++ b/lib/tsconfig.json @@ -1,10 +1,108 @@ { "compilerOptions": { - "lib": ["es2018", "dom"], - "module": "commonjs", - "target": "es2018", + /* Visit https://aka.ms/tsconfig.json to read more about this file */ + + /* Projects */ + // "incremental": true, /* Enable incremental compilation */ + // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ + // "tsBuildInfoFile": "./", /* Specify the folder for .tsbuildinfo incremental compilation files. */ + // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects */ + // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ + // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ + + /* Language and Environment */ + "target": "esnext" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, + "lib": [ + "dom", + "esnext" + ] /* Specify a set of bundled library declaration files that describe the target runtime environment. */, + // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */ + // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ + // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h' */ + // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ + // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using `jsx: react-jsx*`.` */ + // "reactNamespace": "", /* Specify the object invoked for `createElement`. This only applies when targeting `react` JSX emit. */ + // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ + // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ + + /* Modules */ + "module": "ESNext" /* Specify what module code is generated. */, + // "rootDir": "./", /* Specify the root folder within your source files. */ + "moduleResolution": "NodeNext" /* Specify how TypeScript looks up a file from a given module specifier. */, + // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ + // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ + // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ + // "typeRoots": [], /* Specify multiple folders that act like `./node_modules/@types`. */ + // "types": [], /* Specify type package names to be included without being referenced in a source file. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + // "resolveJsonModule": true, /* Enable importing .json files */ + // "noResolve": true, /* Disallow `import`s, `require`s or ``s from expanding the number of files TypeScript should add to a project. */ + + /* JavaScript Support */ + // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the `checkJS` option to get errors from these files. */ + // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ + // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from `node_modules`. Only applicable with `allowJs`. */ + + /* Emit */ + // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ + // "declarationMap": true, /* Create sourcemaps for d.ts files. */ + // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ + // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ + // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If `declaration` is true, also designates a file that bundles all .d.ts output. */ "outDir": "build", - "strict": true + // "removeComments": true, /* Disable emitting comments. */ + // "noEmit": true, /* Disable emitting files from a compilation. */ + // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ + // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types */ + // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ + // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ + // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ + // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ + // "newLine": "crlf", /* Set the newline character for emitting files. */ + // "stripInternal": true, /* Disable emitting declarations that have `@internal` in their JSDoc comments. */ + // "noEmitHelpers": true, /* Disable generating custom helper functions like `__extends` in compiled output. */ + // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ + // "preserveConstEnums": true, /* Disable erasing `const enum` declarations in generated code. */ + // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ + // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ + + /* Interop Constraints */ + // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ + // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ + "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables `allowSyntheticDefaultImports` for type compatibility. */, + // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ + "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */, + + /* Type Checking */ + "strict": true /* Enable all strict type-checking options. */, + // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied `any` type.. */ + // "strictNullChecks": true, /* When type checking, take into account `null` and `undefined`. */ + // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ + // "strictBindCallApply": true, /* Check that the arguments for `bind`, `call`, and `apply` methods match the original function. */ + // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ + // "noImplicitThis": true, /* Enable error reporting when `this` is given the type `any`. */ + // "useUnknownInCatchVariables": true, /* Type catch clause variables as 'unknown' instead of 'any'. */ + // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ + // "noUnusedLocals": true, /* Enable error reporting when a local variables aren't read. */ + // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read */ + // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ + // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ + // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ + // "noUncheckedIndexedAccess": true, /* Include 'undefined' in index signature results */ + // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ + // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type */ + // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ + // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ + + /* Completeness */ + // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ + "skipLibCheck": true /* Skip type checking all .d.ts files. */, + "baseUrl": "./src", + "paths": { + "@/*": ["./*"] + } }, "include": ["**/*.ts"] } diff --git a/lib/yarn.lock b/lib/yarn.lock index e6d28776c..217ccbe5a 100644 --- a/lib/yarn.lock +++ b/lib/yarn.lock @@ -3,103 +3,166 @@ "@apidevtools/json-schema-ref-parser@^9.0.3": - version "9.0.7" - resolved "https://registry.yarnpkg.com/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.0.7.tgz#64aa7f5b34e43d74ea9e408b90ddfba02050dde3" - integrity sha512-QdwOGF1+eeyFh+17v2Tz626WX0nucd1iKOm6JUTUvCZdbolblCOOQCxGrQPY0f7jEhn36PiAWqZnsC2r5vmUWg== + version "9.1.2" + resolved "https://registry.yarnpkg.com/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.1.2.tgz#8ff5386b365d4c9faa7c8b566ff16a46a577d9b8" + integrity sha512-r1w81DpR+KyRWd3f+rk6TNqMgedmAxZP5v5KWlXQWlgMUUtyEJch0DKEci1SorPMiSeM8XPl7MZ3miJ60JIpQg== dependencies: "@jsdevtools/ono" "^7.1.3" + "@types/json-schema" "^7.0.6" call-me-maybe "^1.0.1" - js-yaml "^3.13.1" + js-yaml "^4.1.0" + +"@babel/parser@^7.20.15": + version "7.22.4" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.4.tgz#a770e98fd785c231af9d93f6459d36770993fb32" + integrity sha512-VLLsx06XkEYqBtE5YGPwfSGwfrjnyPP5oiGty3S8pQLFDFLaS8VwWSIxkTXpcvr5zeYLE6+MBNl2npl/YnfofA== + +"@colors/colors@1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" + integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== "@dabh/diagnostics@^2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@dabh/diagnostics/-/diagnostics-2.0.2.tgz#290d08f7b381b8f94607dc8f471a12c675f9db31" - integrity sha512-+A1YivoVDNNVCdfozHSR8v/jyuuLTMXwjWuxPFlFlUapXoGc+Gj9mDlTDDfrwl7rXCl2tNZ0kE8sIBO6YOn96Q== + version "2.0.3" + resolved "https://registry.yarnpkg.com/@dabh/diagnostics/-/diagnostics-2.0.3.tgz#7f7e97ee9a725dffc7808d93668cc984e1dc477a" + integrity sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA== dependencies: colorspace "1.1.x" enabled "2.0.x" kuler "^2.0.0" -"@google-cloud/paginator@^3.0.0": - version "3.0.5" - resolved "https://registry.yarnpkg.com/@google-cloud/paginator/-/paginator-3.0.5.tgz#9d6b96c421a89bd560c1bc2c197c7611ef21db6c" - integrity sha512-N4Uk4BT1YuskfRhKXBs0n9Lg2YTROZc6IMpkO/8DIHODtm5s3xY8K5vVBo23v/2XulY3azwITQlYWgT4GdLsUw== +"@gar/promisify@^1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" + integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== + +"@google-cloud/paginator@^4.0.0": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@google-cloud/paginator/-/paginator-4.0.1.tgz#5fb8793d4f84d18c50a6f2fad3dadab8d2c533ef" + integrity sha512-6G1ui6bWhNyHjmbYwavdN7mpVPRBtyDg/bfqBTAlwr413On2TnFNfDxc9UhTJctkgoCDgQXEKiRPLPR9USlkbQ== dependencies: arrify "^2.0.0" extend "^3.0.2" -"@google-cloud/precise-date@^2.0.0": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@google-cloud/precise-date/-/precise-date-2.0.3.tgz#14f6f28ce35dabf3882e7aeab1c9d51bd473faed" - integrity sha512-+SDJ3ZvGkF7hzo6BGa8ZqeK3F6Z4+S+KviC9oOK+XCs3tfMyJCh/4j93XIWINgMMDIh9BgEvlw4306VxlXIlYA== +"@google-cloud/precise-date@^3.0.0": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@google-cloud/precise-date/-/precise-date-3.0.1.tgz#1e6659a14af662442037b8f4d20dbc82bf1a78bd" + integrity sha512-crK2rgNFfvLoSgcKJY7ZBOLW91IimVNmPfi1CL+kMTf78pTJYd29XqEVedAeBu4DwCJc0EDIp1MpctLgoPq+Uw== -"@google-cloud/projectify@^2.0.0": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@google-cloud/projectify/-/projectify-2.0.1.tgz#13350ee609346435c795bbfe133a08dfeab78d65" - integrity sha512-ZDG38U/Yy6Zr21LaR3BTiiLtpJl6RkPS/JwoRT453G+6Q1DhlV0waNf8Lfu+YVYGIIxgKnLayJRfYlFJfiI8iQ== +"@google-cloud/projectify@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@google-cloud/projectify/-/projectify-3.0.0.tgz#302b25f55f674854dce65c2532d98919b118a408" + integrity sha512-HRkZsNmjScY6Li8/kb70wjGlDDyLkVk3KvoEo9uIoxSjYLJasGiCch9+PqRVDOCGUFvEIqyogl+BeqILL4OJHA== "@google-cloud/promisify@^2.0.0": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@google-cloud/promisify/-/promisify-2.0.3.tgz#f934b5cdc939e3c7039ff62b9caaf59a9d89e3a8" - integrity sha512-d4VSA86eL/AFTe5xtyZX+ePUjE8dIFu2T8zmdeNBSa5/kNgXPCx/o/wbFNHAGLJdGnk1vddRuMESD9HbOC8irw== + version "2.0.4" + resolved "https://registry.yarnpkg.com/@google-cloud/promisify/-/promisify-2.0.4.tgz#9d8705ecb2baa41b6b2673f3a8e9b7b7e1abc52a" + integrity sha512-j8yRSSqswWi1QqUGKVEKOG03Q7qOoZP6/h2zN2YO+F5h2+DHU0bSrHCK9Y7lo2DI9fBd8qGAw795sf+3Jva4yA== -"@google-cloud/pubsub@^2.7.0": - version "2.11.0" - resolved "https://registry.yarnpkg.com/@google-cloud/pubsub/-/pubsub-2.11.0.tgz#f613983c6944a2afc7d82434232b25d128655ff7" - integrity sha512-j9sIjVLFqSEVrAZdrGbmu4GVVuCW70Sg6/EBKSMjNKhN/ctQsgcP6kUVLVnnrrTWVF0+FfdlfuCHtdYxGy7mfw== +"@google-cloud/pubsub@^3.0.1": + version "3.7.0" + resolved "https://registry.yarnpkg.com/@google-cloud/pubsub/-/pubsub-3.7.0.tgz#50c3940f90c9fe9dacd0711f5e3519df19a03804" + integrity sha512-PYgYM/bPMgzKzzKJwvHL8lupVVXIoS7sBppdJWDfK5BVA6tLqBF57P20YEy9V8gi1/v1bZ9YCa1Ag58oYfGItA== dependencies: - "@google-cloud/paginator" "^3.0.0" - "@google-cloud/precise-date" "^2.0.0" - "@google-cloud/projectify" "^2.0.0" + "@google-cloud/paginator" "^4.0.0" + "@google-cloud/precise-date" "^3.0.0" + "@google-cloud/projectify" "^3.0.0" "@google-cloud/promisify" "^2.0.0" - "@opentelemetry/api" "^0.18.1" - "@opentelemetry/semantic-conventions" "^0.18.2" + "@opentelemetry/api" "^1.0.0" + "@opentelemetry/semantic-conventions" "~1.3.0" "@types/duplexify" "^3.6.0" "@types/long" "^4.0.0" arrify "^2.0.0" extend "^3.0.2" - google-auth-library "^7.0.0" - google-gax "^2.9.2" + google-auth-library "^8.0.2" + google-gax "^3.5.6" + heap-js "^2.2.0" is-stream-ended "^0.1.4" lodash.snakecase "^4.1.1" p-defer "^3.0.0" -"@grpc/grpc-js@~1.2.0": - version "1.2.12" - resolved "https://registry.yarnpkg.com/@grpc/grpc-js/-/grpc-js-1.2.12.tgz#0153f27512acf69184bb52c0a1035ca91d6c14b0" - integrity sha512-+gPCklP1eqIgrNPyzddYQdt9+GvZqPlLpIjIo+TveE+gbtp74VV1A2ju8ExeO8ma8f7MbpaGZx/KJPYVWL9eDw== +"@grpc/grpc-js@~1.8.0": + version "1.8.15" + resolved "https://registry.yarnpkg.com/@grpc/grpc-js/-/grpc-js-1.8.15.tgz#17829cbc9f2bc8b3b0e22a4da59d72db2a34df5c" + integrity sha512-H2Bu/w6+oQ58DsRbQol66ERBk3V5ZIak/z/MDx0T4EgDnJWps807I6BvTjq0v6UvZtOcLO+ur+Q9wvniqu3OJA== dependencies: + "@grpc/proto-loader" "^0.7.0" "@types/node" ">=12.12.47" - google-auth-library "^6.1.1" - semver "^6.2.0" -"@grpc/proto-loader@^0.5.1": - version "0.5.6" - resolved "https://registry.yarnpkg.com/@grpc/proto-loader/-/proto-loader-0.5.6.tgz#1dea4b8a6412b05e2d58514d507137b63a52a98d" - integrity sha512-DT14xgw3PSzPxwS13auTEwxhMMOoz33DPUKNtmYK/QYbBSpLXJy78FGGs5yVoxVobEqPm4iW9MOIoz0A3bLTRQ== +"@grpc/proto-loader@^0.7.0": + version "0.7.7" + resolved "https://registry.yarnpkg.com/@grpc/proto-loader/-/proto-loader-0.7.7.tgz#d33677a77eea8407f7c66e2abd97589b60eb4b21" + integrity sha512-1TIeXOi8TuSCQprPItwoMymZXxWT0CPxUhkrkeCUH+D8U7QDwQ6b7SUz2MaLuWM2llT+J/TVFLmQI5KtML3BhQ== dependencies: + "@types/long" "^4.0.1" lodash.camelcase "^4.3.0" - protobufjs "^6.8.6" + long "^4.0.0" + protobufjs "^7.0.0" + yargs "^17.7.2" "@jsdevtools/ono@^7.1.3": version "7.1.3" resolved "https://registry.yarnpkg.com/@jsdevtools/ono/-/ono-7.1.3.tgz#9df03bbd7c696a5c58885c34aa06da41c8543796" integrity sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg== -"@opentelemetry/api@^0.18.1": - version "0.18.1" - resolved "https://registry.yarnpkg.com/@opentelemetry/api/-/api-0.18.1.tgz#fb499e07afa1f55acffc47b2469eb218dcdee2a2" - integrity sha512-pKNxHe3AJ5T2N5G3AlT9gx6FyF5K2FS9ZNc+FipC+f1CpVF/EY+JHTJ749dnM2kWIgZTbDJFiGMuc0FYjNSCOg== +"@jsdoc/salty@^0.2.1": + version "0.2.5" + resolved "https://registry.yarnpkg.com/@jsdoc/salty/-/salty-0.2.5.tgz#1b2fa5bb8c66485b536d86eee877c263d322f692" + integrity sha512-TfRP53RqunNe2HBobVBJ0VLhK1HbfvBYeTC1ahnN64PWvyYyGebmMiPkuwvD9fpw2ZbkoPb8Q7mwy0aR8Z9rvw== + dependencies: + lodash "^4.17.21" + +"@npmcli/fs@^2.1.0": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-2.1.2.tgz#a9e2541a4a2fec2e69c29b35e6060973da79b865" + integrity sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ== + dependencies: + "@gar/promisify" "^1.1.3" + semver "^7.3.5" + +"@npmcli/move-file@^2.0.0": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-2.0.1.tgz#26f6bdc379d87f75e55739bab89db525b06100e4" + integrity sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ== + dependencies: + mkdirp "^1.0.4" + rimraf "^3.0.2" + +"@opentelemetry/api@^1.0.0": + version "1.4.1" + resolved "https://registry.yarnpkg.com/@opentelemetry/api/-/api-1.4.1.tgz#ff22eb2e5d476fbc2450a196e40dd243cc20c28f" + integrity sha512-O2yRJce1GOc6PAy3QxFM4NzFiWzvScDC1/5ihYBL6BUEVdq0XMWN01sppE+H6bBXbaFYipjwFLEWLg5PaSOThA== + +"@opentelemetry/semantic-conventions@~1.3.0": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@opentelemetry/semantic-conventions/-/semantic-conventions-1.3.1.tgz#ba07b864a3c955f061aa30ea3ef7f4ae4449794a" + integrity sha512-wU5J8rUoo32oSef/rFpOT1HIjLjAv3qIDHkw1QIhODV3OpAVHi5oVzlouozg9obUmZKtbZ0qUe/m7FP0y0yBzA== + +"@pnpm/config.env-replace@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz#ab29da53df41e8948a00f2433f085f54de8b3a4c" + integrity sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w== + +"@pnpm/network.ca-file@^1.0.1": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz#2ab05e09c1af0cdf2fcf5035bea1484e222f7983" + integrity sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA== + dependencies: + graceful-fs "4.2.10" -"@opentelemetry/semantic-conventions@^0.18.2": - version "0.18.2" - resolved "https://registry.yarnpkg.com/@opentelemetry/semantic-conventions/-/semantic-conventions-0.18.2.tgz#a0f15d2ef752567713c1f59f69c6742edb03030c" - integrity sha512-+0P+PrP9qSFVaayNdek4P1OAGE+PEl2SsufuHDRmUpOY25Wzjo7Atyar56Trjc32jkNy4lID6ZFT6BahsR9P9A== +"@pnpm/npm-conf@^2.1.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@pnpm/npm-conf/-/npm-conf-2.2.0.tgz#221b4cfcde745d5f8928c25f391e5cc9d405b345" + integrity sha512-roLI1ul/GwzwcfcVpZYPdrgW2W/drLriObl1h+yLF5syc8/5ULWw2ALbCHUWF+4YltIqA3xFSbG4IwyJz37e9g== + dependencies: + "@pnpm/config.env-replace" "^1.1.0" + "@pnpm/network.ca-file" "^1.0.1" + config-chain "^1.1.11" "@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": version "1.1.2" resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf" - integrity sha1-m4sMxmPWaafY9vXQiToU00jzD78= + integrity sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ== "@protobufjs/base64@^1.1.2": version "1.1.2" @@ -114,12 +177,12 @@ "@protobufjs/eventemitter@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz#355cbc98bafad5978f9ed095f397621f1d066b70" - integrity sha1-NVy8mLr61ZePntCV85diHx0Ga3A= + integrity sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q== "@protobufjs/fetch@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@protobufjs/fetch/-/fetch-1.1.0.tgz#ba99fb598614af65700c1619ff06d454b0d84c45" - integrity sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU= + integrity sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ== dependencies: "@protobufjs/aspromise" "^1.1.1" "@protobufjs/inquire" "^1.1.0" @@ -127,66 +190,47 @@ "@protobufjs/float@^1.0.2": version "1.0.2" resolved "https://registry.yarnpkg.com/@protobufjs/float/-/float-1.0.2.tgz#5e9e1abdcb73fc0a7cb8b291df78c8cbd97b87d1" - integrity sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E= + integrity sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ== "@protobufjs/inquire@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@protobufjs/inquire/-/inquire-1.1.0.tgz#ff200e3e7cf2429e2dcafc1140828e8cc638f089" - integrity sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik= + integrity sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q== "@protobufjs/path@^1.1.2": version "1.1.2" resolved "https://registry.yarnpkg.com/@protobufjs/path/-/path-1.1.2.tgz#6cc2b20c5c9ad6ad0dccfd21ca7673d8d7fbf68d" - integrity sha1-bMKyDFya1q0NzP0hynZz2Nf79o0= + integrity sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA== "@protobufjs/pool@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@protobufjs/pool/-/pool-1.1.0.tgz#09fd15f2d6d3abfa9b65bc366506d6ad7846ff54" - integrity sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q= + integrity sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw== "@protobufjs/utf8@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" - integrity sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA= - -"@sindresorhus/is@^0.14.0": - version "0.14.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" - integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== - -"@szmarczak/http-timer@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" - integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== - dependencies: - defer-to-connect "^1.0.1" + integrity sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw== "@tootallnate/once@1": version "1.1.2" resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== -"@types/archiver@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@types/archiver/-/archiver-5.1.0.tgz#869f4ce4028e49cf9a0243cf914415f4cc3d1f3d" - integrity sha512-baFOhanb/hxmcOd1Uey2TfFg43kTSmM6py1Eo7Rjbv/ivcl7PXLhY0QgXGf50Hx/eskGCFqPfhs/7IZLb15C5g== - dependencies: - "@types/glob" "*" - -"@types/argparse@^1.0.38": - version "1.0.38" - resolved "https://registry.yarnpkg.com/@types/argparse/-/argparse-1.0.38.tgz#a81fd8606d481f873a3800c6ebae4f1d768a56a9" - integrity sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA== +"@tootallnate/once@2": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" + integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== -"@types/color-name@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" - integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== +"@types/argparse@^2.0.10": + version "2.0.10" + resolved "https://registry.yarnpkg.com/@types/argparse/-/argparse-2.0.10.tgz#664e84808accd1987548d888b9d21b3e9c996a6c" + integrity sha512-C4wahC3gz3vQtvPazrJ5ONwmK1zSDllQboiWvpMM/iOswCYfBREFnjFbq/iWKIVOCl8+m5Pk6eva6/ZSsDuIGA== "@types/duplexify@^3.6.0": - version "3.6.0" - resolved "https://registry.yarnpkg.com/@types/duplexify/-/duplexify-3.6.0.tgz#dfc82b64bd3a2168f5bd26444af165bf0237dcd8" - integrity sha512-5zOA53RUlzN74bvrSGwjudssD9F3a797sDZQkiYpUOxW+WHaXTCPz4/d5Dgi6FKnOqZ2CpaTo0DhgIfsXAOE/A== + version "3.6.1" + resolved "https://registry.yarnpkg.com/@types/duplexify/-/duplexify-3.6.1.tgz#5685721cf7dc4a21b6f0e8a8efbec6b4d2fbafad" + integrity sha512-n0zoEj/fMdMOvqbHxmqnza/kXyoGgJmEpsXjpP+gEqE1Ye4yNqc7xWipKnUoMpWhMuzJQSfK2gMrwlElly7OGQ== dependencies: "@types/node" "*" @@ -198,40 +242,66 @@ execa "*" "@types/glob@*": - version "7.1.3" - resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.3.tgz#e6ba80f36b7daad2c685acd9266382e68985c183" - integrity sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w== + version "8.1.0" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-8.1.0.tgz#b63e70155391b0584dce44e7ea25190bbc38f2fc" + integrity sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w== dependencies: - "@types/minimatch" "*" + "@types/minimatch" "^5.1.2" "@types/node" "*" -"@types/inquirer@^6.5.0": - version "6.5.0" - resolved "https://registry.yarnpkg.com/@types/inquirer/-/inquirer-6.5.0.tgz#b83b0bf30b88b8be7246d40e51d32fe9d10e09be" - integrity sha512-rjaYQ9b9y/VFGOpqBEXRavc3jh0a+e6evAbI31tMda8VlPaSy0AZJfXsvmIe3wklc7W6C3zCSfleuMXR7NOyXw== +"@types/inquirer@^9.0.3": + version "9.0.3" + resolved "https://registry.yarnpkg.com/@types/inquirer/-/inquirer-9.0.3.tgz#dc99da4f2f6de9d26c284b4f6aaab4d98c456db1" + integrity sha512-CzNkWqQftcmk2jaCWdBTf9Sm7xSw4rkI1zpU/Udw3HX5//adEZUIm9STtoRP1qgWj0CWQtJ9UTvqmO2NNjhMJw== dependencies: "@types/through" "*" - rxjs "^6.4.0" + rxjs "^7.2.0" + +"@types/json-schema@^7.0.6": + version "7.0.12" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.12.tgz#d70faba7039d5fca54c83c7dbab41051d2b6f6cb" + integrity sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA== + +"@types/linkify-it@*": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@types/linkify-it/-/linkify-it-3.0.2.tgz#fd2cd2edbaa7eaac7e7f3c1748b52a19143846c9" + integrity sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA== "@types/long@^4.0.0", "@types/long@^4.0.1": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.1.tgz#459c65fa1867dafe6a8f322c4c51695663cc55e9" - integrity sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w== + version "4.0.2" + resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.2.tgz#b74129719fc8d11c01868010082d483b7545591a" + integrity sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA== -"@types/minimatch@*": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.4.tgz#f0ec25dbf2f0e4b18647313ac031134ca5b24b21" - integrity sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA== +"@types/markdown-it@^12.2.3": + version "12.2.3" + resolved "https://registry.yarnpkg.com/@types/markdown-it/-/markdown-it-12.2.3.tgz#0d6f6e5e413f8daaa26522904597be3d6cd93b51" + integrity sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ== + dependencies: + "@types/linkify-it" "*" + "@types/mdurl" "*" + +"@types/mdurl@*": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@types/mdurl/-/mdurl-1.0.2.tgz#e2ce9d83a613bacf284c7be7d491945e39e1f8e9" + integrity sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA== -"@types/node@*", "@types/node@>=12.12.47": - version "14.14.41" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.41.tgz#d0b939d94c1d7bd53d04824af45f1139b8c45615" - integrity sha512-dueRKfaJL4RTtSa7bWeTK1M+VH+Gns73oCgzvYfHZywRCoPSd8EkXBL0mZ9unPTveBn+D9phZBaxuzpwjWkW0g== +"@types/minimatch@^5.1.2": + version "5.1.2" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-5.1.2.tgz#07508b45797cb81ec3f273011b054cd0755eddca" + integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA== + +"@types/node@*", "@types/node@>=12.12.47", "@types/node@>=13.7.0": + version "20.2.5" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.2.5.tgz#26d295f3570323b2837d322180dfbf1ba156fefb" + integrity sha512-JJulVEQXmiY9Px5axXHeYGLSjhkZEnD+MDPDGbCbIAbMslkKwmygtZFy1X6s/075Yo94sf8GuSlFfPzysQrWZQ== -"@types/node@^13.7.0": - version "13.13.50" - resolved "https://registry.yarnpkg.com/@types/node/-/node-13.13.50.tgz#bc8ebf70c392a98ffdba7aab9b46989ea96c1c62" - integrity sha512-y7kkh+hX/0jZNxMyBR/6asG0QMSaPSzgeVK63dhWHl4QAXCQB8lExXmzLL6SzmOgKHydtawpMnNhlDbv7DXPEA== +"@types/rimraf@^3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@types/rimraf/-/rimraf-3.0.2.tgz#a63d175b331748e5220ad48c901d7bbf1f44eef8" + integrity sha512-F3OznnSLAUxFrCEu/L5PY8+ny8DtcFRjx7fZZ9bycvXRi3KPTRS9HOitGZwvPg0juRhXFWIeKX58cnX5YqLohQ== + dependencies: + "@types/glob" "*" + "@types/node" "*" "@types/through@*": version "0.0.30" @@ -240,15 +310,12 @@ dependencies: "@types/node" "*" -JSONStream@^1.2.1: - version "1.3.5" - resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" - integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== - dependencies: - jsonparse "^1.2.0" - through ">=2.2.7 <3" +"@types/triple-beam@^1.3.2": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@types/triple-beam/-/triple-beam-1.3.2.tgz#38ecb64f01aa0d02b7c8f4222d7c38af6316fef8" + integrity sha512-txGIh+0eDFzKGC25zORnswy+br1Ha7hj5cMVwKIU7+s0U2AxxJru/jZSMU6OC9MJWP6+pc/hc6ZjyZShpsyY2g== -abbrev@1: +abbrev@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== @@ -260,22 +327,61 @@ abort-controller@^3.0.0: dependencies: event-target-shim "^5.0.0" -accepts@~1.3.5, accepts@~1.3.7: - version "1.3.7" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" - integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== +accepts@~1.3.5, accepts@~1.3.8: + version "1.3.8" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" + integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== dependencies: - mime-types "~2.1.24" - negotiator "0.6.2" + mime-types "~2.1.34" + negotiator "0.6.3" + +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn-walk@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" + integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== -agent-base@6, agent-base@^6.0.0: +acorn@^8.7.0, acorn@^8.8.0: + version "8.8.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" + integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== + +agent-base@6, agent-base@^6.0.0, agent-base@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== dependencies: debug "4" -ajv@^6.12.2, ajv@^6.12.3: +agentkeepalive@^4.2.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.3.0.tgz#bb999ff07412653c1803b3ced35e50729830a255" + integrity sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg== + dependencies: + debug "^4.1.0" + depd "^2.0.0" + humanize-ms "^1.2.1" + +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + +ajv-formats@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" + integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== + dependencies: + ajv "^8.0.0" + +ajv@^6.12.3, ajv@^6.12.6: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -285,82 +391,66 @@ ajv@^6.12.2, ajv@^6.12.3: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ansi-align@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.0.tgz#b536b371cf687caaef236c18d3e21fe3797467cb" - integrity sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw== +ajv@^8.0.0, ajv@^8.3.0: + version "8.12.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" + integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== dependencies: - string-width "^3.0.0" - -ansi-escapes@^3.1.0, ansi-escapes@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" - integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" -ansi-escapes@^4.2.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61" - integrity sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA== +ansi-align@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.1.tgz#0cdf12e111ace773a86e9a1fad1225c43cb19a59" + integrity sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w== dependencies: - type-fest "^0.11.0" - -ansi-regex@^2.0.0, ansi-regex@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= - -ansi-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" - integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= - -ansi-regex@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" - integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== - -ansi-regex@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" - integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== + string-width "^4.1.0" -ansi-styles@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" - integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= +ansi-escapes@^4.2.1, ansi-escapes@^4.3.2: + version "4.3.2" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== +ansi-escapes@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-6.2.0.tgz#8a13ce75286f417f1963487d86ba9f90dccf9947" + integrity sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw== dependencies: - color-convert "^1.9.0" + type-fest "^3.0.0" -ansi-styles@^4.1.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359" - integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA== +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== dependencies: - "@types/color-name" "^1.1.1" color-convert "^2.0.1" ansicolors@~0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.3.2.tgz#665597de86a9ffe3aa9bfbe6cae5c6ea426b4979" - integrity sha1-ZlWX3oap/+Oqm/vmyuXG6kJrSXk= + integrity sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg== -anymatch@~3.1.1: - version "3.1.2" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" - integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== +anymatch@~3.1.2: + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== dependencies: normalize-path "^3.0.0" picomatch "^2.0.4" -aproba@^1.0.3: - version "1.2.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" - integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== +"aproba@^1.0.3 || ^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" + integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== archiver-utils@^2.1.0: version "2.1.0" @@ -379,37 +469,42 @@ archiver-utils@^2.1.0: readable-stream "^2.0.0" archiver@^5.0.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/archiver/-/archiver-5.3.0.tgz#dd3e097624481741df626267564f7dd8640a45ba" - integrity sha512-iUw+oDwK0fgNpvveEsdQ0Ase6IIKztBJU2U0E9MzszMfmVVUyv1QJhS2ITW9ZCqx8dktAxVAjWWkKehuZE8OPg== + version "5.3.1" + resolved "https://registry.yarnpkg.com/archiver/-/archiver-5.3.1.tgz#21e92811d6f09ecfce649fbefefe8c79e57cbbb6" + integrity sha512-8KyabkmbYrH+9ibcTScQ1xCJC/CGcugdVIwB+53f5sZziXgwUh3iXlAlANMxcZyDEfTHMe6+Z5FofV8nopXP7w== dependencies: archiver-utils "^2.1.0" - async "^3.2.0" + async "^3.2.3" buffer-crc32 "^0.2.1" readable-stream "^3.6.0" readdir-glob "^1.0.0" tar-stream "^2.2.0" zip-stream "^4.1.0" -are-we-there-yet@~1.1.2: - version "1.1.5" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" - integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== +are-we-there-yet@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz#679df222b278c64f2cdba1175cdc00b0d96164bd" + integrity sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg== dependencies: delegates "^1.0.0" - readable-stream "^2.0.6" + readable-stream "^3.6.0" -argparse@^1.0.10, argparse@^1.0.7: +argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== dependencies: sprintf-js "~1.0.2" -array-flatten@1.1.1, array-flatten@^1.0.0: +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +array-flatten@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" - integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= + integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== array-flatten@3.0.0: version "3.0.0" @@ -421,31 +516,22 @@ arrify@^2.0.0: resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== -as-array@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/as-array/-/as-array-1.0.0.tgz#28a6eeeaa5729f1f4eca2047df5e9de1abda0ed1" - integrity sha1-KKbu6qVynx9OyiBH316d4avaDtE= - dependencies: - lodash.isarguments "2.4.x" - lodash.isobject "^2.4.1" - lodash.values "^2.4.1" - as-array@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/as-array/-/as-array-2.0.0.tgz#4f04805d87f8fce8e511bc2108f8e5e3a287d547" - integrity sha1-TwSAXYf4/OjlEbwhCPjl46KH1Uc= + integrity sha512-1Sd1LrodN0XYxYeZcN1J4xYZvmvTwD5tDWaPUGPIzH1mFsmzsPnVtd2exWhecMjtZk/wYWjNZJiD3b1SLCeJqg== asn1@~0.2.3: - version "0.2.4" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" - integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== + version "0.2.6" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" + integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== dependencies: safer-buffer "~2.1.0" assert-plus@1.0.0, assert-plus@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= + integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== ast-types@^0.13.2: version "0.13.4" @@ -454,37 +540,37 @@ ast-types@^0.13.2: dependencies: tslib "^2.0.1" -async@^1.3.0: - version "1.5.2" - resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" - integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= +async-lock@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/async-lock/-/async-lock-1.3.2.tgz#56668613f91c1c55432b4db73e65c9ced664e789" + integrity sha512-phnXdS3RP7PPcmP6NWWzWMU0sLTeyvtZCxBPpZdkYE3seGLKSQZs9FrmVO/qwypq98FUtWWUEYxziLkdGk5nnA== -async@^2.6.2: - version "2.6.3" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" - integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== +async@^2.6.4: + version "2.6.4" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" + integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== dependencies: lodash "^4.17.14" -async@^3.1.0, async@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/async/-/async-3.2.0.tgz#b3a2685c5ebb641d3de02d161002c60fc9f85720" - integrity sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw== +async@^3.2.3: + version "3.2.4" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" + integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== aws-sign2@~0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= + integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA== aws4@^1.8.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" - integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== + version "1.12.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.12.0.tgz#ce1c9d143389679e253b314241ea9aa5cec980d3" + integrity sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg== balanced-match@^1.0.0: version "1.0.2" @@ -499,7 +585,7 @@ base64-js@^1.3.0, base64-js@^1.3.1: basic-auth-connect@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/basic-auth-connect/-/basic-auth-connect-1.0.0.tgz#fdb0b43962ca7b40456a7c2bb48fe173da2d2122" - integrity sha1-/bC0OWLKe0BFanwrtI/hc9otISI= + integrity sha512-kiV+/DTgVro4aZifY/hwRwALBISViL5NP4aReaR2EVJEObpbUBHIkdJh/YpcoEiYt7nBodZ6U2ajZeZvSxUCCg== basic-auth@~2.0.1: version "2.0.1" @@ -511,34 +597,21 @@ basic-auth@~2.0.1: bcrypt-pbkdf@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" - integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= + integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w== dependencies: tweetnacl "^0.14.3" -big-integer@^1.6.17: - version "1.6.48" - resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.48.tgz#8fd88bd1632cba4a1c8c3e3d7159f08bb95b4b9e" - integrity sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w== - bignumber.js@^9.0.0: - version "9.0.1" - resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.0.1.tgz#8d7ba124c882bfd8e43260c67475518d0689e4e5" - integrity sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA== + version "9.1.1" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.1.tgz#c4df7dc496bd849d4c9464344c1aa74228b4dac6" + integrity sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig== binary-extensions@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== -binary@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/binary/-/binary-0.3.0.tgz#9f60553bc5ce8c3386f3b553cff47462adecaa79" - integrity sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk= - dependencies: - buffers "~0.1.1" - chainsaw "~0.1.0" - -bl@^4.0.3: +bl@^4.0.3, bl@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== @@ -547,45 +620,60 @@ bl@^4.0.3: inherits "^2.0.4" readable-stream "^3.4.0" -blakejs@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.1.0.tgz#69df92ef953aa88ca51a32df6ab1c54a155fc7a5" - integrity sha1-ad+S75U6qIylGjLfarHFShVfx6U= - -bluebird@~3.4.1: - version "3.4.7" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.4.7.tgz#f72d760be09b7f76d08ed8fae98b289a8d05fab3" - integrity sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM= +bluebird@^3.7.2: + version "3.7.2" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== -body-parser@1.19.0, body-parser@^1.18.3, body-parser@^1.19.0: - version "1.19.0" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" - integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== +body-parser@1.20.1: + version "1.20.1" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668" + integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw== dependencies: - bytes "3.1.0" + bytes "3.1.2" content-type "~1.0.4" debug "2.6.9" - depd "~1.1.2" - http-errors "1.7.2" + depd "2.0.0" + destroy "1.2.0" + http-errors "2.0.0" iconv-lite "0.4.24" - on-finished "~2.3.0" - qs "6.7.0" - raw-body "2.4.0" - type-is "~1.6.17" + on-finished "2.4.1" + qs "6.11.0" + raw-body "2.5.1" + type-is "~1.6.18" + unpipe "1.0.0" -boxen@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/boxen/-/boxen-4.2.0.tgz#e411b62357d6d6d36587c8ac3d5d974daa070e64" - integrity sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ== +body-parser@^1.18.3, body-parser@^1.19.0: + version "1.20.2" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.2.tgz#6feb0e21c4724d06de7ff38da36dad4f57a747fd" + integrity sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA== + dependencies: + bytes "3.1.2" + content-type "~1.0.5" + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + http-errors "2.0.0" + iconv-lite "0.4.24" + on-finished "2.4.1" + qs "6.11.0" + raw-body "2.5.2" + type-is "~1.6.18" + unpipe "1.0.0" + +boxen@^5.0.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-5.1.2.tgz#788cb686fc83c1f486dfa8a40c68fc2b831d2b50" + integrity sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ== dependencies: ansi-align "^3.0.0" - camelcase "^5.3.1" - chalk "^3.0.0" - cli-boxes "^2.2.0" - string-width "^4.1.0" - term-size "^2.1.0" - type-fest "^0.8.1" + camelcase "^6.2.0" + chalk "^4.1.0" + cli-boxes "^2.2.1" + string-width "^4.2.2" + type-fest "^0.20.2" widest-line "^3.1.0" + wrap-ansi "^7.0.0" brace-expansion@^1.1.7: version "1.1.11" @@ -595,6 +683,13 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + braces@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" @@ -605,17 +700,12 @@ braces@~3.0.2: buffer-crc32@^0.2.1, buffer-crc32@^0.2.13: version "0.2.13" resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" - integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= + integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== buffer-equal-constant-time@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" - integrity sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk= - -buffer-indexof-polyfill@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz#d2732135c5999c64b277fcf9b1abe3498254729c" - integrity sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A== + integrity sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA== buffer@^5.5.0: version "5.7.1" @@ -625,33 +715,39 @@ buffer@^5.5.0: base64-js "^1.3.1" ieee754 "^1.1.13" -buffers@~0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/buffers/-/buffers-0.1.1.tgz#b24579c3bed4d6d396aeee6d9a8ae7f5482ab7bb" - integrity sha1-skV5w77U1tOWru5tmorn9Ugqt7s= - bytes@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" - integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= + integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw== -bytes@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" - integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== +bytes@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== -cacheable-request@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" - integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== +cacache@^16.1.0: + version "16.1.3" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-16.1.3.tgz#a02b9f34ecfaf9a78c9f4bc16fceb94d5d67a38e" + integrity sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ== dependencies: - clone-response "^1.0.2" - get-stream "^5.1.0" - http-cache-semantics "^4.0.0" - keyv "^3.0.0" - lowercase-keys "^2.0.0" - normalize-url "^4.1.0" - responselike "^1.0.2" + "@npmcli/fs" "^2.1.0" + "@npmcli/move-file" "^2.0.0" + chownr "^2.0.0" + fs-minipass "^2.1.0" + glob "^8.0.1" + infer-owner "^1.0.4" + lru-cache "^7.7.1" + minipass "^3.1.6" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + mkdirp "^1.0.4" + p-map "^4.0.0" + promise-inflight "^1.0.1" + rimraf "^3.0.2" + ssri "^9.0.0" + tar "^6.1.11" + unique-filename "^2.0.0" call-bind@^1.0.0: version "1.0.2" @@ -662,19 +758,19 @@ call-bind@^1.0.0: get-intrinsic "^1.0.2" call-me-maybe@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" - integrity sha1-JtII6onje1y95gJQoV8DHBak1ms= + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.2.tgz#03f964f19522ba643b1b0693acb9152fe2074baa" + integrity sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ== -camelcase@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" - integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== +camelcase@^6.2.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== cardinal@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/cardinal/-/cardinal-2.1.1.tgz#7cc1055d822d212954d07b085dea251cc7bc5505" - integrity sha1-fMEFXYItISlU0HsIXeolHMe8VQU= + integrity sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw== dependencies: ansicolors "~0.3.2" redeyed "~2.1.0" @@ -682,67 +778,47 @@ cardinal@^2.1.1: caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= - -chainsaw@~0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/chainsaw/-/chainsaw-0.1.0.tgz#5eab50b28afe58074d0d58291388828b5e5fbc98" - integrity sha1-XqtQsor+WAdNDVgpE4iCi15fvJg= - dependencies: - traverse ">=0.3.0 <0.4" - -chalk@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" - integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= - dependencies: - ansi-styles "^2.2.1" - escape-string-regexp "^1.0.2" - has-ansi "^2.0.0" - strip-ansi "^3.0.0" - supports-color "^2.0.0" + integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== -chalk@^2.0.1, chalk@^2.4.1, chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== +catharsis@^0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/catharsis/-/catharsis-0.9.0.tgz#40382a168be0e6da308c277d3a2b3eb40c7d2121" + integrity sha512-prMTQVpcns/tzFgFVkVp6ak6RykZyWb3gu8ckUpd6YkTlacOd3DXGJjIpD4Q6zJirizvaiAjSSHlOsA+6sNh2A== dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" + lodash "^4.17.15" -chalk@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" - integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== +chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== dependencies: ansi-styles "^4.1.0" supports-color "^7.1.0" +chalk@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.2.0.tgz#249623b7d66869c673699fb66d65723e54dfcfb3" + integrity sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA== + chardet@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== chokidar@^3.0.2: - version "3.5.1" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" - integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw== + version "3.5.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== dependencies: - anymatch "~3.1.1" + anymatch "~3.1.2" braces "~3.0.2" - glob-parent "~5.1.0" + glob-parent "~5.1.2" is-binary-path "~2.1.0" is-glob "~4.0.1" normalize-path "~3.0.0" - readdirp "~3.5.0" + readdirp "~3.6.0" optionalDependencies: - fsevents "~2.3.1" - -chownr@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" - integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + fsevents "~2.3.2" chownr@^2.0.0: version "2.0.0" @@ -757,34 +833,20 @@ ci-info@^2.0.0: cjson@^0.3.1: version "0.3.3" resolved "https://registry.yarnpkg.com/cjson/-/cjson-0.3.3.tgz#a92d9c786e5bf9b930806329ee05d5d3261b4afa" - integrity sha1-qS2ceG5b+bkwgGMp7gXV0yYbSvo= + integrity sha512-yKNcXi/Mvi5kb1uK0sahubYiyfUO2EUgOp4NcY9+8NX5Xmc+4yeNogZuLFkpLBBj7/QI9MjRUIuXrV9XOw5kVg== dependencies: json-parse-helpfulerror "^1.0.3" -cli-boxes@^2.2.0: +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + +cli-boxes@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== -cli-color@^1.2.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/cli-color/-/cli-color-1.4.0.tgz#7d10738f48526824f8fe7da51857cb0f572fe01f" - integrity sha512-xu6RvQqqrWEo6MPR1eixqGPywhYBHRs653F9jfXB2Hx4jdM/3WxiNE1vppRmxtMIfl16SFYTpYlrnqH/HsK/2w== - dependencies: - ansi-regex "^2.1.1" - d "1" - es5-ext "^0.10.46" - es6-iterator "^2.0.3" - memoizee "^0.4.14" - timers-ext "^0.1.5" - -cli-cursor@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" - integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= - dependencies: - restore-cursor "^2.0.0" - cli-cursor@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" @@ -792,41 +854,52 @@ cli-cursor@^3.1.0: dependencies: restore-cursor "^3.1.0" -cli-spinners@^2.0.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.0.tgz#36c7dc98fb6a9a76bd6238ec3f77e2425627e939" - integrity sha512-t+4/y50K/+4xcCRosKkA7W4gTr1MySvLV0q+PxmG7FJ5g+66ChKurYjxBCjHggHH3HA5Hh9cy+lcUGWDqVH+4Q== +cli-spinners@^2.5.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.0.tgz#5881d0ad96381e117bbe07ad91f2008fe6ffd8db" + integrity sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g== -cli-table@^0.3.1: - version "0.3.6" - resolved "https://registry.yarnpkg.com/cli-table/-/cli-table-0.3.6.tgz#e9d6aa859c7fe636981fd3787378c2a20bce92fc" - integrity sha512-ZkNZbnZjKERTY5NwC2SeMeLeifSPq/pubeRoTpdr3WchLlnZg6hEgvHkK5zL7KNFdd9PmHN8lxrENUwI3cE8vQ== +cli-table3@^0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.3.tgz#61ab765aac156b52f222954ffc607a6f01dbeeb2" + integrity sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg== + dependencies: + string-width "^4.2.0" + optionalDependencies: + "@colors/colors" "1.5.0" + +cli-table@0.3.11: + version "0.3.11" + resolved "https://registry.yarnpkg.com/cli-table/-/cli-table-0.3.11.tgz#ac69cdecbe81dccdba4889b9a18b7da312a9d3ee" + integrity sha512-IqLQi4lO0nIB4tcdTpN4LCB9FI3uqrJZK7RC515EnhZ6qBaglkIgICb1wjeAqpdoOabm1+SuQtkXIPdYC93jhQ== dependencies: colors "1.0.3" -cli-width@^2.0.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48" - integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw== +cli-width@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" + integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== -clone-response@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" - integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= +cli-width@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-4.0.0.tgz#a5622f6a3b0a9e3e711a25f099bf2399f608caf6" + integrity sha512-ZksGS2xpa/bYkNzN3BAw1wEjsLV/ZKOf/CCrJ/QOBsxx6fOARIkwTutxp1XIOIohi6HKmOFjMoK/XaqDVUpEEw== + +cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== dependencies: - mimic-response "^1.0.0" + string-width "^4.2.0" + strip-ansi "^6.0.1" + wrap-ansi "^7.0.0" clone@^1.0.2: version "1.0.4" resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" - integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= + integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== -code-point-at@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" - integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= - -color-convert@^1.9.0, color-convert@^1.9.1: +color-convert@^1.9.3: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== @@ -843,73 +916,76 @@ color-convert@^2.0.1: color-name@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== color-name@^1.0.0, color-name@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -color-string@^1.5.2: - version "1.5.5" - resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.5.tgz#65474a8f0e7439625f3d27a6a19d89fc45223014" - integrity sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg== +color-string@^1.6.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4" + integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== dependencies: color-name "^1.0.0" simple-swizzle "^0.2.2" -color@3.0.x: - version "3.0.0" - resolved "https://registry.yarnpkg.com/color/-/color-3.0.0.tgz#d920b4328d534a3ac8295d68f7bd4ba6c427be9a" - integrity sha512-jCpd5+s0s0t7p3pHQKpnJ0TpQKKdleP71LWcA0aqiljpiuAkOSUFN/dyH8ZwF0hRmFlrIuRhufds1QyEP9EB+w== +color-support@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" + integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== + +color@^3.1.3: + version "3.2.1" + resolved "https://registry.yarnpkg.com/color/-/color-3.2.1.tgz#3544dc198caf4490c3ecc9a790b54fe9ff45e164" + integrity sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA== dependencies: - color-convert "^1.9.1" - color-string "^1.5.2" + color-convert "^1.9.3" + color-string "^1.6.0" + +colorette@^2.0.19: + version "2.0.20" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" + integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== colors@1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" - integrity sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs= - -colors@^1.2.1: - version "1.4.0" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" - integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== + integrity sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw== colorspace@1.1.x: - version "1.1.2" - resolved "https://registry.yarnpkg.com/colorspace/-/colorspace-1.1.2.tgz#e0128950d082b86a2168580796a0aa5d6c68d8c5" - integrity sha512-vt+OoIP2d76xLhjwbBaucYlNSpPsrJWPlBTtwCpQKIu6/CSMutyzX93O/Do0qzpH3YoHEes8YEFXyZ797rEhzQ== + version "1.1.4" + resolved "https://registry.yarnpkg.com/colorspace/-/colorspace-1.1.4.tgz#8d442d1186152f60453bf8070cd66eb364e59243" + integrity sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w== dependencies: - color "3.0.x" + color "^3.1.3" text-hex "1.0.x" -combined-stream@^1.0.6, combined-stream@~1.0.6: +combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== dependencies: delayed-stream "~1.0.0" +commander@^10.0.0: + version "10.0.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" + integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== + commander@^4.0.1: version "4.1.1" resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== -compare-semver@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/compare-semver/-/compare-semver-1.1.0.tgz#7c0a79a27bb80b6c6994445f82958259d3d02153" - integrity sha1-fAp5onu4C2xplERfgpWCWdPQIVM= - dependencies: - semver "^5.0.1" - compress-commons@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/compress-commons/-/compress-commons-4.1.0.tgz#25ec7a4528852ccd1d441a7d4353cd0ece11371b" - integrity sha512-ofaaLqfraD1YRTkrRKPCrGJ1pFeDG/MVCkVVV2FNGeWquSlqw5wOrwOfPQ1xF2u+blpeWASie5EubHz+vsNIgA== + version "4.1.1" + resolved "https://registry.yarnpkg.com/compress-commons/-/compress-commons-4.1.1.tgz#df2a09a7ed17447642bad10a85cc9a19e5c42a7d" + integrity sha512-QLdDLCKNV2dtoTorqgxngQCMA+gWXkM/Nwu7FpeBhk/RdkzimqC3jueb/FDmaZeXh+uby1jkBqE3xArsLBE5wQ== dependencies: buffer-crc32 "^0.2.13" - crc32-stream "^4.0.1" + crc32-stream "^4.0.2" normalize-path "^3.0.0" readable-stream "^3.6.0" @@ -936,7 +1012,15 @@ compression@^1.7.0: concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +config-chain@^1.1.11: + version "1.1.13" + resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4" + integrity sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ== + dependencies: + ini "^1.3.4" + proto-list "~1.2.1" configstore@^5.0.1: version "5.0.1" @@ -950,7 +1034,7 @@ configstore@^5.0.1: write-file-atomic "^3.0.0" xdg-basedir "^4.0.0" -connect@^3.6.2: +connect@^3.7.0: version "3.7.0" resolved "https://registry.yarnpkg.com/connect/-/connect-3.7.0.tgz#5d49348910caa5e07a01800b030d0c35f20484f8" integrity sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ== @@ -960,37 +1044,42 @@ connect@^3.6.2: parseurl "~1.3.3" utils-merge "1.0.1" -console-control-strings@^1.0.0, console-control-strings@~1.1.0: +console-control-strings@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" - integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= + integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== -content-disposition@0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" - integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== +content-disposition@0.5.4: + version "0.5.4" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" + integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== dependencies: - safe-buffer "5.1.2" + safe-buffer "5.2.1" -content-type@^1.0.4, content-type@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" - integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== +content-type@^1.0.4, content-type@~1.0.4, content-type@~1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" + integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== cookie-signature@1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" - integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= + integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== -cookie@0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" - integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== +cookie@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" + integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== -core-util-is@1.0.2, core-util-is@~1.0.0: +core-util-is@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== + +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== cors@^2.8.5: version "2.8.5" @@ -1001,14 +1090,11 @@ cors@^2.8.5: vary "^1" crc-32@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.0.tgz#cb2db6e29b88508e32d9dd0ec1693e7b41a18208" - integrity sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA== - dependencies: - exit-on-epipe "~1.0.1" - printj "~1.1.0" + version "1.2.2" + resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.2.tgz#3cad35a934b8bf71f25ca524b6da51fb7eace2ff" + integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== -crc32-stream@^4.0.1: +crc32-stream@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/crc32-stream/-/crc32-stream-4.0.2.tgz#c922ad22b38395abe9d3870f02fa8134ed709007" integrity sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w== @@ -1034,7 +1120,7 @@ cross-spawn@^6.0.5: shebang-command "^1.2.0" which "^1.2.9" -cross-spawn@^7.0.0, cross-spawn@^7.0.1: +cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -1048,25 +1134,15 @@ crypto-random-string@^2.0.0: resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== -csv-streamify@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/csv-streamify/-/csv-streamify-3.0.4.tgz#4cb614c57e3f299cca17b63fdcb4ad167777f47a" - integrity sha1-TLYUxX4/KZzKF7Y/3LStFnd39Ho= - dependencies: - through2 "2.0.1" - -d@1, d@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" - integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== - dependencies: - es5-ext "^0.10.50" - type "^1.0.1" +csv-parse@^5.0.4: + version "5.4.0" + resolved "https://registry.yarnpkg.com/csv-parse/-/csv-parse-5.4.0.tgz#6793210a4a49a9a74b3fde3f9d00f3f52044fd89" + integrity sha512-JiQosUWiOFgp4hQn0an+SBoV9IKdqzhROM0iiN4LB7UpfJBlsSJlWl9nq4zGgxgMAzHJ6V4t29VAVD+3+2NJAg== dashdash@^1.12.0: version "1.14.1" resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= + integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g== dependencies: assert-plus "^1.0.0" @@ -1082,27 +1158,27 @@ debug@2.6.9: dependencies: ms "2.0.0" -debug@4, debug@4.3.1, debug@^4.1.1: +debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.3: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +debug@4.3.1: version "4.3.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== dependencies: ms "2.1.2" -debug@^3.1.1: +debug@^3.2.7: version "3.2.7" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== dependencies: ms "^2.1.1" -decompress-response@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" - integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= - dependencies: - mimic-response "^1.0.0" - deep-extend@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" @@ -1111,58 +1187,49 @@ deep-extend@^0.6.0: deep-freeze@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/deep-freeze/-/deep-freeze-0.0.1.tgz#3a0b0005de18672819dfd38cd31f91179c893e84" - integrity sha1-OgsABd4YZygZ39OM0x+RF5yJPoQ= + integrity sha512-Z+z8HiAvsGwmjqlphnHW5oz6yWlOwu6EQfFTjmeTWlDeda3FS2yv3jhq35TX/ewmsnqB+RX2IdsIOyjJCQN5tg== deep-is@^0.1.3, deep-is@~0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" - integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== defaults@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" - integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= + version "1.0.4" + resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a" + integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== dependencies: clone "^1.0.2" -defer-to-connect@^1.0.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" - integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== - -degenerator@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/degenerator/-/degenerator-2.2.0.tgz#49e98c11fa0293c5b26edfbb52f15729afcdb254" - integrity sha512-aiQcQowF01RxFI4ZLFMpzyotbQonhNpBao6dkI8JPk5a+hmSjR5ErHp2CQySmQe8os3VBqLCIh87nDBgZXvsmg== +degenerator@^3.0.2: + version "3.0.4" + resolved "https://registry.yarnpkg.com/degenerator/-/degenerator-3.0.4.tgz#07ccf95bc11044a37a6efc2f66029fb636e31f24" + integrity sha512-Z66uPeBfHZAHVmue3HPfyKu2Q0rC2cRxbTOsvmU/po5fvvcx27W4mIu9n0PUlQih4oUYvcG1BsbtVv8x7KDOSw== dependencies: ast-types "^0.13.2" escodegen "^1.8.1" esprima "^4.0.0" + vm2 "^3.9.17" delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== delegates@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= - -depd@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" - integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= + integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== -depd@~2.0.0: +depd@2.0.0, depd@^2.0.0, depd@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== -destroy@^1.0.4, destroy@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" - integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= +destroy@1.2.0, destroy@^1.0.4: + version "1.2.0" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" + integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== dot-prop@^5.2.0: version "5.3.0" @@ -1171,27 +1238,10 @@ dot-prop@^5.2.0: dependencies: is-obj "^2.0.0" -dotenv@^6.1.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-6.2.0.tgz#941c0410535d942c8becf28d3f357dbd9d476064" - integrity sha512-HygQCKUBSFl8wKQZBSemMywRWcEDNidvNbjGVyZu3nbZ8qq9ubiPoGLMdRDpfSrpkkm9BXYFkpKxxFX38o/76w== - -duplexer2@~0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" - integrity sha1-ixLauHjA1p4+eJEFFmKjL8a93ME= - dependencies: - readable-stream "^2.0.2" - -duplexer3@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" - integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= - duplexify@^4.0.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-4.1.1.tgz#7027dc374f157b122a8ae08c2d3ea4d2d953aa61" - integrity sha512-DY3xVEmVHTv1wSzKNbwoU6nVjzI369Y6sPoqfYr0/xlx3IdX2n94xIszTcjPO8W8ZIv0Wb0PXNcjuZyT4wiICA== + version "4.1.2" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-4.1.2.tgz#18b4f8d28289132fa0b9573c898d9f903f81c7b0" + integrity sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw== dependencies: end-of-stream "^1.4.1" inherits "^2.0.3" @@ -1201,7 +1251,7 @@ duplexify@^4.0.0: ecc-jsbn@~0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" - integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= + integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw== dependencies: jsbn "~0.1.0" safer-buffer "^2.1.0" @@ -1216,12 +1266,7 @@ ecdsa-sig-formatter@1.0.11, ecdsa-sig-formatter@^1.0.11: ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= - -emoji-regex@^7.0.1: - version "7.0.3" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" - integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== emoji-regex@^8.0.0: version "8.0.0" @@ -1236,7 +1281,14 @@ enabled@2.0.x: encodeurl@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= + integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== + +encoding@^0.1.13: + version "0.1.13" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" + integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== + dependencies: + iconv-lite "^0.6.2" end-of-stream@^1.1.0, end-of-stream@^1.4.1: version "1.4.4" @@ -1245,46 +1297,25 @@ end-of-stream@^1.1.0, end-of-stream@^1.4.1: dependencies: once "^1.4.0" +entities@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.1.0.tgz#992d3129cf7df6870b96c57858c249a120f8b8b5" + integrity sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w== + env-paths@^2.2.0: version "2.2.1" resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== -es5-ext@^0.10.35, es5-ext@^0.10.46, es5-ext@^0.10.50, es5-ext@^0.10.53, es5-ext@~0.10.14, es5-ext@~0.10.2, es5-ext@~0.10.46: - version "0.10.53" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.53.tgz#93c5a3acfdbef275220ad72644ad02ee18368de1" - integrity sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q== - dependencies: - es6-iterator "~2.0.3" - es6-symbol "~3.1.3" - next-tick "~1.0.0" - -es6-iterator@^2.0.3, es6-iterator@~2.0.3: +err-code@^2.0.2: version "2.0.3" - resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" - integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c= - dependencies: - d "1" - es5-ext "^0.10.35" - es6-symbol "^3.1.1" - -es6-symbol@^3.1.1, es6-symbol@~3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" - integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== - dependencies: - d "^1.0.1" - ext "^1.1.2" + resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" + integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== -es6-weak-map@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.3.tgz#b6da1f16cc2cc0d9be43e6bdbfc5e7dfcdf31d53" - integrity sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA== - dependencies: - d "1" - es5-ext "^0.10.46" - es6-iterator "^2.0.3" - es6-symbol "^3.1.1" +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== escape-goat@^2.0.0: version "2.1.1" @@ -1294,14 +1325,24 @@ escape-goat@^2.0.0: escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== -escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: +escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +escape-string-regexp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" + integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== + +escape-string-regexp@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz#4683126b500b61762f2dbebace1806e8be31b1c8" + integrity sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw== -escodegen@^1.8.1: +escodegen@^1.13.0, escodegen@^1.8.1: version "1.14.3" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw== @@ -1313,6 +1354,20 @@ escodegen@^1.8.1: optionalDependencies: source-map "~0.6.1" +eslint-visitor-keys@^3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz#c22c48f48942d08ca824cc526211ae400478a994" + integrity sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA== + +espree@^9.0.0: + version "9.5.2" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.5.2.tgz#e994e7dc33a082a7a82dceaf12883a829353215b" + integrity sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw== + dependencies: + acorn "^8.8.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.4.1" + esprima@^4.0.0, esprima@^4.0.1, esprima@~4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" @@ -1323,6 +1378,11 @@ estraverse@^4.2.0: resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== +estraverse@^5.1.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + esutils@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" @@ -1331,15 +1391,7 @@ esutils@^2.0.2: etag@~1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= - -event-emitter@^0.3.5: - version "0.3.5" - resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" - integrity sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk= - dependencies: - d "1" - es5-ext "~0.10.14" + integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== event-target-shim@^5.0.0: version "5.0.1" @@ -1351,103 +1403,88 @@ events-listener@^1.1.0: resolved "https://registry.yarnpkg.com/events-listener/-/events-listener-1.1.0.tgz#dd49b4628480eba58fde31b870ee346b3990b349" integrity sha512-Kd3EgYfODHueq6GzVfs/VUolh2EgJsS8hkO3KpnDrxVjU3eq63eXM2ujXkhPP+OkeUOhL8CxdfZbQXzryb5C4g== -execa@*, execa@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/execa/-/execa-4.0.2.tgz#ad87fb7b2d9d564f70d2b62d511bee41d5cbb240" - integrity sha512-QI2zLa6CjGWdiQsmSkZoGtDx2N+cQIGb3yNolGTdjSQzydzLgYYf8LRuagp7S7fPimjcrzUDSUFd/MgzELMi4Q== +execa@*, execa@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-7.1.1.tgz#3eb3c83d239488e7b409d48e8813b76bb55c9c43" + integrity sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q== dependencies: - cross-spawn "^7.0.0" - get-stream "^5.0.0" - human-signals "^1.1.1" - is-stream "^2.0.0" + cross-spawn "^7.0.3" + get-stream "^6.0.1" + human-signals "^4.3.0" + is-stream "^3.0.0" merge-stream "^2.0.0" - npm-run-path "^4.0.0" - onetime "^5.1.0" - signal-exit "^3.0.2" - strip-final-newline "^2.0.0" + npm-run-path "^5.1.0" + onetime "^6.0.0" + signal-exit "^3.0.7" + strip-final-newline "^3.0.0" -exegesis-express@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/exegesis-express/-/exegesis-express-2.0.0.tgz#e33b2ed35e52162ce78613868a771ee4cb5636a7" - integrity sha512-NKvKBsBa2OvU+1BFpWbz3PzoRMhA9q7/wU2oMmQ9X8lPy/FRatADvhlkGO1zYOMgeo35k1ZLO9ZV0uIs9pPnXg== +exegesis-express@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/exegesis-express/-/exegesis-express-4.0.0.tgz#f5f8486f6f0d81739e8e27ce75ce0f61ba3f3578" + integrity sha512-V2hqwTtYRj0bj43K4MCtm0caD97YWkqOUHFMRCBW5L1x9IjyqOEc7Xa4oQjjiFbeFOSQzzwPV+BzXsQjSz08fw== dependencies: - exegesis "^2.0.0" + exegesis "^4.1.0" -exegesis@^2.0.0, exegesis@^2.5.6: - version "2.5.6" - resolved "https://registry.yarnpkg.com/exegesis/-/exegesis-2.5.6.tgz#2a5f198a857b6d820f6bfa0ad41fe29e6fe97446" - integrity sha512-e+YkH/zZTN2njiwrV8tY6tHGDsFu3LyR/YbrqdWvDZaAJ5YGWaBYyd3oX/Y26iGqQc+7jLEKLDTv2UPzjAYL8w== +exegesis@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/exegesis/-/exegesis-4.1.1.tgz#555dfbec663e71d0d71297a9fe13edfdd64f8849" + integrity sha512-PvSqaMOw2absLBgsthtJyVOeCHN4lxQ1dM7ibXb6TfZZJaoXtGELoEAGJRFvdN16+u9kg8oy1okZXRk8VpimWA== dependencies: "@apidevtools/json-schema-ref-parser" "^9.0.3" - ajv "^6.12.2" + ajv "^8.3.0" + ajv-formats "^2.1.0" body-parser "^1.18.3" content-type "^1.0.4" deep-freeze "0.0.1" events-listener "^1.1.0" glob "^7.1.3" - json-ptr "^1.3.1" - json-schema-traverse "^0.4.1" + json-ptr "^3.0.1" + json-schema-traverse "^1.0.0" lodash "^4.17.11" - openapi3-ts "^1.2.0" - promise-breaker "^5.0.0" + openapi3-ts "^3.1.1" + promise-breaker "^6.0.0" pump "^3.0.0" qs "^6.6.0" raw-body "^2.3.3" semver "^7.0.0" -exit-code@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/exit-code/-/exit-code-1.0.2.tgz#ce165811c9f117af6a5f882940b96ae7f9aecc34" - integrity sha1-zhZYEcnxF69qX4gpQLlq5/muzDQ= - -exit-on-epipe@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz#0bdd92e87d5285d267daa8171d0eb06159689692" - integrity sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw== - express@^4.16.4: - version "4.17.1" - resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" - integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== + version "4.18.2" + resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" + integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== dependencies: - accepts "~1.3.7" + accepts "~1.3.8" array-flatten "1.1.1" - body-parser "1.19.0" - content-disposition "0.5.3" + body-parser "1.20.1" + content-disposition "0.5.4" content-type "~1.0.4" - cookie "0.4.0" + cookie "0.5.0" cookie-signature "1.0.6" debug "2.6.9" - depd "~1.1.2" + depd "2.0.0" encodeurl "~1.0.2" escape-html "~1.0.3" etag "~1.8.1" - finalhandler "~1.1.2" + finalhandler "1.2.0" fresh "0.5.2" + http-errors "2.0.0" merge-descriptors "1.0.1" methods "~1.1.2" - on-finished "~2.3.0" + on-finished "2.4.1" parseurl "~1.3.3" path-to-regexp "0.1.7" - proxy-addr "~2.0.5" - qs "6.7.0" + proxy-addr "~2.0.7" + qs "6.11.0" range-parser "~1.2.1" - safe-buffer "5.1.2" - send "0.17.1" - serve-static "1.14.1" - setprototypeof "1.1.1" - statuses "~1.5.0" + safe-buffer "5.2.1" + send "0.18.0" + serve-static "1.15.0" + setprototypeof "1.2.0" + statuses "2.0.1" type-is "~1.6.18" utils-merge "1.0.1" vary "~1.1.2" -ext@^1.1.2: - version "1.4.0" - resolved "https://registry.yarnpkg.com/ext/-/ext-1.4.0.tgz#89ae7a07158f79d35517882904324077e4379244" - integrity sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A== - dependencies: - type "^2.0.0" - extend@^3.0.2, extend@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" @@ -1465,12 +1502,12 @@ external-editor@^3.0.3: extsprintf@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= + integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== extsprintf@^1.2.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" - integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= + version "1.4.1" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" + integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== fast-deep-equal@^3.1.1: version "3.1.3" @@ -1485,36 +1522,24 @@ fast-json-stable-stringify@^2.0.0: fast-levenshtein@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= - -fast-safe-stringify@^2.0.4: - version "2.0.7" - resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz#124aa885899261f68aedb42a7c080de9da608743" - integrity sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA== + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== fast-text-encoding@^1.0.0, fast-text-encoding@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/fast-text-encoding/-/fast-text-encoding-1.0.3.tgz#ec02ac8e01ab8a319af182dae2681213cfe9ce53" - integrity sha512-dtm4QZH9nZtcDt8qJiOH9fcQd1NAgi+K1O2DbE6GG1PPCK/BWfOH3idCTRQ4ImXRUOyopDEgDEnVEE7Y/2Wrig== + version "1.0.6" + resolved "https://registry.yarnpkg.com/fast-text-encoding/-/fast-text-encoding-1.0.6.tgz#0aa25f7f638222e3396d72bf936afcf1d42d6867" + integrity sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w== fast-url-parser@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/fast-url-parser/-/fast-url-parser-1.1.3.tgz#f4af3ea9f34d8a271cf58ad2b3759f431f0b318d" - integrity sha1-9K8+qfNNiicc9YrSs3WfQx8LMY0= + integrity sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ== dependencies: punycode "^1.3.2" fecha@^4.2.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/fecha/-/fecha-4.2.1.tgz#0a83ad8f86ef62a091e22bb5a039cd03d23eecce" - integrity sha512-MMMQ0ludy/nBs1/o0zVOiKTpG7qMbonKUzjJgQFEuvq6INZ1OraKPRAWkBq5vlKLOUMpmNYG1JoN3oDPUQ9m3Q== - -figures@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" - integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= - dependencies: - escape-string-regexp "^1.0.5" + version "4.2.3" + resolved "https://registry.yarnpkg.com/fecha/-/fecha-4.2.3.tgz#4d9ccdbc61e8629b259fdca67e65891448d569fd" + integrity sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw== figures@^3.0.0: version "3.2.0" @@ -1523,15 +1548,23 @@ figures@^3.0.0: dependencies: escape-string-regexp "^1.0.5" +figures@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-5.0.0.tgz#126cd055052dea699f8a54e8c9450e6ecfc44d5f" + integrity sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg== + dependencies: + escape-string-regexp "^5.0.0" + is-unicode-supported "^1.2.0" + file-uri-to-path@2: version "2.0.0" resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-2.0.0.tgz#7b415aeba227d575851e0a5b0c640d7656403fba" integrity sha512-hjPFI8oE/2iQPVe4gbrJ73Pp+Xfub2+WI2LlXDbsaJBwT5wuMh35WNWVYYTpnz895shtwfyutMFLFywpQAFdLg== filesize@^6.1.0: - version "6.2.2" - resolved "https://registry.yarnpkg.com/filesize/-/filesize-6.2.2.tgz#6f94af6661606d7bc55e9a125e944fb52dbf0be7" - integrity sha512-yMYcRU6K9yNRSYZWfrXOuNiQQx0aJiXJsJYAR2R2andmIFo5IJrfqoXw+2h1W8zLRxy612LwwY1sH0zuxUsz0g== + version "6.4.0" + resolved "https://registry.yarnpkg.com/filesize/-/filesize-6.4.0.tgz#914f50471dd66fdca3cefe628bd0cde4ef769bcd" + integrity sha512-mjFIpOHC4jbfcTfoh4rkWpI31mF7viw9ikj/JyLoKzqlwG/YsefKfvYlYhdYdg/9mtK2z1AzgN/0LvVQ3zdlSQ== fill-range@^7.0.1: version "7.0.1" @@ -1540,7 +1573,7 @@ fill-range@^7.0.1: dependencies: to-regex-range "^5.0.1" -finalhandler@1.1.2, finalhandler@~1.1.2: +finalhandler@1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== @@ -1553,79 +1586,85 @@ finalhandler@1.1.2, finalhandler@~1.1.2: statuses "~1.5.0" unpipe "~1.0.0" -firebase-tools@^9.10.0: - version "9.10.0" - resolved "https://registry.yarnpkg.com/firebase-tools/-/firebase-tools-9.10.0.tgz#59fbdeb472188fadf38e5c8bf680ac67b4216a34" - integrity sha512-0HoQEB6K5WiD/p/ca7KxzGZHCxtuVdck888N924TPkjkZ6YxYT8xJtuoKXCLRjJgw4yovJ/LnxZoU66w8JD1cQ== +finalhandler@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" + integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== dependencies: - "@google-cloud/pubsub" "^2.7.0" - "@types/archiver" "^5.1.0" - JSONStream "^1.2.1" + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "2.4.1" + parseurl "~1.3.3" + statuses "2.0.1" + unpipe "~1.0.0" + +firebase-tools@^12.2.1: + version "12.3.1" + resolved "https://registry.yarnpkg.com/firebase-tools/-/firebase-tools-12.3.1.tgz#83f0e1e053230359f9c82790a5b07f0e0e356025" + integrity sha512-d1cJZSDx5XnYVxPyqcAN2VKwfgl9nBqkxjznxBS7FiNtTyPZXtVJhKHf5/mvcPIvHSU9UJPJRtEJScB2lNcWRw== + dependencies: + "@google-cloud/pubsub" "^3.0.1" abort-controller "^3.0.0" + ajv "^6.12.6" archiver "^5.0.0" + async-lock "1.3.2" body-parser "^1.19.0" chokidar "^3.0.2" cjson "^0.3.1" - cli-color "^1.2.0" - cli-table "^0.3.1" + cli-table "0.3.11" + colorette "^2.0.19" commander "^4.0.1" configstore "^5.0.1" cors "^2.8.5" cross-env "^5.1.3" - cross-spawn "^7.0.1" - csv-streamify "^3.0.4" - dotenv "^6.1.0" - exegesis "^2.5.6" - exegesis-express "^2.0.0" - exit-code "^1.0.2" + cross-spawn "^7.0.3" + csv-parse "^5.0.4" + exegesis "^4.1.0" + exegesis-express "^4.0.0" express "^4.16.4" filesize "^6.1.0" - fs-extra "^0.23.1" + form-data "^4.0.0" + fs-extra "^10.1.0" glob "^7.1.2" - google-auth-library "^6.1.3" - inquirer "~6.3.1" + google-auth-library "^7.11.0" + inquirer "^8.2.0" js-yaml "^3.13.1" - jsonwebtoken "^8.5.1" + jsonwebtoken "^9.0.0" leven "^3.1.0" - lodash "^4.17.19" - marked "^0.7.0" - marked-terminal "^3.3.0" + libsodium-wrappers "^0.7.10" + lodash "^4.17.21" + marked "^4.0.14" + marked-terminal "^5.1.1" mime "^2.5.2" minimatch "^3.0.4" morgan "^1.10.0" - node-fetch "^2.6.1" + node-fetch "^2.6.7" open "^6.3.0" - ora "^3.4.0" - portfinder "^1.0.23" + ora "^5.4.1" + p-limit "^3.0.1" + portfinder "^1.0.32" progress "^2.0.3" - proxy-agent "^4.0.0" + proxy-agent "^5.0.0" request "^2.87.0" + retry "^0.13.1" rimraf "^3.0.0" semver "^5.7.1" - superstatic "^7.1.0" - tar "^4.3.0" - tcp-port-used "^1.0.1" - tmp "0.0.33" + stream-chain "^2.2.4" + stream-json "^1.7.3" + strip-ansi "^6.0.1" + superstatic "^9.0.3" + tar "^6.1.11" + tcp-port-used "^1.0.2" + tmp "^0.2.1" triple-beam "^1.3.0" - tweetsodium "0.0.5" - universal-analytics "^0.4.16" - unzipper "^0.10.10" - update-notifier "^4.1.0" - uuid "^3.0.0" + universal-analytics "^0.5.3" + update-notifier-cjs "^5.1.6" + uuid "^8.3.2" winston "^3.0.0" winston-transport "^4.4.0" ws "^7.2.3" -flat-arguments@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/flat-arguments/-/flat-arguments-1.0.2.tgz#9baa780adf0501f282d726c9c6a038dba44ea76f" - integrity sha1-m6p4Ct8FAfKC1ybJxqA426ROp28= - dependencies: - array-flatten "^1.0.0" - as-array "^1.0.0" - lodash.isarguments "^3.0.0" - lodash.isobject "^3.0.0" - fn.name@1.x.x: version "1.1.0" resolved "https://registry.yarnpkg.com/fn.name/-/fn.name-1.1.0.tgz#26cad8017967aea8731bc42961d04a3d5988accc" @@ -1634,7 +1673,16 @@ fn.name@1.x.x: forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= + integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== + +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" form-data@~2.3.2: version "2.3.3" @@ -1645,30 +1693,29 @@ form-data@~2.3.2: combined-stream "^1.0.6" mime-types "^2.1.12" -forwarded@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" - integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= +forwarded@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" + integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== fresh@0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= + integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== fs-constants@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== -fs-extra@^0.23.1: - version "0.23.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.23.1.tgz#6611dba6adf2ab8dc9c69fab37cddf8818157e3d" - integrity sha1-ZhHbpq3yq43Jxp+rN83fiBgVfj0= +fs-extra@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" + integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== dependencies: - graceful-fs "^4.1.2" - jsonfile "^2.1.0" - path-is-absolute "^1.0.0" - rimraf "^2.2.8" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" fs-extra@^8.1.0: version "8.1.0" @@ -1679,14 +1726,7 @@ fs-extra@^8.1.0: jsonfile "^4.0.0" universalify "^0.1.0" -fs-minipass@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" - integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== - dependencies: - minipass "^2.6.0" - -fs-minipass@^2.0.0: +fs-minipass@^2.0.0, fs-minipass@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== @@ -1696,27 +1736,17 @@ fs-minipass@^2.0.0: fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== -fsevents@~2.3.1: +fsevents@~2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== -fstream@^1.0.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045" - integrity sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg== - dependencies: - graceful-fs "^4.1.2" - inherits "~2.0.0" - mkdirp ">=0.5 0" - rimraf "2" - ftp@^0.3.10: version "0.3.10" resolved "https://registry.yarnpkg.com/ftp/-/ftp-0.3.10.tgz#9197d861ad8142f3e63d5a83bfe4c59f7330885d" - integrity sha1-kZfYYa2BQvPmPVqDv+TFn3MwiF0= + integrity sha512-faFVML1aBx2UoDStmLwv2Wptt4vw5x03xxX172nhA5Y5HBshW5JweqQ2W4xL4dezQTG8inJsuYcpPHHU3X5OTQ== dependencies: readable-stream "1.1.x" xregexp "2.0.0" @@ -1726,68 +1756,76 @@ function-bind@^1.1.1: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== -gauge@~2.7.3: - version "2.7.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" - integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= - dependencies: - aproba "^1.0.3" - console-control-strings "^1.0.0" - has-unicode "^2.0.0" - object-assign "^4.1.0" - signal-exit "^3.0.0" - string-width "^1.0.1" - strip-ansi "^3.0.1" - wide-align "^1.1.0" +gauge@^4.0.3: + version "4.0.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-4.0.4.tgz#52ff0652f2bbf607a989793d53b751bef2328dce" + integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg== + dependencies: + aproba "^1.0.3 || ^2.0.0" + color-support "^1.1.3" + console-control-strings "^1.1.0" + has-unicode "^2.0.1" + signal-exit "^3.0.7" + string-width "^4.2.3" + strip-ansi "^6.0.1" + wide-align "^1.1.5" gaxios@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/gaxios/-/gaxios-4.2.0.tgz#33bdc4fc241fc33b8915a4b8c07cfb368b932e46" - integrity sha512-Ms7fNifGv0XVU+6eIyL9LB7RVESeML9+cMvkwGS70xyD6w2Z80wl6RiqiJ9k1KFlJCUTQqFFc8tXmPQfSKUe8g== + version "4.3.3" + resolved "https://registry.yarnpkg.com/gaxios/-/gaxios-4.3.3.tgz#d44bdefe52d34b6435cc41214fdb160b64abfc22" + integrity sha512-gSaYYIO1Y3wUtdfHmjDUZ8LWaxJQpiavzbF5Kq53akSzvmVg0RfyOcFDbO1KJ/KCGRFz2qG+lS81F0nkr7cRJA== dependencies: abort-controller "^3.0.0" extend "^3.0.2" https-proxy-agent "^5.0.0" is-stream "^2.0.0" - node-fetch "^2.3.0" + node-fetch "^2.6.7" + +gaxios@^5.0.0, gaxios@^5.0.1: + version "5.1.0" + resolved "https://registry.yarnpkg.com/gaxios/-/gaxios-5.1.0.tgz#133b77b45532be71eec72012b7e97c2320b6140a" + integrity sha512-aezGIjb+/VfsJtIcHGcBSerNEDdfdHeMros+RbYbGpmonKWQCOVOes0LVZhn1lDtIgq55qq0HaxymIoae3Fl/A== + dependencies: + extend "^3.0.2" + https-proxy-agent "^5.0.0" + is-stream "^2.0.0" + node-fetch "^2.6.7" gcp-metadata@^4.2.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/gcp-metadata/-/gcp-metadata-4.2.1.tgz#31849fbcf9025ef34c2297c32a89a1e7e9f2cd62" - integrity sha512-tSk+REe5iq/N+K+SK1XjZJUrFPuDqGZVzCy2vocIHIGmPlTGsa8owXMJwGkrXr73NO0AzhPW4MF2DEHz7P2AVw== + version "4.3.1" + resolved "https://registry.yarnpkg.com/gcp-metadata/-/gcp-metadata-4.3.1.tgz#fb205fe6a90fef2fd9c85e6ba06e5559ee1eefa9" + integrity sha512-x850LS5N7V1F3UcV7PoupzGsyD6iVwTVvsh3tbXfkctZnBnjW5yu5z1/3k3SehF7TyoTIe78rJs02GMMy+LF+A== dependencies: gaxios "^4.0.0" json-bigint "^1.0.0" +gcp-metadata@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/gcp-metadata/-/gcp-metadata-5.2.0.tgz#b4772e9c5976241f5d3e69c4f446c906d25506ec" + integrity sha512-aFhhvvNycky2QyhG+dcfEdHBF0FRbYcf39s6WNHUDysKSrbJ5vuFbjydxBcmewtXeV248GP8dWT3ByPNxsyHCw== + dependencies: + gaxios "^5.0.0" + json-bigint "^1.0.0" + +get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + get-intrinsic@^1.0.2: - version "1.1.1" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" - integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== + version "1.2.1" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82" + integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== dependencies: function-bind "^1.1.1" has "^1.0.3" - has-symbols "^1.0.1" + has-proto "^1.0.1" + has-symbols "^1.0.3" -get-stream@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" - integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== - dependencies: - pump "^3.0.0" - -get-stream@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.1.0.tgz#01203cdc92597f9b909067c3e656cc1f4d3c4dc9" - integrity sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw== - dependencies: - pump "^3.0.0" - -get-stream@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" - integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== - dependencies: - pump "^3.0.0" +get-stream@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== get-uri@3: version "3.0.2" @@ -1804,11 +1842,11 @@ get-uri@3: getpass@^0.1.1: version "0.1.7" resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= + integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng== dependencies: assert-plus "^1.0.0" -glob-parent@~5.1.0: +glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== @@ -1818,40 +1856,51 @@ glob-parent@~5.1.0: glob-slash@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/glob-slash/-/glob-slash-1.0.0.tgz#fe52efa433233f74a2fe64c7abb9bc848202ab95" - integrity sha1-/lLvpDMjP3Si/mTHq7m8hIICq5U= + integrity sha512-ZwFh34WZhZX28ntCMAP1mwyAJkn8+Omagvt/GvA+JQM/qgT0+MR2NPF3vhvgdshfdvDyGZXs8fPXW84K32Wjuw== glob-slasher@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/glob-slasher/-/glob-slasher-1.0.1.tgz#747a0e5bb222642ee10d3e05443e109493cb0f8e" - integrity sha1-dHoOW7IiZC7hDT4FRD4QlJPLD44= + integrity sha512-5MUzqFiycIKLMD1B0dYOE4hGgLLUZUNGGYO4BExdwT32wUwW3DBOE7lMQars7vB1q43Fb3Tyt+HmgLKsJhDYdg== dependencies: glob-slash "^1.0.0" lodash.isobject "^2.4.1" toxic "^1.0.0" glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: - version "7.1.6" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" - integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" - minimatch "^3.0.4" + minimatch "^3.1.1" once "^1.3.0" path-is-absolute "^1.0.0" -global-dirs@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-2.1.0.tgz#e9046a49c806ff04d6c1825e196c8f0091e8df4d" - integrity sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ== +glob@^8.0.0, glob@^8.0.1: + version "8.1.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" + integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + +global-dirs@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-3.0.1.tgz#0c488971f066baceda21447aecb1a8b911d22485" + integrity sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA== dependencies: - ini "1.3.7" + ini "2.0.0" -google-auth-library@^6.1.1, google-auth-library@^6.1.3: - version "6.1.6" - resolved "https://registry.yarnpkg.com/google-auth-library/-/google-auth-library-6.1.6.tgz#deacdcdb883d9ed6bac78bb5d79a078877fdf572" - integrity sha512-Q+ZjUEvLQj/lrVHF/IQwRo6p3s8Nc44Zk/DALsN+ac3T4HY/g/3rrufkgtl+nZ1TW7DNAw5cTChdVp4apUXVgQ== +google-auth-library@^7.11.0: + version "7.14.1" + resolved "https://registry.yarnpkg.com/google-auth-library/-/google-auth-library-7.14.1.tgz#e3483034162f24cc71b95c8a55a210008826213c" + integrity sha512-5Rk7iLNDFhFeBYc3s8l1CqzbEBcdhwR193RlD4vSNFajIcINKI8W8P0JLmBpwymHqqWbX34pJDQu39cSy/6RsA== dependencies: arrify "^2.0.0" base64-js "^1.3.0" @@ -1863,80 +1912,88 @@ google-auth-library@^6.1.1, google-auth-library@^6.1.3: jws "^4.0.0" lru-cache "^6.0.0" -google-auth-library@^7.0.0, google-auth-library@^7.0.2: - version "7.0.4" - resolved "https://registry.yarnpkg.com/google-auth-library/-/google-auth-library-7.0.4.tgz#610cb010de71435dca47dfbe8dc7fbff23055d2c" - integrity sha512-o8irYyeijEiecTXeoEe8UKNEzV1X+uhR4b2oNdapDMZixypp0J+eHimGOyx5Joa3UAeokGngdtDLXtq9vDqG2Q== +google-auth-library@^8.0.2: + version "8.8.0" + resolved "https://registry.yarnpkg.com/google-auth-library/-/google-auth-library-8.8.0.tgz#2e17494431cef56b571420d483a4debff6c481cd" + integrity sha512-0iJn7IDqObDG5Tu9Tn2WemmJ31ksEa96IyK0J0OZCpTh6CrC6FrattwKX87h3qKVuprCJpdOGKc1Xi8V0kMh8Q== dependencies: arrify "^2.0.0" base64-js "^1.3.0" ecdsa-sig-formatter "^1.0.11" fast-text-encoding "^1.0.0" - gaxios "^4.0.0" - gcp-metadata "^4.2.0" - gtoken "^5.0.4" + gaxios "^5.0.0" + gcp-metadata "^5.2.0" + gtoken "^6.1.0" jws "^4.0.0" lru-cache "^6.0.0" -google-gax@^2.9.2: - version "2.11.2" - resolved "https://registry.yarnpkg.com/google-gax/-/google-gax-2.11.2.tgz#9ef7773b94aaa61c4588fb2408d62e8444995026" - integrity sha512-PNqXv7Oi5XBMgoMWVxLZHUidfMv7cPHrDSDXqLyEd6kY6pqFnVKC8jt2T1df4JPSc2+VLPdeo6L7X9mbdQG8Xw== +google-gax@^3.5.6: + version "3.6.0" + resolved "https://registry.yarnpkg.com/google-gax/-/google-gax-3.6.0.tgz#0f4ae350159737fe0aa289815c0d92838b19f6af" + integrity sha512-2fyb61vWxUonHiArRNJQmE4tx5oY1ni8VPo08fzII409vDSCWG7apDX4qNOQ2GXXT82gLBn3d3P1Dydh7pWjyw== dependencies: - "@grpc/grpc-js" "~1.2.0" - "@grpc/proto-loader" "^0.5.1" + "@grpc/grpc-js" "~1.8.0" + "@grpc/proto-loader" "^0.7.0" "@types/long" "^4.0.0" + "@types/rimraf" "^3.0.2" abort-controller "^3.0.0" duplexify "^4.0.0" fast-text-encoding "^1.0.3" - google-auth-library "^7.0.2" + google-auth-library "^8.0.2" is-stream-ended "^0.1.4" node-fetch "^2.6.1" - protobufjs "^6.10.2" - retry-request "^4.0.0" + object-hash "^3.0.0" + proto3-json-serializer "^1.0.0" + protobufjs "7.2.3" + protobufjs-cli "1.1.1" + retry-request "^5.0.0" -google-p12-pem@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/google-p12-pem/-/google-p12-pem-3.0.3.tgz#673ac3a75d3903a87f05878f3c75e06fc151669e" - integrity sha512-wS0ek4ZtFx/ACKYF3JhyGe5kzH7pgiQ7J5otlumqR9psmWMYc+U9cErKlCYVYHoUaidXHdZ2xbo34kB+S+24hA== - dependencies: - node-forge "^0.10.0" - -got@^9.6.0: - version "9.6.0" - resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" - integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== - dependencies: - "@sindresorhus/is" "^0.14.0" - "@szmarczak/http-timer" "^1.1.2" - cacheable-request "^6.0.0" - decompress-response "^3.3.0" - duplexer3 "^0.1.4" - get-stream "^4.1.0" - lowercase-keys "^1.0.1" - mimic-response "^1.0.1" - p-cancelable "^1.0.0" - to-readable-stream "^1.0.0" - url-parse-lax "^3.0.0" - -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2, graceful-fs@^4.2.3: - version "4.2.6" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" - integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== +google-p12-pem@^3.1.3: + version "3.1.4" + resolved "https://registry.yarnpkg.com/google-p12-pem/-/google-p12-pem-3.1.4.tgz#123f7b40da204de4ed1fbf2fd5be12c047fc8b3b" + integrity sha512-HHuHmkLgwjdmVRngf5+gSmpkyaRI6QmOg77J8tkNBHhNEI62sGHyw4/+UkgyZEI7h84NbWprXDJ+sa3xOYFvTg== + dependencies: + node-forge "^1.3.1" + +google-p12-pem@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/google-p12-pem/-/google-p12-pem-4.0.1.tgz#82841798253c65b7dc2a4e5fe9df141db670172a" + integrity sha512-WPkN4yGtz05WZ5EhtlxNDWPhC4JIic6G8ePitwUWy4l+XPVYec+a0j0Ts47PDtW59y3RwAhUd9/h9ZZ63px6RQ== + dependencies: + node-forge "^1.3.1" + +graceful-fs@4.2.10: + version "4.2.10" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" + integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== + +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0, graceful-fs@^4.2.6: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== gtoken@^5.0.4: - version "5.2.1" - resolved "https://registry.yarnpkg.com/gtoken/-/gtoken-5.2.1.tgz#4dae1fea17270f457954b4a45234bba5fc796d16" - integrity sha512-OY0BfPKe3QnMsY9MzTHTSKn+Vl2l1CcLe6BwDEQj00mbbkl5nyQ/7EUREstg4fQNZ8iYE7br4JJ7TdKeDOPWmw== + version "5.3.2" + resolved "https://registry.yarnpkg.com/gtoken/-/gtoken-5.3.2.tgz#deb7dc876abe002178e0515e383382ea9446d58f" + integrity sha512-gkvEKREW7dXWF8NV8pVrKfW7WqReAmjjkMBh6lNCCGOM4ucS0r0YyXXl0r/9Yj8wcW/32ISkfc8h5mPTDbtifQ== dependencies: gaxios "^4.0.0" - google-p12-pem "^3.0.3" + google-p12-pem "^3.1.3" + jws "^4.0.0" + +gtoken@^6.1.0: + version "6.1.2" + resolved "https://registry.yarnpkg.com/gtoken/-/gtoken-6.1.2.tgz#aeb7bdb019ff4c3ba3ac100bbe7b6e74dce0e8bc" + integrity sha512-4ccGpzz7YAr7lxrT2neugmXQ3hP9ho2gcaityLVkiUecAiwiy60Ii8gRbZeOsXV19fYaRjgBSshs8kXw+NKCPQ== + dependencies: + gaxios "^5.0.1" + google-p12-pem "^4.0.0" jws "^4.0.0" har-schema@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" - integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= + integrity sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q== har-validator@~5.1.3: version "5.1.5" @@ -1946,37 +2003,25 @@ har-validator@~5.1.3: ajv "^6.12.3" har-schema "^2.0.0" -has-ansi@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" - integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= - dependencies: - ansi-regex "^2.0.0" - -has-flag@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" - integrity sha1-6CB68cx7MNRGzHC3NLXovhj4jVE= - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= - has-flag@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-symbols@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" - integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== +has-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" + integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== + +has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== -has-unicode@^2.0.0: +has-unicode@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= + integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== has-yarn@^2.1.0: version "2.1.0" @@ -1990,37 +2035,26 @@ has@^1.0.3: dependencies: function-bind "^1.1.1" -home-dir@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/home-dir/-/home-dir-1.0.0.tgz#2917eb44bdc9072ceda942579543847e3017fe4e" - integrity sha1-KRfrRL3JByztqUJXlUOEfjAX/k4= +heap-js@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/heap-js/-/heap-js-2.3.0.tgz#8eed2cede31ec312aa696eef1d4df0565841f183" + integrity sha512-E5303mzwQ+4j/n2J0rDvEPBN7GKjhis10oHiYOgjxsmxYgqG++hz9NyLLOXttzH8as/DyiBHYpUrJTZWYaMo8Q== -http-cache-semantics@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" - integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== - -http-errors@1.7.2: - version "1.7.2" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" - integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.1" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.0" - -http-errors@1.7.3, http-errors@~1.7.2: - version "1.7.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" - integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== - dependencies: - depd "~1.1.2" +http-cache-semantics@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" + integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== + +http-errors@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== + dependencies: + depd "2.0.0" inherits "2.0.4" - setprototypeof "1.1.1" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.0" + setprototypeof "1.2.0" + statuses "2.0.1" + toidentifier "1.0.1" http-proxy-agent@^4.0.0, http-proxy-agent@^4.0.1: version "4.0.1" @@ -2031,27 +2065,43 @@ http-proxy-agent@^4.0.0, http-proxy-agent@^4.0.1: agent-base "6" debug "4" +http-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" + integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== + dependencies: + "@tootallnate/once" "2" + agent-base "6" + debug "4" + http-signature@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= + integrity sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ== dependencies: assert-plus "^1.0.0" jsprim "^1.2.2" sshpk "^1.7.0" https-proxy-agent@5, https-proxy-agent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" - integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== + version "5.0.1" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== dependencies: agent-base "6" debug "4" -human-signals@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" - integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== +human-signals@^4.3.0: + version "4.3.1" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-4.3.1.tgz#ab7f811e851fca97ffbd2c1fe9a958964de321b2" + integrity sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ== + +humanize-ms@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" + integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== + dependencies: + ms "^2.0.0" iconv-lite@0.4.24, iconv-lite@^0.4.24: version "0.4.24" @@ -2060,6 +2110,13 @@ iconv-lite@0.4.24, iconv-lite@^0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" +iconv-lite@^0.6.2: + version "0.6.3" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + ieee754@^1.1.13: version "1.2.1" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" @@ -2068,83 +2125,92 @@ ieee754@^1.1.13: import-lazy@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" - integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= + integrity sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A== imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +infer-owner@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" + integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== dependencies: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: +inherits@2, inherits@2.0.4, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -inherits@2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= - -ini@1.3.7: - version "1.3.7" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.7.tgz#a09363e1911972ea16d7a8851005d84cf09a9a84" - integrity sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ== +ini@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5" + integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== -ini@~1.3.0: +ini@^1.3.4, ini@~1.3.0: version "1.3.8" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== -inquirer@^7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.2.0.tgz#63ce99d823090de7eb420e4bb05e6f3449aa389a" - integrity sha512-E0c4rPwr9ByePfNlTIB8z51kK1s2n6jrHuJeEHENl/sbq2G/S1auvibgEwNR4uSyiU+PiYHqSwsgGiXjG8p5ZQ== +inquirer@^8.2.0: + version "8.2.5" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.5.tgz#d8654a7542c35a9b9e069d27e2df4858784d54f8" + integrity sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ== dependencies: ansi-escapes "^4.2.1" - chalk "^3.0.0" + chalk "^4.1.1" cli-cursor "^3.1.0" - cli-width "^2.0.0" + cli-width "^3.0.0" external-editor "^3.0.3" figures "^3.0.0" - lodash "^4.17.15" + lodash "^4.17.21" mute-stream "0.0.8" + ora "^5.4.1" run-async "^2.4.0" - rxjs "^6.5.3" + rxjs "^7.5.5" string-width "^4.1.0" strip-ansi "^6.0.0" through "^2.3.6" + wrap-ansi "^7.0.0" -inquirer@~6.3.1: - version "6.3.1" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.3.1.tgz#7a413b5e7950811013a3db491c61d1f3b776e8e7" - integrity sha512-MmL624rfkFt4TG9y/Jvmt8vdmOo836U7Y0Hxr2aFk3RelZEGX4Igk0KabWrcaaZaTv9uzglOqWh1Vly+FAWAXA== +inquirer@^9.2.6: + version "9.2.7" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-9.2.7.tgz#61e00658efa9b4c76a83c2c3cb3ceb88fec70ac7" + integrity sha512-Bf52lnfvNxGPJPltiNO2tLBp3zC339KNlGMqOkW+dsvNikBhcVDK5kqU2lVX2FTPzuXUFX5WJDlsw//w3ZwoTw== dependencies: - ansi-escapes "^3.2.0" - chalk "^2.4.2" - cli-cursor "^2.1.0" - cli-width "^2.0.0" + ansi-escapes "^4.3.2" + chalk "^5.2.0" + cli-cursor "^3.1.0" + cli-width "^4.0.0" external-editor "^3.0.3" - figures "^2.0.0" - lodash "^4.17.11" - mute-stream "0.0.7" - run-async "^2.2.0" - rxjs "^6.4.0" - string-width "^2.1.0" - strip-ansi "^5.1.0" + figures "^5.0.0" + lodash "^4.17.21" + mute-stream "1.0.0" + ora "^5.4.1" + run-async "^3.0.0" + rxjs "^7.8.1" + string-width "^4.2.3" + strip-ansi "^6.0.1" through "^2.3.6" + wrap-ansi "^6.0.1" -install-artifact-from-github@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/install-artifact-from-github/-/install-artifact-from-github-1.2.0.tgz#adcbd123c16a4337ec44ea76d0ebf253cc16b074" - integrity sha512-3OxCPcY55XlVM3kkfIpeCgmoSKnMsz2A3Dbhsq0RXpIknKQmrX1YiznCeW9cD2ItFmDxziA3w6Eg8d80AoL3oA== +install-artifact-from-github@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/install-artifact-from-github/-/install-artifact-from-github-1.3.3.tgz#57d89bacfa0f47d7307fe41b6247cda9f9a8079c" + integrity sha512-x79SL0d8WOi1ZjXSTUqqs0GPQZ92YArJAN9O46wgU9wdH2U9ecyyhB9YGDbPe2OLV4ptmt6AZYRQZ2GydQZosQ== ip-regex@^4.1.0: version "4.3.0" @@ -2152,9 +2218,14 @@ ip-regex@^4.1.0: integrity sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q== ip@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" - integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= + version "1.1.8" + resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.8.tgz#ae05948f6b075435ed3307acce04629da8cdbf48" + integrity sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg== + +ip@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da" + integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ== ipaddr.js@1.9.1: version "1.9.1" @@ -2183,19 +2254,7 @@ is-ci@^2.0.0: is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= - -is-fullwidth-code-point@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= - dependencies: - number-is-nan "^1.0.0" - -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== is-fullwidth-code-point@^3.0.0: version "3.0.0" @@ -2203,24 +2262,34 @@ is-fullwidth-code-point@^3.0.0: integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== is-glob@^4.0.1, is-glob@~4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" - integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: is-extglob "^2.1.1" -is-installed-globally@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.3.2.tgz#fd3efa79ee670d1187233182d5b0a1dd00313141" - integrity sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g== +is-installed-globally@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.4.0.tgz#9a0fd407949c30f86eb6959ef1b7994ed0b7b520" + integrity sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ== dependencies: - global-dirs "^2.0.1" - is-path-inside "^3.0.1" + global-dirs "^3.0.0" + is-path-inside "^3.0.2" -is-npm@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-4.0.0.tgz#c90dd8380696df87a7a6d823c20d0b12bbe3c84d" - integrity sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig== +is-interactive@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" + integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== + +is-lambda@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" + integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== + +is-npm@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-5.0.0.tgz#43e8d65cc56e1b67f8d47262cf667099193f45a8" + integrity sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA== is-number@^7.0.0: version "7.0.0" @@ -2232,30 +2301,40 @@ is-obj@^2.0.0: resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== -is-path-inside@^3.0.1: +is-path-inside@^3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== -is-promise@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1" - integrity sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ== - is-stream-ended@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/is-stream-ended/-/is-stream-ended-0.1.4.tgz#f50224e95e06bce0e356d440a4827cd35b267eda" integrity sha512-xj0XPvmr7bQFTvirqnFr50o0hQIh6ZItDqloxt5aJrR4NQsYeSsyFQERYGCAzfindAcnKjINnwEEgLx4IqVzQw== is-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" - integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +is-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" + integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== is-typedarray@^1.0.0, is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== + +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== + +is-unicode-supported@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz#d824984b616c292a2e198207d4a609983842f714" + integrity sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ== is-url@^1.2.2, is-url@^1.2.4: version "1.2.4" @@ -2265,7 +2344,7 @@ is-url@^1.2.2, is-url@^1.2.4: is-wsl@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" - integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= + integrity sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw== is-yarn-global@^0.3.0: version "0.3.0" @@ -2273,9 +2352,9 @@ is-yarn-global@^0.3.0: integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw== is2@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/is2/-/is2-2.0.6.tgz#094f887248b49ba7ce278f8c39f85a70927bb5de" - integrity sha512-+Z62OHOjA6k2sUDOKXoZI3EXv7Fb1K52jpTBLbkfx62bcUeSsrTBLhEquCRDKTx0XE5XbHcG/S2vrtE3lnEDsQ== + version "2.0.9" + resolved "https://registry.yarnpkg.com/is2/-/is2-2.0.9.tgz#ff63b441f90de343fa8fac2125ee170da8e8240d" + integrity sha512-rZkHeBn9Zzq52sd9IUIV3a5mfwBY+o2HePMh0wkGBM4z4qjvy2GwVxQ6nNXSfw6MmVP6gf1QIlWjiOavhM3x5g== dependencies: deep-is "^0.1.3" ip-regex "^4.1.0" @@ -2284,32 +2363,40 @@ is2@^2.0.6: isarray@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= + integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +isomorphic-fetch@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-3.0.0.tgz#0267b005049046d2421207215d45d6a262b8b8b4" + integrity sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA== + dependencies: + node-fetch "^2.6.1" + whatwg-fetch "^3.4.1" isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= + integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== jju@^1.1.0: version "1.4.0" resolved "https://registry.yarnpkg.com/jju/-/jju-1.4.0.tgz#a3abe2718af241a2b2904f84a625970f389ae32a" - integrity sha1-o6vicYryQaKykE+EpiWXDzia4yo= + integrity sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA== join-path@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/join-path/-/join-path-1.1.1.tgz#10535a126d24cbd65f7ffcdf15ef2e631076b505" - integrity sha1-EFNaEm0ky9Zff/zfFe8uYxB2tQU= + integrity sha512-jnt9OC34sLXMLJ6YfPQ2ZEKrR9mB5ZbSnQb4LPaOx1c5rTzxpR33L18jjp0r75mGGTJmsil3qwN1B5IBeTnSSA== dependencies: as-array "^2.0.0" url-join "0.0.1" @@ -2323,10 +2410,45 @@ js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +js2xmlparser@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/js2xmlparser/-/js2xmlparser-4.0.2.tgz#2a1fdf01e90585ef2ae872a01bc169c6a8d5e60a" + integrity sha512-6n4D8gLlLf1n5mNLQPRfViYzu9RATblzPEtm1SthMX1Pjao0r9YI9nw7ZIfRxQMERS87mcswrg+r/OYrPRX6jA== + dependencies: + xmlcreate "^2.0.4" + jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= + integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== + +jsdoc@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/jsdoc/-/jsdoc-4.0.2.tgz#a1273beba964cf433ddf7a70c23fd02c3c60296e" + integrity sha512-e8cIg2z62InH7azBBi3EsSEqrKx+nUtAS5bBcYTSpZFA+vhNPyhv8PTFZ0WsjOPDj04/dOLlm08EDcQJDqaGQg== + dependencies: + "@babel/parser" "^7.20.15" + "@jsdoc/salty" "^0.2.1" + "@types/markdown-it" "^12.2.3" + bluebird "^3.7.2" + catharsis "^0.9.0" + escape-string-regexp "^2.0.0" + js2xmlparser "^4.0.2" + klaw "^3.0.0" + markdown-it "^12.3.2" + markdown-it-anchor "^8.4.1" + marked "^4.0.10" + mkdirp "^1.0.4" + requizzle "^0.2.3" + strip-json-comments "^3.1.0" + underscore "~1.13.2" json-bigint@^1.0.0: version "1.0.0" @@ -2335,83 +2457,72 @@ json-bigint@^1.0.0: dependencies: bignumber.js "^9.0.0" -json-buffer@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" - integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= - json-parse-helpfulerror@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/json-parse-helpfulerror/-/json-parse-helpfulerror-1.0.3.tgz#13f14ce02eed4e981297b64eb9e3b932e2dd13dc" - integrity sha1-E/FM4C7tTpgSl7ZOueO5MuLdE9w= + integrity sha512-XgP0FGR77+QhUxjXkwOMkC94k3WtqEBfcnjWqhRd82qTat4SWKRE+9kUnynz/shm3I4ea2+qISvTIeGTNU7kJg== dependencies: jju "^1.1.0" -json-ptr@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/json-ptr/-/json-ptr-1.3.2.tgz#17f45b322a843b1f2fbcc9b45132bd9b3ba8cd38" - integrity sha512-tFH40YQ+lG7mgYYM1kGZOhQngO4SbOEHZJlA4W+NtetWZ20EUU3BPU+30uWRKumuAJoSo5eqrsXD2h72ioS8ew== - dependencies: - tslib "^2.0.0" +json-ptr@^3.0.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/json-ptr/-/json-ptr-3.1.1.tgz#184c3d48db659fa9bbc1519f7db6f390ddffb659" + integrity sha512-SiSJQ805W1sDUCD1+/t1/1BIrveq2Fe9HJqENxZmMCILmrPI7WhS/pePpIOx85v6/H2z1Vy7AI08GV2TzfXocg== json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== -json-schema@0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" - integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + +json-schema@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" + integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= - -jsonfile@^2.1.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" - integrity sha1-NzaitCi4e72gzIO1P6PWM6NcKug= - optionalDependencies: - graceful-fs "^4.1.6" + integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== jsonfile@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== optionalDependencies: graceful-fs "^4.1.6" -jsonparse@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" - integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" -jsonwebtoken@^8.5.1: - version "8.5.1" - resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz#00e71e0b8df54c2121a1f26137df2280673bcc0d" - integrity sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w== +jsonwebtoken@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz#d0faf9ba1cc3a56255fe49c0961a67e520c1926d" + integrity sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw== dependencies: jws "^3.2.2" - lodash.includes "^4.3.0" - lodash.isboolean "^3.0.3" - lodash.isinteger "^4.0.4" - lodash.isnumber "^3.0.3" - lodash.isplainobject "^4.0.6" - lodash.isstring "^4.0.1" - lodash.once "^4.0.0" + lodash "^4.17.21" ms "^2.1.1" - semver "^5.6.0" + semver "^7.3.8" jsprim@^1.2.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" - integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= + version "1.4.2" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.2.tgz#712c65533a15c878ba59e9ed5f0e26d5b77c5feb" + integrity sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw== dependencies: assert-plus "1.0.0" extsprintf "1.3.0" - json-schema "0.2.3" + json-schema "0.4.0" verror "1.10.0" jwa@^1.4.1: @@ -2448,29 +2559,22 @@ jws@^4.0.0: jwa "^2.0.0" safe-buffer "^5.0.1" -keyv@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" - integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== +klaw@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/klaw/-/klaw-3.0.0.tgz#b11bec9cf2492f06756d6e809ab73a2910259146" + integrity sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g== dependencies: - json-buffer "3.0.0" + graceful-fs "^4.1.9" kuler@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/kuler/-/kuler-2.0.0.tgz#e2c570a3800388fb44407e851531c1d670b061b3" integrity sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A== -latest-version@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face" - integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA== - dependencies: - package-json "^6.3.0" - lazystream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.0.tgz#f6995fe0f820392f61396be89462407bb77168e4" - integrity sha1-9plf4PggOS9hOWvolGJAe7dxaOQ= + version "1.0.1" + resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.1.tgz#494c831062f1f9408251ec44db1cba29242a2638" + integrity sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw== dependencies: readable-stream "^2.0.5" @@ -2482,162 +2586,100 @@ leven@^3.1.0: levn@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= + integrity sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA== dependencies: prelude-ls "~1.1.2" type-check "~0.3.2" -listenercount@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/listenercount/-/listenercount-1.0.1.tgz#84c8a72ab59c4725321480c975e6508342e70937" - integrity sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc= +libsodium-wrappers@^0.7.10: + version "0.7.11" + resolved "https://registry.yarnpkg.com/libsodium-wrappers/-/libsodium-wrappers-0.7.11.tgz#53bd20606dffcc54ea2122133c7da38218f575f7" + integrity sha512-SrcLtXj7BM19vUKtQuyQKiQCRJPgbpauzl3s0rSwD+60wtHqSUuqcoawlMDheCJga85nKOQwxNYQxf/CKAvs6Q== + dependencies: + libsodium "^0.7.11" -lodash._isnative@~2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/lodash._isnative/-/lodash._isnative-2.4.1.tgz#3ea6404b784a7be836c7b57580e1cdf79b14832c" - integrity sha1-PqZAS3hKe+g2x7V1gOHN95sUgyw= +libsodium@^0.7.11: + version "0.7.11" + resolved "https://registry.yarnpkg.com/libsodium/-/libsodium-0.7.11.tgz#cd10aae7bcc34a300cc6ad0ac88fcca674cfbc2e" + integrity sha512-WPfJ7sS53I2s4iM58QxY3Inb83/6mjlYgcmZs7DJsvDlnmVUwNinBCi5vBT43P6bHRy01O4zsMU2CoVR6xJ40A== + +linkify-it@^3.0.1: + version "3.0.3" + resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-3.0.3.tgz#a98baf44ce45a550efb4d49c769d07524cc2fa2e" + integrity sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ== + dependencies: + uc.micro "^1.0.1" lodash._objecttypes@~2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/lodash._objecttypes/-/lodash._objecttypes-2.4.1.tgz#7c0b7f69d98a1f76529f890b0cdb1b4dfec11c11" - integrity sha1-fAt/admKH3ZSn4kLDNsbTf7BHBE= - -lodash._shimkeys@~2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/lodash._shimkeys/-/lodash._shimkeys-2.4.1.tgz#6e9cc9666ff081f0b5a6c978b83e242e6949d203" - integrity sha1-bpzJZm/wgfC1psl4uD4kLmlJ0gM= - dependencies: - lodash._objecttypes "~2.4.1" + integrity sha512-XpqGh1e7hhkOzftBfWE7zt+Yn9mVHFkDhicVttvKLsoCMLVVL+xTQjfjB4X4vtznauxv0QZ5ZAeqjvat0dh62Q== lodash.camelcase@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" - integrity sha1-soqmKIorn8ZRA1x3EfZathkDMaY= + integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== lodash.defaults@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" - integrity sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw= + integrity sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ== lodash.difference@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.difference/-/lodash.difference-4.5.0.tgz#9ccb4e505d486b91651345772885a2df27fd017c" - integrity sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw= + integrity sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA== lodash.flatten@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" - integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8= - -lodash.includes@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f" - integrity sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8= - -lodash.isarguments@2.4.x: - version "2.4.1" - resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-2.4.1.tgz#4931a9c08253adf091ae7ca192258a973876ecca" - integrity sha1-STGpwIJTrfCRrnyhkiWKlzh27Mo= - -lodash.isarguments@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" - integrity sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo= - -lodash.isboolean@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6" - integrity sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY= - -lodash.isinteger@^4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343" - integrity sha1-YZwK89A/iwTDH1iChAt3sRzWg0M= - -lodash.isnumber@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc" - integrity sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w= + integrity sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g== -lodash.isobject@^2.4.1, lodash.isobject@~2.4.1: +lodash.isobject@^2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/lodash.isobject/-/lodash.isobject-2.4.1.tgz#5a2e47fe69953f1ee631a7eba1fe64d2d06558f5" - integrity sha1-Wi5H/mmVPx7mMafrof5k0tBlWPU= + integrity sha512-sTebg2a1PoicYEZXD5PBdQcTlIJ6hUslrlWr7iV0O7n+i4596s2NQ9I5CaZ5FbXSfya/9WQsrYLANUJv9paYVA== dependencies: lodash._objecttypes "~2.4.1" -lodash.isobject@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/lodash.isobject/-/lodash.isobject-3.0.2.tgz#3c8fb8d5b5bf4bf90ae06e14f2a530a4ed935e1d" - integrity sha1-PI+41bW/S/kK4G4U8qUwpO2TXh0= - lodash.isplainobject@^4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" - integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs= - -lodash.isstring@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" - integrity sha1-1SfftUVuynzJu5XV2ur4i6VKVFE= - -lodash.keys@~2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-2.4.1.tgz#48dea46df8ff7632b10d706b8acb26591e2b3727" - integrity sha1-SN6kbfj/djKxDXBrissmWR4rNyc= - dependencies: - lodash._isnative "~2.4.1" - lodash._shimkeys "~2.4.1" - lodash.isobject "~2.4.1" - -lodash.once@^4.0.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" - integrity sha1-DdOXEhPHxW34gJd9UEyI+0cal6w= + integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== lodash.snakecase@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz#39d714a35357147837aefd64b5dcbb16becd8f8d" - integrity sha1-OdcUo1NXFHg3rv1ktdy7Fr7Nj40= - -lodash.toarray@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.toarray/-/lodash.toarray-4.4.0.tgz#24c4bfcd6b2fba38bfd0594db1179d8e9b656561" - integrity sha1-JMS/zWsvuji/0FlNsRedjptlZWE= + integrity sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw== lodash.union@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88" - integrity sha1-SLtQiECfFvGCFmZkHETdGqrjzYg= - -lodash.values@^2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/lodash.values/-/lodash.values-2.4.1.tgz#abf514436b3cb705001627978cbcf30b1280eea4" - integrity sha1-q/UUQ2s8twUAFieXjLzzCxKA7qQ= - dependencies: - lodash.keys "~2.4.1" + integrity sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw== -lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.5: +lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== -log-symbols@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" - integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== +log-symbols@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== dependencies: - chalk "^2.0.1" + chalk "^4.1.0" + is-unicode-supported "^0.1.0" -logform@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/logform/-/logform-2.2.0.tgz#40f036d19161fc76b68ab50fdc7fe495544492f2" - integrity sha512-N0qPlqfypFx7UHNn4B3lzS/b0uLqt2hmuoa+PpuXNYgozdJYAyauF5Ky0BWVjrxDlMWiT3qN4zPq3vVAfZy7Yg== +logform@^2.3.2, logform@^2.4.0: + version "2.5.1" + resolved "https://registry.yarnpkg.com/logform/-/logform-2.5.1.tgz#44c77c34becd71b3a42a3970c77929e52c6ed48b" + integrity sha512-9FyqAm9o9NKKfiAKfZoYo9bGXXuwMkxQiQttkT4YjjVtQVIQtK6LmVtlxmCaFswo6N4AfEkHqZTV0taDtPotNg== dependencies: - colors "^1.2.1" - fast-safe-stringify "^2.0.4" + "@colors/colors" "1.5.0" + "@types/triple-beam" "^1.3.2" fecha "^4.2.0" ms "^2.1.1" + safe-stable-stringify "^2.3.1" triple-beam "^1.3.0" long@^4.0.0: @@ -2645,15 +2687,10 @@ long@^4.0.0: resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA== -lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" - integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== - -lowercase-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" - integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== +long@^5.0.0: + version "5.2.3" + resolved "https://registry.yarnpkg.com/long/-/long-5.2.3.tgz#a3ba97f3877cf1d778eccbcb048525ebb77499e1" + integrity sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q== lru-cache@^5.1.1: version "5.1.1" @@ -2669,12 +2706,10 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" -lru-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/lru-queue/-/lru-queue-0.1.0.tgz#2738bd9f0d3cf4f84490c5736c48699ac632cda3" - integrity sha1-Jzi9nw089PhEkMVzbEhpmsYyzaM= - dependencies: - es5-ext "~0.10.2" +lru-cache@^7.7.1: + version "7.18.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89" + integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== make-dir@^3.0.0: version "3.1.0" @@ -2683,46 +2718,75 @@ make-dir@^3.0.0: dependencies: semver "^6.0.0" -marked-terminal@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/marked-terminal/-/marked-terminal-3.3.0.tgz#25ce0c0299285998c7636beaefc87055341ba1bd" - integrity sha512-+IUQJ5VlZoAFsM5MHNT7g3RHSkA3eETqhRCdXv4niUMAKHQ7lb1yvAcuGPmm4soxhmtX13u4Li6ZToXtvSEH+A== +make-fetch-happen@^10.0.3: + version "10.2.1" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz#f5e3835c5e9817b617f2770870d9492d28678164" + integrity sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w== + dependencies: + agentkeepalive "^4.2.1" + cacache "^16.1.0" + http-cache-semantics "^4.1.0" + http-proxy-agent "^5.0.0" + https-proxy-agent "^5.0.0" + is-lambda "^1.0.1" + lru-cache "^7.7.1" + minipass "^3.1.6" + minipass-collect "^1.0.2" + minipass-fetch "^2.0.3" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + negotiator "^0.6.3" + promise-retry "^2.0.1" + socks-proxy-agent "^7.0.0" + ssri "^9.0.0" + +markdown-it-anchor@^8.4.1: + version "8.6.7" + resolved "https://registry.yarnpkg.com/markdown-it-anchor/-/markdown-it-anchor-8.6.7.tgz#ee6926daf3ad1ed5e4e3968b1740eef1c6399634" + integrity sha512-FlCHFwNnutLgVTflOYHPW2pPcl2AACqVzExlkGQNsi4CJgqOHN7YTgDd4LuhgN1BFO3TS0vLAruV1Td6dwWPJA== + +markdown-it@^12.3.2: + version "12.3.2" + resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-12.3.2.tgz#bf92ac92283fe983fe4de8ff8abfb5ad72cd0c90" + integrity sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg== + dependencies: + argparse "^2.0.1" + entities "~2.1.0" + linkify-it "^3.0.1" + mdurl "^1.0.1" + uc.micro "^1.0.5" + +marked-terminal@^5.1.1: + version "5.2.0" + resolved "https://registry.yarnpkg.com/marked-terminal/-/marked-terminal-5.2.0.tgz#c5370ec2bae24fb2b34e147b731c94fa933559d3" + integrity sha512-Piv6yNwAQXGFjZSaiNljyNFw7jKDdGrw70FSbtxEyldLsyeuV5ZHm/1wW++kWbrOF1VPnUgYOhB2oLL0ZpnekA== dependencies: - ansi-escapes "^3.1.0" + ansi-escapes "^6.2.0" cardinal "^2.1.1" - chalk "^2.4.1" - cli-table "^0.3.1" - node-emoji "^1.4.1" - supports-hyperlinks "^1.0.1" + chalk "^5.2.0" + cli-table3 "^0.6.3" + node-emoji "^1.11.0" + supports-hyperlinks "^2.3.0" -marked@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/marked/-/marked-0.7.0.tgz#b64201f051d271b1edc10a04d1ae9b74bb8e5c0e" - integrity sha512-c+yYdCZJQrsRjTPhUx7VKkApw9bwDkNbHUKo1ovgcfDjb2kc8rLuRbIFyXL5WOEUwzSSKo3IXpph2K6DqB/KZg== +marked@^4.0.10, marked@^4.0.14: + version "4.3.0" + resolved "https://registry.yarnpkg.com/marked/-/marked-4.3.0.tgz#796362821b019f734054582038b116481b456cf3" + integrity sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A== + +mdurl@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" + integrity sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g== media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= - -memoizee@^0.4.14: - version "0.4.15" - resolved "https://registry.yarnpkg.com/memoizee/-/memoizee-0.4.15.tgz#e6f3d2da863f318d02225391829a6c5956555b72" - integrity sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ== - dependencies: - d "^1.0.1" - es5-ext "^0.10.53" - es6-weak-map "^2.0.3" - event-emitter "^0.3.5" - is-promise "^2.2.2" - lru-queue "^0.1.0" - next-tick "^1.1.0" - timers-ext "^0.1.7" + integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== merge-descriptors@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" - integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= + integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== merge-stream@^2.0.0: version "2.0.0" @@ -2732,19 +2796,19 @@ merge-stream@^2.0.0: methods@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= + integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== -mime-db@1.47.0, "mime-db@>= 1.43.0 < 2": - version "1.47.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.47.0.tgz#8cb313e59965d3c05cfbf898915a267af46a335c" - integrity sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw== +mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== -mime-types@^2.1.12, mime-types@^2.1.16, mime-types@~2.1.19, mime-types@~2.1.24: - version "2.1.30" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.30.tgz#6e7be8b4c479825f85ed6326695db73f9305d62d" - integrity sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg== +mime-types@^2.1.12, mime-types@^2.1.35, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== dependencies: - mime-db "1.47.0" + mime-db "1.52.0" mime@1.6.0: version "1.6.0" @@ -2752,60 +2816,98 @@ mime@1.6.0: integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== mime@^2.5.2: - version "2.5.2" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.5.2.tgz#6e3dc6cc2b9510643830e5f19d5cb753da5eeabe" - integrity sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg== - -mimic-fn@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" - integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== + version "2.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367" + integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== -mimic-response@^1.0.0, mimic-response@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" - integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== +mimic-fn@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" + integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== -minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== +minimatch@^3.0.4, minimatch@^3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" -minimist@^1.1.0, minimist@^1.2.0, minimist@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" - integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== +minimatch@^5.0.1, minimatch@^5.1.0: + version "5.1.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" -minipass@^2.6.0, minipass@^2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" - integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== +minimatch@^6.1.6: + version "6.2.0" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-6.2.0.tgz#2b70fd13294178c69c04dfc05aebdb97a4e79e42" + integrity sha512-sauLxniAmvnhhRjFwPNnJKaPFYyddAgbYdeUpHULtCT/GhzdCx/MDNy+Y40lBxTQUrMzDE8e0S43Z5uqfO0REg== dependencies: - safe-buffer "^5.1.2" - yallist "^3.0.0" + brace-expansion "^2.0.1" -minipass@^3.0.0: - version "3.1.3" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.3.tgz#7d42ff1f39635482e15f9cdb53184deebd5815fd" - integrity sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg== +minimist@^1.2.0, minimist@^1.2.6: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +minipass-collect@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" + integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== dependencies: - yallist "^4.0.0" + minipass "^3.0.0" -minizlib@^1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" - integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== +minipass-fetch@^2.0.3: + version "2.1.2" + resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-2.1.2.tgz#95560b50c472d81a3bc76f20ede80eaed76d8add" + integrity sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA== + dependencies: + minipass "^3.1.6" + minipass-sized "^1.0.3" + minizlib "^2.1.2" + optionalDependencies: + encoding "^0.1.13" + +minipass-flush@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" + integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== + dependencies: + minipass "^3.0.0" + +minipass-pipeline@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" + integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== + dependencies: + minipass "^3.0.0" + +minipass-sized@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" + integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== + dependencies: + minipass "^3.0.0" + +minipass@^3.0.0, minipass@^3.1.1, minipass@^3.1.6: + version "3.3.6" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" + integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== dependencies: - minipass "^2.9.0" + yallist "^4.0.0" + +minipass@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" + integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== -minizlib@^2.1.1: +minizlib@^2.1.1, minizlib@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== @@ -2813,14 +2915,14 @@ minizlib@^2.1.1: minipass "^3.0.0" yallist "^4.0.0" -"mkdirp@>=0.5 0", mkdirp@^0.5.5: - version "0.5.5" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" - integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== +mkdirp@^0.5.6: + version "0.5.6" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== dependencies: - minimist "^1.2.5" + minimist "^1.2.6" -mkdirp@^1.0.3: +mkdirp@^1.0.3, mkdirp@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== @@ -2839,166 +2941,143 @@ morgan@^1.10.0, morgan@^1.8.2: ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= - -ms@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" - integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== ms@2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@^2.1.1: +ms@2.1.3, ms@^2.0.0, ms@^2.1.1: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== -mute-stream@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" - integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= - mute-stream@0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== -nan@^2.14.2: - version "2.14.2" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" - integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== +mute-stream@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-1.0.0.tgz#e31bd9fe62f0aed23520aa4324ea6671531e013e" + integrity sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA== -nash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/nash/-/nash-3.0.0.tgz#bced3a0cb8434c2ad30d1a0d567cfc0c37128eea" - integrity sha512-M5SahEycXUmko3zOvsBkF6p94CWLhnyy9hfpQ9Qzp+rQkQ8D1OaTlfTl1OBWktq9Fak3oDXKU+ev7tiMaMu+1w== - dependencies: - async "^1.3.0" - flat-arguments "^1.0.0" - lodash "^4.17.5" - minimist "^1.1.0" +nan@^2.17.0: + version "2.17.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.17.0.tgz#c0150a2368a182f033e9aa5195ec76ea41a199cb" + integrity sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ== -negotiator@0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" - integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== +negotiator@0.6.3, negotiator@^0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== -netmask@^2.0.1: +netmask@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/netmask/-/netmask-2.0.2.tgz#8b01a07644065d536383835823bc52004ebac5e7" integrity sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg== -next-tick@1, next-tick@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb" - integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ== - -next-tick@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" - integrity sha1-yobR/ogoFpsBICCOPchCS524NCw= - nice-try@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== -node-emoji@^1.4.1: - version "1.10.0" - resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.10.0.tgz#8886abd25d9c7bb61802a658523d1f8d2a89b2da" - integrity sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw== +node-emoji@^1.11.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.11.0.tgz#69a0150e6946e2f115e9d7ea4df7971e2628301c" + integrity sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A== dependencies: - lodash.toarray "^4.4.0" + lodash "^4.17.21" -node-fetch@^2.3.0, node-fetch@^2.6.1: - version "2.6.7" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" - integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== +node-fetch@^2.6.1, node-fetch@^2.6.7: + version "2.6.11" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.11.tgz#cde7fc71deef3131ef80a738919f999e6edfff25" + integrity sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w== dependencies: whatwg-url "^5.0.0" -node-forge@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3" - integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA== +node-forge@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" + integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== -node-gyp@^7.1.2: - version "7.1.2" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-7.1.2.tgz#21a810aebb187120251c3bcec979af1587b188ae" - integrity sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ== +node-gyp@^9.3.1: + version "9.3.1" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-9.3.1.tgz#1e19f5f290afcc9c46973d68700cbd21a96192e4" + integrity sha512-4Q16ZCqq3g8awk6UplT7AuxQ35XN4R/yf/+wSAwcBUAjg7l58RTactWaP8fIDTi0FzI7YcVLujwExakZlfWkXg== dependencies: env-paths "^2.2.0" glob "^7.1.4" - graceful-fs "^4.2.3" - nopt "^5.0.0" - npmlog "^4.1.2" - request "^2.88.2" + graceful-fs "^4.2.6" + make-fetch-happen "^10.0.3" + nopt "^6.0.0" + npmlog "^6.0.0" rimraf "^3.0.2" - semver "^7.3.2" - tar "^6.0.2" + semver "^7.3.5" + tar "^6.1.2" which "^2.0.2" -nopt@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" - integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== +nopt@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-6.0.0.tgz#245801d8ebf409c6df22ab9d95b65e1309cdb16d" + integrity sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g== dependencies: - abbrev "1" + abbrev "^1.0.0" normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== -normalize-url@^4.1.0: - version "4.5.1" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a" - integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== - -npm-run-path@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" - integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== +npm-run-path@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.1.0.tgz#bc62f7f3f6952d9894bd08944ba011a6ee7b7e00" + integrity sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q== dependencies: - path-key "^3.0.0" + path-key "^4.0.0" -npmlog@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" - integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== +npmlog@^6.0.0: + version "6.0.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830" + integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg== dependencies: - are-we-there-yet "~1.1.2" - console-control-strings "~1.1.0" - gauge "~2.7.3" - set-blocking "~2.0.0" - -number-is-nan@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= + are-we-there-yet "^3.0.0" + console-control-strings "^1.1.0" + gauge "^4.0.3" + set-blocking "^2.0.0" oauth-sign@~0.9.0: version "0.9.0" resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== -object-assign@^4, object-assign@^4.1.0: +object-assign@^4: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +object-hash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-3.0.0.tgz#73f97f753e7baffc0e2cc9d6e079079744ac82e9" + integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw== object-inspect@^1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.9.0.tgz#c90521d74e1127b67266ded3394ad6116986533a" - integrity sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw== + version "1.12.3" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" + integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== + +on-finished@2.4.1, on-finished@^2.2.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" + integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== + dependencies: + ee-first "1.1.1" -on-finished@^2.2.0, on-finished@~2.3.0: +on-finished@~2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" - integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= + integrity sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww== dependencies: ee-first "1.1.1" @@ -3010,7 +3089,7 @@ on-headers@^1.0.0, on-headers@~1.0.2: once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" @@ -3021,20 +3100,20 @@ one-time@^1.0.0: dependencies: fn.name "1.x.x" -onetime@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" - integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= - dependencies: - mimic-fn "^1.0.0" - onetime@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.0.tgz#fff0f3c91617fe62bb50189636e99ac8a6df7be5" - integrity sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q== + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== dependencies: mimic-fn "^2.1.0" +onetime@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4" + integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ== + dependencies: + mimic-fn "^4.0.0" + open@^6.3.0: version "6.4.0" resolved "https://registry.yarnpkg.com/open/-/open-6.4.0.tgz#5c13e96d0dc894686164f18965ecfe889ecfc8a9" @@ -3042,10 +3121,12 @@ open@^6.3.0: dependencies: is-wsl "^1.1.0" -openapi3-ts@^1.2.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/openapi3-ts/-/openapi3-ts-1.4.0.tgz#679d5a24be0efc36f5de4fc2c4b8513663e16f65" - integrity sha512-8DmE2oKayvSkIR3XSZ4+pRliBsx19bSNeIzkTPswY8r4wvjX86bMxsORdqwAwMxE8PefOcSAT2auvi/0TZe9yA== +openapi3-ts@^3.1.1: + version "3.2.0" + resolved "https://registry.yarnpkg.com/openapi3-ts/-/openapi3-ts-3.2.0.tgz#7e30d33c480e938e67e809ab16f419bc9beae3f8" + integrity sha512-/ykNWRV5Qs0Nwq7Pc0nJ78fgILvOT/60OxEmB3v7yQ8a8Bwcm43D4diaYazG/KBn6czA+52XYy931WFLMCUeSg== + dependencies: + yaml "^2.2.1" optionator@^0.8.1: version "0.8.3" @@ -3059,37 +3140,49 @@ optionator@^0.8.1: type-check "~0.3.2" word-wrap "~1.2.3" -ora@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/ora/-/ora-3.4.0.tgz#bf0752491059a3ef3ed4c85097531de9fdbcd318" - integrity sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg== - dependencies: - chalk "^2.4.2" - cli-cursor "^2.1.0" - cli-spinners "^2.0.0" - log-symbols "^2.2.0" - strip-ansi "^5.2.0" +ora@^5.4.1: + version "5.4.1" + resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" + integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== + dependencies: + bl "^4.1.0" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-spinners "^2.5.0" + is-interactive "^1.0.0" + is-unicode-supported "^0.1.0" + log-symbols "^4.1.0" + strip-ansi "^6.0.0" wcwidth "^1.0.1" os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= - -p-cancelable@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" - integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== + integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== p-defer@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-3.0.0.tgz#d1dceb4ee9b2b604b1d94ffec83760175d4e6f83" integrity sha512-ugZxsxmtTln604yeYd29EGrNhazN2lywetzpKhfmQjW/VJmhpDmWbiX+h0zL8V91R0UXkhb3KtPmyq9PZw3aYw== -pac-proxy-agent@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/pac-proxy-agent/-/pac-proxy-agent-4.1.0.tgz#66883eeabadc915fc5e95457324cb0f0ac78defb" - integrity sha512-ejNgYm2HTXSIYX9eFlkvqFp8hyJ374uDf0Zq5YUAifiSh1D6fo+iBivQZirGvVv8dCYUsLhmLBRhlAYvBKI5+Q== +p-limit@^3.0.1: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" + +pac-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/pac-proxy-agent/-/pac-proxy-agent-5.0.0.tgz#b718f76475a6a5415c2efbe256c1c971c84f635e" + integrity sha512-CcFG3ZtnxO8McDigozwE3AqAw15zDvGH+OjXO4kzf7IkEKkQ4gxQ+3sdF50WmhQ4P/bVusXcqNE2S3XrNURwzQ== dependencies: "@tootallnate/once" "1" agent-base "6" @@ -3097,28 +3190,18 @@ pac-proxy-agent@^4.1.0: get-uri "3" http-proxy-agent "^4.0.1" https-proxy-agent "5" - pac-resolver "^4.1.0" + pac-resolver "^5.0.0" raw-body "^2.2.0" socks-proxy-agent "5" -pac-resolver@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/pac-resolver/-/pac-resolver-4.2.0.tgz#b82bcb9992d48166920bc83c7542abb454bd9bdd" - integrity sha512-rPACZdUyuxT5Io/gFKUeeZFfE5T7ve7cAkE5TUZRRfuKP0u5Hocwe48X7ZEm6mYB+bTB0Qf+xlVlA/RM/i6RCQ== +pac-resolver@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/pac-resolver/-/pac-resolver-5.0.1.tgz#c91efa3a9af9f669104fa2f51102839d01cde8e7" + integrity sha512-cy7u00ko2KVgBAjuhevqpPeHIkCIqPe1v24cydhWjmeuzaBfmUWFCZJ1iAh5TuVzVZoUzXIW7K8sMYOZ84uZ9Q== dependencies: - degenerator "^2.2.0" + degenerator "^3.0.2" ip "^1.1.5" - netmask "^2.0.1" - -package-json@^6.3.0: - version "6.5.0" - resolved "https://registry.yarnpkg.com/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0" - integrity sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ== - dependencies: - got "^9.6.0" - registry-auth-token "^4.0.0" - registry-url "^5.0.0" - semver "^6.2.0" + netmask "^2.0.2" parseurl@~1.3.3: version "1.3.3" @@ -3128,22 +3211,27 @@ parseurl@~1.3.3: path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== path-key@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== -path-key@^3.0.0, path-key@^3.1.0: +path-key@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== +path-key@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18" + integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== + path-to-regexp@0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" - integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= + integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== path-to-regexp@^1.8.0: version "1.8.0" @@ -3155,41 +3243,26 @@ path-to-regexp@^1.8.0: performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= + integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== picomatch@^2.0.4, picomatch@^2.2.1: - version "2.2.3" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.3.tgz#465547f359ccc206d3c48e46a1bcb89bf7ee619d" - integrity sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg== + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== -portfinder@^1.0.23: - version "1.0.28" - resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.28.tgz#67c4622852bd5374dd1dd900f779f53462fac778" - integrity sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA== +portfinder@^1.0.32: + version "1.0.32" + resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.32.tgz#2fe1b9e58389712429dc2bea5beb2146146c7f81" + integrity sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg== dependencies: - async "^2.6.2" - debug "^3.1.1" - mkdirp "^0.5.5" + async "^2.6.4" + debug "^3.2.7" + mkdirp "^0.5.6" prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= - -prepend-http@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" - integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= - -printj@~1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/printj/-/printj-1.1.2.tgz#d90deb2975a8b9f600fb3a1c94e3f4c53c78a222" - integrity sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ== - -process-nextick-args@~1.0.6: - version "1.0.7" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" - integrity sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M= + integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w== process-nextick-args@~2.0.0: version "2.0.1" @@ -3201,15 +3274,56 @@ progress@^2.0.3: resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== -promise-breaker@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/promise-breaker/-/promise-breaker-5.0.0.tgz#58e8541f1619554057da95a211794d7834d30c1d" - integrity sha512-mgsWQuG4kJ1dtO6e/QlNDLFtMkMzzecsC69aI5hlLEjGHFNpHrvGhFi4LiK5jg2SMQj74/diH+wZliL9LpGsyA== +promise-breaker@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/promise-breaker/-/promise-breaker-6.0.0.tgz#107d2b70f161236abdb4ac5a736c7eb8df489d0f" + integrity sha512-BthzO9yTPswGf7etOBiHCVuugs2N01/Q/94dIPls48z2zCmrnDptUUZzfIb+41xq0MnYZ/BzmOd6ikDR4ibNZA== + +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== + +promise-retry@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" + integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== + dependencies: + err-code "^2.0.2" + retry "^0.12.0" + +proto-list@~1.2.1: + version "1.2.4" + resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" + integrity sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA== -protobufjs@^6.10.2, protobufjs@^6.8.6: - version "6.10.2" - resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-6.10.2.tgz#b9cb6bd8ec8f87514592ba3fdfd28e93f33a469b" - integrity sha512-27yj+04uF6ya9l+qfpH187aqEzfCF4+Uit0I9ZBQVqK09hk/SQzKa2MUqUpXaVa7LOFRg1TSSr3lVxGOk6c0SQ== +proto3-json-serializer@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/proto3-json-serializer/-/proto3-json-serializer-1.1.1.tgz#1b5703152b6ce811c5cdcc6468032caf53521331" + integrity sha512-AwAuY4g9nxx0u52DnSMkqqgyLHaW/XaPLtaAo3y/ZCfeaQB/g4YDH4kb8Wc/mWzWvu0YjOznVnfn373MVZZrgw== + dependencies: + protobufjs "^7.0.0" + +protobufjs-cli@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/protobufjs-cli/-/protobufjs-cli-1.1.1.tgz#f531201b1c8c7772066aa822bf9a08318b24a704" + integrity sha512-VPWMgIcRNyQwWUv8OLPyGQ/0lQY/QTQAVN5fh+XzfDwsVw1FZ2L3DM/bcBf8WPiRz2tNpaov9lPZfNcmNo6LXA== + dependencies: + chalk "^4.0.0" + escodegen "^1.13.0" + espree "^9.0.0" + estraverse "^5.1.0" + glob "^8.0.0" + jsdoc "^4.0.0" + minimist "^1.2.0" + semver "^7.1.2" + tmp "^0.2.1" + uglify-js "^3.7.7" + +protobufjs@7.2.3, protobufjs@^7.0.0: + version "7.2.3" + resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-7.2.3.tgz#01af019e40d9c6133c49acbb3ff9e30f4f0f70b2" + integrity sha512-TtpvOqwB5Gdz/PQmOjgsrGH1nHjAQVCN7JG4A6r1sXRWESL5rNMAiRcBQlCAdKxZcAbstExQePYG8xof/JVRgg== dependencies: "@protobufjs/aspromise" "^1.1.2" "@protobufjs/base64" "^1.1.2" @@ -3221,29 +3335,28 @@ protobufjs@^6.10.2, protobufjs@^6.8.6: "@protobufjs/path" "^1.1.2" "@protobufjs/pool" "^1.1.0" "@protobufjs/utf8" "^1.1.0" - "@types/long" "^4.0.1" - "@types/node" "^13.7.0" - long "^4.0.0" + "@types/node" ">=13.7.0" + long "^5.0.0" -proxy-addr@~2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf" - integrity sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw== +proxy-addr@~2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" + integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== dependencies: - forwarded "~0.1.2" + forwarded "0.2.0" ipaddr.js "1.9.1" -proxy-agent@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/proxy-agent/-/proxy-agent-4.0.1.tgz#326c3250776c7044cd19655ccbfadf2e065a045c" - integrity sha512-ODnQnW2jc/FUVwHHuaZEfN5otg/fMbvMxz9nMSUQfJ9JU7q2SZvSULSsjLloVgJOiv9yhc8GlNMKc4GkFmcVEA== +proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/proxy-agent/-/proxy-agent-5.0.0.tgz#d31405c10d6e8431fde96cba7a0c027ce01d633b" + integrity sha512-gkH7BkvLVkSfX9Dk27W6TyNOWWZWRilRfk1XxGNWOYJ2TuedAv1yFpCaU9QSBmBe716XOTNpYNOzhysyw8xn7g== dependencies: agent-base "^6.0.0" debug "4" http-proxy-agent "^4.0.0" https-proxy-agent "^5.0.0" lru-cache "^5.1.1" - pac-proxy-agent "^4.1.0" + pac-proxy-agent "^5.0.0" proxy-from-env "^1.0.0" socks-proxy-agent "^5.0.0" @@ -3253,9 +3366,9 @@ proxy-from-env@^1.0.0: integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== psl@^1.1.28: - version "1.8.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" - integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== + version "1.9.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" + integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== pump@^3.0.0: version "3.0.0" @@ -3268,59 +3381,61 @@ pump@^3.0.0: punycode@^1.3.2: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= + integrity sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ== punycode@^2.1.0, punycode@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + version "2.3.0" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" + integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== -pupa@^2.0.1: +pupa@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/pupa/-/pupa-2.1.1.tgz#f5e8fd4afc2c5d97828faa523549ed8744a20d62" integrity sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A== dependencies: escape-goat "^2.0.0" -qs@6.7.0: - version "6.7.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" - integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== +qs@6.11.0: + version "6.11.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" + integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== + dependencies: + side-channel "^1.0.4" qs@^6.6.0: - version "6.10.1" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.1.tgz#4931482fa8d647a5aab799c5271d2133b981fb6a" - integrity sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg== + version "6.11.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.2.tgz#64bea51f12c1f5da1bc01496f48ffcff7c69d7d9" + integrity sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA== dependencies: side-channel "^1.0.4" qs@~6.5.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" - integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== + version "6.5.3" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" + integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== range-parser@~1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== -raw-body@2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" - integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== +raw-body@2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" + integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== dependencies: - bytes "3.1.0" - http-errors "1.7.2" + bytes "3.1.2" + http-errors "2.0.0" iconv-lite "0.4.24" unpipe "1.0.0" -raw-body@^2.2.0, raw-body@^2.3.3: - version "2.4.1" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.1.tgz#30ac82f98bb5ae8c152e67149dac8d55153b168c" - integrity sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA== +raw-body@2.5.2, raw-body@^2.2.0, raw-body@^2.3.3: + version "2.5.2" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" + integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== dependencies: - bytes "3.1.0" - http-errors "1.7.3" + bytes "3.1.2" + http-errors "2.0.0" iconv-lite "0.4.24" unpipe "1.0.0" @@ -3334,29 +3449,29 @@ rc@^1.2.8: minimist "^1.2.0" strip-json-comments "~2.0.1" -re2@^1.15.8: - version "1.15.9" - resolved "https://registry.yarnpkg.com/re2/-/re2-1.15.9.tgz#9ed16171edcb0bc4f0e239bf55229ff3f26acbe3" - integrity sha512-AXWEhpMTBdC+3oqbjdU07dk0pBCvxh5vbOMLERL6Y8FYBSGn4vXlLe8cYszn64Yy7H8keVMrgPzoSvOd4mePpg== +re2@^1.17.7: + version "1.19.0" + resolved "https://registry.yarnpkg.com/re2/-/re2-1.19.0.tgz#6d867404fe3c63d874c7d7bfdc0c9d4add059c87" + integrity sha512-y0LcLZgBF3L7mDtNfbghb7dCmChYQO2QsUGklNueAJUH+HAZO8UZUubgNsf6OxRTAQpeE4KMPR7vcpK3+Q+GiA== dependencies: - install-artifact-from-github "^1.2.0" - nan "^2.14.2" - node-gyp "^7.1.2" + install-artifact-from-github "^1.3.3" + nan "^2.17.0" + node-gyp "^9.3.1" readable-stream@1.1.x: version "1.1.14" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" - integrity sha1-fPTFTvZI44EwhMY23SB54WbAgdk= + integrity sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ== dependencies: core-util-is "~1.0.0" inherits "~2.0.1" isarray "0.0.1" string_decoder "~0.10.x" -readable-stream@^2.0.0, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.3.7, readable-stream@~2.3.6: - version "2.3.7" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== +readable-stream@^2.0.0, readable-stream@^2.0.5: + version "2.3.8" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== dependencies: core-util-is "~1.0.0" inherits "~2.0.3" @@ -3367,62 +3482,50 @@ readable-stream@^2.0.0, readable-stream@^2.0.2, readable-stream@^2.0.5, readable util-deprecate "~1.0.1" readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" - integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== dependencies: inherits "^2.0.3" string_decoder "^1.1.1" util-deprecate "^1.0.1" -readable-stream@~2.0.0: - version "2.0.6" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.0.6.tgz#8f90341e68a53ccc928788dacfcd11b36eb9b78e" - integrity sha1-j5A0HmilPMySh4jaz80Rs265t44= - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "~1.0.0" - process-nextick-args "~1.0.6" - string_decoder "~0.10.x" - util-deprecate "~1.0.1" - readdir-glob@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/readdir-glob/-/readdir-glob-1.1.1.tgz#f0e10bb7bf7bfa7e0add8baffdc54c3f7dbee6c4" - integrity sha512-91/k1EzZwDx6HbERR+zucygRFfiPl2zkIYZtv3Jjr6Mn7SkKcVct8aVO+sSRiGMc6fLf72du3d92/uY63YPdEA== + version "1.1.3" + resolved "https://registry.yarnpkg.com/readdir-glob/-/readdir-glob-1.1.3.tgz#c3d831f51f5e7bfa62fa2ffbe4b508c640f09584" + integrity sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA== dependencies: - minimatch "^3.0.4" + minimatch "^5.1.0" -readdirp@~3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" - integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== dependencies: picomatch "^2.2.1" redeyed@~2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/redeyed/-/redeyed-2.1.1.tgz#8984b5815d99cb220469c99eeeffe38913e6cc0b" - integrity sha1-iYS1gV2ZyyIEacme7v/jiRPmzAs= + integrity sha512-FNpGGo1DycYAdnrKFxCMmKYgo/mILAqtRYbkdQD8Ep/Hk2PQ5+aEAEx+IU713RTDmuBaH0c8P5ZozurNu5ObRQ== dependencies: esprima "~4.0.0" -registry-auth-token@^4.0.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.2.1.tgz#6d7b4006441918972ccd5fedcd41dc322c79b250" - integrity sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw== +registry-auth-token@^5.0.1: + version "5.0.2" + resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-5.0.2.tgz#8b026cc507c8552ebbe06724136267e63302f756" + integrity sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ== dependencies: - rc "^1.2.8" + "@pnpm/npm-conf" "^2.1.0" -registry-url@^5.0.0: +registry-url@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009" integrity sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw== dependencies: rc "^1.2.8" -request@^2.87.0, request@^2.88.2: +request@^2.87.0: version "2.88.2" resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== @@ -3448,20 +3551,22 @@ request@^2.87.0, request@^2.88.2: tunnel-agent "^0.6.0" uuid "^3.3.2" -responselike@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" - integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= - dependencies: - lowercase-keys "^1.0.0" +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== -restore-cursor@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" - integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + +requizzle@^0.2.3: + version "0.2.4" + resolved "https://registry.yarnpkg.com/requizzle/-/requizzle-0.2.4.tgz#319eb658b28c370f0c20f968fa8ceab98c13d27c" + integrity sha512-JRrFk1D4OQ4SqovXOgdav+K8EAhSB/LJZqCz8tbX0KObcdeM15Ss59ozWMBWmmINMagCwmqn4ZNryUGpBsl6Jw== dependencies: - onetime "^2.0.0" - signal-exit "^3.0.2" + lodash "^4.17.21" restore-cursor@^3.1.0: version "3.1.0" @@ -3471,19 +3576,23 @@ restore-cursor@^3.1.0: onetime "^5.1.0" signal-exit "^3.0.2" -retry-request@^4.0.0: - version "4.1.3" - resolved "https://registry.yarnpkg.com/retry-request/-/retry-request-4.1.3.tgz#d5f74daf261372cff58d08b0a1979b4d7cab0fde" - integrity sha512-QnRZUpuPNgX0+D1xVxul6DbJ9slvo4Rm6iV/dn63e048MvGbUZiKySVt6Tenp04JqmchxjiLltGerOJys7kJYQ== +retry-request@^5.0.0: + version "5.0.2" + resolved "https://registry.yarnpkg.com/retry-request/-/retry-request-5.0.2.tgz#143d85f90c755af407fcc46b7166a4ba520e44da" + integrity sha512-wfI3pk7EE80lCIXprqh7ym48IHYdwmAAzESdbU8Q9l7pnRCk9LEhpbOTNKjz6FARLm/Bl5m+4F0ABxOkYUujSQ== dependencies: debug "^4.1.1" + extend "^3.0.2" -rimraf@2, rimraf@^2.2.8: - version "2.7.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" - integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== - dependencies: - glob "^7.1.3" +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== + +retry@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" + integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== rimraf@^3.0.0, rimraf@^3.0.2: version "3.0.2" @@ -3493,9 +3602,9 @@ rimraf@^3.0.0, rimraf@^3.0.2: glob "^7.1.3" router@^1.3.1: - version "1.3.5" - resolved "https://registry.yarnpkg.com/router/-/router-1.3.5.tgz#cb2f47f74fd99a77fb3bc01cc947f46b79b1790f" - integrity sha512-kozCJZUhuSJ5VcLhSb3F8fsmGXy+8HaDbKCAerR1G6tq3mnMZFMuSohbFvGv1c5oMFipijDjRZuuN/Sq5nMf3g== + version "1.3.8" + resolved "https://registry.yarnpkg.com/router/-/router-1.3.8.tgz#1509614ae1fbc67139a728481c54b057ecfb04bf" + integrity sha512-461UFH44NtSfIlS83PUg2N7OZo86BC/kB3dY77gJdsODsBhhw7+2uE0tzTINxrY9CahCUVk1VhpWCA5i1yoIEg== dependencies: array-flatten "3.0.0" debug "2.6.9" @@ -3505,41 +3614,39 @@ router@^1.3.1: setprototypeof "1.2.0" utils-merge "1.0.1" -rsvp@^4.8.5: - version "4.8.5" - resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" - integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== - -run-async@^2.2.0, run-async@^2.4.0: +run-async@^2.4.0: version "2.4.1" resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== -rxjs@^6.4.0: - version "6.6.7" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" - integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== - dependencies: - tslib "^1.9.0" +run-async@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-3.0.0.tgz#42a432f6d76c689522058984384df28be379daad" + integrity sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q== -rxjs@^6.5.3: - version "6.5.5" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.5.tgz#c5c884e3094c8cfee31bf27eb87e54ccfc87f9ec" - integrity sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ== +rxjs@^7.2.0, rxjs@^7.5.5, rxjs@^7.8.1: + version "7.8.1" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" + integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== dependencies: - tslib "^1.9.0" + tslib "^2.1.0" safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@^5.0.1, safe-buffer@^5.1.2, safe-buffer@^5.2.1, safe-buffer@~5.2.0: +safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: +safe-stable-stringify@^2.3.1: + version "2.4.3" + resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz#138c84b6f6edb3db5f8ef3ef7115b8f55ccbf886" + integrity sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g== + +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== @@ -3551,66 +3658,56 @@ semver-diff@^3.1.1: dependencies: semver "^6.3.0" -semver@^5.0.1, semver@^5.5.0, semver@^5.6.0, semver@^5.7.1: +semver@^5.5.0, semver@^5.7.1: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@^6.0.0, semver@^6.2.0, semver@^6.3.0: +semver@^6.0.0, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.0.0, semver@^7.3.2: - version "7.3.5" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" - integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== +semver@^7.0.0, semver@^7.1.2, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8: + version "7.5.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.1.tgz#c90c4d631cf74720e46b21c1d37ea07edfab91ec" + integrity sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw== dependencies: lru-cache "^6.0.0" -send@0.17.1: - version "0.17.1" - resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" - integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== +send@0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" + integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== dependencies: debug "2.6.9" - depd "~1.1.2" - destroy "~1.0.4" + depd "2.0.0" + destroy "1.2.0" encodeurl "~1.0.2" escape-html "~1.0.3" etag "~1.8.1" fresh "0.5.2" - http-errors "~1.7.2" + http-errors "2.0.0" mime "1.6.0" - ms "2.1.1" - on-finished "~2.3.0" + ms "2.1.3" + on-finished "2.4.1" range-parser "~1.2.1" - statuses "~1.5.0" + statuses "2.0.1" -serve-static@1.14.1: - version "1.14.1" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" - integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== +serve-static@1.15.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" + integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== dependencies: encodeurl "~1.0.2" escape-html "~1.0.3" parseurl "~1.3.3" - send "0.17.1" + send "0.18.0" -set-blocking@~2.0.0: +set-blocking@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= - -setimmediate@~1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" - integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= - -setprototypeof@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" - integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== + integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== setprototypeof@1.2.0: version "1.2.0" @@ -3620,7 +3717,7 @@ setprototypeof@1.2.0: shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg== dependencies: shebang-regex "^1.0.0" @@ -3634,7 +3731,7 @@ shebang-command@^2.0.0: shebang-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== shebang-regex@^3.0.0: version "3.0.0" @@ -3650,39 +3747,48 @@ side-channel@^1.0.4: get-intrinsic "^1.0.2" object-inspect "^1.9.0" -signal-exit@^3.0.0, signal-exit@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" - integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== +signal-exit@^3.0.2, signal-exit@^3.0.7: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== simple-swizzle@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" - integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo= + integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg== dependencies: is-arrayish "^0.3.1" -smart-buffer@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.1.0.tgz#91605c25d91652f4661ea69ccf45f1b331ca21ba" - integrity sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw== +smart-buffer@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" + integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== socks-proxy-agent@5, socks-proxy-agent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-5.0.0.tgz#7c0f364e7b1cf4a7a437e71253bed72e9004be60" - integrity sha512-lEpa1zsWCChxiynk+lCycKuC502RxDWLKJZoIhnxrWNjLSDGYRFflHA1/228VkRcnv9TIb8w98derGbpKxJRgA== + version "5.0.1" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz#032fb583048a29ebffec2e6a73fca0761f48177e" + integrity sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ== dependencies: - agent-base "6" + agent-base "^6.0.2" debug "4" socks "^2.3.3" -socks@^2.3.3: - version "2.6.0" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.6.0.tgz#6b984928461d39871b3666754b9000ecf39dfac2" - integrity sha512-mNmr9owlinMplev0Wd7UHFlqI4ofnBnNzFuzrm63PPaHgbkqCFe4T5LzwKmtQ/f2tX0NTpcdVLyD/FHxFBstYw== +socks-proxy-agent@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz#dc069ecf34436621acb41e3efa66ca1b5fed15b6" + integrity sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww== dependencies: - ip "^1.1.5" - smart-buffer "^4.1.0" + agent-base "^6.0.2" + debug "^4.3.3" + socks "^2.6.2" + +socks@^2.3.3, socks@^2.6.2: + version "2.7.1" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.7.1.tgz#d8e651247178fde79c0663043e07240196857d55" + integrity sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ== + dependencies: + ip "^2.0.0" + smart-buffer "^4.2.0" source-map@~0.6.1: version "0.6.1" @@ -3692,12 +3798,12 @@ source-map@~0.6.1: sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== sshpk@^1.7.0: - version "1.16.1" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" - integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== + version "1.17.0" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.17.0.tgz#578082d92d4fe612b13007496e543fa0fbcbe4c5" + integrity sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ== dependencies: asn1 "~0.2.3" assert-plus "^1.0.0" @@ -3709,71 +3815,53 @@ sshpk@^1.7.0: safer-buffer "^2.0.2" tweetnacl "~0.14.0" +ssri@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-9.0.1.tgz#544d4c357a8d7b71a19700074b6883fcb4eae057" + integrity sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q== + dependencies: + minipass "^3.1.1" + stack-trace@0.0.x: version "0.0.10" resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" - integrity sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA= + integrity sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg== + +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== -"statuses@>= 1.5.0 < 2", statuses@~1.5.0: +statuses@~1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" - integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= + integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== + +stream-chain@^2.2.4, stream-chain@^2.2.5: + version "2.2.5" + resolved "https://registry.yarnpkg.com/stream-chain/-/stream-chain-2.2.5.tgz#b30967e8f14ee033c5b9a19bbe8a2cba90ba0d09" + integrity sha512-1TJmBx6aSWqZ4tx7aTpBDXK0/e2hhcNSTV8+CbFJtDjbb+I1mZ8lHit0Grw9GRT+6JbIrrDd8esncgBi8aBXGA== + +stream-json@^1.7.3: + version "1.8.0" + resolved "https://registry.yarnpkg.com/stream-json/-/stream-json-1.8.0.tgz#53f486b2e3b4496c506131f8d7260ba42def151c" + integrity sha512-HZfXngYHUAr1exT4fxlbc1IOce1RYxp2ldeaf97LYCOPSoOqY/1Psp7iGvpb+6JIOgkra9zDYnPX01hGAHzEPw== + dependencies: + stream-chain "^2.2.5" stream-shift@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== -string-length@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/string-length/-/string-length-1.0.1.tgz#56970fb1c38558e9e70b728bf3de269ac45adfac" - integrity sha1-VpcPscOFWOnnC3KL894mmsRa36w= - dependencies: - strip-ansi "^3.0.0" - -string-width@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" - -"string-width@^1.0.2 || 2", string-width@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" - -string-width@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" - integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== - dependencies: - emoji-regex "^7.0.1" - is-fullwidth-code-point "^2.0.0" - strip-ansi "^5.1.0" - -string-width@^4.0.0: - version "4.2.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5" - integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.0" - -string-width@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" - integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== +"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== dependencies: emoji-regex "^8.0.0" is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.0" + strip-ansi "^6.0.1" string_decoder@^1.1.1: version "1.3.0" @@ -3785,7 +3873,7 @@ string_decoder@^1.1.1: string_decoder@~0.10.x: version "0.10.31" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" - integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= + integrity sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ== string_decoder@~1.1.1: version "1.1.1" @@ -3794,102 +3882,68 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -strip-ansi@^3.0.0, strip-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= - dependencies: - ansi-regex "^2.0.0" - -strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= - dependencies: - ansi-regex "^3.0.0" - -strip-ansi@^5.1.0, strip-ansi@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: - ansi-regex "^4.1.0" + ansi-regex "^5.0.1" -strip-ansi@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" - integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== - dependencies: - ansi-regex "^5.0.0" +strip-final-newline@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" + integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== -strip-final-newline@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" - integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== +strip-json-comments@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= + integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== -superstatic@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/superstatic/-/superstatic-7.1.0.tgz#42cc773a0f500fb691841e0533d0b8c31f25997f" - integrity sha512-yBU8iw07nM3Bu4jFc8lnKwLey0cj61OaGmFJZcYC2X+kEpXVmXzERJ3OTAHZAESe1OTeNIuWadt81U5IULGGAA== +superstatic@^9.0.3: + version "9.0.3" + resolved "https://registry.yarnpkg.com/superstatic/-/superstatic-9.0.3.tgz#eb271841e971d9c3760f6d4b3adca5db00f29f18" + integrity sha512-e/tmW0bsnQ/33ivK6y3CapJT0Ovy4pk/ohNPGhIAGU2oasoNLRQ1cv6enua09NU9w6Y0H/fBu07cjzuiWvLXxw== dependencies: basic-auth-connect "^1.0.0" - chalk "^1.1.3" - compare-semver "^1.0.0" + commander "^10.0.0" compression "^1.7.0" - connect "^3.6.2" + connect "^3.7.0" destroy "^1.0.4" fast-url-parser "^1.1.3" - fs-extra "^8.1.0" glob-slasher "^1.0.1" - home-dir "^1.0.0" is-url "^1.2.2" join-path "^1.1.1" lodash "^4.17.19" - mime-types "^2.1.16" - minimatch "^3.0.4" + mime-types "^2.1.35" + minimatch "^6.1.6" morgan "^1.8.2" - nash "^3.0.0" on-finished "^2.2.0" on-headers "^1.0.0" path-to-regexp "^1.8.0" router "^1.3.1" - rsvp "^4.8.5" - string-length "^1.0.0" - update-notifier "^4.1.1" + update-notifier-cjs "^5.1.6" optionalDependencies: - re2 "^1.15.8" - -supports-color@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" - integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= - -supports-color@^5.0.0, supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" + re2 "^1.17.7" -supports-color@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1" - integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g== +supports-color@^7.0.0, supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: has-flag "^4.0.0" -supports-hyperlinks@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-1.0.1.tgz#71daedf36cc1060ac5100c351bb3da48c29c0ef7" - integrity sha512-HHi5kVSefKaJkGYXbDuKbUGRVxqnWGn3J2e39CYcNJEfWciGq2zYtOhXLTlvrOZW1QU7VX67w7fMmWafHX9Pfw== +supports-hyperlinks@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz#3943544347c1ff90b15effb03fc14ae45ec10624" + integrity sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA== dependencies: - has-flag "^2.0.0" - supports-color "^5.0.0" + has-flag "^4.0.0" + supports-color "^7.0.0" tar-stream@^2.2.0: version "2.2.0" @@ -3902,32 +3956,19 @@ tar-stream@^2.2.0: inherits "^2.0.3" readable-stream "^3.1.1" -tar@^4.3.0: - version "4.4.19" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.19.tgz#2e4d7263df26f2b914dee10c825ab132123742f3" - integrity sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA== - dependencies: - chownr "^1.1.4" - fs-minipass "^1.2.7" - minipass "^2.9.0" - minizlib "^1.3.3" - mkdirp "^0.5.5" - safe-buffer "^5.2.1" - yallist "^3.1.1" - -tar@^6.0.2: - version "6.1.0" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.0.tgz#d1724e9bcc04b977b18d5c573b333a2207229a83" - integrity sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA== +tar@^6.1.11, tar@^6.1.2: + version "6.1.15" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.15.tgz#c9738b0b98845a3b344d334b8fa3041aaba53a69" + integrity sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A== dependencies: chownr "^2.0.0" fs-minipass "^2.0.0" - minipass "^3.0.0" + minipass "^5.0.0" minizlib "^2.1.1" mkdirp "^1.0.3" yallist "^4.0.0" -tcp-port-used@^1.0.1: +tcp-port-used@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/tcp-port-used/-/tcp-port-used-1.0.2.tgz#9652b7436eb1f4cfae111c79b558a25769f6faea" integrity sha512-l7ar8lLUD3XS1V2lfoJlCBaeoaWo/2xfYt81hM7VlvR4RrMVFqfmzfhLVk40hAb368uitje5gPtBRL1m/DGvLA== @@ -3935,48 +3976,29 @@ tcp-port-used@^1.0.1: debug "4.3.1" is2 "^2.0.6" -term-size@^2.1.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.2.1.tgz#2a6a54840432c2fb6320fea0f415531e90189f54" - integrity sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg== - text-hex@1.0.x: version "1.0.0" resolved "https://registry.yarnpkg.com/text-hex/-/text-hex-1.0.0.tgz#69dc9c1b17446ee79a92bf5b884bb4b9127506f5" integrity sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg== -through2@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.1.tgz#384e75314d49f32de12eebb8136b8eb6b5d59da9" - integrity sha1-OE51MU1J8y3hLuu4E2uOtrXVnak= - dependencies: - readable-stream "~2.0.0" - xtend "~4.0.0" - -"through@>=2.2.7 <3", through@^2.3.6: +through@^2.3.6: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= - -timers-ext@^0.1.5, timers-ext@^0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/timers-ext/-/timers-ext-0.1.7.tgz#6f57ad8578e07a3fb9f91d9387d65647555e25c6" - integrity sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ== - dependencies: - es5-ext "~0.10.46" - next-tick "1" + integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== -tmp@0.0.33, tmp@^0.0.33: +tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== dependencies: os-tmpdir "~1.0.2" -to-readable-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" - integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== +tmp@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" + integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== + dependencies: + rimraf "^3.0.0" to-regex-range@^5.0.1: version "5.0.1" @@ -3985,10 +4007,10 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" -toidentifier@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" - integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== tough-cookie@~2.5.0: version "2.5.0" @@ -4008,71 +4030,53 @@ toxic@^1.0.0: tr46@~0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" - integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= - -"traverse@>=0.3.0 <0.4": - version "0.3.9" - resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.3.9.tgz#717b8f220cc0bb7b44e40514c22b2e8bbc70d8b9" - integrity sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk= + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== -triple-beam@^1.2.0, triple-beam@^1.3.0: +triple-beam@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/triple-beam/-/triple-beam-1.3.0.tgz#a595214c7298db8339eeeee083e4d10bd8cb8dd9" integrity sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw== -tslib@^1.9.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tslib@^2.0.0, tslib@^2.0.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.2.0.tgz#fb2c475977e35e241311ede2693cee1ec6698f5c" - integrity sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w== +tslib@^2.0.1, tslib@^2.1.0: + version "2.5.3" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.3.tgz#24944ba2d990940e6e982c4bea147aba80209913" + integrity sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w== tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= + integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== dependencies: safe-buffer "^5.0.1" tweetnacl@^0.14.3, tweetnacl@~0.14.0: version "0.14.5" resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= - -tweetnacl@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596" - integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw== - -tweetsodium@0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/tweetsodium/-/tweetsodium-0.0.5.tgz#f63ab4b1d26d6355d82d512a2bbf03cae96eb3e8" - integrity sha512-T3aXZtx7KqQbutTtBfn+P5By3HdBuB1eCoGviIrRJV2sXeToxv2X2cv5RvYqgG26PSnN5m3fYixds22Gkfd11w== - dependencies: - blakejs "^1.1.0" - tweetnacl "^1.0.1" + integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== type-check@~0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= + integrity sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg== dependencies: prelude-ls "~1.1.2" -type-fest@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1" - integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ== +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== -type-fest@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" - integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== +type-fest@^3.0.0: + version "3.11.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-3.11.1.tgz#d8e62c7f42e14537d5b8796de5450d541f3a33a7" + integrity sha512-aCuRNRERRVh33lgQaJRlUxZqzfhzwTrsE98Mc3o3VXqmiaQdHacgUtJ0esp+7MvZ92qhtzKPeusaX6vIEcoreA== -type-is@~1.6.17, type-is@~1.6.18: +type-is@~1.6.18: version "1.6.18" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== @@ -4080,16 +4084,6 @@ type-is@~1.6.17, type-is@~1.6.18: media-typer "0.3.0" mime-types "~2.1.24" -type@^1.0.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" - integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== - -type@^2.0.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/type/-/type-2.5.0.tgz#0a2e78c2e77907b252abe5f298c1b01c63f0db3d" - integrity sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw== - typedarray-to-buffer@^3.1.5: version "3.1.5" resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" @@ -4097,10 +4091,39 @@ typedarray-to-buffer@^3.1.5: dependencies: is-typedarray "^1.0.0" -typescript@^3.9.5: - version "3.9.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.5.tgz#586f0dba300cde8be52dd1ac4f7e1009c1b13f36" - integrity sha512-hSAifV3k+i6lEoCJ2k6R2Z/rp/H3+8sdmcn5NrS3/3kE7+RyZXm9aqvxWqjEXHAd8b0pShatpcdMTvEdvAJltQ== +typescript@^5.0.4: + version "5.1.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.1.3.tgz#8d84219244a6b40b6fb2b33cc1c062f715b9e826" + integrity sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw== + +uc.micro@^1.0.1, uc.micro@^1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac" + integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA== + +uglify-js@^3.7.7: + version "3.17.4" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.17.4.tgz#61678cf5fa3f5b7eb789bb345df29afb8257c22c" + integrity sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g== + +underscore@~1.13.2: + version "1.13.6" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.13.6.tgz#04786a1f589dc6c09f761fc5f45b89e935136441" + integrity sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A== + +unique-filename@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-2.0.1.tgz#e785f8675a9a7589e0ac77e0b5c34d2eaeac6da2" + integrity sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A== + dependencies: + unique-slug "^3.0.0" + +unique-slug@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-3.0.0.tgz#6d347cf57c8a7a7a6044aabd0e2d74e4d76dc7c9" + integrity sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w== + dependencies: + imurmurhash "^0.1.4" unique-string@^2.0.0: version "2.0.0" @@ -4109,57 +4132,48 @@ unique-string@^2.0.0: dependencies: crypto-random-string "^2.0.0" -universal-analytics@^0.4.16: - version "0.4.23" - resolved "https://registry.yarnpkg.com/universal-analytics/-/universal-analytics-0.4.23.tgz#d915e676850c25c4156762471bdd7cf2eaaca8ac" - integrity sha512-lgMIH7XBI6OgYn1woDEmxhGdj8yDefMKg7GkWdeATAlQZFrMrNyxSkpDzY57iY0/6fdlzTbBV03OawvvzG+q7A== +universal-analytics@^0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/universal-analytics/-/universal-analytics-0.5.3.tgz#ff2d9b850062cdd4a8f652448047982a183c8e96" + integrity sha512-HXSMyIcf2XTvwZ6ZZQLfxfViRm/yTGoRgDeTbojtq6rezeyKB0sTBcKH2fhddnteAHRcHiKgr/ACpbgjGOC6RQ== dependencies: - debug "^4.1.1" - request "^2.88.2" - uuid "^3.0.0" + debug "^4.3.1" + uuid "^8.0.0" universalify@^0.1.0: version "0.1.2" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== +universalify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" + integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= - -unzipper@^0.10.10: - version "0.10.11" - resolved "https://registry.yarnpkg.com/unzipper/-/unzipper-0.10.11.tgz#0b4991446472cbdb92ee7403909f26c2419c782e" - integrity sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw== - dependencies: - big-integer "^1.6.17" - binary "~0.3.0" - bluebird "~3.4.1" - buffer-indexof-polyfill "~1.0.0" - duplexer2 "~0.1.4" - fstream "^1.0.12" - graceful-fs "^4.2.2" - listenercount "~1.0.1" - readable-stream "~2.3.6" - setimmediate "~1.0.4" - -update-notifier@^4.1.0, update-notifier@^4.1.1: - version "4.1.3" - resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-4.1.3.tgz#be86ee13e8ce48fb50043ff72057b5bd598e1ea3" - integrity sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A== - dependencies: - boxen "^4.2.0" - chalk "^3.0.0" + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== + +update-notifier-cjs@^5.1.6: + version "5.1.6" + resolved "https://registry.yarnpkg.com/update-notifier-cjs/-/update-notifier-cjs-5.1.6.tgz#6e3aff745d1551b55bb0a0a5939b7e636d95877d" + integrity sha512-wgxdSBWv3x/YpMzsWz5G4p4ec7JWD0HCl8W6bmNB6E5Gwo+1ym5oN4hiXpLf0mPySVEJEIsYlkshnplkg2OP9A== + dependencies: + boxen "^5.0.0" + chalk "^4.1.0" configstore "^5.0.1" has-yarn "^2.1.0" import-lazy "^2.1.0" is-ci "^2.0.0" - is-installed-globally "^0.3.1" - is-npm "^4.0.0" + is-installed-globally "^0.4.0" + is-npm "^5.0.0" is-yarn-global "^0.3.0" - latest-version "^5.0.0" - pupa "^2.0.1" + isomorphic-fetch "^3.0.0" + pupa "^2.1.1" + registry-auth-token "^5.0.1" + registry-url "^5.1.0" + semver "^7.3.7" semver-diff "^3.1.1" xdg-basedir "^4.0.0" @@ -4173,65 +4187,76 @@ uri-js@^4.2.2: url-join@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/url-join/-/url-join-0.0.1.tgz#1db48ad422d3402469a87f7d97bdebfe4fb1e3c8" - integrity sha1-HbSK1CLTQCRpqH99l73r/k+x48g= - -url-parse-lax@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" - integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= - dependencies: - prepend-http "^2.0.0" + integrity sha512-H6dnQ/yPAAVzMQRvEvyz01hhfQL5qRWSEt7BX8t9DqnPw9BjMb64fjIRq76Uvf1hkHp+mTZvEVJ5guXOT0Xqaw== util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== utils-merge@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= + integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== -uuid@^3.0.0, uuid@^3.3.2: +uuid@^3.3.2: version "3.4.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== +uuid@^8.0.0, uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + valid-url@^1: version "1.0.9" resolved "https://registry.yarnpkg.com/valid-url/-/valid-url-1.0.9.tgz#1c14479b40f1397a75782f115e4086447433a200" - integrity sha1-HBRHm0DxOXp1eC8RXkCGRHQzogA= + integrity sha512-QQDsV8OnSf5Uc30CKSwG9lnhMPe6exHtTXLRYX8uMwKENy640pU+2BgBL0LRbDh/eYRahNCS7aewCx0wf3NYVA== vary@^1, vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= + integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== verror@1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= + integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw== dependencies: assert-plus "^1.0.0" core-util-is "1.0.2" extsprintf "^1.2.0" +vm2@^3.9.17: + version "3.9.19" + resolved "https://registry.yarnpkg.com/vm2/-/vm2-3.9.19.tgz#be1e1d7a106122c6c492b4d51c2e8b93d3ed6a4a" + integrity sha512-J637XF0DHDMV57R6JyVsTak7nIL8gy5KH4r1HiwWLf/4GBbb5MKL5y7LpmF4A8E2nR6XmzpmMFQ7V7ppPTmUQg== + dependencies: + acorn "^8.7.0" + acorn-walk "^8.2.0" + wcwidth@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" - integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= + integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== dependencies: defaults "^1.0.3" webidl-conversions@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" - integrity sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE= + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +whatwg-fetch@^3.4.1: + version "3.6.2" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz#dced24f37f2624ed0281725d51d0e2e3fe677f8c" + integrity sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA== whatwg-url@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" - integrity sha1-lmRU6HZUYuN2RNNib2dCzotwll0= + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== dependencies: tr46 "~0.0.3" webidl-conversions "^3.0.0" @@ -4250,12 +4275,12 @@ which@^2.0.1, which@^2.0.2: dependencies: isexe "^2.0.0" -wide-align@^1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" - integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== +wide-align@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" + integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== dependencies: - string-width "^1.0.2 || 2" + string-width "^1.0.2 || 2 || 3 || 4" widest-line@^3.1.0: version "3.1.0" @@ -4264,38 +4289,59 @@ widest-line@^3.1.0: dependencies: string-width "^4.0.0" -winston-transport@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/winston-transport/-/winston-transport-4.4.0.tgz#17af518daa690d5b2ecccaa7acf7b20ca7925e59" - integrity sha512-Lc7/p3GtqtqPBYYtS6KCN3c77/2QCev51DvcJKbkFPQNoj1sinkGwLGFDxkXY9J6p9+EPnYs+D90uwbnaiURTw== +winston-transport@^4.4.0, winston-transport@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/winston-transport/-/winston-transport-4.5.0.tgz#6e7b0dd04d393171ed5e4e4905db265f7ab384fa" + integrity sha512-YpZzcUzBedhlTAfJg6vJDlyEai/IFMIVcaEZZyl3UXIl4gmqRpU7AE89AHLkbzLUsv0NVmw7ts+iztqKxxPW1Q== dependencies: - readable-stream "^2.3.7" - triple-beam "^1.2.0" + logform "^2.3.2" + readable-stream "^3.6.0" + triple-beam "^1.3.0" winston@^3.0.0: - version "3.3.3" - resolved "https://registry.yarnpkg.com/winston/-/winston-3.3.3.tgz#ae6172042cafb29786afa3d09c8ff833ab7c9170" - integrity sha512-oEXTISQnC8VlSAKf1KYSSd7J6IWuRPQqDdo8eoRNaYKLvwSb5+79Z3Yi1lrl6KDpU6/VWaxpakDAtb1oQ4n9aw== + version "3.9.0" + resolved "https://registry.yarnpkg.com/winston/-/winston-3.9.0.tgz#2bbdeb8167a75fac6d9a0c6d002890cd908016c2" + integrity sha512-jW51iW/X95BCW6MMtZWr2jKQBP4hV5bIDq9QrIjfDk6Q9QuxvTKEAlpUNAzP+HYHFFCeENhph16s0zEunu4uuQ== dependencies: + "@colors/colors" "1.5.0" "@dabh/diagnostics" "^2.0.2" - async "^3.1.0" + async "^3.2.3" is-stream "^2.0.0" - logform "^2.2.0" + logform "^2.4.0" one-time "^1.0.0" readable-stream "^3.4.0" + safe-stable-stringify "^2.3.1" stack-trace "0.0.x" triple-beam "^1.3.0" - winston-transport "^4.4.0" + winston-transport "^4.5.0" word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== +wrap-ansi@^6.0.1: + version "6.2.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== write-file-atomic@^3.0.0: version "3.0.3" @@ -4308,26 +4354,31 @@ write-file-atomic@^3.0.0: typedarray-to-buffer "^3.1.5" ws@^7.2.3: - version "7.4.6" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" - integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== + version "7.5.9" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" + integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== xdg-basedir@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== +xmlcreate@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/xmlcreate/-/xmlcreate-2.0.4.tgz#0c5ab0f99cdd02a81065fa9cd8f8ae87624889be" + integrity sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg== + xregexp@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-2.0.0.tgz#52a63e56ca0b84a7f3a5f3d61872f126ad7a5943" - integrity sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM= + integrity sha512-xl/50/Cf32VsGq/1R8jJE5ajH1yMCQkpmoS10QbFZWl2Oor4H0Me64Pu2yxvsRWK3m6soJbmGfzSR7BYmDcWAA== -xtend@~4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== -yallist@^3.0.0, yallist@^3.0.2, yallist@^3.1.1: +yallist@^3.0.2: version "3.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== @@ -4337,6 +4388,34 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== +yaml@^2.2.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.1.tgz#02fe0975d23cd441242aa7204e09fc28ac2ac33b" + integrity sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ== + +yargs-parser@^21.1.1: + version "21.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + +yargs@^17.7.2: + version "17.7.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== + dependencies: + cliui "^8.0.1" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.1.1" + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + zip-stream@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-4.1.0.tgz#51dd326571544e36aa3f756430b313576dc8fc79" diff --git a/package.json b/package.json index d0eb5f8ef..199d34240 100644 --- a/package.json +++ b/package.json @@ -6,82 +6,80 @@ }, "license": "Apache-2.0", "dependencies": { - "@material-ui/core": "^4.12.3", - "@material-ui/data-grid": "^4.0.0-alpha.37", - "@material-ui/icons": "^4.11.2", - "@material-ui/lab": "^4.0.0-alpha.60", - "@material-ui/styles": "^4.11.4", - "@reach/router": "^1.3.4", - "classnames": "^2.2.6", - "copy-to-clipboard": "^3.3.1", - "core-js": "^3.12.0", - "firebase": "^8.5.0", - "gatsby": "^3.4.1", - "gatsby-cli": "^3.4.1", + "@babel/core": "^7.12.3", + "@emotion/react": "^11.11.0", + "@emotion/styled": "^11.11.0", + "@mui/icons-material": "^5.11.16", + "@mui/material": "^5.13.0", + "@mui/styles": "^5.14.15", + "@mui/x-data-grid": "^6.4.0", + "@typescript-eslint/eslint-plugin": "^4.0.0", + "@typescript-eslint/parser": "^4.0.0", + "babel-eslint": "^10.0.0", + "classnames": "^2.3.2", + "copy-to-clipboard": "^3.3.3", + "eslint": "^7.0.0", + "gatsby": "^5.9.1", + "gatsby-plugin-emotion": "^8.9.0", "gatsby-plugin-google-fonts": "^1.0.1", - "gatsby-plugin-image": "^1.4.0", - "gatsby-plugin-manifest": "^3.12.0", - "gatsby-plugin-material-ui": "^3.0.1", - "gatsby-plugin-preload-fonts": "^2.4.0", - "gatsby-plugin-react-helmet": "^4.7.1", - "gatsby-plugin-react-svg": "^3.0.0", - "gatsby-plugin-sharp": "^3.4.1", - "gatsby-plugin-typescript": "^3.4.0", + "gatsby-plugin-image": "^3.12.3", + "gatsby-plugin-manifest": "^5.9.0", + "gatsby-plugin-preload-fonts": "^4.9.0", + "gatsby-plugin-react-svg": "^3.3.0", + "gatsby-plugin-robots-txt": "^1.8.0", + "gatsby-plugin-sharp": "^5.9.0", + "gatsby-plugin-sitemap": "^6.9.0", "gatsby-plugin-use-query-params": "^1.0.1", - "gatsby-source-filesystem": "^3.4.0", - "gatsby-transformer-json": "^3.12.0", - "gatsby-transformer-sharp": "^3.4.0", - "immutable": "^4.0.0-rc.12", - "js-base64": "^3.6.1", + "gatsby-source-filesystem": "^5.9.0", + "gatsby-transformer-json": "^5.9.0", + "gatsby-transformer-sharp": "^5.9.0", + "js-base64": "^3.7.5", "json-schema-library": "^7.4.7", - "load-script": "^1.0.0", - "moment": "^2.29.1", + "load-script": "^2.0.0", + "mui-colors": "^1.0.2", "object-sizeof": "^2.6.1", - "react": "^17.0.2", - "react-dom": "^17.0.2", - "react-error-boundary": "^3.1.3", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-error-boundary": "^4.0.4", "react-helmet": "^6.1.0", - "react-icons": "^4.2.0", + "react-icons": "^4.8.0", "react-json-view": "^1.21.3", - "react-loader-spinner": "^4.0.0", - "react-redux": "^7.2.4", - "react-router-dom": "^6.0.2", - "react-syntax-highlighter": "^15.4.3", - "redux": "^4.0.5", - "use-debounce": "^6.0.0", - "use-query-params": "^1.2.2", - "uuid": "^8.3.2" + "react-loader-spinner": "^6.1.6", + "react-redux": "^8.0.5", + "react-syntax-highlighter": "^15.5.0", + "redux": "^4.2.1", + "tsconfig-paths-webpack-plugin": "^4.0.1", + "use-debounce": "^9.0.4", + "use-query-params": "^0.4.3" }, "devDependencies": { - "@babel/core": "^7.0", - "@babel/preset-typescript": "^7.10.4", - "@testing-library/dom": ">=5", - "@testing-library/jest-dom": "^5.5.0", - "@testing-library/react": "^11.2.6", + "@testing-library/jest-dom": "^6.1.2", + "@testing-library/react": "^14.0.0", "@testing-library/user-event": "^13.1.8", - "@types/classnames": "^2.2.10", "@types/gapi": "^0.0.39", "@types/gapi.auth2": "^0.0.54", + "@reach/router": "^1.3.4", "@types/gapi.client.analytics": "^3.0.7", "@types/gapi.client.analyticsadmin": "^1.0.0", "@types/gapi.client.analyticsdata": "^1.0.2", "@types/gapi.client.analyticsreporting": "^4.0.3", "@types/gtag.js": "^0.0.5", "@types/jest": "^26.0.23", - "@types/react": "^17.0.5", - "@types/react-dom": "^17.0.3", + "@types/node": "^18.16.5", + "@types/react": "^18.2.0", + "@types/react-dom": "^18.2.0", "@types/react-helmet": "^6.1.1", "@types/react-redux": "^7.1.9", "@types/react-syntax-highlighter": "^13.5.0", - "@types/react-test-renderer": "^17.0.1", + "@types/react-test-renderer": "^18.0.0", "@types/uuid": "^8.3.0", - "@typescript-eslint/eslint-plugin": "4.22.1", - "@typescript-eslint/parser": "4.22.1", + "@typescript-eslint/eslint-plugin": "^4.0.0", + "@typescript-eslint/parser": "^4.0.0", "axios": "^0.21.1", - "babel-eslint": "10.x", + "babel-eslint": "^10.0.0", "babel-jest": "^26.6.3", "babel-preset-gatsby": "^1.4.0", - "eslint": "7.25.0", + "eslint": "^7.0.0", "eslint-config-react-app": "^6.0.0", "eslint-plugin-flowtype": "5.7.2", "eslint-plugin-import": "2.x", @@ -89,22 +87,22 @@ "eslint-plugin-react": "7.x", "eslint-plugin-react-hooks": "4.2.0", "firebase-tools": "^9.10.2", - "gatsby-plugin-robots-txt": "^1.6.2", - "gatsby-plugin-sitemap": "^4.3.1", + "gatsby-plugin-robots-txt": "^1.8.0", + "gatsby-plugin-sitemap": "^6.9.0", "identity-obj-proxy": "^3.0.0", "jest": "^26.6.3", "prettier": "^2.0.5", "react-hooks-testing-library": "^0.6.0", - "react-test-renderer": "^17.0.2", + "react-test-renderer": "^18.0.0", "ts-node": "^9.1.1", - "tsconfig-paths-webpack-plugin": "^3.5.1", + "tsconfig-paths-webpack-plugin": "^4.0.1", "type-fest": "^2.1.0", - "typescript": "^4.2.4" + "typescript": "^5.0.4" }, - "resolutions": { - "graphql": "^15.4.0", - "graphql-compose": "^7.25.0", - "webpack": "^5.24.2" + "overrides": { + "react-server-dom-webpack@0.0.0-experimental-c8b778b7f-20220825": { + "react": "^18.2.0" + } }, "scripts": { "lint": "eslint 'src/**/*' 'lib/**/*' 'gatsby/**/*'", diff --git a/src/components/AccountExplorer/HighlightText.tsx b/src/components/AccountExplorer/HighlightText.tsx deleted file mode 100644 index 2891e44cd..000000000 --- a/src/components/AccountExplorer/HighlightText.tsx +++ /dev/null @@ -1,35 +0,0 @@ -import * as React from "react" - -interface HighlightTextProps { - text: string - search?: string - className?: string -} -const HighlightText: React.FC = ({ - text, - search, - className, -}) => { - if (search === undefined) { - return <>{text} - } - const match = new RegExp(`(${search})`, "gi") - const matchArray = text.match(match) - if (matchArray === null) { - return <>{text} - } - - const matchedText = matchArray[0] - const index = text.indexOf(matchedText) - const beginning = text.substring(0, index) - const middle = text.substring(index, index + matchedText.length) - const end = text.substring(index + matchedText.length) - return ( - <> - {beginning} - {middle} - {end} - - ) -} -export default HighlightText diff --git a/src/components/AccountExplorer/ViewTable.tsx b/src/components/AccountExplorer/ViewTable.tsx deleted file mode 100644 index b1c581709..000000000 --- a/src/components/AccountExplorer/ViewTable.tsx +++ /dev/null @@ -1,266 +0,0 @@ -import * as React from "react" - -import makeStyles from "@material-ui/core/styles/makeStyles" -import Table from "@material-ui/core/Table" -import TableBody from "@material-ui/core/TableBody" -import TableCell from "@material-ui/core/TableCell" -import TableHead from "@material-ui/core/TableHead" -import TableRow from "@material-ui/core/TableRow" -import Typography from "@material-ui/core/Typography" - -import { CopyIconButton } from "@/components/CopyButton" -import HighlightText from "./HighlightText" -import Spinner from "@/components/Spinner" -import { RequestStatus } from "@/types" -import useFlattenedViews from "../ViewSelector/useFlattenedViews" -import { AccountSummary, ProfileSummary, WebPropertySummary } from "@/types/ua" - -const useStyles = makeStyles(theme => ({ - id: { - color: theme.palette.text.secondary, - }, - mark: { - backgroundColor: theme.palette.success.light, - }, - link: { - color: theme.palette.info.main, - }, - tableCell: { - display: "flex", - justifyContent: "space-between", - alignItems: "center", - }, - copyIconButton: { - color: theme.palette.text.secondary, - }, -})) - -interface ViewTableProps { - flattenedViewsRequest: ReturnType - className?: string - search?: string -} - -interface ViewCellProps { - firstRow: JSX.Element | string - secondRow?: JSX.Element | string - copyToolTip: string - textToCopy: string -} -const APVCell: React.FC = ({ - firstRow, - secondRow, - copyToolTip, - textToCopy, -}) => { - const classes = useStyles() - return ( - -
-
-
{firstRow}
- {secondRow &&
{secondRow}
} -
- -
-
- ) -} - -const maxCellWidth = 25 -const textClamp = (text: string, maxWidth: number) => { - if (text.length <= maxWidth) { - return text - } else { - return text.substring(0, maxWidth - 3) + "..." - } -} - -const AccountCell: React.FC<{ - account: AccountSummary | undefined - classes: ReturnType - search: string | undefined -}> = ({ account, classes, search }) => { - if (account === undefined) { - return null - } - return ( - - } - secondRow={ - - } - /> - ) -} - -const PropertyCell: React.FC<{ - property: WebPropertySummary | undefined - classes: ReturnType - search: string | undefined -}> = ({ property, classes, search }) => { - if (property === undefined) { - return No UA properties for account. - } - - return ( - - } - secondRow={ - - } - /> - ) -} - -const ViewCell: React.FC<{ - account: AccountSummary | undefined - property: WebPropertySummary | undefined - view: ProfileSummary | undefined - classes: ReturnType - search: string | undefined -}> = ({ account, property, view, classes, search }) => { - if (view === undefined) { - return No UA views for account. - } - const viewUrl = `https://analytics.google.com/analytics/web/#/report/vistors-overview/a${account?.id}w${property?.internalWebPropertyId}p${view?.id}` - return ( - - - - - } - secondRow={ - - } - /> - - } - /> - - ) -} - -const ViewsTable: React.FC = ({ - flattenedViewsRequest, - className, - search, -}) => { - const classes = useStyles() - return ( - - - - Account - Property - View - Table ID - - - - {flattenedViewsRequest.status === RequestStatus.Successful ? ( - flattenedViewsRequest.flattenedViews.length === 0 ? ( - - No results - - ) : ( - flattenedViewsRequest.flattenedViews.map(apv => { - return ( - - - - - - ) - }) - ) - ) : ( - - - - Loading views… - - - - )} - -
- ) -} - -export default ViewsTable diff --git a/src/components/AccountExplorer/index.spec.tsx b/src/components/AccountExplorer/index.spec.tsx deleted file mode 100644 index a103e26d6..000000000 --- a/src/components/AccountExplorer/index.spec.tsx +++ /dev/null @@ -1,82 +0,0 @@ -// Copyright 2020 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 * as React from "react" -import * as renderer from "@testing-library/react" -import { withProviders } from "../../test-utils" -import "@testing-library/jest-dom" - -import AccountExplorer from "./index" - -describe("AccountExplorer", () => { - it("renders without error for an unauthorized user", async () => { - const { wrapped } = withProviders(, { - isLoggedIn: false, - }) - const { findByText } = renderer.render(wrapped) - - const heading = await findByText("Overview") - expect(heading).toBeVisible() - }) - describe("with an authorized user", () => { - describe("with accounts", () => { - it("selects the first account & shows it in the tree", async () => { - const { wrapped, gapi } = withProviders() - const { findByText } = renderer.render(wrapped) - await renderer.act(async () => { - await gapi!.client!.analytics!.management!.accountSummaries!.list!() - }) - const viewColumn = await findByText("View Name 1 1 1") - expect(viewColumn).toBeVisible() - }) - it("picking a view updates the table", async () => { - const { wrapped, gapi } = withProviders() - - const { findByText, findByLabelText } = renderer.render(wrapped) - await renderer.act(async () => { - await gapi!.client!.analytics!.management!.accountSummaries!.list!() - }) - await renderer.act(async () => { - // Choose the second view in the list - const viewSelect = await findByLabelText("view") - renderer.fireEvent.keyDown(viewSelect, { key: "ArrowDown" }) - renderer.fireEvent.keyDown(viewSelect, { key: "Return" }) - }) - - const viewColumn = await findByText("View Name 1 1 2") - expect(viewColumn).toBeVisible() - }) - it("searching for a view updates the table", async () => { - const { wrapped, gapi } = withProviders() - - const { findByText, findByPlaceholderText } = renderer.render(wrapped) - await renderer.act(async () => { - await gapi!.client!.analytics!.management!.accountSummaries!.list!() - }) - await renderer.act(async () => { - // Choose the second view in the list - const searchForView = await findByPlaceholderText( - "Start typing to search..." - ) - renderer.fireEvent.change(searchForView, { - target: { value: "View Name 2 1 1" }, - }) - }) - - const idColumn = await findByText("ga:view-id-2-1-1") - expect(idColumn).toBeVisible() - }) - }) - }) -}) diff --git a/src/components/AccountExplorer/index.tsx b/src/components/AccountExplorer/index.tsx deleted file mode 100644 index e7bd22234..000000000 --- a/src/components/AccountExplorer/index.tsx +++ /dev/null @@ -1,152 +0,0 @@ -// Copyright 2020 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 * as React from "react" -import { makeStyles } from "@material-ui/core/styles" -import TextField from "@material-ui/core/TextField" -import Typography from "@material-ui/core/Typography" -import Paper from "@material-ui/core/Paper" -import { useDebounce } from "use-debounce" - -import ViewSelector from "@/components/ViewSelector" -import ViewsTable from "./ViewTable" -import useAccountPropertyView, { - UAAccountPropertyView, -} from "../ViewSelector/useAccountPropertyView" -import { StorageKey } from "@/constants" -import useFlattenedViews from "../ViewSelector/useFlattenedViews" - -const useStyles = makeStyles(theme => ({ - viewSelector: { - marginBottom: theme.spacing(1), - }, - section: { - padding: theme.spacing(1), - }, - paper: { - padding: theme.spacing(3), - }, - header: { - margin: theme.spacing(0, 1, 0), - padding: theme.spacing(0, 1, 0), - }, - heading: { - margin: theme.spacing(2), - textAlign: "center", - }, - search: { - display: "flex", - "flex-direction": "column", - "align-items": "center", - padding: theme.spacing(0, 1, 0), - // Search title Title - }, - searchInput: { - margin: theme.spacing(1), - padding: theme.spacing(1, 1), - width: "100%", - "max-width": theme.breakpoints.values.sm, - }, - table: { - "margin-top": theme.spacing(6), - }, -})) - -const containsQuery = ( - searchQuery: string, - apv: UAAccountPropertyView -): boolean => { - const pattern = new RegExp(`(${searchQuery})`, "ig") - const hasMatch = - apv.account?.name?.match(pattern) || - apv.account?.id?.match(pattern) || - apv.property?.name?.match(pattern) || - apv.property?.id?.match(pattern) || - apv.view?.name?.match(pattern) || - apv.view?.id?.match(pattern) - return !!hasMatch -} - -enum QueryParam { - Account = "a", - Property = "b", - View = "c", -} - -const AccountExplorer = () => { - const classes = useStyles() - - const [searchQuery, setSearchQuery] = React.useState("") - const [debouncedQuery] = useDebounce(searchQuery, 100, { trailing: true }) - const selectedAPV = useAccountPropertyView( - StorageKey.accountExplorerAPV, - QueryParam - ) - - const filterViews = React.useCallback( - (fv: UAAccountPropertyView) => containsQuery(debouncedQuery, fv), - [debouncedQuery] - ) - - const flattenedViewsRequest = useFlattenedViews( - selectedAPV.account, - selectedAPV.property, - filterViews - ) - - return ( - <> - Overview - - Use this tool to search or browse through your accounts, properties, and - views, See what accounts you have access to, and find the IDs that you - need for the API or for another tool or service that integrates with - Google Analytics. - - -
-
- - Search for your account information… - - setSearchQuery(e.target.value)} - variant="outlined" - size="small" - /> - - …or browse through all your accounts - - - -
-
-
- - ) -} - -export default AccountExplorer diff --git a/src/components/Buttons.tsx b/src/components/Buttons.tsx index b6252dab9..b7bbeccf9 100644 --- a/src/components/Buttons.tsx +++ b/src/components/Buttons.tsx @@ -4,10 +4,11 @@ import { Tooltip, IconButton, ButtonProps as MUIButtonProps, -} from "@material-ui/core" -import Add from "@material-ui/icons/Add" -import Delete from "@material-ui/icons/Delete" -import Check from "@material-ui/icons/Check" +} from "@mui/material" +import Add from "@mui/icons-material/Add" +import Delete from "@mui/icons-material/Delete" +import Check from "@mui/icons-material/Check" +import {PropsWithChildren} from 'react'; // Secondary Action Button interface Props extends MUIButtonProps { @@ -64,14 +65,17 @@ export const PlainButton: React.FC = ({ ...props }) => { return } -export const TooltipIconButton: React.FC<{ - tooltip: any +type TooltipIconButtonProps = { + tooltip: string size?: "small" | "medium" className?: string disabled?: boolean placement?: "bottom" | "left" | "right" | "top" | "bottom-end" | "bottom-start" | "left-end" | "left-start" | "right-end" | "right-start" | "top-end" | "top-start" | undefined onClick?: () => void -}> = ({ tooltip, children, onClick, className, disabled, size = "small", placement='bottom'}) => { +} + +export const TooltipIconButton: React.FC> = + ({ tooltip, children, onClick, className, disabled, size = "small", placement='bottom'}) => { if (disabled) { return ( Custom Campaigns -) - -enum QueryParam { - Account = "a", - Property = "b", - View = "c", - Stream = "d", -} - -const IOSURLBuilder: React.FC = ({ version }) => { - const classes = useStyles() - const formClasses = useFormStyles() - - const { - setAdNetwork, - setAppID, - setSource, - setMedium, - setTerm, - setContent, - setName, - setPropertyID, - setRedirectURL, - setDeviceID, - updateCustomField, - setMethod, - ...values - } = useInputs(version) - - const onSetProperty = React.useCallback( - (p: PropertySummary | undefined) => { - setPropertyID(p?.property?.replace("properties/", "")) - }, - [setPropertyID] - ) - - const { - adNetwork, - appID, - source, - medium, - term, - content, - name, - propertyID, - redirectURL, - deviceID, - customFields, - method, - } = values - - const url = useGenerateURL(values) - - const qrCodeSrc = React.useMemo(() => { - if (url === undefined) { - return - } - var qrCodeURL = - "https://chart.googleapis.com/chart?cht=qr&chs=250x250&chld=L|0&chl=" + - encodeURIComponent(url) - return qrCodeURL - }, [url]) - - const apv = useAccountPropertyView( - StorageKey.campaignBuilderIOSAPV, - QueryParam - ) - const aps = useAccountProperty( - StorageKey.campaignBuilderIOSAPS, - QueryParam, - undefined, - onSetProperty - ) - - const propertySelector = React.useMemo(() => { - if (version === GAVersion.UniversalAnalytics) { - return ( - - ) - } else { - return - } - }, [version, setPropertyID, apv, aps]) - - const redirectURLTextField = React.useMemo(() => { - if (adNetwork?.method === "redirect") { - return ( - - The URL to which the user will be redirected, e.g.{" "} - - https://itunes.apple.com/us/app/my-app/id123456789 - - - } - value={redirectURL || ""} - onChange={e => setRedirectURL(e.target.value)} - /> - ) - } else { - return null - } - }, [adNetwork?.method, redirectURL, setRedirectURL]) - - const deviceIDTextField = React.useMemo(() => { - if (adNetwork?.label === "Custom") { - return ( - - The macro the ad network will use to populate the device ID, e.g.{" "} - {idfa} - - } - value={deviceID || ""} - onChange={e => setDeviceID(e.target.value)} - /> - ) - } else { - return null - } - }, [adNetwork, deviceID, setDeviceID]) - - const customFieldInputs = React.useMemo(() => { - if (customFields !== undefined) { - return customFields.map((customField, idx) => - customField.visible ? ( - - {customField.helperText || - `value for ${customField.label || `custom field ${idx}`}`} - - } - value={customField.value || ""} - onChange={e => - updateCustomField(idx, old => ({ ...old, value: e.target.value })) - } - /> - ) : null - ) - } - }, [customFields, updateCustomField]) - - const methodInput = React.useMemo(() => { - if (adNetwork?.label === "Custom") { - return ( - - disableClearable - fullWidth - autoComplete - autoHighlight - options={["redirect", "ping"]} - getOptionLabel={a => a} - value={method} - onChange={(_event, value) => setMethod(value)} - renderOption={a => a} - renderInput={params => ( - - )} - /> - ) - } - return null - }, [method, setMethod, adNetwork]) - - return ( -
- - This tool allows you to easily add campaign parameters to URLs so you - can measure {customCampaigns} in Google Analytics. - - Select your property - {propertySelector} - setPropertyID(e.target.value)} - /> - Enter the campaign information - - disableClearable - fullWidth - autoComplete - autoHighlight - options={Object.values(supportedAdNetworks)} - getOptionLabel={a => a.label} - getOptionSelected={(a, b) => a.networkID === b.networkID} - value={adNetwork} - onChange={(_event, value) => setAdNetwork(value)} - renderOption={a => a.label} - renderInput={params => ( - - )} - /> - {methodInput} - {redirectURLTextField} - setAppID(e.target.value)} - /> - {deviceIDTextField} - {customFieldInputs} - - original referrer, e.g. google,{" "} - citysearch,{" "} - newsletter4 - - } - value={source} - onChange={e => setSource(e.target.value)} - /> - - marketing medium, e.g. cpc,{" "} - banner, email - - } - value={medium} - onChange={e => setMedium(e.target.value)} - /> - - paid keywords, e.g. running+shoes - - } - value={term} - onChange={e => setTerm(e.target.value)} - /> - setContent(e.target.value)} - /> - setName(e.target.value)} - /> - - {!url && ( - - Fill out all required inputs and your url will appear here. - - )} - {url && ( -
- , - }} - fullWidth - id="generated-url" - label="generated URL" - multiline - value={url} - variant="outlined" - /> -
- )} - {qrCodeSrc && ( -
- qr code to test via phone - Scan the QR code to test your URL. -
- )} -
-
- ) -} - -export default IOSURLBuilder diff --git a/src/components/CampaignURLBuilder/IOS/useGenerateURL.spec.ts b/src/components/CampaignURLBuilder/IOS/useGenerateURL.spec.ts deleted file mode 100644 index 2252cb8ca..000000000 --- a/src/components/CampaignURLBuilder/IOS/useGenerateURL.spec.ts +++ /dev/null @@ -1,496 +0,0 @@ -import "@testing-library/jest-dom" -import { renderHook } from "@testing-library/react-hooks" - -import useGeneratedURL from "./useGenerateURL" -import { supportedAdNetworks } from "../adNetworks" - -describe("useGenerateURL hook", () => { - test("Aarki network", () => { - const network = supportedAdNetworks[0] - const arg = { - adNetwork: network, - method: network.method, - appID: "app_id", - source: network.source || network.networkID, - medium: "medium", - term: "term", - content: "content", - name: "name", - propertyID: "UA-41425441-2", - redirectURL: "https://itunes.apple.com/us/app/my-app/id123456789", - deviceID: network.deviceID, - customFields: network.customFields, - } - const { result } = renderHook(() => useGeneratedURL(arg)) - expect(result.current).toBeDefined() - expect(result.current).toEqual( - "https://click.google-analytics.com/redirect?tid=UA-41425441-2&url=https%3A%2F%2Fitunes.apple.com%2Fus%2Fapp%2Fmy-app%2Fid123456789&aid=app_id&idfa={advertising_id}&cs=aarki&cm=medium&cn=name&cc=content&ck=term&anid=aarki&aclid={click_id}&cp1={app_id}" - ) - }) - - test("AdColony network", () => { - const network = supportedAdNetworks[1] - const arg = { - adNetwork: network, - method: network.method, - appID: "app_id", - source: network.source || network.networkID, - medium: "medium", - term: "term", - content: "content", - name: "name", - propertyID: "UA-41425441-2", - redirectURL: "https://itunes.apple.com/us/app/my-app/id123456789", - deviceID: network.deviceID, - customFields: network.customFields, - } - // populate the itunes store id value - arg.customFields![0].value = "id123456789" - const { result } = renderHook(() => useGeneratedURL(arg)) - expect(result.current).toBeDefined() - expect(result.current).toEqual( - "https://click.google-analytics.com/redirect?tid=UA-41425441-2&url=https%3A%2F%2Fitunes.apple.com%2Fus%2Fapp%2Fmy-app%2Fid123456789&aid=app_id&idfa=[IDFA]&cs=adcolony&cm=medium&cn=name&cc=content&ck=term&anid=adcolony&asid=id123456789" - ) - }) - - test("Google AdMob network", () => { - const network = supportedAdNetworks[2] - const arg = { - adNetwork: network, - method: network.method, - appID: "app_id", - source: network.source || network.networkID, - medium: "medium", - term: "term", - content: "content", - name: "name", - propertyID: "UA-41425441-2", - redirectURL: "https://itunes.apple.com/us/app/my-app/id123456789", - deviceID: network.deviceID, - customFields: network.customFields, - } - const { result } = renderHook(() => useGeneratedURL(arg)) - expect(result.current).toBeDefined() - expect(result.current).toEqual( - "https://click.google-analytics.com/redirect?tid=UA-41425441-2&url=https%3A%2F%2Fitunes.apple.com%2Fus%2Fapp%2Fmy-app%2Fid123456789&aid=app_id&idfa={idfa}&cs=google&cm=medium&cn=name&cc=content&ck=term&anid=admob&hash=md5" - ) - }) - - test("Applovin network", () => { - const network = supportedAdNetworks[3] - const arg = { - adNetwork: network, - method: network.method, - appID: "app_id", - source: network.source || network.networkID, - medium: "medium", - term: "term", - content: "content", - name: "name", - propertyID: "UA-41425441-2", - redirectURL: "https://itunes.apple.com/us/app/my-app/id123456789", - deviceID: network.deviceID, - customFields: network.customFields, - } - const { result } = renderHook(() => useGeneratedURL(arg)) - expect(result.current).toBeDefined() - expect(result.current).toEqual( - "https://click.google-analytics.com/redirect?tid=UA-41425441-2&url=https%3A%2F%2Fitunes.apple.com%2Fus%2Fapp%2Fmy-app%2Fid123456789&aid=app_id&idfa={ADID}&cs=applovin&cm=medium&cn=name&cc=content&ck=term&anid=applovin" - ) - }) - - test("Conversant network", () => { - const network = supportedAdNetworks[4] - const arg = { - adNetwork: network, - method: network.method, - appID: "app_id", - source: network.source || network.networkID, - medium: "medium", - term: "term", - content: "content", - name: "name", - propertyID: "UA-41425441-2", - redirectURL: "https://itunes.apple.com/us/app/my-app/id123456789", - deviceID: network.deviceID, - customFields: network.customFields, - } - const { result } = renderHook(() => useGeneratedURL(arg)) - expect(result.current).toBeDefined() - expect(result.current).toEqual( - "https://click.google-analytics.com/redirect?tid=UA-41425441-2&url=https%3A%2F%2Fitunes.apple.com%2Fus%2Fapp%2Fmy-app%2Fid123456789&aid=app_id&idfa={idfa}&cs=conversant&cm=medium&cn=name&cc=content&ck=term&anid=conversant" - ) - }) - - test("Fiksu network", () => { - const network = supportedAdNetworks[5] - const arg = { - adNetwork: network, - method: network.method, - appID: "app_id", - source: network.source || network.networkID, - medium: "medium", - term: "term", - content: "content", - name: "name", - propertyID: "UA-41425441-2", - redirectURL: "", - deviceID: network.deviceID, - customFields: network.customFields, - } - // populate the itunes store id value - arg.customFields![0].value = "id123456789" - const { result } = renderHook(() => useGeneratedURL(arg)) - expect(result.current).toBeDefined() - expect(result.current).toEqual( - "https://click.google-analytics.com/ping?tid=UA-41425441-2&aid=app_id&idfa={{advertising_id}}&cs=fiksu&cm=medium&cn=name&cc=content&ck=term&anid=fiksu&asid=id123456789" - ) - }) - - test("InMobi network", () => { - const network = supportedAdNetworks[6] - const arg = { - adNetwork: network, - method: network.method, - appID: "app_id", - source: network.source || network.networkID, - medium: "medium", - term: "term", - content: "content", - name: "name", - propertyID: "UA-41425441-2", - redirectURL: "https://itunes.apple.com/us/app/my-app/id123456789", - deviceID: network.deviceID, - customFields: network.customFields, - } - const { result } = renderHook(() => useGeneratedURL(arg)) - expect(result.current).toBeDefined() - expect(result.current).toEqual( - "https://click.google-analytics.com/redirect?tid=UA-41425441-2&url=https%3A%2F%2Fitunes.apple.com%2Fus%2Fapp%2Fmy-app%2Fid123456789&aid=app_id&idfa=$IDA&cs=inmobi&cm=medium&cn=name&cc=content&ck=term&anid=inmobi&aclid=$IMP_ID" - ) - }) - - test("Jampp network", () => { - const network = supportedAdNetworks[7] - const arg = { - adNetwork: network, - method: network.method, - appID: "app_id", - source: network.source || network.networkID, - medium: "medium", - term: "term", - content: "content", - name: "name", - propertyID: "UA-41425441-2", - redirectURL: "https://itunes.apple.com/us/app/my-app/id123456789", - deviceID: network.deviceID, - customFields: network.customFields, - } - const { result } = renderHook(() => useGeneratedURL(arg)) - expect(result.current).toBeDefined() - expect(result.current).toEqual( - "https://click.google-analytics.com/redirect?tid=UA-41425441-2&url=https%3A%2F%2Fitunes.apple.com%2Fus%2Fapp%2Fmy-app%2Fid123456789&aid=app_id&idfa={apple_ifa}&cs=jampp&cm=medium&cn=name&cc=content&ck=term&anid=jampp&aclid={hash}" - ) - }) - - test("Leadbolt network", () => { - const network = supportedAdNetworks[8] - const arg = { - adNetwork: network, - method: network.method, - appID: "app_id", - source: network.source || network.networkID, - medium: "medium", - term: "term", - content: "content", - name: "name", - propertyID: "UA-41425441-2", - redirectURL: "https://itunes.apple.com/us/app/my-app/id123456789", - deviceID: network.deviceID, - customFields: network.customFields, - } - const { result } = renderHook(() => useGeneratedURL(arg)) - expect(result.current).toBeDefined() - expect(result.current).toEqual( - "https://click.google-analytics.com/redirect?tid=UA-41425441-2&url=https%3A%2F%2Fitunes.apple.com%2Fus%2Fapp%2Fmy-app%2Fid123456789&aid=app_id&idfa=[DEVICE_AD_ID]&cs=leadbolt&cm=medium&cn=name&cc=content&ck=term&anid=leadbolt&aclid=[CLK_ID]&cp1=[TRACK_ID]" - ) - }) - - test("Limei network", () => { - const network = supportedAdNetworks[9] - const arg = { - adNetwork: network, - method: network.method, - appID: "app_id", - source: network.source || network.networkID, - medium: "medium", - term: "term", - content: "content", - name: "name", - propertyID: "UA-41425441-2", - redirectURL: "https://itunes.apple.com/us/app/my-app/id123456789", - deviceID: network.deviceID, - customFields: network.customFields, - } - const { result } = renderHook(() => useGeneratedURL(arg)) - expect(result.current).toBeDefined() - expect(result.current).toEqual( - "https://click.google-analytics.com/redirect?tid=UA-41425441-2&url=https%3A%2F%2Fitunes.apple.com%2Fus%2Fapp%2Fmy-app%2Fid123456789&aid=app_id&idfa=--IDFA--&cs=limei&cm=medium&cn=name&cc=content&ck=term&anid=limei&aclid=--LIMEIBIDID--" - ) - }) - - test("Millenial Media network", () => { - const network = supportedAdNetworks[10] - const arg = { - adNetwork: network, - method: network.method, - appID: "app_id", - source: network.source || network.networkID, - medium: "medium", - term: "term", - content: "content", - name: "name", - propertyID: "UA-41425441-2", - redirectURL: "https://itunes.apple.com/us/app/my-app/id123456789", - deviceID: network.deviceID, - customFields: network.customFields, - } - const { result } = renderHook(() => useGeneratedURL(arg)) - expect(result.current).toBeDefined() - expect(result.current).toEqual( - "https://click.google-analytics.com/redirect?tid=UA-41425441-2&url=https%3A%2F%2Fitunes.apple.com%2Fus%2Fapp%2Fmy-app%2Fid123456789&aid=app_id&idfa=[:_jv_uaid:]&cs=millennial&cm=medium&cn=name&cc=content&ck=term&anid=millennial&aclid=[:_jv_urid:]" - ) - }) - - test("Millenial Media DSP network", () => { - const network = supportedAdNetworks[11] - const arg = { - adNetwork: network, - method: network.method, - appID: "app_id", - source: network.source || network.networkID, - medium: "medium", - term: "term", - content: "content", - name: "name", - propertyID: "UA-41425441-2", - redirectURL: "https://itunes.apple.com/us/app/my-app/id123456789", - deviceID: network.deviceID, - customFields: network.customFields, - } - const { result } = renderHook(() => useGeneratedURL(arg)) - expect(result.current).toBeDefined() - expect(result.current).toEqual( - "https://click.google-analytics.com/redirect?tid=UA-41425441-2&url=https%3A%2F%2Fitunes.apple.com%2Fus%2Fapp%2Fmy-app%2Fid123456789&aid=app_id&idfa=JT_IDFA&cs=millennialdsp&cm=medium&cn=name&cc=content&ck=term&anid=millennialdsp&aclid=JT_REQID" - ) - }) - - test("MdotM network", () => { - const network = supportedAdNetworks[12] - const arg = { - adNetwork: network, - method: network.method, - appID: "app_id", - source: network.source || network.networkID, - medium: "medium", - term: "term", - content: "content", - name: "name", - propertyID: "UA-41425441-2", - redirectURL: "https://itunes.apple.com/us/app/my-app/id123456789", - deviceID: network.deviceID, - customFields: network.customFields, - } - // populate the itunes store id value - arg.customFields![0].value = "id123456789" - const { result } = renderHook(() => useGeneratedURL(arg)) - expect(result.current).toBeDefined() - expect(result.current).toEqual( - "https://click.google-analytics.com/redirect?tid=UA-41425441-2&url=https%3A%2F%2Fitunes.apple.com%2Fus%2Fapp%2Fmy-app%2Fid123456789&aid=app_id&idfa=[AID]&cs=mdotm&cm=medium&cn=name&cc=content&ck=term&anid=mdotm&aclid=[CLICKID]&asid=id123456789" - ) - }) - - test("MobFox network", () => { - const network = supportedAdNetworks[13] - const arg = { - adNetwork: network, - method: network.method, - appID: "app_id", - source: network.source || network.networkID, - medium: "medium", - term: "term", - content: "content", - name: "name", - propertyID: "UA-41425441-2", - redirectURL: "https://itunes.apple.com/us/app/my-app/id123456789", - deviceID: network.deviceID, - customFields: network.customFields, - } - const { result } = renderHook(() => useGeneratedURL(arg)) - expect(result.current).toBeDefined() - expect(result.current).toEqual( - "https://click.google-analytics.com/redirect?tid=UA-41425441-2&url=https%3A%2F%2Fitunes.apple.com%2Fus%2Fapp%2Fmy-app%2Fid123456789&aid=app_id&idfa=MFOXIFA&cs=mobfox&cm=medium&cn=name&cc=content&ck=term&anid=mobfox" - ) - }) - - test("nend network", () => { - const network = supportedAdNetworks[14] - const arg = { - adNetwork: network, - method: network.method, - appID: "app_id", - source: network.source || network.networkID, - medium: "medium", - term: "term", - content: "content", - name: "name", - propertyID: "UA-41425441-2", - redirectURL: "https://itunes.apple.com/us/app/my-app/id123456789", - deviceID: network.deviceID, - customFields: network.customFields, - } - const { result } = renderHook(() => useGeneratedURL(arg)) - expect(result.current).toBeDefined() - expect(result.current).toEqual( - "https://click.google-analytics.com/redirect?tid=UA-41425441-2&url=https%3A%2F%2Fitunes.apple.com%2Fus%2Fapp%2Fmy-app%2Fid123456789&aid=app_id&idfa={{IDFA}}&cs=nend&cm=medium&cn=name&cc=content&ck=term&anid=nend&aclid={{NENDID}}" - ) - }) - - test("Opera network", () => { - const network = supportedAdNetworks[15] - const arg = { - adNetwork: network, - method: network.method, - appID: "app_id", - source: network.source || network.networkID, - medium: "medium", - term: "term", - content: "content", - name: "name", - propertyID: "UA-41425441-2", - redirectURL: "https://itunes.apple.com/us/app/my-app/id123456789", - deviceID: network.deviceID, - customFields: network.customFields, - } - const { result } = renderHook(() => useGeneratedURL(arg)) - expect(result.current).toBeDefined() - expect(result.current).toEqual( - "https://click.google-analytics.com/redirect?tid=UA-41425441-2&url=https%3A%2F%2Fitunes.apple.com%2Fus%2Fapp%2Fmy-app%2Fid123456789&aid=app_id&idfa=xxxidfaxxx&cs=opera&cm=medium&cn=name&cc=content&ck=term&anid=opera&aclid=xxxtransidxxx" - ) - }) - - test("Phunware network", () => { - const network = supportedAdNetworks[16] - const arg = { - adNetwork: network, - method: network.method, - appID: "app_id", - source: network.source || network.networkID, - medium: "medium", - term: "term", - content: "content", - name: "name", - propertyID: "UA-41425441-2", - redirectURL: "https://itunes.apple.com/us/app/my-app/id123456789", - deviceID: network.deviceID, - customFields: network.customFields, - } - const { result } = renderHook(() => useGeneratedURL(arg)) - expect(result.current).toBeDefined() - expect(result.current).toEqual( - "https://click.google-analytics.com/redirect?tid=UA-41425441-2&url=https%3A%2F%2Fitunes.apple.com%2Fus%2Fapp%2Fmy-app%2Fid123456789&aid=app_id&idfa=[idfa]&cs=phunware&cm=medium&cn=name&cc=content&ck=term&anid=phunware&aclid=[transaction_id]" - ) - }) - - test("Snakk!Ads network", () => { - const network = supportedAdNetworks[17] - const arg = { - adNetwork: network, - method: network.method, - appID: "app_id", - source: network.source || network.networkID, - medium: "medium", - term: "term", - content: "content", - name: "name", - propertyID: "UA-41425441-2", - redirectURL: "https://itunes.apple.com/us/app/my-app/id123456789", - deviceID: network.deviceID, - customFields: network.customFields, - } - const { result } = renderHook(() => useGeneratedURL(arg)) - expect(result.current).toBeDefined() - expect(result.current).toEqual( - "https://click.google-analytics.com/redirect?tid=UA-41425441-2&url=https%3A%2F%2Fitunes.apple.com%2Fus%2Fapp%2Fmy-app%2Fid123456789&aid=app_id&idfa=[idfa]&cs=snakkads&cm=medium&cn=name&cc=content&ck=term&anid=snakkads&aclid=[transaction_id]" - ) - }) - - test("Tapjoy network", () => { - const network = supportedAdNetworks[18] - const arg = { - adNetwork: network, - method: network.method, - appID: "app_id", - source: network.source || network.networkID, - medium: "medium", - term: "term", - content: "content", - name: "name", - propertyID: "UA-41425441-2", - redirectURL: "https://itunes.apple.com/us/app/my-app/id123456789", - deviceID: network.deviceID, - customFields: network.customFields, - } - const { result } = renderHook(() => useGeneratedURL(arg)) - expect(result.current).toBeDefined() - expect(result.current).toEqual( - "https://click.google-analytics.com/redirect?tid=UA-41425441-2&url=https%3A%2F%2Fitunes.apple.com%2Fus%2Fapp%2Fmy-app%2Fid123456789&aid=app_id&idfa=TAPJOY_RESTORED_RAW_ADVERTISING_ID&cs=tapjoy&cm=medium&cn=name&cc=content&ck=term&anid=tapjoy" - ) - }) - - test("Custom network redirect", () => { - const network = supportedAdNetworks[19] - const arg = { - adNetwork: network, - method: network.method, - appID: "app_id", - source: "source", - medium: "medium", - term: "term", - content: "content", - name: "name", - propertyID: "UA-41425441-2", - redirectURL: "https://itunes.apple.com/us/app/my-app/id123456789", - deviceID: "{idfa}", - customFields: network.customFields, - } - const { result } = renderHook(() => useGeneratedURL(arg)) - expect(result.current).toBeDefined() - expect(result.current).toEqual( - "https://click.google-analytics.com/redirect?tid=UA-41425441-2&url=https%3A%2F%2Fitunes.apple.com%2Fus%2Fapp%2Fmy-app%2Fid123456789&aid=app_id&idfa={idfa}&cs=source&cm=medium&cn=name&cc=content&ck=term" - ) - }) - - test("Custom network ping", () => { - const network = supportedAdNetworks[19] - const arg = { - adNetwork: network, - method: "ping", - appID: "app_id", - source: "source", - medium: "medium", - term: "term", - content: "content", - name: "name", - propertyID: "UA-41425441-2", - redirectURL: "", - deviceID: "{idfa}", - customFields: network.customFields, - } - const { result } = renderHook(() => useGeneratedURL(arg)) - expect(result.current).toBeDefined() - expect(result.current).toEqual( - "https://click.google-analytics.com/ping?tid=UA-41425441-2&aid=app_id&idfa={idfa}&cs=source&cm=medium&cn=name&cc=content&ck=term" - ) - }) -}) diff --git a/src/components/CampaignURLBuilder/IOS/useGenerateURL.ts b/src/components/CampaignURLBuilder/IOS/useGenerateURL.ts deleted file mode 100644 index b7154cd80..000000000 --- a/src/components/CampaignURLBuilder/IOS/useGenerateURL.ts +++ /dev/null @@ -1,116 +0,0 @@ -import { useMemo } from "react" -import { AdNetwork, CustomField } from "../adNetworks" - -interface Arg { - adNetwork: AdNetwork | undefined - appID: string | undefined - source: string | undefined - medium: string | undefined - term: string | undefined - content: string | undefined - name: string | undefined - propertyID: string | undefined - redirectURL: string | undefined - deviceID: string | undefined - customFields: CustomField[] | undefined - method: string | undefined -} - -const useGenerateURL = (arg: Arg): string | undefined => { - return useMemo(() => { - if ( - !arg.appID || - !arg.source || - !arg.propertyID || - !arg.deviceID || - arg.adNetwork === undefined || - (arg.method === "redirect" && !arg.redirectURL) - ) { - return undefined - } - - const urlParams = new URLSearchParams() - - urlParams.append("tid", arg.propertyID) - if (arg.redirectURL) { - urlParams.append("url", arg.redirectURL) - } - urlParams.append("aid", arg.appID) - urlParams.append("idfa", arg.deviceID) - - if (arg.source) { - urlParams.append("cs", arg.source) - } - if (arg.medium) { - urlParams.append("cm", arg.medium) - } - if (arg.name) { - urlParams.append("cn", arg.name) - } - if (arg.content) { - urlParams.append("cc", arg.content) - } - if (arg.term) { - urlParams.append("ck", arg.term) - } - - if (arg.adNetwork.networkID) { - urlParams.append("anid", arg.adNetwork.networkID) - } - if (arg.adNetwork.clickID) { - urlParams.append("aclid", arg.adNetwork.clickID) - } - - // if (arg.adNetwork.customFields) { - // arg.adNetwork.customFields.forEach(customField => { - // if (customField.builders?.includes("play")) { - // const { name, value } = customField - // encodedParamsString.append(name, value) - // } - // }) - // } - - if (arg.customFields) { - arg.customFields.forEach(customField => { - if (customField.builders?.includes("ios")) { - const { name, value } = customField - urlParams.append(name, value) - } - }) - } - - if (arg.adNetwork.label === "Google AdMob") { - urlParams.append("hash", "md5") - } - - const queryString = urlParams - .toString() - // Replace all special macro-values with a non uriEncoded value. - .replace("idfa=%7Badvertising_id%7D", "idfa={advertising_id}") - .replace("idfa=%5BIDFA%5D", "idfa=[IDFA]") - .replace("idfa=%7Bidfa%7D", "idfa={idfa}") - .replace("idfa=%7BADID%7D", "idfa={ADID}") - .replace("idfa=%7B%7Badvertising_id%7D%7D", "idfa={{advertising_id}}") - .replace("idfa=%24IDA", "idfa=$IDA") - .replace("idfa=%7Bapple_ifa%7D", "idfa={apple_ifa}") - .replace("idfa=%5BDEVICE_AD_ID%5D", "idfa=[DEVICE_AD_ID]") - .replace("idfa=%5B%3A_jv_uaid%3A%5D", "idfa=[:_jv_uaid:]") - .replace("idfa=%5BAID%5D", "idfa=[AID]") - .replace("idfa=%7B%7BIDFA%7D%7D", "idfa={{IDFA}}") - .replace("idfa=%5Bidfa%5D", "idfa=[idfa]") - .replace("aclid=%7Bclick_id%7D", "aclid={click_id}") - .replace("aclid=%24IMP_ID", "aclid=$IMP_ID") - .replace("aclid=%7Bhash%7D", "aclid={hash}") - .replace("aclid=%5BCLK_ID%5D", "aclid=[CLK_ID]") - .replace("aclid=%5B%3A_jv_urid%3A%5D", "aclid=[:_jv_urid:]") - .replace("aclid=%5BCLICKID%5D", "aclid=[CLICKID]") - .replace("aclid=%7B%7BNENDID%7D%7D", "aclid={{NENDID}}") - .replace("aclid=%5Btransaction_id%5D", "aclid=[transaction_id]") - .replace("cp1=%7Bapp_id%7D", "cp1={app_id}") - .replace("cp1=%5BTRACK_ID%5D", "cp1=[TRACK_ID]") - - return `https://click.google-analytics.com/${arg.method}?${queryString}` - }, [arg]) -} - -export default useGenerateURL diff --git a/src/components/CampaignURLBuilder/IOS/useInputs.ts b/src/components/CampaignURLBuilder/IOS/useInputs.ts deleted file mode 100644 index a07ec087a..000000000 --- a/src/components/CampaignURLBuilder/IOS/useInputs.ts +++ /dev/null @@ -1,176 +0,0 @@ -import { GAVersion, StorageKey } from "@/constants" -import { useUpdateByIndex } from "@/hooks" -import { - useHydratedPersistantObject, - useHydratedPersistantString, -} from "@/hooks/useHydrated" -import { decodeObject, encodeObject } from "@/url" -import { useCallback, useEffect, useMemo } from "react" -import { QueryParamConfig } from "use-query-params" -import { AdNetwork, CustomField, supportedAdNetworks } from "../adNetworks" - -enum QueryParam { - AppID = "a", - Source = "b", - Medium = "c", - Term = "d", - Content = "e", - Name = "f", - RedirectURL = "g", - DeviceID = "h", - CustomFields = "i", - AdNetwork = "j", - Method = "k", - GA4Account = "l", - GA4Property = "m", - PropertyIDUA = "n", - PropertyIDGA4 = "o", -} - -const customFieldsParam: QueryParamConfig = { - encode: v => (v ? encodeObject(v) : undefined), - decode: a => (typeof a === "string" ? decodeObject(a) : undefined), -} - -const adNetworkParam: QueryParamConfig = { - encode: v => (v ? encodeObject(v) : undefined), - decode: a => (typeof a === "string" ? decodeObject(a) : undefined), -} - -const useInputs = (version: GAVersion) => { - const [adNetwork, setAdNetworkLocal] = useHydratedPersistantObject( - StorageKey.campaignBuilderIOSAdNetwork, - QueryParam.AdNetwork, - adNetworkParam, - supportedAdNetworks[0] - ) - - const [appID, setAppID] = useHydratedPersistantString( - StorageKey.campaignBuilderIOSAppID, - QueryParam.AppID, - "" - ) - const [source, setSource] = useHydratedPersistantString( - StorageKey.campaignBuilderIOSSource, - QueryParam.Source, - "" - ) - const [medium, setMedium] = useHydratedPersistantString( - StorageKey.campaignBuilderIOSMedium, - QueryParam.Medium, - "" - ) - const [term, setTerm] = useHydratedPersistantString( - StorageKey.campaignBuilderIOSTerm, - QueryParam.Term, - "" - ) - const [content, setContent] = useHydratedPersistantString( - StorageKey.campaignBuilderIOSContent, - QueryParam.Content, - "" - ) - const [name, setName] = useHydratedPersistantString( - StorageKey.campaignBuilderIOSName, - QueryParam.Name, - "" - ) - - const [uaPropertyID, setUAPropertyID] = useHydratedPersistantString( - StorageKey.campaignBuilderIOSPropertyIDUA, - QueryParam.PropertyIDUA, - "" - ) - const [ga4PropertyID, setGA4PropertyID] = useHydratedPersistantString( - StorageKey.campaignBuilderIOSPropertyIDGA4, - QueryParam.PropertyIDGA4, - "" - ) - - const [propertyID, setPropertyID] = useMemo< - ReturnType - >(() => { - if (version === GAVersion.GoogleAnalytics4) { - return [ga4PropertyID, setGA4PropertyID] - } else { - return [uaPropertyID, setUAPropertyID] - } - }, [version, uaPropertyID, setUAPropertyID, ga4PropertyID, setGA4PropertyID]) - - const [redirectURL, setRedirectURL] = useHydratedPersistantString( - StorageKey.campaignBuilderIOSRedirectURL, - QueryParam.RedirectURL, - "" - ) - - const [deviceID, setDeviceID] = useHydratedPersistantString( - StorageKey.campaignBuilderIOSDeviceID, - QueryParam.DeviceID, - "" - ) - - const [method, setMethod] = useHydratedPersistantString( - StorageKey.campaignBuilderIOSMethod, - QueryParam.Method, - "redirect" - ) - - const [customFields, setCustomFields] = useHydratedPersistantObject< - CustomField[] - >( - StorageKey.campaignBuilderIOSCustomFields, - QueryParam.CustomFields, - customFieldsParam, - adNetwork?.customFields || [] - ) - - const updateCustomField = useUpdateByIndex(setCustomFields) - - useEffect(() => { - setDeviceID(adNetwork?.deviceID) - setMethod(adNetwork?.method) - }, [adNetwork, setDeviceID, setMethod]) - - const setAdNetwork = useCallback( - (nu: AdNetwork) => { - setAdNetworkLocal(nu) - setDeviceID(nu.deviceID) - setCustomFields(nu.customFields) - if (nu.label === "Custom") { - setSource("") - } else { - setSource(nu.source || nu.networkID) - } - }, - [setAdNetworkLocal, setCustomFields, setDeviceID, setSource] - ) - - return { - appID, - setAppID, - source, - setSource, - medium, - setMedium, - term, - setTerm, - content, - setContent, - name, - setName, - adNetwork, - setAdNetwork, - propertyID, - setPropertyID, - redirectURL, - setRedirectURL, - deviceID, - setDeviceID, - customFields, - updateCustomField, - method, - setMethod, - } -} - -export default useInputs diff --git a/src/components/CampaignURLBuilder/Play/index.tsx b/src/components/CampaignURLBuilder/Play/index.tsx index 49537c8f4..ad00fca4a 100644 --- a/src/components/CampaignURLBuilder/Play/index.tsx +++ b/src/components/CampaignURLBuilder/Play/index.tsx @@ -1,20 +1,104 @@ import * as React from "react" -import Autocomplete from "@material-ui/lab/Autocomplete" -import Typography from "@material-ui/core/Typography" -import TextField from "@material-ui/core/TextField" -import Paper from "@material-ui/core/Paper" +import { styled } from '@mui/material/styles'; + +import Autocomplete from "@mui/material/Autocomplete" +import Typography from "@mui/material/Typography" +import TextField from "@mui/material/TextField" +import Paper from "@mui/material/Paper" import { GAVersion, Url } from "@/constants" -import useFormStyles from "@/hooks/useFormStyles" import InlineCode from "@/components/InlineCode" import { CopyIconButton } from "@/components/CopyButton" import useInputs from "./useInputs" import useGenerateURL from "./useGenerateURL" -import useStyles from "../Web/useStyles" import ExternalLink from "@/components/ExternalLink" import { AdNetwork, supportedAdNetworks } from "../adNetworks" +const PREFIX = 'PlayURLBuilder'; + +const classes = { + generatedInput: `${PREFIX}-generatedInput`, + denseTableCell: `${PREFIX}-denseTableCell`, + buttons: `${PREFIX}-buttons`, + shortened: `${PREFIX}-shortened`, + inputs: `${PREFIX}-inputs`, + bold: `${PREFIX}-bold`, + share: `${PREFIX}-share`, + shareInvalid: `${PREFIX}-shareInvalid`, + form: `${PREFIX}-form` +}; + +const Root = styled('section')(( + { + theme + } +) => ({ + [`& .${classes.generatedInput}`]: { + wordBreak: "break-all", + }, + + [`& .${classes.denseTableCell}`]: { + whiteSpace: "nowrap", + "& p": { + paddingBottom: theme.spacing(0.5), + }, + }, + + [`& .${classes.buttons}`]: { + display: "flex", + "& > button": { + margin: theme.spacing(1), + }, + }, + + [`& .${classes.shortened}`]: { + marginTop: theme.spacing(1), + display: "flex", + alignItems: "center", + "& > :first-child": { + flexGrow: 1, + }, + "& > :not(:first-child)": { + marginLeft: theme.spacing(1), + }, + }, + + [`& .${classes.inputs}`]: { + display: "flex", + flexDirection: "column", + marginBottom: theme.spacing(1), + maxWidth: "600px", + }, + + [`& .${classes.bold}`]: { + fontWeight: "bold", + }, + + [`& .${classes.share}`]: { + padding: theme.spacing(3), + display: "flex", + flexDirection: "column", + }, + + [`& .${classes.shareInvalid}`]: { + display: "flex", + flexDirection: "row", + paddingTop: theme.spacing(3), + alignItems: "center", + "& svg": { + marginRight: theme.spacing(2), + }, + "& p": { + paddingBottom: "unset", + }, + }, + + [`& .${classes.form}`]: { + maxWidth: "80ch", + } +})); + interface PlayURLBuilderProps { version: GAVersion } @@ -24,8 +108,7 @@ const customCampaigns = ( ) const PlayURLBuilder: React.FC = () => { - const classes = useStyles() - const formClasses = useFormStyles() + const { setAdNetwork, @@ -52,7 +135,7 @@ const PlayURLBuilder: React.FC = () => { }, [url]) return ( -
+ This tool allows you to easily add campaign parameters to URLs so you can measure {customCampaigns} in Google Analytics. @@ -65,10 +148,9 @@ const PlayURLBuilder: React.FC = () => { autoHighlight options={Object.values(supportedAdNetworks)} getOptionLabel={a => a.label} - getOptionSelected={(a, b) => a.networkID === b.networkID} + isOptionEqualToValue={(a, b) => a.networkID === b.networkID} value={adNetwork} onChange={(_event, value) => setAdNetwork(value)} - renderOption={a => a.label} renderInput={params => ( = () => { )} -
- ) + + ); } export default PlayURLBuilder diff --git a/src/components/CampaignURLBuilder/Web/GeneratedURL/WarningsFor.tsx b/src/components/CampaignURLBuilder/Web/GeneratedURL/WarningsFor.tsx index 0b9c47d32..f15a058f3 100644 --- a/src/components/CampaignURLBuilder/Web/GeneratedURL/WarningsFor.tsx +++ b/src/components/CampaignURLBuilder/Web/GeneratedURL/WarningsFor.tsx @@ -1,13 +1,40 @@ import * as React from "react" -import { Warning } from "@material-ui/icons" -import Typography from "@material-ui/core/Typography" +import { styled } from '@mui/material/styles'; + +import { Warning } from "@mui/icons-material" +import Typography from "@mui/material/Typography" import { v4 as uuid } from "uuid" import InlineCode from "@/components/InlineCode" import { Url } from "@/constants" -import useStyles from "../useStyles" import { Dispatch } from "@/types" +import {PropsWithChildren} from 'react'; + +const PREFIX = 'WarningsFor'; + +const classes = { + shareInvalid: `${PREFIX}-shareInvalid` +}; + +const Root = styled('section')(( + { + theme + } +) => ({ + [`&.${classes.shareInvalid}`]: { + display: "flex", + flexDirection: "row", + paddingTop: theme.spacing(3), + alignItems: "center", + "& svg": { + marginRight: theme.spacing(2), + }, + "& p": { + paddingBottom: "unset", + }, + } +})); const iosCampaignTracking = ( iOS Campaign Tracking URL Builder @@ -25,7 +52,7 @@ const WarningsFor: React.FC = ({ websiteURL, setHasWarning, }) => { - const classes = useStyles() + const asURL = React.useMemo(() => { try { return new URL(websiteURL) @@ -34,13 +61,13 @@ const WarningsFor: React.FC = ({ } }, [websiteURL]) - const BaseWarning: React.FC = ({ children }) => { + const BaseWarning: React.FC = ({ children }) => { return ( -
+ {children} -
- ) + + ); } const warnings = React.useMemo(() => { diff --git a/src/components/CampaignURLBuilder/Web/GeneratedURL/index.tsx b/src/components/CampaignURLBuilder/Web/GeneratedURL/index.tsx index 6256e95e8..fbbd52a4d 100644 --- a/src/components/CampaignURLBuilder/Web/GeneratedURL/index.tsx +++ b/src/components/CampaignURLBuilder/Web/GeneratedURL/index.tsx @@ -1,13 +1,13 @@ import * as React from "react" +import { styled } from '@mui/material/styles'; + import clsx from "classnames" -import Paper from "@material-ui/core/Paper" -import { Error as ErrorIcon } from "@material-ui/icons" -import Typography from "@material-ui/core/Typography" -import TextField from "@material-ui/core/TextField" +import Paper from "@mui/material/Paper" +import { Error as ErrorIcon } from "@mui/icons-material" +import Typography from "@mui/material/Typography" +import TextField from "@mui/material/TextField" import { GAVersion } from "@/constants" -import useFormStyles from "@/hooks/useFormStyles" -import useStyles from "../useStyles" import WarningsFor from "./WarningsFor" import useGenerateURL from "./useGenerateURL" import ShortenLink from "@/components/ShortenLink" @@ -16,6 +16,61 @@ import LabeledCheckbox from "@/components/LabeledCheckbox" import { CopyIconButton } from "@/components/CopyButton" import Warning from "@/components/Warning" +const PREFIX = 'GeneratedURL'; + +const classes = { + generatedInput: `${PREFIX}-generatedInput`, + share: `${PREFIX}-share`, + form: `${PREFIX}-form`, + shareInvalid: `${PREFIX}-shareInvalid`, + shortened: `${PREFIX}-shortened` +}; + +const StyledPaper = styled(Paper)(( + { + theme + } +) => ({ + [`& .${classes.generatedInput}`]: { + wordBreak: "break-all", + }, + + [`& .${classes.form}`]: { + maxWidth: "80ch", + }, + + [`&.${classes.share}`]: { + padding: theme.spacing(3), + display: "flex", + flexDirection: "column", + }, + + [`& .${classes.shareInvalid}`]: { + display: "flex", + flexDirection: "row", + paddingTop: theme.spacing(3), + alignItems: "center", + "& svg": { + marginRight: theme.spacing(2), + }, + "& p": { + paddingBottom: "unset", + }, + }, + + [`& .${classes.shortened}`]: { + marginTop: theme.spacing(1), + display: "flex", + alignItems: "center", + "& > :first-child": { + flexGrow: 1, + }, + "& > :not(:first-child)": { + marginLeft: theme.spacing(1), + }, + }, +})); + interface GeneratedURLProps { version: GAVersion websiteURL: string @@ -37,8 +92,7 @@ const GeneratedURL: React.FC = ({ term, content, }) => { - const classes = useStyles() - const formClasses = useFormStyles() + const { useFragment, @@ -74,7 +128,7 @@ const GeneratedURL: React.FC = ({ }) return ( - + {!hasWarning && (hasRequiredFields ? ( @@ -160,8 +214,8 @@ const GeneratedURL: React.FC = ({ ))} - - ) + + ); } export default GeneratedURL diff --git a/src/components/CampaignURLBuilder/Web/index.tsx b/src/components/CampaignURLBuilder/Web/index.tsx index c71d0ddc4..f8f055ea8 100644 --- a/src/components/CampaignURLBuilder/Web/index.tsx +++ b/src/components/CampaignURLBuilder/Web/index.tsx @@ -13,21 +13,100 @@ // limitations under the License. import * as React from "react" -import Typography from "@material-ui/core/Typography" -import TextField from "@material-ui/core/TextField" -import Table from "@material-ui/core/Table" -import TableBody from "@material-ui/core/TableBody" -import TableCell from "@material-ui/core/TableCell" -import TableHead from "@material-ui/core/TableHead" -import TableRow from "@material-ui/core/TableRow" +import { styled } from '@mui/material/styles'; +import Typography from "@mui/material/Typography" +import TextField from "@mui/material/TextField" +import Table from "@mui/material/Table" +import TableBody from "@mui/material/TableBody" +import TableCell from "@mui/material/TableCell" +import TableHead from "@mui/material/TableHead" +import TableRow from "@mui/material/TableRow" import { Url, GAVersion } from "@/constants" import GeneratedURL from "./GeneratedURL" -import useStyles from "./useStyles" import useInputs from "./useInputs" import ExternalLink from "../../ExternalLink" import InlineCode from "../../InlineCode" +const PREFIX = 'WebURLBuilder'; + +const classes = { + generatedInput: `${PREFIX}-generatedInput`, + denseTableCell: `${PREFIX}-denseTableCell`, + buttons: `${PREFIX}-buttons`, + shortened: `${PREFIX}-shortened`, + inputs: `${PREFIX}-inputs`, + bold: `${PREFIX}-bold`, + share: `${PREFIX}-share`, + shareInvalid: `${PREFIX}-shareInvalid` +}; + +const Root = styled('div')(( + { + theme + } +) => ({ + [`& .${classes.generatedInput}`]: { + wordBreak: "break-all", + }, + + [`& .${classes.denseTableCell}`]: { + whiteSpace: "nowrap", + "& p": { + paddingBottom: theme.spacing(0.5), + }, + }, + + [`& .${classes.buttons}`]: { + display: "flex", + "& > button": { + margin: theme.spacing(1), + }, + }, + + [`& .${classes.shortened}`]: { + marginTop: theme.spacing(1), + display: "flex", + alignItems: "center", + "& > :first-child": { + flexGrow: 1, + }, + "& > :not(:first-child)": { + marginLeft: theme.spacing(1), + }, + }, + + [`& .${classes.inputs}`]: { + display: "flex", + flexDirection: "column", + marginBottom: theme.spacing(1), + maxWidth: "600px", + }, + + [`& .${classes.bold}`]: { + fontWeight: "bold", + }, + + [`& .${classes.share}`]: { + padding: theme.spacing(3), + display: "flex", + flexDirection: "column", + }, + + [`& .${classes.shareInvalid}`]: { + display: "flex", + flexDirection: "row", + paddingTop: theme.spacing(3), + alignItems: "center", + "& svg": { + marginRight: theme.spacing(2), + }, + "& p": { + paddingBottom: "unset", + }, + } +})); + const customCampaigns = ( Custom Campaigns ) @@ -37,7 +116,7 @@ interface WebURLBuilderProps { } export const WebURLBuilder: React.FC = ({ version }) => { - const classes = useStyles() + const { websiteURL, @@ -57,8 +136,8 @@ export const WebURLBuilder: React.FC = ({ version }) => { } = useInputs() return ( - <> - + ( + This tool allows you to easily add campaign parameters to URLs so you can measure {customCampaigns} in Google Analytics. @@ -69,7 +148,6 @@ export const WebURLBuilder: React.FC = ({ version }) => { Fill out all fields marked with an asterisk (*), and the campaign URL will be generated for you. -
= ({ version }) => { - - ) + ) + ); } export default WebURLBuilder diff --git a/src/components/CampaignURLBuilder/Web/useInputs.ts b/src/components/CampaignURLBuilder/Web/useInputs.ts index 95dc7a960..8c06d23f5 100644 --- a/src/components/CampaignURLBuilder/Web/useInputs.ts +++ b/src/components/CampaignURLBuilder/Web/useInputs.ts @@ -1,4 +1,4 @@ -import { useCallback } from "react" +import React, { useCallback } from "react" import { usePersistentString } from "@/hooks" import { StorageKey } from "@/constants" @@ -32,7 +32,7 @@ const useInputs = () => { ) const onWebsiteChange = useCallback( - e => { + (e: React.ChangeEvent) => { const extractedParams = extractParamsFromWebsiteURL(e.target.value) if (extractedParams !== undefined) { const { diff --git a/src/components/CampaignURLBuilder/Web/useStyles.ts b/src/components/CampaignURLBuilder/Web/useStyles.ts deleted file mode 100644 index 1399f4b74..000000000 --- a/src/components/CampaignURLBuilder/Web/useStyles.ts +++ /dev/null @@ -1,58 +0,0 @@ -import makeStyles from "@material-ui/core/styles/makeStyles" - -const useStyles = makeStyles(theme => ({ - generatedInput: { - wordBreak: "break-all", - }, - denseTableCell: { - whiteSpace: "nowrap", - "& p": { - paddingBottom: theme.spacing(0.5), - }, - }, - buttons: { - display: "flex", - "& > button": { - margin: theme.spacing(1), - }, - }, - shortened: { - marginTop: theme.spacing(1), - display: "flex", - alignItems: "center", - "& > :first-child": { - flexGrow: 1, - }, - "& > :not(:first-child)": { - marginLeft: theme.spacing(1), - }, - }, - inputs: { - display: "flex", - flexDirection: "column", - marginBottom: theme.spacing(1), - maxWidth: "600px", - }, - bold: { - fontWeight: "bold", - }, - share: { - padding: theme.spacing(3), - display: "flex", - flexDirection: "column", - }, - shareInvalid: { - display: "flex", - flexDirection: "row", - paddingTop: theme.spacing(3), - alignItems: "center", - "& svg": { - marginRight: theme.spacing(2), - }, - "& p": { - paddingBottom: "unset", - }, - }, -})) - -export default useStyles diff --git a/src/components/CampaignURLBuilder/index.tsx b/src/components/CampaignURLBuilder/index.tsx index 34da89c22..3528b18cf 100644 --- a/src/components/CampaignURLBuilder/index.tsx +++ b/src/components/CampaignURLBuilder/index.tsx @@ -15,8 +15,8 @@ import * as React from "react" import { navigate } from "gatsby" -import Tabs from "@material-ui/core/Tabs" -import Tab from "@material-ui/core/Tab" +import Tabs from "@mui/material/Tabs" +import Tab from "@mui/material/Tab" import { GAVersion } from "@/constants" import TabPanel from "@/components/TabPanel" diff --git a/src/components/CodeBlock.tsx b/src/components/CodeBlock.tsx index d5962d884..a0863c1e7 100644 --- a/src/components/CodeBlock.tsx +++ b/src/components/CodeBlock.tsx @@ -13,25 +13,37 @@ // limitations under the License. import * as React from "react" -import { makeStyles } from "@material-ui/core/styles" +import { styled } from '@mui/material/styles'; import SyntaxHighlighter from "react-syntax-highlighter" import { SyntaxHighlighterProps } from "react-syntax-highlighter" -import Paper from "@material-ui/core/Paper" -import Tabs from "@material-ui/core/Tabs" -import Tab from "@material-ui/core/Tab" +import Paper from "@mui/material/Paper" +import Tabs from "@mui/material/Tabs" +import Tab from "@mui/material/Tab" import CopyButton from "./CopyButton" -const useStyles = makeStyles(theme => ({ - codeBlock: { +const PREFIX = 'CodeBlock'; + +const classes = { + codeBlock: `${PREFIX}-codeBlock`, + code: `${PREFIX}-code` +}; + +const StyledPaper = styled(Paper)(( + { + theme + } +) => ({ + [`& .${classes.codeBlock}`]: { display: "flex", padding: theme.spacing(2), position: "relative", alignItems: "flex-start", }, - code: { + + [`& .${classes.code}`]: { "flex-grow": "1", - }, -})) + } +})); interface BlockData { code: string @@ -48,11 +60,11 @@ const CodeBlock: React.FC = ({ className, ...props }) => { - const classes = useStyles() + const [selectedTab, setSelectedTab] = React.useState(0) return ( - + = ({ ) )} - - ) + + ); } export default CodeBlock diff --git a/src/components/CopyButton.tsx b/src/components/CopyButton.tsx index cc98fcb9b..4f2e94e59 100644 --- a/src/components/CopyButton.tsx +++ b/src/components/CopyButton.tsx @@ -13,20 +13,30 @@ // limitations under the License. import * as React from "react" -import Button from "@material-ui/core/Button" -import IconButton, { IconButtonProps } from "@material-ui/core/IconButton" -import Tooltip from "@material-ui/core/Tooltip" -import FileCopyIcon from "@material-ui/icons/FileCopy" -import Snackbar from "@material-ui/core/Snackbar" -import MuiAlert from "@material-ui/lab/Alert" +import { styled } from '@mui/material/styles'; +import Button from "@mui/material/Button" +import IconButton, { IconButtonProps } from "@mui/material/IconButton" +import Tooltip from "@mui/material/Tooltip" +import FileCopyIcon from "@mui/icons-material/FileCopy" +import Snackbar from "@mui/material/Snackbar" +import MuiAlert from "@mui/material/Alert" import copyToClipboard from "copy-to-clipboard" -import { makeStyles } from "@material-ui/core/styles" -const useStyles = makeStyles(theme => ({ - copyIcon: { +const PREFIX = 'CopyButton'; + +const classes = { + copyIcon: `${PREFIX}-copyIcon` +}; + +const Root = styled('div')(( + { + theme + } +) => ({ + [`& .${classes.copyIcon}`]: { marginRight: theme.spacing(1), - }, -})) + } +})); interface BaseCopyButtonProps { toCopy: string @@ -47,7 +57,7 @@ interface CopyButtonPropsButton extends BaseCopyButtonProps { type CopyButtonProps = CopyButtonPropsIconButton | CopyButtonPropsButton const CopyButton: React.FC = props => { - const classes = useStyles() + const [showAlert, setShowAlert] = React.useState(false) const { toCopy } = props @@ -58,7 +68,7 @@ const CopyButton: React.FC = props => { }, [toCopy]) return ( - <> + ( {props.useIconButton === true ? ( @@ -84,8 +94,8 @@ const CopyButton: React.FC = props => { Copied to clipboard. - - ) + ) + ); } interface CopyIconButtonProps { diff --git a/src/components/DimensionsMetricsExplorer/ColumnGroupList.tsx b/src/components/DimensionsMetricsExplorer/ColumnGroupList.tsx deleted file mode 100644 index b3607dc1d..000000000 --- a/src/components/DimensionsMetricsExplorer/ColumnGroupList.tsx +++ /dev/null @@ -1,489 +0,0 @@ -// Copyright 2019 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 * as React from "react" - -import Typography from "@material-ui/core/Typography" -import IconButton from "@material-ui/core/IconButton" -import Tooltip from "@material-ui/core/Tooltip" -import LinkIcon from "@material-ui/icons/Link" -import Button from "@material-ui/core/Button" -import RemoveCircle from "@material-ui/icons/RemoveCircle" -import AddCircle from "@material-ui/icons/AddCircle" -import Info from "@material-ui/icons/Info" -import makeStyles from "@material-ui/core/styles/makeStyles" -import { groupBy, map, sortBy } from "lodash" -import { Set } from "immutable" -import { navigate } from "gatsby" -import classnames from "classnames" - -import { CopyIconButton } from "@/components/CopyButton" -import LabeledCheckbox from "@/components/LabeledCheckbox" -import { CUBES_BY_COLUMN_NAME, CUBE_NAMES, CubesByColumnName } from "./cubes" -import { Column } from "@/types/ua" - -const useStyles = makeStyles(theme => ({ - accordionTitle: { margin: 0 }, - expandContract: { - margin: theme.spacing(1), - }, - column: { - display: "flex", - alignItems: "baseline", - padding: "unset", - }, - columnSubgroupTitle: { - marginBottom: theme.spacing(1), - marginTop: theme.spacing(0.5), - marginLeft: theme.spacing(-1), - "& > svg": { - marginRight: theme.spacing(1), - }, - "& > a": { - marginLeft: theme.spacing(1), - }, - display: "flex", - }, - columnSubgroup: { - marginLeft: theme.spacing(4), - marginBottom: theme.spacing(1), - }, - deprecatedColumn: { - textDecoration: "line-through", - }, - checkbox: { - padding: "unset", - paddingRight: theme.spacing(1), - }, - deprecatedCheckbox: { - padding: "unset", - paddingRight: theme.spacing(1), - visibility: "hidden", - }, - columnDetails: { - display: "flex", - flexDirection: "column", - }, - columnLabel: { - display: "flex", - alignItems: "flex-start", - flexWrap: "wrap", - position: "relative", - top: theme.spacing(-1), - }, - columnButton: { - padding: "unset", - paddingLeft: theme.spacing(1), - }, - name: { marginRight: theme.spacing(1) }, - id: { - "& > button": { - // display: "none", - padding: "unset", - paddingLeft: theme.spacing(1), - }, - // "&:hover": { - // "& > button": { - // display: "unset", - // }, - // }, - }, - popover: { - pointerEvents: "none", - }, - paper: { - padding: theme.spacing(1), - }, - labelText: { - display: "flex", - flexDirection: "row", - alignItems: "center", - }, -})) - -type ColumnLabelProps = { - column: Column - isDeprecated: boolean -} -const ColumnLabel: React.FC = ({ column, isDeprecated }) => { - const classes = useStyles() - const slug = React.useMemo( - () => - `/dimensions-metrics-explorer/${ - column.attributes?.group.replace(/ /g, "-").toLowerCase() || "" - }#${column.id?.replace("ga:", "")}`, - [column] - ) - - return ( -
-
- - {column.attributes?.uiName} - - - {column.id} - - - - navigate(slug)} - className={classes.columnButton} - > - - - -
-
- ) -} - -const SelectableColumn: React.FC<{ - column: Column - selected: boolean - disabled: boolean - setSelected: (selected: boolean) => void -}> = ({ column, selected, disabled, setSelected }) => { - const classes = useStyles() - const isDeprecated = React.useMemo( - () => column.attributes?.status !== "PUBLIC", - [column.attributes] - ) - return ( - - - - ) -} - -const ColumnSubgroup: React.FC<{ - columns: Column[] - name: "Dimensions" | "Metrics" - allowableCubes: Set - allowDeprecated: boolean - onlySegments: boolean - cubesByColumnName: CubesByColumnName - selectedColumns: Set - selectColumn: (column: string, selected: boolean) => void -}> = ({ - columns, - name, - selectColumn, - selectedColumns, - allowableCubes, - allowDeprecated, - onlySegments, - cubesByColumnName, -}) => { - const classes = useStyles() - // Move deprecated columns to the bottom - const sortedColumns = React.useMemo( - () => - sortBy(columns, column => - column.attributes?.status === "PUBLIC" ? 0 : 1 - ) - .filter( - column => - (allowDeprecated && column.attributes?.status !== "PUBLIC") || - column.attributes?.status === "PUBLIC" - ) - .filter(column => { - if (onlySegments) { - return column.attributes?.allowedInSegments === "true" - } else { - return true - } - }), - [columns, allowDeprecated, onlySegments] - ) - - return ( -
- - {name} - -
- {sortedColumns.length === 0 ? ( - <>No {name}. - ) : ( - sortedColumns.map(column => { - const disabled = - allowableCubes.intersect(cubesByColumnName.get(column.id!, Set())) - .size === 0 - return ( - selectColumn(column.id!, selected)} - disabled={disabled} - selected={selectedColumns.contains(column.id!)} - /> - ) - }) - )} -
-
- ) -} - -const ColumnGroup: React.FC<{ - open: boolean - toggleOpen: () => void - name: string - columns: Column[] - onlySegments: boolean - allowDeprecated: boolean - allowableCubes: Set - cubesByColumnName: CubesByColumnName - selectedColumns: Set - selectColumn: (column: string, selected: boolean) => void -}> = ({ - open, - toggleOpen, - name, - allowDeprecated, - onlySegments, - columns, - allowableCubes, - cubesByColumnName, - selectedColumns, - selectColumn, -}) => { - const classes = useStyles() - - if (!open) { - return ( - - - {name} - - ) - } else { - return ( - <> - - - {name} - - - - - - column.attributes?.type === "DIMENSION" - )} - allowableCubes={allowableCubes} - allowDeprecated={allowDeprecated} - onlySegments={onlySegments} - cubesByColumnName={cubesByColumnName} - selectColumn={selectColumn} - selectedColumns={selectedColumns} - /> - column.attributes?.type === "METRIC" - )} - allowableCubes={allowableCubes} - allowDeprecated={allowDeprecated} - onlySegments={onlySegments} - cubesByColumnName={cubesByColumnName} - selectColumn={selectColumn} - selectedColumns={selectedColumns} - /> - - ) - } -} - -const ColumnGroupList: React.FC<{ - allowDeprecated: boolean - onlySegments: boolean - columns: Column[] - searchTerms: string[] -}> = ({ allowDeprecated, onlySegments, columns, searchTerms }) => { - const classes = useStyles() - const filteredColumns = React.useMemo(() => { - let filtered: Column[] = columns - - if (!allowDeprecated) { - filtered = filtered.filter( - column => column?.attributes?.status !== "DEPRECATED" - ) - } - - if (onlySegments) { - filtered = filtered.filter( - column => column?.attributes?.allowedInSegments === "true" - ) - } - - filtered = filtered.filter(column => - searchTerms.every( - term => - column?.id?.toLowerCase().indexOf(term) !== -1 || - column?.attributes?.uiName.toLowerCase().indexOf(term) !== -1 - ) - ) - - return filtered - }, [columns, searchTerms, allowDeprecated, onlySegments]) - // Group all the columns by group - const groupedColumns = React.useMemo(() => - // JS Sets guarantee insertion order is preserved, which is important - // because the key order in this groupBy determines the order that - // they appear in the UI. - { - return groupBy(filteredColumns, column => column.attributes?.group) - }, [filteredColumns]) - - // Set of column groups that are currently expanded. - const [open, setOpen] = React.useState>(() => { - return Set() - }) - - // Expand/Collapse callbacks - const toggleGroupOpen = React.useCallback( - (group: string) => - setOpen(oldOpen => - oldOpen.contains(group) ? oldOpen.remove(group) : oldOpen.add(group) - ), - [setOpen] - ) - - const collapseAll = React.useCallback(() => setOpen(Set()), [setOpen]) - - const expandAll = React.useCallback( - () => setOpen(Set.fromKeys(groupedColumns)), - [setOpen, groupedColumns] - ) - - // When a search term is entered, auto-expand all groups. - React.useEffect(() => { - if (searchTerms.length !== 0) { - expandAll() - } - }, [searchTerms.length, expandAll]) - - // selectedColumns is the set of selected columns Each column is - // associated with one or more "cubes", and a only columns that share - // cubes may be mutually selected. - const [selectedColumns, setSelectedColumns] = React.useState>( - () => Set() - ) - - const selectColumn = React.useCallback( - (column: string, selected: boolean) => - setSelectedColumns(oldSelected => - selected ? oldSelected.add(column) : oldSelected.remove(column) - ), - [setSelectedColumns] - ) - - // The set of allowable cubes. When any columns are selected, the set of - // allowable cubes is the intersection of the cubes for those columns - const allowableCubes = React.useMemo>( - () => - selectedColumns - .map( - columnId => - CUBES_BY_COLUMN_NAME.get(columnId) || (Set() as Set) - ) - .reduce((cubes1, cubes2) => cubes1.intersect(cubes2), CUBE_NAMES), - [selectedColumns] - ) - - const showExpandAll = open.size < Object.keys(groupedColumns).length - const showCollapseAll = open.size > 0 - return ( -
-
- {showExpandAll ? ( - - ) : null} - {showCollapseAll ? ( - - ) : null} -
-
- {map(groupedColumns, (columns, groupName) => ( - toggleGroupOpen(groupName)} - allowableCubes={allowableCubes} - cubesByColumnName={CUBES_BY_COLUMN_NAME} - selectedColumns={selectedColumns} - selectColumn={selectColumn} - /> - ))} -
-
- ) -} - -export default ColumnGroupList diff --git a/src/components/DimensionsMetricsExplorer/Explorer.tsx b/src/components/DimensionsMetricsExplorer/Explorer.tsx deleted file mode 100644 index b0301b00f..000000000 --- a/src/components/DimensionsMetricsExplorer/Explorer.tsx +++ /dev/null @@ -1,158 +0,0 @@ -// Copyright 2019 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 * as React from "react" - -import TextField from "@material-ui/core/TextField" -import IconButton from "@material-ui/core/IconButton" -import Clear from "@material-ui/icons/Clear" -import makeStyles from "@material-ui/core/styles/makeStyles" -import { useDebounce } from "use-debounce" - -import { StorageKey } from "@/constants" -import { Dispatch, failed, inProgress, notStarted, successful } from "@/types" -import LabeledCheckbox from "@/components/LabeledCheckbox" -import { usePersistentBoolean, usePersistentString } from "../../hooks" -import ColumnGroupList from "./ColumnGroupList" -import useAnchorRedirects from "./useAnchorRedirects" -import useColumns from "./useColumns" -import { Typography } from "@material-ui/core" -import PrettyJson from "../PrettyJson" - -const useStyles = makeStyles(theme => ({ - search: { - display: "flex", - flexDirection: "column", - "&> label": { - margin: theme.spacing(0), - marginTop: theme.spacing(-0.5), - marginBottom: theme.spacing(-1), - }, - }, - searchInput: { - maxWidth: theme.spacing(60), - }, -})) - -const Search: React.FC<{ - searchText: string | undefined - setSearchText: Dispatch - onlySegments: boolean - setOnlySegments: Dispatch - allowDeprecated: boolean - setAllowDeprecated: Dispatch -}> = ({ - searchText, - setSearchText, - onlySegments, - setOnlySegments, - allowDeprecated, - setAllowDeprecated, -}) => { - const classes = useStyles() - return ( -
- setSearchText(e.target.value)} - InputProps={{ - endAdornment: ( - setSearchText("")}> - - - ), - }} - /> - - Only show fields that are allowed in segments - - - Include deprecated fields - -
- ) -} - -const Explorer: React.FC = () => { - const [searchText, setSearchText] = usePersistentString( - StorageKey.dimensionsMetricsExplorerSearch, - "" - ) - const [allowDeprecated, setAllowDeprecated] = usePersistentBoolean( - StorageKey.dimensionsMetricsExplorerAllowDeprecated, - false - ) - const [onlySegments, setOnlySegments] = usePersistentBoolean( - StorageKey.dimensionsMetricsExplorerOnlySegments, - false - ) - - const searchTerms = React.useMemo( - () => - searchText - ?.toLowerCase() - .split(/\s+/) - .filter(term => term.length > 0), - [searchText] - ) - - const [throttledSearch] = useDebounce(searchTerms, 100, { trailing: true }) - - const columnsRequest = useColumns() - - useAnchorRedirects(successful(columnsRequest)?.columns) - - return ( -
- - {successful(columnsRequest) && ( - - )} - {(inProgress(columnsRequest) || notStarted(columnsRequest)) && ( -
Loading dimensions and metrics...
- )} - {failed(columnsRequest) && ( -
- There was an error calling the api. - Details: - -
- )} -
- ) -} - -export default Explorer diff --git a/src/components/DimensionsMetricsExplorer/GroupInfoTemplate.tsx b/src/components/DimensionsMetricsExplorer/GroupInfoTemplate.tsx deleted file mode 100644 index 7324576de..000000000 --- a/src/components/DimensionsMetricsExplorer/GroupInfoTemplate.tsx +++ /dev/null @@ -1,158 +0,0 @@ -// Copyright 2020 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 * as React from "react" - -import makeStyles from "@material-ui/core/styles/makeStyles" -import Typography from "@material-ui/core/Typography" -import Chip from "@material-ui/core/Chip" -import ArrowBack from "@material-ui/icons/ArrowBack" -import LinkIcon from "@material-ui/icons/Link" -import classnames from "classnames" -import { Link } from "gatsby" -import { sortBy } from "lodash" - -import Layout from "@/components/Layout" -import { CopyIconButton } from "@/components/CopyButton" -import { Column } from "./common-types" - -type GroupInfoTemplateProps = { - pageContext: { - groupName: string - dimensions: Column[] - metrics: Column[] - } -} - -type ColumnProps = { - column: Column -} - -const useStyles = makeStyles(theme => ({ - deprecatedText: { - textDecoration: "line-through", - }, - returnLink: { - display: "flex", - alignItems: "center", - "& svg": { - marginRight: theme.spacing(1), - }, - }, - columnHeading: { - marginBottom: theme.spacing(1), - display: "flex", - alignItems: "baseline", - "&> span": { - marginLeft: theme.spacing(1), - }, - }, - chips: { - "& div": { - marginRight: theme.spacing(1), - }, - marginBottom: theme.spacing(1), - }, - linkIcon: { - alignSelf: "center", - marginLeft: theme.spacing(1), - }, -})) - -const ColumnInfo: React.FC = ({ - column: { attributes }, - column, -}) => { - // TODO make the uiName be linkAble - const classes = useStyles() - return ( -
- - - {attributes?.uiName}{" "} - - {column.id}{" "} - - - - -
- - {attributes?.addedInApiVersion === "3" ? ( - - ) : attributes?.addedInApiVersion === "4" ? ( - - ) : null} -
- {attributes?.status === "DEPRECATED" && ( - - This field is deprecated and should no longer be used. - - )} - {attributes?.description} - {!attributes?.allowedInSegments && ( - - This field is disallowed in segments. - - )} -
- ) -} - -const GroupInfoTemplate: React.FC< - GroupInfoTemplateProps & { location: { pathname: string } } -> = ({ - pageContext: { groupName, dimensions, metrics }, - location: { pathname }, -}) => { - const classes = useStyles() - return ( - - - {groupName} group - - - - - - Dimensions & Metrics Explorer - - Dimensions - {sortBy(dimensions, column => - column.attributes?.status === "PUBLIC" ? 0 : 1 - ).map(item => ( - - ))} - Metrics - {sortBy(metrics, column => - column.attributes?.status === "PUBLIC" ? 0 : 1 - ).map(item => ( - - ))} - - ) -} -export default GroupInfoTemplate diff --git a/src/components/DimensionsMetricsExplorer/common-types.ts b/src/components/DimensionsMetricsExplorer/common-types.ts deleted file mode 100644 index 248a5caea..000000000 --- a/src/components/DimensionsMetricsExplorer/common-types.ts +++ /dev/null @@ -1,52 +0,0 @@ -interface CommonAttributes { - group: string; - uiName: string; - description: string; - allowedInSegments?: "true" | "false"; - addedInApiVersion: number | string; -} - -interface DimensionAttributes { - type: "DIMENSION"; - dataType: "STRING"; -} - -interface MetricAttributes { - type: "METRIC"; - dataType: "INTEGER" | "PERCENT" | "TIME" | "CURRENCY" | "FLOAT"; - calculation?: string; -} - -interface DeprecatedAttributes { - replacedBy: string; - status: "DEPRECATED"; -} - -interface PublicAttributes { - status: "PUBLIC"; -} - -interface TemplateAttributes { - minTemplateIndex: number; - maxTemplateIndex: number; -} - -interface PremiumTemplateAttributes extends TemplateAttributes { - premiumMinTemplateIndex: number; - premiumMaxTemplateIndex: number; -} - -type Attributes = CommonAttributes & - (DimensionAttributes | MetricAttributes) & - (DeprecatedAttributes | PublicAttributes) & - ({} | TemplateAttributes | PremiumTemplateAttributes); - -// A single Dimension or Metric -export interface Column { - id: string; - kind: string; - attributes: Attributes; -} - -// Columns grouped by group -export type Groups = { [key: string]: Column[] }; diff --git a/src/components/DimensionsMetricsExplorer/cubes.ts b/src/components/DimensionsMetricsExplorer/cubes.ts deleted file mode 100644 index 0a70cbd17..000000000 --- a/src/components/DimensionsMetricsExplorer/cubes.ts +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright 2019 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 { reduce } from "lodash" -import { Set, Map } from "immutable" -// TODO - If time allows, this file should be processed at build time instead -// of runtime. -import CUBES from "./ga_cubes.json" - -// The ga_cubes.json file is a mapping of cubes to column names. The -// format looks like this: -// -// { cube: {column1: 1, column2: 1}} -// -// In other words, each set of columns is an object where the keys are -// column names and the values are meaningless placeholders -export type Cubes = { [cube: string]: { [column: string]: any } } - -// Mapping of Column names to sets of cubes -export type CubesByColumnName = Map> - -// Take the Cubes format and invert it to instead be a map of column names to a -// set of cubes. -// -// In the demo, a user checks a column and the UI updates other columns based -// on compatability (they are disabled if they are incompatable). Since only -// columns that share a cube can be queried together, this means only columns -// that share a cube are compatable with each other. -export const CUBES_BY_COLUMN_NAME: CubesByColumnName = reduce( - CUBES, - (cubesByColumn, columnList, cubeName) => - reduce( - columnList, - (cubesByColumn, _, columnName) => - cubesByColumn.update(columnName, Set(), cubes => cubes.add(cubeName)), - cubesByColumn - ), - Map() -) - -export const CUBE_NAMES: Set = Set.fromKeys(CUBES) diff --git a/src/components/DimensionsMetricsExplorer/ga_cubes.json b/src/components/DimensionsMetricsExplorer/ga_cubes.json deleted file mode 100644 index a24e9755c..000000000 --- a/src/components/DimensionsMetricsExplorer/ga_cubes.json +++ /dev/null @@ -1,9603 +0,0 @@ -{ - "Cube:analytics/per_ecommerce_refund_import_without_transaction_product_dimensions": { - "ga:transactionId": 1, - "ga:quantityRefunded": 1, - "ga:transactionRevenue": 1 - }, - "per_campaign_content": { - "ga:totalPublisherRevenuePer1000Sessions": 1, - "ga:referralPath": 1, - "ga:metroId": 1, - "ga:percentNewSessions": 1, - "ga:backfillClicks": 1, - "ga:avgServerConnectionTime": 1, - "ga:newUsers": 1, - "ga:dcmClickSite": 1, - "ga:dbmClickLineItemId": 1, - "ga:adxMonetizedPageviews": 1, - "ga:avgPageLoadTime": 1, - "ga:dsAdvertiserId": 1, - "ga:flashVersion": 1, - "ga:backfillCTR": 1, - "ga:isoWeek": 1, - "ga:internalPromotionId": 1, - "ga:searchDestinationPage": 1, - "ga:goalStartsAll": 1, - "ga:avgDomContentLoadedTime": 1, - "ga:domainLookupTime": 1, - "ga:dsEngineAccount": 1, - "ga:adwordsCreativeID": 1, - "ga:networkLocation": 1, - "ga:dfpCoverage": 1, - "ga:sourceMedium": 1, - "ga:pageLoadSample": 1, - "ga:pageDepth": 1, - "ga:landingContentGroup4": 1, - "ga:landingContentGroup3": 1, - "ga:totalPublisherMonetizedPageviews": 1, - "ga:sessions": 1, - "ga:landingContentGroup2": 1, - "ga:landingContentGroup1": 1, - "ga:previousPagePath": 1, - "ga:dbmClickSite": 1, - "ga:metricXX": 1, - "ga:adxImpressions": 1, - "ga:dcmClickSpotId": 1, - "ga:landingContentGroup5": 1, - "ga:adsenseCoverage": 1, - "ga:screenResolution": 1, - "ga:searchUniques": 1, - "ga:screenviews": 1, - "ga:isTablet": 1, - "ga:avgScreenviewDuration": 1, - "ga:socialActivityContentUrl": 1, - "ga:source": 1, - "ga:percentSearchRefinements": 1, - "ga:dsAdGroup": 1, - "ga:networkDomain": 1, - "ga:dfpImpressions": 1, - "ga:timeOnPage": 1, - "ga:bounceRate": 1, - "ga:entrances": 1, - "ga:revenuePerTransaction": 1, - "ga:dcmClickCreativeId": 1, - "ga:dcmFloodlightQuantity": 1, - "ga:redirectionTime": 1, - "ga:screenName": 1, - "ga:internalPromotionCreative": 1, - "ga:transactionRevenue": 1, - "ga:adSlot": 1, - "ga:secondPagePath": 1, - "ga:entranceRate": 1, - "ga:goalAbandonRateAll": 1, - "ga:searchUsed": 1, - "ga:adxViewableImpressionsPercent": 1, - "ga:dfpLineItemId": 1, - "ga:avgSearchResultViews": 1, - "ga:adwordsCampaignID": 1, - "ga:backfillRevenuePer1000Sessions": 1, - "ga:avgDomainLookupTime": 1, - "ga:dbmClickInsertionOrder": 1, - "ga:totalPublisherImpressionsPerSession": 1, - "ga:adxClicks": 1, - "ga:dcmClickCreativeType": 1, - "ga:pageValue": 1, - "ga:dfpClicks": 1, - "ga:internalPromotionName": 1, - "ga:dbmClickLineItem": 1, - "ga:dfpImpressionsPerSession": 1, - "ga:cityId": 1, - "ga:organicSearches": 1, - "ga:searchKeywordRefinement": 1, - "ga:landingScreenName": 1, - "ga:isTrueViewVideoAd": 1, - "ga:dbmClickAdvertiser": 1, - "ga:dcmFloodlightSpotId": 1, - "ga:previousContentGroup1": 1, - "ga:searchKeyword": 1, - "ga:previousContentGroup2": 1, - "ga:adsenseECPM": 1, - "ga:previousContentGroup3": 1, - "ga:adxImpressionsPerSession": 1, - "ga:previousContentGroup4": 1, - "ga:searchRefinements": 1, - "ga:dcmFloodlightActivity": 1, - "ga:appName": 1, - "ga:dsAdvertiser": 1, - "ga:latitude": 1, - "ga:nthMonth": 1, - "ga:previousContentGroup5": 1, - "ga:avgTimeOnPage": 1, - "ga:sourcePropertyTrackingId": 1, - "ga:adxCTR": 1, - "ga:continentId": 1, - "ga:deviceCategory": 1, - "ga:dcmClickSitePlacement": 1, - "ga:dbmClickCreativeId": 1, - "ga:nthWeek": 1, - "ga:dsCampaign": 1, - "ga:interestInMarketCategory": 1, - "ga:adMatchType": 1, - "ga:adwordsCustomerID": 1, - "ga:totalPublisherRevenue": 1, - "ga:userAgeBracket": 1, - "ga:adsenseViewableImpressionPercent": 1, - "ga:dcmFloodlightActivityGroup": 1, - "ga:trafficType": 1, - "ga:avgDomInteractiveTime": 1, - "ga:adsenseRevenue": 1, - "ga:continent": 1, - "ga:campaign": 1, - "ga:isoYear": 1, - "ga:customVarValueXX": 1, - "ga:landingPagePath": 1, - "ga:channelGrouping": 1, - "ga:searchCategory": 1, - "ga:dfpRevenue": 1, - "ga:adwordsCustomerName": 1, - "ga:dsCampaignId": 1, - "ga:mobileDeviceInfo": 1, - "ga:keyword": 1, - "ga:pageviewsPerSession": 1, - "ga:dayOfWeek": 1, - "ga:adwordsAdGroupID": 1, - "ga:contentGroup1": 1, - "ga:contentGroup2": 1, - "ga:contentGroup3": 1, - "ga:contentGroup4": 1, - "ga:contentGroup5": 1, - "ga:dbmClickExchange": 1, - "ga:goalCompletionsAll": 1, - "ga:dcmClickCreativeTypeId": 1, - "ga:language": 1, - "ga:adsenseAdsClicks": 1, - "ga:searchAfterDestinationPage": 1, - "ga:isMobile": 1, - "ga:searchResultViews": 1, - "ga:exitScreenName": 1, - "ga:totalPublisherECPM": 1, - "ga:internalPromotionPosition": 1, - "ga:bounces": 1, - "ga:searchGoalConversionRateAll": 1, - "ga:avgPageDownloadTime": 1, - "ga:socialNetwork": 1, - "ga:dbmClickExchangeId": 1, - "ga:dsKeyword": 1, - "ga:adDistributionNetwork": 1, - "ga:userBucket": 1, - "ga:domInteractiveTime": 1, - "ga:dsKeywordId": 1, - "ga:percentSessionsWithSearch": 1, - "ga:longitude": 1, - "ga:dcmClickAdTypeId": 1, - "ga:nthHour": 1, - "ga:adsenseAdUnitsViewed": 1, - "ga:mobileInputSelector": 1, - "ga:timeOnScreen": 1, - "ga:shoppingStage": 1, - "ga:adGroup": 1, - "ga:week": 1, - "ga:dcmClickCampaign": 1, - "ga:sourcePropertyDisplayName": 1, - "ga:goalValueAllPerSearch": 1, - "ga:dbmClickAdvertiserId": 1, - "ga:hour": 1, - "ga:adQueryWordCount": 1, - "ga:dfpViewableImpressionsPercent": 1, - "ga:dbmClickCreativeName": 1, - "ga:searchStartPage": 1, - "ga:domContentLoadedTime": 1, - "ga:nextPagePath": 1, - "ga:dcmClickSitePlacementId": 1, - "ga:uniqueDimensionCombinations": 1, - "ga:contentGroupUniqueViews2": 1, - "ga:contentGroupUniqueViews1": 1, - "ga:adTargetingType": 1, - "ga:screenDepth": 1, - "ga:uniqueEvents": 1, - "ga:contentGroupUniqueViews5": 1, - "ga:users": 1, - "ga:contentGroupUniqueViews4": 1, - "ga:appInstallerId": 1, - "ga:contentGroupUniqueViews3": 1, - "ga:revenuePerUser": 1, - "ga:refundAmount": 1, - "ga:dcmClickRenderingId": 1, - "ga:adKeywordMatchType": 1, - "ga:searchDepth": 1, - "ga:subContinent": 1, - "ga:adsenseExits": 1, - "ga:appId": 1, - "ga:checkoutOptions": 1, - "ga:internalPromotionCTR": 1, - "ga:daysSinceLastSession": 1, - "ga:pageviews": 1, - "ga:userType": 1, - "ga:dcmClickCreative": 1, - "ga:sessionCount": 1, - "ga:nthDay": 1, - "ga:totalPublisherClicks": 1, - "ga:screenviewsPerSession": 1, - "ga:serverConnectionTime": 1, - "ga:searchExits": 1, - "ga:dcmClickSiteId": 1, - "ga:externalActivityId": 1, - "ga:dbmClickSiteId": 1, - "ga:speedMetricsSample": 1, - "ga:dcmClickCreativeVersion": 1, - "ga:browserSize": 1, - "ga:backfillViewableImpressionsPercent": 1, - "ga:minute": 1, - "ga:dcmFloodlightActivityGroupId": 1, - "ga:year": 1, - "ga:exitPagePath": 1, - "ga:sessionsPerUser": 1, - "ga:adTargetingOption": 1, - "ga:entranceBounceRate": 1, - "ga:customVarNameXX": 1, - "ga:transactionsPerSession": 1, - "ga:appVersion": 1, - "ga:dcmClickAdvertiserId": 1, - "ga:pageDownloadTime": 1, - "ga:dcmFloodlightActivityAndGroup": 1, - "ga:country": 1, - "ga:goalValueAll": 1, - "ga:userGender": 1, - "ga:pagePath": 1, - "ga:dcmClickCampaignId": 1, - "ga:adMatchedQuery": 1, - "ga:totalPublisherImpressions": 1, - "ga:dsAdGroupId": 1, - "ga:totalValue": 1, - "ga:hasSocialSourceReferral": 1, - "ga:browserVersion": 1, - "ga:adsenseAdsViewed": 1, - "ga:nthMinute": 1, - "ga:exitRate": 1, - "ga:dfpECPM": 1, - "ga:backfillMonetizedPageviews": 1, - "ga:adxCoverage": 1, - "ga:operatingSystemVersion": 1, - "ga:mobileDeviceMarketingName": 1, - "ga:totalPublisherCoverage": 1, - "ga:sessionDurationBucket": 1, - "ga:dcmFloodlightRevenue": 1, - "ga:uniquePageviews": 1, - "ga:dateHour": 1, - "ga:totalRefunds": 1, - "ga:dateHourMinute": 1, - "ga:avgSearchDuration": 1, - "ga:goalValuePerSession": 1, - "ga:adDisplayUrl": 1, - "ga:transactionsPerUser": 1, - "ga:dcmClickAdType": 1, - "ga:metro": 1, - "ga:internalPromotionClicks": 1, - "ga:yearMonth": 1, - "ga:avgSessionDuration": 1, - "ga:backfillECPM": 1, - "ga:city": 1, - "ga:domLatencyMetricsSample": 1, - "ga:transactions": 1, - "ga:countryIsoCode": 1, - "ga:avgSearchDepth": 1, - "ga:goalConversionRateAll": 1, - "ga:dsAgency": 1, - "ga:dfpMonetizedPageviews": 1, - "ga:clientId": 1, - "ga:dcmFloodlightActivityId": 1, - "ga:searchSessions": 1, - "ga:fullReferrer": 1, - "ga:dfpLineItemName": 1, - "ga:dcmClickAdvertiser": 1, - "ga:nextContentGroup1": 1, - "ga:hostname": 1, - "ga:nextContentGroup2": 1, - "ga:nextContentGroup3": 1, - "ga:nextContentGroup4": 1, - "ga:sessionDuration": 1, - "ga:adxECPM": 1, - "ga:nextContentGroup5": 1, - "ga:uniqueScreenviews": 1, - "ga:avgUserTimingValue": 1, - "ga:interestOtherCategory": 1, - "ga:adContent": 1, - "ga:internalPromotionViews": 1, - "ga:dataSource": 1, - "ga:dfpRevenuePer1000Sessions": 1, - "ga:backfillCoverage": 1, - "ga:serverResponseTime": 1, - "ga:pageTitle": 1, - "ga:userDefinedValue": 1, - "ga:totalPublisherViewableImpressionsPercent": 1, - "ga:dsEngineAccountId": 1, - "ga:adPlacementDomain": 1, - "ga:backfillRevenue": 1, - "ga:subContinentCode": 1, - "ga:mobileDeviceModel": 1, - "ga:adFormat": 1, - "ga:adwordsCriteriaID": 1, - "ga:date": 1, - "ga:screenColors": 1, - "ga:operatingSystem": 1, - "ga:userTimingValue": 1, - "ga:day": 1, - "ga:dfpCTR": 1, - "ga:adsenseCTR": 1, - "ga:avgServerResponseTime": 1, - "ga:searchExitRate": 1, - "ga:javaEnabled": 1, - "ga:backfillImpressionsPerSession": 1, - "ga:medium": 1, - "ga:adDestinationUrl": 1, - "ga:region": 1, - "ga:pagePathLevel4": 1, - "ga:pagePathLevel1": 1, - "ga:dcmClickAdId": 1, - "ga:searchDuration": 1, - "ga:pagePathLevel3": 1, - "ga:backfillImpressions": 1, - "ga:dcmClickAd": 1, - "ga:pagePathLevel2": 1, - "ga:month": 1, - "ga:yearWeek": 1, - "ga:exits": 1, - "ga:adxRevenuePer1000Sessions": 1, - "ga:dsAgencyId": 1, - "ga:dayOfWeekName": 1, - "ga:adsensePageImpressions": 1, - "ga:mobileDeviceBranding": 1, - "ga:avgRedirectionTime": 1, - "ga:pageLoadTime": 1, - "ga:regionIsoCode": 1, - "ga:calcMetric_\u003cNAME\u003e": 1, - "ga:goalAbandonsAll": 1, - "ga:isoYearIsoWeek": 1, - "ga:dimensionXX": 1, - "ga:dcmFloodlightAdvertiserId": 1, - "ga:browser": 1, - "ga:transactionRevenuePerSession": 1, - "ga:interestAffinityCategory": 1, - "ga:regionId": 1, - "ga:adPlacementUrl": 1, - "ga:userTimingSample": 1, - "ga:adxRevenue": 1, - "ga:dbmClickInsertionOrderId": 1, - "ga:totalPublisherCTR": 1, - "ga:campaignCode": 1 - }, - "audience_size": { - "ga:totalPublisherRevenuePer1000Sessions": 1, - "ga:transactionTax": 1, - "ga:metroId": 1, - "ga:backfillClicks": 1, - "ga:percentNewSessions": 1, - "ga:avgServerConnectionTime": 1, - "ga:productCheckouts": 1, - "ga:newUsers": 1, - "ga:adxMonetizedPageviews": 1, - "ga:avgPageLoadTime": 1, - "ga:flashVersion": 1, - "ga:backfillCTR": 1, - "ga:internalPromotionId": 1, - "ga:searchDestinationPage": 1, - "ga:goalStartsAll": 1, - "ga:avgDomContentLoadedTime": 1, - "ga:domainLookupTime": 1, - "ga:adwordsCreativeID": 1, - "ga:networkLocation": 1, - "ga:dfpCoverage": 1, - "ga:goalXXValue": 1, - "ga:experimentName": 1, - "ga:uniquePurchases": 1, - "ga:pageLoadSample": 1, - "ga:pageDepth": 1, - "ga:landingContentGroup4": 1, - "ga:landingContentGroup3": 1, - "ga:sessions": 1, - "ga:totalPublisherMonetizedPageviews": 1, - "ga:landingContentGroup2": 1, - "ga:landingContentGroup1": 1, - "ga:previousPagePath": 1, - "ga:metricXX": 1, - "ga:adxImpressions": 1, - "ga:landingContentGroup5": 1, - "ga:adsenseCoverage": 1, - "ga:screenResolution": 1, - "ga:searchUniques": 1, - "ga:screenviews": 1, - "ga:isTablet": 1, - "ga:productAddsToCart": 1, - "ga:avgScreenviewDuration": 1, - "ga:userTimingCategory": 1, - "ga:percentSearchRefinements": 1, - "ga:experimentOutcomeType": 1, - "ga:networkDomain": 1, - "ga:dfpImpressions": 1, - "ga:timeOnPage": 1, - "ga:bounceRate": 1, - "ga:entrances": 1, - "ga:revenuePerTransaction": 1, - "ga:dcmFloodlightQuantity": 1, - "ga:redirectionTime": 1, - "ga:screenName": 1, - "ga:productRemovesFromCart": 1, - "ga:internalPromotionCreative": 1, - "ga:transactionRevenue": 1, - "ga:secondPagePath": 1, - "ga:entranceRate": 1, - "ga:buyToDetailRate": 1, - "ga:goalAbandonRateAll": 1, - "ga:adxViewableImpressionsPercent": 1, - "ga:socialInteractionsPerSession": 1, - "ga:dfpLineItemId": 1, - "ga:avgSearchResultViews": 1, - "ga:adwordsCampaignID": 1, - "ga:backfillRevenuePer1000Sessions": 1, - "ga:productListCTR": 1, - "ga:avgDomainLookupTime": 1, - "ga:socialInteractionNetworkAction": 1, - "ga:totalPublisherImpressionsPerSession": 1, - "ga:adxClicks": 1, - "ga:pageValue": 1, - "ga:dfpClicks": 1, - "ga:internalPromotionName": 1, - "ga:dfpImpressionsPerSession": 1, - "ga:cityId": 1, - "ga:organicSearches": 1, - "ga:landingScreenName": 1, - "ga:previousContentGroup1": 1, - "ga:previousContentGroup2": 1, - "ga:adsenseECPM": 1, - "ga:previousContentGroup3": 1, - "ga:adxImpressionsPerSession": 1, - "ga:previousContentGroup4": 1, - "ga:searchRefinements": 1, - "ga:appName": 1, - "ga:quantityRefunded": 1, - "ga:latitude": 1, - "ga:previousContentGroup5": 1, - "ga:avgTimeOnPage": 1, - "ga:sourcePropertyTrackingId": 1, - "ga:goalXXAbandonRate": 1, - "ga:adxCTR": 1, - "ga:continentId": 1, - "ga:deviceCategory": 1, - "ga:interestInMarketCategory": 1, - "ga:adMatchType": 1, - "ga:adwordsCustomerID": 1, - "ga:totalPublisherRevenue": 1, - "ga:userAgeBracket": 1, - "ga:adsenseViewableImpressionPercent": 1, - "ga:uniqueSocialInteractions": 1, - "ga:itemsPerPurchase": 1, - "ga:productRefundAmount": 1, - "ga:avgDomInteractiveTime": 1, - "ga:goalXXCompletions": 1, - "ga:adsenseRevenue": 1, - "ga:continent": 1, - "ga:goalXXAbandons": 1, - "ga:customVarValueXX": 1, - "ga:landingPagePath": 1, - "ga:dfpRevenue": 1, - "ga:adwordsCustomerName": 1, - "ga:mobileDeviceInfo": 1, - "ga:pageviewsPerSession": 1, - "ga:adwordsAdGroupID": 1, - "ga:searchGoalXXConversionRate": 1, - "ga:contentGroup1": 1, - "ga:contentGroup2": 1, - "ga:socialInteractionAction": 1, - "ga:contentGroup3": 1, - "ga:contentGroup4": 1, - "ga:contentGroup5": 1, - "ga:socialInteractionNetwork": 1, - "ga:goalCompletionsAll": 1, - "ga:productDetailViews": 1, - "ga:language": 1, - "ga:adsenseAdsClicks": 1, - "ga:searchAfterDestinationPage": 1, - "ga:socialInteractions": 1, - "ga:userTimingLabel": 1, - "ga:experimentVariant": 1, - "ga:isMobile": 1, - "ga:searchResultViews": 1, - "ga:exitScreenName": 1, - "ga:productRevenuePerPurchase": 1, - "ga:totalPublisherECPM": 1, - "ga:internalPromotionPosition": 1, - "ga:bounces": 1, - "ga:searchGoalConversionRateAll": 1, - "ga:avgPageDownloadTime": 1, - "ga:revenuePerItem": 1, - "ga:cartToDetailRate": 1, - "ga:adDistributionNetwork": 1, - "ga:domInteractiveTime": 1, - "ga:socialEngagementType": 1, - "ga:percentSessionsWithSearch": 1, - "ga:longitude": 1, - "ga:adsenseAdUnitsViewed": 1, - "ga:mobileInputSelector": 1, - "ga:timeOnScreen": 1, - "ga:shoppingStage": 1, - "ga:experimentCombination": 1, - "ga:sourcePropertyDisplayName": 1, - "ga:goalValueAllPerSearch": 1, - "ga:dfpViewableImpressionsPercent": 1, - "ga:domContentLoadedTime": 1, - "ga:productListClicks": 1, - "ga:nextPagePath": 1, - "ga:uniqueDimensionCombinations": 1, - "ga:contentGroupUniqueViews2": 1, - "ga:contentGroupUniqueViews1": 1, - "ga:adTargetingType": 1, - "ga:screenDepth": 1, - "ga:uniqueEvents": 1, - "ga:users": 1, - "ga:contentGroupUniqueViews5": 1, - "ga:contentGroupUniqueViews4": 1, - "ga:appInstallerId": 1, - "ga:contentGroupUniqueViews3": 1, - "ga:revenuePerUser": 1, - "ga:refundAmount": 1, - "ga:adKeywordMatchType": 1, - "ga:searchDepth": 1, - "ga:subContinent": 1, - "ga:adsenseExits": 1, - "ga:appId": 1, - "ga:checkoutOptions": 1, - "ga:internalPromotionCTR": 1, - "ga:pageviews": 1, - "ga:userTimingVariable": 1, - "ga:goalXXStarts": 1, - "ga:itemRevenue": 1, - "ga:totalPublisherClicks": 1, - "ga:screenviewsPerSession": 1, - "ga:serverConnectionTime": 1, - "ga:searchExits": 1, - "ga:speedMetricsSample": 1, - "ga:browserSize": 1, - "ga:backfillViewableImpressionsPercent": 1, - "ga:exitPagePath": 1, - "ga:sessionsPerUser": 1, - "ga:adTargetingOption": 1, - "ga:entranceBounceRate": 1, - "ga:customVarNameXX": 1, - "ga:previousPageLinkId": 1, - "ga:quantityRemovedFromCart": 1, - "ga:socialInteractionTarget": 1, - "ga:transactionsPerSession": 1, - "ga:appVersion": 1, - "ga:pageDownloadTime": 1, - "ga:country": 1, - "ga:goalValueAll": 1, - "ga:userGender": 1, - "ga:pagePath": 1, - "ga:totalPublisherImpressions": 1, - "ga:totalValue": 1, - "ga:browserVersion": 1, - "ga:adsenseAdsViewed": 1, - "ga:exitRate": 1, - "ga:dfpECPM": 1, - "ga:backfillMonetizedPageviews": 1, - "ga:adxCoverage": 1, - "ga:operatingSystemVersion": 1, - "ga:mobileDeviceMarketingName": 1, - "ga:totalPublisherCoverage": 1, - "ga:dcmFloodlightRevenue": 1, - "ga:uniquePageviews": 1, - "ga:experimentId": 1, - "ga:totalRefunds": 1, - "ga:itemQuantity": 1, - "ga:avgSearchDuration": 1, - "ga:goalValuePerSession": 1, - "ga:adDisplayUrl": 1, - "ga:transactionsPerUser": 1, - "ga:transactionShipping": 1, - "ga:metro": 1, - "ga:internalPromotionClicks": 1, - "ga:avgSessionDuration": 1, - "ga:backfillECPM": 1, - "ga:city": 1, - "ga:domLatencyMetricsSample": 1, - "ga:transactions": 1, - "ga:countryIsoCode": 1, - "ga:avgSearchDepth": 1, - "ga:goalConversionRateAll": 1, - "ga:dfpMonetizedPageviews": 1, - "ga:searchSessions": 1, - "ga:dfpLineItemName": 1, - "ga:productRefunds": 1, - "ga:socialInteractionNetworkActionSession": 1, - "ga:nextContentGroup1": 1, - "ga:hostname": 1, - "ga:nextContentGroup2": 1, - "ga:nextContentGroup3": 1, - "ga:nextContentGroup4": 1, - "ga:sessionDuration": 1, - "ga:quantityCheckedOut": 1, - "ga:adxECPM": 1, - "ga:nextContentGroup5": 1, - "ga:uniqueScreenviews": 1, - "ga:avgUserTimingValue": 1, - "ga:interestOtherCategory": 1, - "ga:internalPromotionViews": 1, - "ga:dataSource": 1, - "ga:dfpRevenuePer1000Sessions": 1, - "ga:backfillCoverage": 1, - "ga:serverResponseTime": 1, - "ga:pageTitle": 1, - "ga:userDefinedValue": 1, - "ga:totalPublisherViewableImpressionsPercent": 1, - "ga:adPlacementDomain": 1, - "ga:backfillRevenue": 1, - "ga:subContinentCode": 1, - "ga:mobileDeviceModel": 1, - "ga:adFormat": 1, - "ga:adwordsCriteriaID": 1, - "ga:screenColors": 1, - "ga:operatingSystem": 1, - "ga:userTimingValue": 1, - "ga:dfpCTR": 1, - "ga:adsenseCTR": 1, - "ga:avgServerResponseTime": 1, - "ga:searchExitRate": 1, - "ga:javaEnabled": 1, - "ga:backfillImpressionsPerSession": 1, - "ga:adDestinationUrl": 1, - "ga:region": 1, - "ga:pagePathLevel4": 1, - "ga:quantityAddedToCart": 1, - "ga:pagePathLevel1": 1, - "ga:searchDuration": 1, - "ga:pagePathLevel3": 1, - "ga:backfillImpressions": 1, - "ga:pagePathLevel2": 1, - "ga:goalXXConversionRate": 1, - "ga:exits": 1, - "ga:adxRevenuePer1000Sessions": 1, - "ga:adsensePageImpressions": 1, - "ga:mobileDeviceBranding": 1, - "ga:avgRedirectionTime": 1, - "ga:pageLoadTime": 1, - "ga:regionIsoCode": 1, - "ga:calcMetric_\u003cNAME\u003e": 1, - "ga:goalAbandonsAll": 1, - "ga:dimensionXX": 1, - "ga:productListViews": 1, - "ga:browser": 1, - "ga:transactionRevenuePerSession": 1, - "ga:interestAffinityCategory": 1, - "ga:regionId": 1, - "ga:adPlacementUrl": 1, - "ga:userTimingSample": 1, - "ga:adxRevenue": 1, - "ga:totalPublisherCTR": 1 - }, - "per_cost_data_import": { - "ga:adGroup": 1, - "ga:referralPath": 1, - "ga:adwordsCampaignID": 1, - "ga:CPC": 1, - "ga:adDisplayUrl": 1, - "ga:adwordsCriteriaID": 1, - "ga:impressions": 1, - "ga:adSlotPosition": 1, - "ga:adContent": 1, - "ga:source": 1, - "ga:campaign": 1, - "ga:adSlot": 1, - "ga:CTR": 1, - "ga:CPM": 1, - "ga:medium": 1, - "ga:adDestinationUrl": 1, - "ga:keyword": 1, - "ga:adCost": 1, - "ga:adClicks": 1 - }, - "per_content_id_dimension_widening": { - "ga:dimensionXX": 1, - "ga:pagePath": 1, - "ga:metricXX": 1 - }, - "per_active_visitors_date_active_visitors_28": { - "ga:totalPublisherRevenuePer1000Sessions": 1, - "ga:transactionTax": 1, - "ga:backfillClicks": 1, - "ga:percentNewSessions": 1, - "ga:avgServerConnectionTime": 1, - "ga:productCheckouts": 1, - "ga:28dayUsers": 1, - "ga:newUsers": 1, - "ga:RPC": 1, - "ga:adxMonetizedPageviews": 1, - "ga:avgPageLoadTime": 1, - "ga:backfillCTR": 1, - "ga:goalStartsAll": 1, - "ga:avgDomContentLoadedTime": 1, - "ga:domainLookupTime": 1, - "ga:dfpCoverage": 1, - "ga:goalXXValue": 1, - "ga:uniquePurchases": 1, - "ga:pageLoadSample": 1, - "ga:sessions": 1, - "ga:totalPublisherMonetizedPageviews": 1, - "ga:exceptions": 1, - "ga:metricXX": 1, - "ga:adxImpressions": 1, - "ga:adsenseCoverage": 1, - "ga:searchUniques": 1, - "ga:screenviews": 1, - "ga:productAddsToCart": 1, - "ga:avgScreenviewDuration": 1, - "ga:percentSearchRefinements": 1, - "ga:dfpImpressions": 1, - "ga:timeOnPage": 1, - "ga:bounceRate": 1, - "ga:entrances": 1, - "ga:revenuePerTransaction": 1, - "ga:dcmFloodlightQuantity": 1, - "ga:redirectionTime": 1, - "ga:productRemovesFromCart": 1, - "ga:dbmCPA": 1, - "ga:dbmCPC": 1, - "ga:transactionRevenue": 1, - "ga:dbmCPM": 1, - "ga:CTR": 1, - "ga:entranceRate": 1, - "ga:buyToDetailRate": 1, - "ga:goalAbandonRateAll": 1, - "ga:avgEventValue": 1, - "ga:dcmCTR": 1, - "ga:adxViewableImpressionsPercent": 1, - "ga:socialInteractionsPerSession": 1, - "ga:fatalExceptionsPerScreenview": 1, - "ga:avgSearchResultViews": 1, - "ga:backfillRevenuePer1000Sessions": 1, - "ga:productListCTR": 1, - "ga:avgDomainLookupTime": 1, - "ga:hits": 1, - "ga:totalPublisherImpressionsPerSession": 1, - "ga:adxClicks": 1, - "ga:pageValue": 1, - "ga:dfpClicks": 1, - "ga:dfpImpressionsPerSession": 1, - "ga:organicSearches": 1, - "ga:adsenseECPM": 1, - "ga:adxImpressionsPerSession": 1, - "ga:searchRefinements": 1, - "ga:quantityRefunded": 1, - "ga:avgTimeOnPage": 1, - "ga:goalXXAbandonRate": 1, - "ga:adxCTR": 1, - "ga:totalPublisherRevenue": 1, - "ga:adClicks": 1, - "ga:adsenseViewableImpressionPercent": 1, - "ga:uniqueSocialInteractions": 1, - "ga:totalEvents": 1, - "ga:itemsPerPurchase": 1, - "ga:productRefundAmount": 1, - "ga:avgDomInteractiveTime": 1, - "ga:goalXXCompletions": 1, - "ga:adsenseRevenue": 1, - "ga:goalXXAbandons": 1, - "ga:dbmCost": 1, - "ga:dfpRevenue": 1, - "ga:pageviewsPerSession": 1, - "ga:fatalExceptions": 1, - "ga:searchGoalXXConversionRate": 1, - "ga:goalCompletionsAll": 1, - "ga:productDetailViews": 1, - "ga:dbmCTR": 1, - "ga:adsenseAdsClicks": 1, - "ga:socialInteractions": 1, - "ga:dcmROAS": 1, - "ga:searchResultViews": 1, - "ga:productRevenuePerPurchase": 1, - "ga:totalPublisherECPM": 1, - "ga:bounces": 1, - "ga:dbmClicks": 1, - "ga:searchGoalConversionRateAll": 1, - "ga:avgPageDownloadTime": 1, - "ga:revenuePerItem": 1, - "ga:cartToDetailRate": 1, - "ga:dbmImpressions": 1, - "ga:domInteractiveTime": 1, - "ga:percentSessionsWithSearch": 1, - "ga:adsenseAdUnitsViewed": 1, - "ga:timeOnScreen": 1, - "ga:dbmConversions": 1, - "ga:goalValueAllPerSearch": 1, - "ga:dfpViewableImpressionsPercent": 1, - "ga:domContentLoadedTime": 1, - "ga:productListClicks": 1, - "ga:uniqueDimensionCombinations": 1, - "ga:uniqueEvents": 1, - "ga:refundAmount": 1, - "ga:searchDepth": 1, - "ga:pageviews": 1, - "ga:goalXXStarts": 1, - "ga:itemRevenue": 1, - "ga:nthDay": 1, - "ga:totalPublisherClicks": 1, - "ga:screenviewsPerSession": 1, - "ga:serverConnectionTime": 1, - "ga:searchExits": 1, - "ga:speedMetricsSample": 1, - "ga:backfillViewableImpressionsPercent": 1, - "ga:entranceBounceRate": 1, - "ga:quantityRemovedFromCart": 1, - "ga:transactionsPerSession": 1, - "ga:pageDownloadTime": 1, - "ga:goalValueAll": 1, - "ga:dcmCost": 1, - "ga:totalPublisherImpressions": 1, - "ga:totalValue": 1, - "ga:adsenseAdsViewed": 1, - "ga:eventValue": 1, - "ga:exitRate": 1, - "ga:dfpECPM": 1, - "ga:backfillMonetizedPageviews": 1, - "ga:dbmROAS": 1, - "ga:adxCoverage": 1, - "ga:totalPublisherCoverage": 1, - "ga:dcmFloodlightRevenue": 1, - "ga:uniquePageviews": 1, - "ga:exceptionsPerScreenview": 1, - "ga:totalRefunds": 1, - "ga:itemQuantity": 1, - "ga:avgSearchDuration": 1, - "ga:goalValuePerSession": 1, - "ga:transactionShipping": 1, - "ga:avgSessionDuration": 1, - "ga:backfillECPM": 1, - "ga:domLatencyMetricsSample": 1, - "ga:sessionsWithEvent": 1, - "ga:transactions": 1, - "ga:avgSearchDepth": 1, - "ga:goalConversionRateAll": 1, - "ga:dfpMonetizedPageviews": 1, - "ga:dcmRPC": 1, - "ga:searchSessions": 1, - "ga:productRefunds": 1, - "ga:dcmClicks": 1, - "ga:sessionDuration": 1, - "ga:quantityCheckedOut": 1, - "ga:adxECPM": 1, - "ga:uniqueScreenviews": 1, - "ga:avgUserTimingValue": 1, - "ga:dfpRevenuePer1000Sessions": 1, - "ga:backfillCoverage": 1, - "ga:serverResponseTime": 1, - "ga:totalPublisherViewableImpressionsPercent": 1, - "ga:backfillRevenue": 1, - "ga:date": 1, - "ga:dcmCPC": 1, - "ga:userTimingValue": 1, - "ga:day": 1, - "ga:dfpCTR": 1, - "ga:adsenseCTR": 1, - "ga:avgServerResponseTime": 1, - "ga:searchExitRate": 1, - "ga:backfillImpressionsPerSession": 1, - "ga:quantityAddedToCart": 1, - "ga:searchDuration": 1, - "ga:backfillImpressions": 1, - "ga:goalXXConversionRate": 1, - "ga:exits": 1, - "ga:adxRevenuePer1000Sessions": 1, - "ga:impressions": 1, - "ga:adsensePageImpressions": 1, - "ga:avgRedirectionTime": 1, - "ga:eventsPerSessionWithEvent": 1, - "ga:pageLoadTime": 1, - "ga:dcmImpressions": 1, - "ga:calcMetric_\u003cNAME\u003e": 1, - "ga:goalAbandonsAll": 1, - "ga:dcmROI": 1, - "ga:productListViews": 1, - "ga:dcmMargin": 1, - "ga:transactionRevenuePerSession": 1, - "ga:userTimingSample": 1, - "ga:adxRevenue": 1, - "ga:totalPublisherCTR": 1 - }, - "cohorts_overview_nth_week": { - "ga:acquisitionTrafficChannel": 1, - "ga:acquisitionSource": 1, - "ga:cohortRevenuePerUser": 1, - "ga:avgSessionDuration": 1, - "ga:cohortActiveUsers": 1, - "ga:cohortTotalUsersWithLifetimeCriteria": 1, - "ga:goalCompletionsAll": 1, - "ga:transactions": 1, - "ga:transactionRevenue": 1, - "ga:cohortSessionsPerUserWithLifetimeCriteria": 1, - "ga:cohort": 1, - "ga:goalConversionRateAll": 1, - "ga:cohortGoalCompletionsPerUserWithLifetimeCriteria": 1, - "ga:cohortGoalCompletionsPerUser": 1, - "ga:acquisitionMedium": 1, - "ga:transactionsPerSession": 1, - "ga:cohortRevenuePerUserWithLifetimeCriteria": 1, - "ga:cohortSessionDurationPerUserWithLifetimeCriteria": 1, - "ga:cohortPageviewsPerUser": 1, - "ga:cohortTotalUsers": 1, - "ga:cohortNthWeek": 1, - "ga:acquisitionCampaign": 1, - "ga:sessions": 1, - "ga:cohortRetentionRate": 1, - "ga:acquisitionSourceMedium": 1, - "ga:cohortAppviewsPerUser": 1, - "ga:cohortSessionsPerUser": 1, - "ga:sessionDuration": 1, - "ga:cohortPageviewsPerUserWithLifetimeCriteria": 1, - "ga:screenviews": 1, - "ga:pageviews": 1, - "ga:calcMetric_\u003cNAME\u003e": 1, - "ga:transactionRevenuePerSession": 1, - "ga:cohortSessionDurationPerUser": 1, - "ga:revenuePerTransaction": 1, - "ga:screenviewsPerSession": 1, - "ga:pageviewsPerSession": 1, - "ga:cohortAppviewsPerUserWithLifetimeCriteria": 1 - }, - "per_social": { - "ga:month": 1, - "ga:yearWeek": 1, - "ga:week": 1, - "ga:date": 1, - "ga:dayOfWeekName": 1, - "ga:nthMonth": 1, - "ga:day": 1, - "ga:yearMonth": 1, - "ga:year": 1, - "ga:socialNetwork": 1, - "ga:hour": 1, - "ga:socialActivityContentUrl": 1, - "ga:isoYearIsoWeek": 1, - "ga:isoYear": 1, - "ga:nthWeek": 1, - "ga:nthDay": 1, - "ga:isoWeek": 1, - "ga:nthHour": 1, - "ga:dateHour": 1, - "ga:dayOfWeek": 1 - }, - "per_geo_dimension_widening": { - "ga:dimensionXX": 1, - "ga:countryIsoCode": 1, - "ga:subContinentCode": 1, - "ga:cityId": 1, - "ga:regionId": 1 - }, - "per_campaign_id_dimension_widening": { - "ga:dimensionXX": 1, - "ga:adGroup": 1, - "ga:campaign": 1, - "ga:referralPath": 1, - "ga:medium": 1, - "ga:metricXX": 1, - "ga:keyword": 1, - "ga:adContent": 1, - "ga:source": 1, - "ga:campaignCode": 1 - }, - "per_wmx_site": { - "ga:country": 1, - "ga:month": 1, - "ga:yearWeek": 1, - "ga:week": 1, - "ga:date": 1, - "ga:adMatchedQuery": 1, - "ga:dayOfWeekName": 1, - "ga:nthMonth": 1, - "ga:day": 1, - "ga:yearMonth": 1, - "ga:year": 1, - "ga:deviceCategory": 1, - "ga:source": 1, - "ga:countryIsoCode": 1, - "ga:nthWeek": 1, - "ga:nthDay": 1, - "ga:medium": 1, - "ga:users": 1, - "ga:sourceMedium": 1, - "ga:dayOfWeek": 1 - }, - "per_ecommerce_dimension_widening": { - "ga:productVariant": 1, - "ga:dimensionXX": 1, - "ga:productBrand": 1, - "ga:metricXX": 1, - "ga:productSku": 1, - "ga:productCategoryHierarchy": 1, - "ga:productName": 1 - }, - "per_absolute_unique_visitors": { - "ga:totalPublisherRevenuePer1000Sessions": 1, - "ga:percentNewSessions": 1, - "ga:backfillClicks": 1, - "ga:week": 1, - "ga:newUsers": 1, - "ga:hour": 1, - "ga:adxMonetizedPageviews": 1, - "ga:dfpViewableImpressionsPercent": 1, - "ga:backfillCTR": 1, - "ga:isoWeek": 1, - "ga:dfpCoverage": 1, - "ga:users": 1, - "ga:appInstallerId": 1, - "ga:revenuePerUser": 1, - "ga:refundAmount": 1, - "ga:adsenseExits": 1, - "ga:totalPublisherMonetizedPageviews": 1, - "ga:sessions": 1, - "ga:appId": 1, - "ga:metricXX": 1, - "ga:adxImpressions": 1, - "ga:adsenseCoverage": 1, - "ga:screenviews": 1, - "ga:avgScreenviewDuration": 1, - "ga:pageviews": 1, - "ga:dfpImpressions": 1, - "ga:timeOnPage": 1, - "ga:bounceRate": 1, - "ga:nthDay": 1, - "ga:entrances": 1, - "ga:totalPublisherClicks": 1, - "ga:revenuePerTransaction": 1, - "ga:screenviewsPerSession": 1, - "ga:backfillViewableImpressionsPercent": 1, - "ga:year": 1, - "ga:transactionRevenue": 1, - "ga:sessionsPerUser": 1, - "ga:entranceBounceRate": 1, - "ga:entranceRate": 1, - "ga:transactionsPerSession": 1, - "ga:appVersion": 1, - "ga:adxViewableImpressionsPercent": 1, - "ga:socialInteractionsPerSession": 1, - "ga:backfillRevenuePer1000Sessions": 1, - "ga:totalPublisherImpressions": 1, - "ga:adsenseAdsViewed": 1, - "ga:totalPublisherImpressionsPerSession": 1, - "ga:adxClicks": 1, - "ga:exitRate": 1, - "ga:dfpECPM": 1, - "ga:backfillMonetizedPageviews": 1, - "ga:dfpClicks": 1, - "ga:dfpImpressionsPerSession": 1, - "ga:adxCoverage": 1, - "ga:totalPublisherCoverage": 1, - "ga:dateHour": 1, - "ga:totalRefunds": 1, - "ga:adsenseECPM": 1, - "ga:adxImpressionsPerSession": 1, - "ga:appName": 1, - "ga:transactionsPerUser": 1, - "ga:nthMonth": 1, - "ga:yearMonth": 1, - "ga:avgSessionDuration": 1, - "ga:backfillECPM": 1, - "ga:avgTimeOnPage": 1, - "ga:adxCTR": 1, - "ga:transactions": 1, - "ga:goalConversionRateAll": 1, - "ga:nthWeek": 1, - "ga:dfpMonetizedPageviews": 1, - "ga:totalPublisherRevenue": 1, - "ga:uniqueSocialInteractions": 1, - "ga:adsenseViewableImpressionPercent": 1, - "ga:sessionDuration": 1, - "ga:adxECPM": 1, - "ga:adsenseRevenue": 1, - "ga:isoYear": 1, - "ga:dfpRevenuePer1000Sessions": 1, - "ga:backfillCoverage": 1, - "ga:dfpRevenue": 1, - "ga:pageviewsPerSession": 1, - "ga:totalPublisherViewableImpressionsPercent": 1, - "ga:dayOfWeek": 1, - "ga:backfillRevenue": 1, - "ga:date": 1, - "ga:day": 1, - "ga:dfpCTR": 1, - "ga:adsenseCTR": 1, - "ga:goalCompletionsAll": 1, - "ga:adsenseAdsClicks": 1, - "ga:backfillImpressionsPerSession": 1, - "ga:socialInteractions": 1, - "ga:backfillImpressions": 1, - "ga:month": 1, - "ga:totalPublisherECPM": 1, - "ga:yearWeek": 1, - "ga:exits": 1, - "ga:bounces": 1, - "ga:adxRevenuePer1000Sessions": 1, - "ga:dayOfWeekName": 1, - "ga:adsensePageImpressions": 1, - "ga:calcMetric_\u003cNAME\u003e": 1, - "ga:isoYearIsoWeek": 1, - "ga:dimensionXX": 1, - "ga:transactionRevenuePerSession": 1, - "ga:nthHour": 1, - "ga:adsenseAdUnitsViewed": 1, - "ga:adxRevenue": 1, - "ga:totalPublisherCTR": 1, - "ga:timeOnScreen": 1 - }, - "individual_user_report": { - "ga:acquisitionTrafficChannel": 1, - "ga:subContinentCode": 1, - "ga:goalValuePerSession": 1, - "ga:metroId": 1, - "ga:acquisitionSource": 1, - "ga:metro": 1, - "ga:latitude": 1, - "ga:avgSessionDuration": 1, - "ga:city": 1, - "ga:deviceCategory": 1, - "ga:continentId": 1, - "ga:transactions": 1, - "ga:transactionRevenue": 1, - "ga:goalCompletionsAll": 1, - "ga:countryIsoCode": 1, - "ga:goalConversionRateAll": 1, - "ga:acquisitionMedium": 1, - "ga:clientId": 1, - "ga:region": 1, - "ga:transactionsPerSession": 1, - "ga:networkLocation": 1, - "ga:goalXXValue": 1, - "ga:country": 1, - "ga:goalXXConversionRate": 1, - "ga:goalValueAll": 1, - "ga:subContinent": 1, - "ga:acquisitionCampaign": 1, - "ga:bounces": 1, - "ga:sessions": 1, - "ga:acquisitionSourceMedium": 1, - "ga:totalValue": 1, - "ga:sessionDuration": 1, - "ga:goalXXCompletions": 1, - "ga:screenviews": 1, - "ga:regionIsoCode": 1, - "ga:continent": 1, - "ga:calcMetric_\u003cNAME\u003e": 1, - "ga:pageviews": 1, - "ga:dimensionXX": 1, - "ga:networkDomain": 1, - "ga:cityId": 1, - "ga:bounceRate": 1, - "ga:transactionRevenuePerSession": 1, - "ga:revenuePerTransaction": 1, - "ga:screenviewsPerSession": 1, - "ga:pageviewsPerSession": 1, - "ga:longitude": 1, - "ga:regionId": 1 - }, - "per_active_visitors_day_active_visitors_14": { - "ga:totalPublisherRevenuePer1000Sessions": 1, - "ga:transactionTax": 1, - "ga:backfillClicks": 1, - "ga:percentNewSessions": 1, - "ga:avgServerConnectionTime": 1, - "ga:productCheckouts": 1, - "ga:newUsers": 1, - "ga:RPC": 1, - "ga:adxMonetizedPageviews": 1, - "ga:avgPageLoadTime": 1, - "ga:backfillCTR": 1, - "ga:goalStartsAll": 1, - "ga:avgDomContentLoadedTime": 1, - "ga:domainLookupTime": 1, - "ga:dfpCoverage": 1, - "ga:goalXXValue": 1, - "ga:uniquePurchases": 1, - "ga:pageLoadSample": 1, - "ga:sessions": 1, - "ga:totalPublisherMonetizedPageviews": 1, - "ga:exceptions": 1, - "ga:metricXX": 1, - "ga:adxImpressions": 1, - "ga:adsenseCoverage": 1, - "ga:searchUniques": 1, - "ga:screenviews": 1, - "ga:productAddsToCart": 1, - "ga:avgScreenviewDuration": 1, - "ga:percentSearchRefinements": 1, - "ga:dfpImpressions": 1, - "ga:timeOnPage": 1, - "ga:bounceRate": 1, - "ga:entrances": 1, - "ga:revenuePerTransaction": 1, - "ga:dcmFloodlightQuantity": 1, - "ga:redirectionTime": 1, - "ga:productRemovesFromCart": 1, - "ga:dbmCPA": 1, - "ga:dbmCPC": 1, - "ga:transactionRevenue": 1, - "ga:dbmCPM": 1, - "ga:CTR": 1, - "ga:entranceRate": 1, - "ga:buyToDetailRate": 1, - "ga:goalAbandonRateAll": 1, - "ga:avgEventValue": 1, - "ga:dcmCTR": 1, - "ga:adxViewableImpressionsPercent": 1, - "ga:socialInteractionsPerSession": 1, - "ga:fatalExceptionsPerScreenview": 1, - "ga:avgSearchResultViews": 1, - "ga:backfillRevenuePer1000Sessions": 1, - "ga:productListCTR": 1, - "ga:avgDomainLookupTime": 1, - "ga:hits": 1, - "ga:totalPublisherImpressionsPerSession": 1, - "ga:adxClicks": 1, - "ga:pageValue": 1, - "ga:dfpClicks": 1, - "ga:dfpImpressionsPerSession": 1, - "ga:organicSearches": 1, - "ga:adsenseECPM": 1, - "ga:adxImpressionsPerSession": 1, - "ga:searchRefinements": 1, - "ga:quantityRefunded": 1, - "ga:avgTimeOnPage": 1, - "ga:goalXXAbandonRate": 1, - "ga:adxCTR": 1, - "ga:totalPublisherRevenue": 1, - "ga:adClicks": 1, - "ga:adsenseViewableImpressionPercent": 1, - "ga:uniqueSocialInteractions": 1, - "ga:totalEvents": 1, - "ga:itemsPerPurchase": 1, - "ga:productRefundAmount": 1, - "ga:avgDomInteractiveTime": 1, - "ga:goalXXCompletions": 1, - "ga:adsenseRevenue": 1, - "ga:goalXXAbandons": 1, - "ga:dbmCost": 1, - "ga:dfpRevenue": 1, - "ga:pageviewsPerSession": 1, - "ga:fatalExceptions": 1, - "ga:searchGoalXXConversionRate": 1, - "ga:goalCompletionsAll": 1, - "ga:productDetailViews": 1, - "ga:dbmCTR": 1, - "ga:14dayUsers": 1, - "ga:adsenseAdsClicks": 1, - "ga:socialInteractions": 1, - "ga:dcmROAS": 1, - "ga:searchResultViews": 1, - "ga:productRevenuePerPurchase": 1, - "ga:totalPublisherECPM": 1, - "ga:bounces": 1, - "ga:dbmClicks": 1, - "ga:searchGoalConversionRateAll": 1, - "ga:avgPageDownloadTime": 1, - "ga:revenuePerItem": 1, - "ga:cartToDetailRate": 1, - "ga:dbmImpressions": 1, - "ga:domInteractiveTime": 1, - "ga:percentSessionsWithSearch": 1, - "ga:adsenseAdUnitsViewed": 1, - "ga:timeOnScreen": 1, - "ga:dbmConversions": 1, - "ga:goalValueAllPerSearch": 1, - "ga:dfpViewableImpressionsPercent": 1, - "ga:domContentLoadedTime": 1, - "ga:productListClicks": 1, - "ga:uniqueDimensionCombinations": 1, - "ga:uniqueEvents": 1, - "ga:refundAmount": 1, - "ga:searchDepth": 1, - "ga:pageviews": 1, - "ga:goalXXStarts": 1, - "ga:itemRevenue": 1, - "ga:nthDay": 1, - "ga:totalPublisherClicks": 1, - "ga:screenviewsPerSession": 1, - "ga:serverConnectionTime": 1, - "ga:searchExits": 1, - "ga:speedMetricsSample": 1, - "ga:backfillViewableImpressionsPercent": 1, - "ga:entranceBounceRate": 1, - "ga:quantityRemovedFromCart": 1, - "ga:transactionsPerSession": 1, - "ga:pageDownloadTime": 1, - "ga:goalValueAll": 1, - "ga:dcmCost": 1, - "ga:totalPublisherImpressions": 1, - "ga:totalValue": 1, - "ga:adsenseAdsViewed": 1, - "ga:eventValue": 1, - "ga:exitRate": 1, - "ga:dfpECPM": 1, - "ga:backfillMonetizedPageviews": 1, - "ga:dbmROAS": 1, - "ga:adxCoverage": 1, - "ga:totalPublisherCoverage": 1, - "ga:dcmFloodlightRevenue": 1, - "ga:uniquePageviews": 1, - "ga:exceptionsPerScreenview": 1, - "ga:totalRefunds": 1, - "ga:itemQuantity": 1, - "ga:avgSearchDuration": 1, - "ga:goalValuePerSession": 1, - "ga:transactionShipping": 1, - "ga:avgSessionDuration": 1, - "ga:backfillECPM": 1, - "ga:domLatencyMetricsSample": 1, - "ga:sessionsWithEvent": 1, - "ga:transactions": 1, - "ga:avgSearchDepth": 1, - "ga:goalConversionRateAll": 1, - "ga:dfpMonetizedPageviews": 1, - "ga:dcmRPC": 1, - "ga:searchSessions": 1, - "ga:productRefunds": 1, - "ga:dcmClicks": 1, - "ga:sessionDuration": 1, - "ga:quantityCheckedOut": 1, - "ga:adxECPM": 1, - "ga:uniqueScreenviews": 1, - "ga:avgUserTimingValue": 1, - "ga:dfpRevenuePer1000Sessions": 1, - "ga:backfillCoverage": 1, - "ga:serverResponseTime": 1, - "ga:totalPublisherViewableImpressionsPercent": 1, - "ga:backfillRevenue": 1, - "ga:date": 1, - "ga:dcmCPC": 1, - "ga:userTimingValue": 1, - "ga:day": 1, - "ga:dfpCTR": 1, - "ga:adsenseCTR": 1, - "ga:avgServerResponseTime": 1, - "ga:searchExitRate": 1, - "ga:backfillImpressionsPerSession": 1, - "ga:quantityAddedToCart": 1, - "ga:searchDuration": 1, - "ga:backfillImpressions": 1, - "ga:goalXXConversionRate": 1, - "ga:exits": 1, - "ga:adxRevenuePer1000Sessions": 1, - "ga:impressions": 1, - "ga:adsensePageImpressions": 1, - "ga:avgRedirectionTime": 1, - "ga:eventsPerSessionWithEvent": 1, - "ga:pageLoadTime": 1, - "ga:dcmImpressions": 1, - "ga:calcMetric_\u003cNAME\u003e": 1, - "ga:goalAbandonsAll": 1, - "ga:dcmROI": 1, - "ga:productListViews": 1, - "ga:dcmMargin": 1, - "ga:transactionRevenuePerSession": 1, - "ga:userTimingSample": 1, - "ga:adxRevenue": 1, - "ga:totalPublisherCTR": 1 - }, - "per_campaign_segmented_with_local_currency": { - "ga:totalPublisherRevenuePer1000Sessions": 1, - "ga:referralPath": 1, - "ga:transactionTax": 1, - "ga:percentNewSessions": 1, - "ga:backfillClicks": 1, - "ga:productCheckouts": 1, - "ga:newUsers": 1, - "ga:adxMonetizedPageviews": 1, - "ga:backfillCTR": 1, - "ga:isoWeek": 1, - "ga:goalStartsAll": 1, - "ga:dfpCoverage": 1, - "ga:localRefundAmount": 1, - "ga:goalXXValue": 1, - "ga:sourceMedium": 1, - "ga:uniquePurchases": 1, - "ga:totalPublisherMonetizedPageviews": 1, - "ga:sessions": 1, - "ga:metricXX": 1, - "ga:adxImpressions": 1, - "ga:adsenseCoverage": 1, - "ga:searchUniques": 1, - "ga:screenviews": 1, - "ga:productAddsToCart": 1, - "ga:source": 1, - "ga:percentSearchRefinements": 1, - "ga:dfpImpressions": 1, - "ga:timeOnPage": 1, - "ga:localTransactionShipping": 1, - "ga:bounceRate": 1, - "ga:entrances": 1, - "ga:revenuePerTransaction": 1, - "ga:dcmFloodlightQuantity": 1, - "ga:productRemovesFromCart": 1, - "ga:transactionRevenue": 1, - "ga:adSlot": 1, - "ga:entranceRate": 1, - "ga:buyToDetailRate": 1, - "ga:goalAbandonRateAll": 1, - "ga:adxViewableImpressionsPercent": 1, - "ga:avgSearchResultViews": 1, - "ga:backfillRevenuePer1000Sessions": 1, - "ga:productListCTR": 1, - "ga:totalPublisherImpressionsPerSession": 1, - "ga:adxClicks": 1, - "ga:pageValue": 1, - "ga:dfpClicks": 1, - "ga:dfpImpressionsPerSession": 1, - "ga:localProductRefundAmount": 1, - "ga:organicSearches": 1, - "ga:isTrueViewVideoAd": 1, - "ga:adsenseECPM": 1, - "ga:adxImpressionsPerSession": 1, - "ga:searchRefinements": 1, - "ga:appName": 1, - "ga:quantityRefunded": 1, - "ga:nthMonth": 1, - "ga:avgTimeOnPage": 1, - "ga:adxCTR": 1, - "ga:goalXXAbandonRate": 1, - "ga:nthWeek": 1, - "ga:totalPublisherRevenue": 1, - "ga:adsenseViewableImpressionPercent": 1, - "ga:trafficType": 1, - "ga:itemsPerPurchase": 1, - "ga:productRefundAmount": 1, - "ga:adsenseRevenue": 1, - "ga:goalXXCompletions": 1, - "ga:goalXXAbandons": 1, - "ga:campaign": 1, - "ga:isoYear": 1, - "ga:channelGrouping": 1, - "ga:dfpRevenue": 1, - "ga:keyword": 1, - "ga:pageviewsPerSession": 1, - "ga:dayOfWeek": 1, - "ga:adwordsAdGroupID": 1, - "ga:localItemRevenue": 1, - "ga:searchGoalXXConversionRate": 1, - "ga:goalCompletionsAll": 1, - "ga:productDetailViews": 1, - "ga:adsenseAdsClicks": 1, - "ga:searchResultViews": 1, - "ga:productRevenuePerPurchase": 1, - "ga:totalPublisherECPM": 1, - "ga:bounces": 1, - "ga:searchGoalConversionRateAll": 1, - "ga:socialNetwork": 1, - "ga:revenuePerItem": 1, - "ga:cartToDetailRate": 1, - "ga:percentSessionsWithSearch": 1, - "ga:nthHour": 1, - "ga:adsenseAdUnitsViewed": 1, - "ga:adGroup": 1, - "ga:localTransactionTax": 1, - "ga:week": 1, - "ga:goalValueAllPerSearch": 1, - "ga:hour": 1, - "ga:dfpViewableImpressionsPercent": 1, - "ga:productListClicks": 1, - "ga:uniqueDimensionCombinations": 1, - "ga:uniqueEvents": 1, - "ga:users": 1, - "ga:appInstallerId": 1, - "ga:revenuePerUser": 1, - "ga:refundAmount": 1, - "ga:searchDepth": 1, - "ga:adsenseExits": 1, - "ga:appId": 1, - "ga:pageviews": 1, - "ga:goalXXStarts": 1, - "ga:itemRevenue": 1, - "ga:nthDay": 1, - "ga:totalPublisherClicks": 1, - "ga:screenviewsPerSession": 1, - "ga:searchExits": 1, - "ga:externalActivityId": 1, - "ga:backfillViewableImpressionsPercent": 1, - "ga:adSlotPosition": 1, - "ga:year": 1, - "ga:sessionsPerUser": 1, - "ga:adTargetingOption": 1, - "ga:entranceBounceRate": 1, - "ga:quantityRemovedFromCart": 1, - "ga:transactionsPerSession": 1, - "ga:appVersion": 1, - "ga:goalValueAll": 1, - "ga:totalPublisherImpressions": 1, - "ga:totalValue": 1, - "ga:adsenseAdsViewed": 1, - "ga:exitRate": 1, - "ga:dfpECPM": 1, - "ga:backfillMonetizedPageviews": 1, - "ga:adxCoverage": 1, - "ga:totalPublisherCoverage": 1, - "ga:dcmFloodlightRevenue": 1, - "ga:uniquePageviews": 1, - "ga:dateHour": 1, - "ga:totalRefunds": 1, - "ga:itemQuantity": 1, - "ga:avgSearchDuration": 1, - "ga:goalValuePerSession": 1, - "ga:transactionsPerUser": 1, - "ga:transactionShipping": 1, - "ga:yearMonth": 1, - "ga:avgSessionDuration": 1, - "ga:backfillECPM": 1, - "ga:transactions": 1, - "ga:avgSearchDepth": 1, - "ga:goalConversionRateAll": 1, - "ga:dfpMonetizedPageviews": 1, - "ga:searchSessions": 1, - "ga:fullReferrer": 1, - "ga:productRefunds": 1, - "ga:sessionDuration": 1, - "ga:quantityCheckedOut": 1, - "ga:adxECPM": 1, - "ga:adContent": 1, - "ga:dfpRevenuePer1000Sessions": 1, - "ga:backfillCoverage": 1, - "ga:totalPublisherViewableImpressionsPercent": 1, - "ga:adPlacementDomain": 1, - "ga:backfillRevenue": 1, - "ga:date": 1, - "ga:day": 1, - "ga:dfpCTR": 1, - "ga:adsenseCTR": 1, - "ga:localTransactionRevenue": 1, - "ga:searchExitRate": 1, - "ga:backfillImpressionsPerSession": 1, - "ga:medium": 1, - "ga:adDestinationUrl": 1, - "ga:quantityAddedToCart": 1, - "ga:currencyCode": 1, - "ga:searchDuration": 1, - "ga:backfillImpressions": 1, - "ga:goalXXConversionRate": 1, - "ga:month": 1, - "ga:yearWeek": 1, - "ga:exits": 1, - "ga:adxRevenuePer1000Sessions": 1, - "ga:dayOfWeekName": 1, - "ga:adsensePageImpressions": 1, - "ga:calcMetric_\u003cNAME\u003e": 1, - "ga:goalAbandonsAll": 1, - "ga:isoYearIsoWeek": 1, - "ga:dimensionXX": 1, - "ga:productListViews": 1, - "ga:transactionRevenuePerSession": 1, - "ga:adPlacementUrl": 1, - "ga:adxRevenue": 1, - "ga:totalPublisherCTR": 1, - "ga:campaignCode": 1 - }, - "gwo_bandit_combination_metrics": { - "ga:totalPublisherRevenuePer1000Sessions": 1, - "ga:experimentCombination": 1, - "ga:percentNewSessions": 1, - "ga:backfillClicks": 1, - "ga:newUsers": 1, - "ga:goalValueAllPerSearch": 1, - "ga:adxMonetizedPageviews": 1, - "ga:dfpViewableImpressionsPercent": 1, - "ga:backfillCTR": 1, - "ga:goalStartsAll": 1, - "ga:dfpCoverage": 1, - "ga:goalXXValue": 1, - "ga:refundAmount": 1, - "ga:experimentName": 1, - "ga:searchDepth": 1, - "ga:adsenseExits": 1, - "ga:totalPublisherMonetizedPageviews": 1, - "ga:sessions": 1, - "ga:exceptions": 1, - "ga:adxImpressions": 1, - "ga:adsenseCoverage": 1, - "ga:searchUniques": 1, - "ga:screenviews": 1, - "ga:pageviews": 1, - "ga:percentSearchRefinements": 1, - "ga:goalXXStarts": 1, - "ga:experimentOutcomeType": 1, - "ga:dfpImpressions": 1, - "ga:timeOnPage": 1, - "ga:bounceRate": 1, - "ga:entrances": 1, - "ga:totalPublisherClicks": 1, - "ga:revenuePerTransaction": 1, - "ga:screenviewsPerSession": 1, - "ga:searchExits": 1, - "ga:dcmFloodlightQuantity": 1, - "ga:backfillViewableImpressionsPercent": 1, - "ga:transactionRevenue": 1, - "ga:entranceBounceRate": 1, - "ga:entranceRate": 1, - "ga:experimentOutcomes": 1, - "ga:goalAbandonRateAll": 1, - "ga:transactionsPerSession": 1, - "ga:adxViewableImpressionsPercent": 1, - "ga:goalValueAll": 1, - "ga:fatalExceptionsPerScreenview": 1, - "ga:avgSearchResultViews": 1, - "ga:backfillRevenuePer1000Sessions": 1, - "ga:chanceToBeatOriginal": 1, - "ga:totalPublisherImpressions": 1, - "ga:totalValue": 1, - "ga:adsenseAdsViewed": 1, - "ga:totalPublisherImpressionsPerSession": 1, - "ga:adxClicks": 1, - "ga:exitRate": 1, - "ga:dfpECPM": 1, - "ga:backfillMonetizedPageviews": 1, - "ga:dfpClicks": 1, - "ga:dfpImpressionsPerSession": 1, - "ga:adxCoverage": 1, - "ga:totalPublisherCoverage": 1, - "ga:dcmFloodlightRevenue": 1, - "ga:uniquePageviews": 1, - "ga:exceptionsPerScreenview": 1, - "ga:compareToOriginal": 1, - "ga:experimentId": 1, - "ga:totalRefunds": 1, - "ga:avgSearchDuration": 1, - "ga:adsenseECPM": 1, - "ga:goalValuePerSession": 1, - "ga:adxImpressionsPerSession": 1, - "ga:searchRefinements": 1, - "ga:avgSessionDuration": 1, - "ga:backfillECPM": 1, - "ga:avgTimeOnPage": 1, - "ga:adxCTR": 1, - "ga:goalXXAbandonRate": 1, - "ga:transactions": 1, - "ga:avgSearchDepth": 1, - "ga:goalConversionRateAll": 1, - "ga:dfpMonetizedPageviews": 1, - "ga:totalPublisherRevenue": 1, - "ga:searchSessions": 1, - "ga:adsenseViewableImpressionPercent": 1, - "ga:sessionDuration": 1, - "ga:adxECPM": 1, - "ga:experimentStarts": 1, - "ga:adsenseRevenue": 1, - "ga:goalXXCompletions": 1, - "ga:goalXXAbandons": 1, - "ga:dfpRevenuePer1000Sessions": 1, - "ga:backfillCoverage": 1, - "ga:dfpRevenue": 1, - "ga:pageviewsPerSession": 1, - "ga:totalPublisherViewableImpressionsPercent": 1, - "ga:fatalExceptions": 1, - "ga:backfillRevenue": 1, - "ga:searchGoalXXConversionRate": 1, - "ga:dfpCTR": 1, - "ga:adsenseCTR": 1, - "ga:goalCompletionsAll": 1, - "ga:searchExitRate": 1, - "ga:adsenseAdsClicks": 1, - "ga:backfillImpressionsPerSession": 1, - "ga:experimentVariant": 1, - "ga:searchDuration": 1, - "ga:searchResultViews": 1, - "ga:backfillImpressions": 1, - "ga:goalXXConversionRate": 1, - "ga:totalPublisherECPM": 1, - "ga:exits": 1, - "ga:bounces": 1, - "ga:adxRevenuePer1000Sessions": 1, - "ga:adsensePageImpressions": 1, - "ga:searchGoalConversionRateAll": 1, - "ga:calcMetric_\u003cNAME\u003e": 1, - "ga:goalAbandonsAll": 1, - "ga:transactionRevenuePerSession": 1, - "ga:percentSessionsWithSearch": 1, - "ga:adsenseAdUnitsViewed": 1, - "ga:adxRevenue": 1, - "ga:totalPublisherCTR": 1 - }, - "per_active_visitors_date_active_visitors_14": { - "ga:totalPublisherRevenuePer1000Sessions": 1, - "ga:transactionTax": 1, - "ga:backfillClicks": 1, - "ga:percentNewSessions": 1, - "ga:avgServerConnectionTime": 1, - "ga:productCheckouts": 1, - "ga:newUsers": 1, - "ga:RPC": 1, - "ga:adxMonetizedPageviews": 1, - "ga:avgPageLoadTime": 1, - "ga:backfillCTR": 1, - "ga:goalStartsAll": 1, - "ga:avgDomContentLoadedTime": 1, - "ga:domainLookupTime": 1, - "ga:dfpCoverage": 1, - "ga:goalXXValue": 1, - "ga:uniquePurchases": 1, - "ga:pageLoadSample": 1, - "ga:sessions": 1, - "ga:totalPublisherMonetizedPageviews": 1, - "ga:exceptions": 1, - "ga:metricXX": 1, - "ga:adxImpressions": 1, - "ga:adsenseCoverage": 1, - "ga:searchUniques": 1, - "ga:screenviews": 1, - "ga:productAddsToCart": 1, - "ga:avgScreenviewDuration": 1, - "ga:percentSearchRefinements": 1, - "ga:dfpImpressions": 1, - "ga:timeOnPage": 1, - "ga:bounceRate": 1, - "ga:entrances": 1, - "ga:revenuePerTransaction": 1, - "ga:dcmFloodlightQuantity": 1, - "ga:redirectionTime": 1, - "ga:productRemovesFromCart": 1, - "ga:dbmCPA": 1, - "ga:dbmCPC": 1, - "ga:transactionRevenue": 1, - "ga:dbmCPM": 1, - "ga:CTR": 1, - "ga:entranceRate": 1, - "ga:buyToDetailRate": 1, - "ga:goalAbandonRateAll": 1, - "ga:avgEventValue": 1, - "ga:dcmCTR": 1, - "ga:adxViewableImpressionsPercent": 1, - "ga:socialInteractionsPerSession": 1, - "ga:fatalExceptionsPerScreenview": 1, - "ga:avgSearchResultViews": 1, - "ga:backfillRevenuePer1000Sessions": 1, - "ga:productListCTR": 1, - "ga:avgDomainLookupTime": 1, - "ga:hits": 1, - "ga:totalPublisherImpressionsPerSession": 1, - "ga:adxClicks": 1, - "ga:pageValue": 1, - "ga:dfpClicks": 1, - "ga:dfpImpressionsPerSession": 1, - "ga:organicSearches": 1, - "ga:adsenseECPM": 1, - "ga:adxImpressionsPerSession": 1, - "ga:searchRefinements": 1, - "ga:quantityRefunded": 1, - "ga:avgTimeOnPage": 1, - "ga:goalXXAbandonRate": 1, - "ga:adxCTR": 1, - "ga:totalPublisherRevenue": 1, - "ga:adClicks": 1, - "ga:adsenseViewableImpressionPercent": 1, - "ga:uniqueSocialInteractions": 1, - "ga:totalEvents": 1, - "ga:itemsPerPurchase": 1, - "ga:productRefundAmount": 1, - "ga:avgDomInteractiveTime": 1, - "ga:goalXXCompletions": 1, - "ga:adsenseRevenue": 1, - "ga:goalXXAbandons": 1, - "ga:dbmCost": 1, - "ga:dfpRevenue": 1, - "ga:pageviewsPerSession": 1, - "ga:fatalExceptions": 1, - "ga:searchGoalXXConversionRate": 1, - "ga:goalCompletionsAll": 1, - "ga:productDetailViews": 1, - "ga:dbmCTR": 1, - "ga:14dayUsers": 1, - "ga:adsenseAdsClicks": 1, - "ga:socialInteractions": 1, - "ga:dcmROAS": 1, - "ga:searchResultViews": 1, - "ga:productRevenuePerPurchase": 1, - "ga:totalPublisherECPM": 1, - "ga:bounces": 1, - "ga:dbmClicks": 1, - "ga:searchGoalConversionRateAll": 1, - "ga:avgPageDownloadTime": 1, - "ga:revenuePerItem": 1, - "ga:cartToDetailRate": 1, - "ga:dbmImpressions": 1, - "ga:domInteractiveTime": 1, - "ga:percentSessionsWithSearch": 1, - "ga:adsenseAdUnitsViewed": 1, - "ga:timeOnScreen": 1, - "ga:dbmConversions": 1, - "ga:goalValueAllPerSearch": 1, - "ga:dfpViewableImpressionsPercent": 1, - "ga:domContentLoadedTime": 1, - "ga:productListClicks": 1, - "ga:uniqueDimensionCombinations": 1, - "ga:uniqueEvents": 1, - "ga:refundAmount": 1, - "ga:searchDepth": 1, - "ga:pageviews": 1, - "ga:goalXXStarts": 1, - "ga:itemRevenue": 1, - "ga:nthDay": 1, - "ga:totalPublisherClicks": 1, - "ga:screenviewsPerSession": 1, - "ga:serverConnectionTime": 1, - "ga:searchExits": 1, - "ga:speedMetricsSample": 1, - "ga:backfillViewableImpressionsPercent": 1, - "ga:entranceBounceRate": 1, - "ga:quantityRemovedFromCart": 1, - "ga:transactionsPerSession": 1, - "ga:pageDownloadTime": 1, - "ga:goalValueAll": 1, - "ga:dcmCost": 1, - "ga:totalPublisherImpressions": 1, - "ga:totalValue": 1, - "ga:adsenseAdsViewed": 1, - "ga:eventValue": 1, - "ga:exitRate": 1, - "ga:dfpECPM": 1, - "ga:backfillMonetizedPageviews": 1, - "ga:dbmROAS": 1, - "ga:adxCoverage": 1, - "ga:totalPublisherCoverage": 1, - "ga:dcmFloodlightRevenue": 1, - "ga:uniquePageviews": 1, - "ga:exceptionsPerScreenview": 1, - "ga:totalRefunds": 1, - "ga:itemQuantity": 1, - "ga:avgSearchDuration": 1, - "ga:goalValuePerSession": 1, - "ga:transactionShipping": 1, - "ga:avgSessionDuration": 1, - "ga:backfillECPM": 1, - "ga:domLatencyMetricsSample": 1, - "ga:sessionsWithEvent": 1, - "ga:transactions": 1, - "ga:avgSearchDepth": 1, - "ga:goalConversionRateAll": 1, - "ga:dfpMonetizedPageviews": 1, - "ga:dcmRPC": 1, - "ga:searchSessions": 1, - "ga:productRefunds": 1, - "ga:dcmClicks": 1, - "ga:sessionDuration": 1, - "ga:quantityCheckedOut": 1, - "ga:adxECPM": 1, - "ga:uniqueScreenviews": 1, - "ga:avgUserTimingValue": 1, - "ga:dfpRevenuePer1000Sessions": 1, - "ga:backfillCoverage": 1, - "ga:serverResponseTime": 1, - "ga:totalPublisherViewableImpressionsPercent": 1, - "ga:backfillRevenue": 1, - "ga:date": 1, - "ga:dcmCPC": 1, - "ga:userTimingValue": 1, - "ga:day": 1, - "ga:dfpCTR": 1, - "ga:adsenseCTR": 1, - "ga:avgServerResponseTime": 1, - "ga:searchExitRate": 1, - "ga:backfillImpressionsPerSession": 1, - "ga:quantityAddedToCart": 1, - "ga:searchDuration": 1, - "ga:backfillImpressions": 1, - "ga:goalXXConversionRate": 1, - "ga:exits": 1, - "ga:adxRevenuePer1000Sessions": 1, - "ga:impressions": 1, - "ga:adsensePageImpressions": 1, - "ga:avgRedirectionTime": 1, - "ga:eventsPerSessionWithEvent": 1, - "ga:pageLoadTime": 1, - "ga:dcmImpressions": 1, - "ga:calcMetric_\u003cNAME\u003e": 1, - "ga:goalAbandonsAll": 1, - "ga:dcmROI": 1, - "ga:productListViews": 1, - "ga:dcmMargin": 1, - "ga:transactionRevenuePerSession": 1, - "ga:userTimingSample": 1, - "ga:adxRevenue": 1, - "ga:totalPublisherCTR": 1 - }, - "per_wmx_query": { - "ga:country": 1, - "ga:month": 1, - "ga:yearWeek": 1, - "ga:week": 1, - "ga:date": 1, - "ga:adMatchedQuery": 1, - "ga:dayOfWeekName": 1, - "ga:nthMonth": 1, - "ga:day": 1, - "ga:hostname": 1, - "ga:yearMonth": 1, - "ga:year": 1, - "ga:deviceCategory": 1, - "ga:source": 1, - "ga:countryIsoCode": 1, - "ga:landingPagePath": 1, - "ga:nthWeek": 1, - "ga:nthDay": 1, - "ga:medium": 1, - "ga:users": 1, - "ga:sourceMedium": 1, - "ga:dayOfWeek": 1 - }, - "Cube:analytics/per_value_site_search_without_transaction_product_metrics": { - "ga:totalPublisherRevenuePer1000Sessions": 1, - "ga:referralPath": 1, - "ga:metroId": 1, - "ga:backfillClicks": 1, - "ga:percentNewSessions": 1, - "ga:productCheckouts": 1, - "ga:newUsers": 1, - "ga:dcmClickSite": 1, - "ga:dbmClickLineItemId": 1, - "ga:adxMonetizedPageviews": 1, - "ga:dsAdvertiserId": 1, - "ga:flashVersion": 1, - "ga:backfillCTR": 1, - "ga:isoWeek": 1, - "ga:internalPromotionId": 1, - "ga:searchDestinationPage": 1, - "ga:goalStartsAll": 1, - "ga:dsEngineAccount": 1, - "ga:adwordsCreativeID": 1, - "ga:sessionsToTransaction": 1, - "ga:networkLocation": 1, - "ga:dfpCoverage": 1, - "ga:goalXXValue": 1, - "ga:sourceMedium": 1, - "ga:uniquePurchases": 1, - "ga:pageDepth": 1, - "ga:landingContentGroup4": 1, - "ga:landingContentGroup3": 1, - "ga:sessions": 1, - "ga:totalPublisherMonetizedPageviews": 1, - "ga:landingContentGroup2": 1, - "ga:landingContentGroup1": 1, - "ga:previousPagePath": 1, - "ga:dbmClickSite": 1, - "ga:metricXX": 1, - "ga:adxImpressions": 1, - "ga:dcmClickSpotId": 1, - "ga:landingContentGroup5": 1, - "ga:adsenseCoverage": 1, - "ga:screenResolution": 1, - "ga:searchUniques": 1, - "ga:screenviews": 1, - "ga:isTablet": 1, - "ga:productAddsToCart": 1, - "ga:avgScreenviewDuration": 1, - "ga:source": 1, - "ga:percentSearchRefinements": 1, - "ga:dsAdGroup": 1, - "ga:networkDomain": 1, - "ga:dfpImpressions": 1, - "ga:timeOnPage": 1, - "ga:bounceRate": 1, - "ga:entrances": 1, - "ga:dcmClickCreativeId": 1, - "ga:dcmFloodlightQuantity": 1, - "ga:screenName": 1, - "ga:productRemovesFromCart": 1, - "ga:internalPromotionCreative": 1, - "ga:productName": 1, - "ga:adSlot": 1, - "ga:secondPagePath": 1, - "ga:entranceRate": 1, - "ga:buyToDetailRate": 1, - "ga:goalAbandonRateAll": 1, - "ga:searchUsed": 1, - "ga:avgEventValue": 1, - "ga:adxViewableImpressionsPercent": 1, - "ga:socialInteractionsPerSession": 1, - "ga:avgSearchResultViews": 1, - "ga:adwordsCampaignID": 1, - "ga:backfillRevenuePer1000Sessions": 1, - "ga:productListCTR": 1, - "ga:dbmClickInsertionOrder": 1, - "ga:socialInteractionNetworkAction": 1, - "ga:hits": 1, - "ga:totalPublisherImpressionsPerSession": 1, - "ga:adxClicks": 1, - "ga:dcmClickCreativeType": 1, - "ga:dfpClicks": 1, - "ga:internalPromotionName": 1, - "ga:dbmClickLineItem": 1, - "ga:dfpImpressionsPerSession": 1, - "ga:cityId": 1, - "ga:organicSearches": 1, - "ga:searchKeywordRefinement": 1, - "ga:landingScreenName": 1, - "ga:dbmClickAdvertiser": 1, - "ga:dcmFloodlightSpotId": 1, - "ga:previousContentGroup1": 1, - "ga:searchKeyword": 1, - "ga:previousContentGroup2": 1, - "ga:adsenseECPM": 1, - "ga:previousContentGroup3": 1, - "ga:adxImpressionsPerSession": 1, - "ga:previousContentGroup4": 1, - "ga:searchRefinements": 1, - "ga:dcmFloodlightActivity": 1, - "ga:appName": 1, - "ga:dsAdvertiser": 1, - "ga:quantityRefunded": 1, - "ga:latitude": 1, - "ga:nthMonth": 1, - "ga:previousContentGroup5": 1, - "ga:avgTimeOnPage": 1, - "ga:sourcePropertyTrackingId": 1, - "ga:goalXXAbandonRate": 1, - "ga:adxCTR": 1, - "ga:continentId": 1, - "ga:deviceCategory": 1, - "ga:dcmClickSitePlacement": 1, - "ga:dbmClickCreativeId": 1, - "ga:nthWeek": 1, - "ga:dsCampaign": 1, - "ga:interestInMarketCategory": 1, - "ga:adMatchType": 1, - "ga:adwordsCustomerID": 1, - "ga:totalPublisherRevenue": 1, - "ga:userAgeBracket": 1, - "ga:adsenseViewableImpressionPercent": 1, - "ga:uniqueSocialInteractions": 1, - "ga:totalEvents": 1, - "ga:dcmFloodlightActivityGroup": 1, - "ga:trafficType": 1, - "ga:itemsPerPurchase": 1, - "ga:productRefundAmount": 1, - "ga:goalXXCompletions": 1, - "ga:adsenseRevenue": 1, - "ga:continent": 1, - "ga:goalXXAbandons": 1, - "ga:campaign": 1, - "ga:isoYear": 1, - "ga:customVarValueXX": 1, - "ga:landingPagePath": 1, - "ga:channelGrouping": 1, - "ga:searchCategory": 1, - "ga:dfpRevenue": 1, - "ga:adwordsCustomerName": 1, - "ga:dsCampaignId": 1, - "ga:mobileDeviceInfo": 1, - "ga:keyword": 1, - "ga:pageviewsPerSession": 1, - "ga:dayOfWeek": 1, - "ga:adwordsAdGroupID": 1, - "ga:orderCouponCode": 1, - "ga:searchGoalXXConversionRate": 1, - "ga:socialInteractionAction": 1, - "ga:dbmClickExchange": 1, - "ga:socialInteractionNetwork": 1, - "ga:goalCompletionsAll": 1, - "ga:productDetailViews": 1, - "ga:dcmClickCreativeTypeId": 1, - "ga:language": 1, - "ga:adsenseAdsClicks": 1, - "ga:searchAfterDestinationPage": 1, - "ga:affiliation": 1, - "ga:socialInteractions": 1, - "ga:isMobile": 1, - "ga:searchResultViews": 1, - "ga:exitScreenName": 1, - "ga:productRevenuePerPurchase": 1, - "ga:totalPublisherECPM": 1, - "ga:internalPromotionPosition": 1, - "ga:bounces": 1, - "ga:searchGoalConversionRateAll": 1, - "ga:socialNetwork": 1, - "ga:dbmClickExchangeId": 1, - "ga:dsKeyword": 1, - "ga:revenuePerItem": 1, - "ga:cartToDetailRate": 1, - "ga:adDistributionNetwork": 1, - "ga:userBucket": 1, - "ga:socialEngagementType": 1, - "ga:dsKeywordId": 1, - "ga:percentSessionsWithSearch": 1, - "ga:longitude": 1, - "ga:dcmClickAdTypeId": 1, - "ga:nthHour": 1, - "ga:adsenseAdUnitsViewed": 1, - "ga:mobileInputSelector": 1, - "ga:timeOnScreen": 1, - "ga:shoppingStage": 1, - "ga:adGroup": 1, - "ga:week": 1, - "ga:dcmClickCampaign": 1, - "ga:sourcePropertyDisplayName": 1, - "ga:goalValueAllPerSearch": 1, - "ga:dbmClickAdvertiserId": 1, - "ga:hour": 1, - "ga:adQueryWordCount": 1, - "ga:dfpViewableImpressionsPercent": 1, - "ga:daysToTransaction": 1, - "ga:dbmClickCreativeName": 1, - "ga:searchStartPage": 1, - "ga:productListClicks": 1, - "ga:nextPagePath": 1, - "ga:dcmClickSitePlacementId": 1, - "ga:uniqueDimensionCombinations": 1, - "ga:adTargetingType": 1, - "ga:productSku": 1, - "ga:screenDepth": 1, - "ga:uniqueEvents": 1, - "ga:users": 1, - "ga:appInstallerId": 1, - "ga:dcmClickRenderingId": 1, - "ga:adKeywordMatchType": 1, - "ga:searchDepth": 1, - "ga:subContinent": 1, - "ga:adsenseExits": 1, - "ga:appId": 1, - "ga:checkoutOptions": 1, - "ga:internalPromotionCTR": 1, - "ga:daysSinceLastSession": 1, - "ga:pageviews": 1, - "ga:goalXXStarts": 1, - "ga:userType": 1, - "ga:dcmClickCreative": 1, - "ga:transactionId": 1, - "ga:sessionCount": 1, - "ga:itemRevenue": 1, - "ga:nthDay": 1, - "ga:totalPublisherClicks": 1, - "ga:screenviewsPerSession": 1, - "ga:searchExits": 1, - "ga:dcmClickSiteId": 1, - "ga:externalActivityId": 1, - "ga:dbmClickSiteId": 1, - "ga:dcmClickCreativeVersion": 1, - "ga:browserSize": 1, - "ga:backfillViewableImpressionsPercent": 1, - "ga:minute": 1, - "ga:dcmFloodlightActivityGroupId": 1, - "ga:year": 1, - "ga:exitPagePath": 1, - "ga:sessionsPerUser": 1, - "ga:adTargetingOption": 1, - "ga:entranceBounceRate": 1, - "ga:customVarNameXX": 1, - "ga:quantityRemovedFromCart": 1, - "ga:socialInteractionTarget": 1, - "ga:appVersion": 1, - "ga:dcmClickAdvertiserId": 1, - "ga:dcmFloodlightActivityAndGroup": 1, - "ga:country": 1, - "ga:goalValueAll": 1, - "ga:userGender": 1, - "ga:pagePath": 1, - "ga:dcmClickCampaignId": 1, - "ga:adMatchedQuery": 1, - "ga:totalPublisherImpressions": 1, - "ga:dsAdGroupId": 1, - "ga:browserVersion": 1, - "ga:adsenseAdsViewed": 1, - "ga:nthMinute": 1, - "ga:eventValue": 1, - "ga:exitRate": 1, - "ga:dfpECPM": 1, - "ga:backfillMonetizedPageviews": 1, - "ga:adxCoverage": 1, - "ga:operatingSystemVersion": 1, - "ga:mobileDeviceMarketingName": 1, - "ga:totalPublisherCoverage": 1, - "ga:sessionDurationBucket": 1, - "ga:dcmFloodlightRevenue": 1, - "ga:uniquePageviews": 1, - "ga:dateHour": 1, - "ga:dateHourMinute": 1, - "ga:itemQuantity": 1, - "ga:avgSearchDuration": 1, - "ga:goalValuePerSession": 1, - "ga:adDisplayUrl": 1, - "ga:dcmClickAdType": 1, - "ga:metro": 1, - "ga:internalPromotionClicks": 1, - "ga:yearMonth": 1, - "ga:avgSessionDuration": 1, - "ga:backfillECPM": 1, - "ga:city": 1, - "ga:sessionsWithEvent": 1, - "ga:countryIsoCode": 1, - "ga:avgSearchDepth": 1, - "ga:goalConversionRateAll": 1, - "ga:dsAgency": 1, - "ga:dfpMonetizedPageviews": 1, - "ga:clientId": 1, - "ga:dcmFloodlightActivityId": 1, - "ga:searchSessions": 1, - "ga:fullReferrer": 1, - "ga:productRefunds": 1, - "ga:dcmClickAdvertiser": 1, - "ga:socialInteractionNetworkActionSession": 1, - "ga:nextContentGroup1": 1, - "ga:hostname": 1, - "ga:nextContentGroup2": 1, - "ga:nextContentGroup3": 1, - "ga:nextContentGroup4": 1, - "ga:sessionDuration": 1, - "ga:quantityCheckedOut": 1, - "ga:adxECPM": 1, - "ga:nextContentGroup5": 1, - "ga:interestOtherCategory": 1, - "ga:internalPromotionViews": 1, - "ga:productCategory": 1, - "ga:dataSource": 1, - "ga:dfpRevenuePer1000Sessions": 1, - "ga:backfillCoverage": 1, - "ga:userDefinedValue": 1, - "ga:totalPublisherViewableImpressionsPercent": 1, - "ga:dsEngineAccountId": 1, - "ga:adPlacementDomain": 1, - "ga:backfillRevenue": 1, - "ga:subContinentCode": 1, - "ga:mobileDeviceModel": 1, - "ga:adFormat": 1, - "ga:adwordsCriteriaID": 1, - "ga:date": 1, - "ga:screenColors": 1, - "ga:operatingSystem": 1, - "ga:day": 1, - "ga:dfpCTR": 1, - "ga:adsenseCTR": 1, - "ga:searchExitRate": 1, - "ga:javaEnabled": 1, - "ga:backfillImpressionsPerSession": 1, - "ga:medium": 1, - "ga:adDestinationUrl": 1, - "ga:region": 1, - "ga:quantityAddedToCart": 1, - "ga:dcmClickAdId": 1, - "ga:searchDuration": 1, - "ga:backfillImpressions": 1, - "ga:dcmClickAd": 1, - "ga:goalXXConversionRate": 1, - "ga:month": 1, - "ga:yearWeek": 1, - "ga:exits": 1, - "ga:adxRevenuePer1000Sessions": 1, - "ga:dsAgencyId": 1, - "ga:dayOfWeekName": 1, - "ga:adsensePageImpressions": 1, - "ga:mobileDeviceBranding": 1, - "ga:eventsPerSessionWithEvent": 1, - "ga:regionIsoCode": 1, - "ga:calcMetric_\u003cNAME\u003e": 1, - "ga:goalAbandonsAll": 1, - "ga:isoYearIsoWeek": 1, - "ga:dimensionXX": 1, - "ga:productListViews": 1, - "ga:dcmFloodlightAdvertiserId": 1, - "ga:browser": 1, - "ga:interestAffinityCategory": 1, - "ga:regionId": 1, - "ga:adPlacementUrl": 1, - "ga:adxRevenue": 1, - "ga:dbmClickInsertionOrderId": 1, - "ga:totalPublisherCTR": 1, - "ga:campaignCode": 1 - }, - "per_events_with_local_currency": { - "ga:referralPath": 1, - "ga:transactionTax": 1, - "ga:metroId": 1, - "ga:percentNewSessions": 1, - "ga:productCheckouts": 1, - "ga:newUsers": 1, - "ga:dcmClickSite": 1, - "ga:eventAction": 1, - "ga:dbmClickLineItemId": 1, - "ga:dsAdvertiserId": 1, - "ga:flashVersion": 1, - "ga:isoWeek": 1, - "ga:internalPromotionId": 1, - "ga:goalStartsAll": 1, - "ga:dsEngineAccount": 1, - "ga:adwordsCreativeID": 1, - "ga:networkLocation": 1, - "ga:localRefundAmount": 1, - "ga:goalXXValue": 1, - "ga:sourceMedium": 1, - "ga:experimentName": 1, - "ga:uniquePurchases": 1, - "ga:pageDepth": 1, - "ga:landingContentGroup4": 1, - "ga:landingContentGroup3": 1, - "ga:sessions": 1, - "ga:landingContentGroup2": 1, - "ga:landingContentGroup1": 1, - "ga:dbmClickSite": 1, - "ga:metricXX": 1, - "ga:dcmClickSpotId": 1, - "ga:landingContentGroup5": 1, - "ga:screenResolution": 1, - "ga:screenviews": 1, - "ga:isTablet": 1, - "ga:productAddsToCart": 1, - "ga:avgScreenviewDuration": 1, - "ga:socialActivityContentUrl": 1, - "ga:source": 1, - "ga:experimentOutcomeType": 1, - "ga:dsAdGroup": 1, - "ga:networkDomain": 1, - "ga:timeOnPage": 1, - "ga:localTransactionShipping": 1, - "ga:bounceRate": 1, - "ga:entrances": 1, - "ga:revenuePerTransaction": 1, - "ga:dcmClickCreativeId": 1, - "ga:dcmFloodlightQuantity": 1, - "ga:screenName": 1, - "ga:productRemovesFromCart": 1, - "ga:internalPromotionCreative": 1, - "ga:transactionRevenue": 1, - "ga:adSlot": 1, - "ga:eventCategory": 1, - "ga:secondPagePath": 1, - "ga:entranceRate": 1, - "ga:buyToDetailRate": 1, - "ga:goalAbandonRateAll": 1, - "ga:avgEventValue": 1, - "ga:socialInteractionsPerSession": 1, - "ga:adwordsCampaignID": 1, - "ga:productListCTR": 1, - "ga:dbmClickInsertionOrder": 1, - "ga:socialInteractionNetworkAction": 1, - "ga:hits": 1, - "ga:dcmClickCreativeType": 1, - "ga:internalPromotionName": 1, - "ga:dbmClickLineItem": 1, - "ga:cityId": 1, - "ga:localProductRefundAmount": 1, - "ga:landingScreenName": 1, - "ga:dbmClickAdvertiser": 1, - "ga:dcmFloodlightSpotId": 1, - "ga:searchKeyword": 1, - "ga:dcmFloodlightActivity": 1, - "ga:appName": 1, - "ga:dsAdvertiser": 1, - "ga:quantityRefunded": 1, - "ga:latitude": 1, - "ga:nthMonth": 1, - "ga:avgTimeOnPage": 1, - "ga:sourcePropertyTrackingId": 1, - "ga:goalXXAbandonRate": 1, - "ga:continentId": 1, - "ga:deviceCategory": 1, - "ga:dcmClickSitePlacement": 1, - "ga:dbmClickCreativeId": 1, - "ga:nthWeek": 1, - "ga:dsCampaign": 1, - "ga:interestInMarketCategory": 1, - "ga:adMatchType": 1, - "ga:adwordsCustomerID": 1, - "ga:userAgeBracket": 1, - "ga:uniqueSocialInteractions": 1, - "ga:totalEvents": 1, - "ga:dcmFloodlightActivityGroup": 1, - "ga:trafficType": 1, - "ga:itemsPerPurchase": 1, - "ga:productRefundAmount": 1, - "ga:goalXXCompletions": 1, - "ga:continent": 1, - "ga:goalXXAbandons": 1, - "ga:campaign": 1, - "ga:isoYear": 1, - "ga:customVarValueXX": 1, - "ga:landingPagePath": 1, - "ga:channelGrouping": 1, - "ga:adwordsCustomerName": 1, - "ga:dsCampaignId": 1, - "ga:mobileDeviceInfo": 1, - "ga:keyword": 1, - "ga:pageviewsPerSession": 1, - "ga:dayOfWeek": 1, - "ga:adwordsAdGroupID": 1, - "ga:localItemRevenue": 1, - "ga:contentGroup1": 1, - "ga:contentGroup2": 1, - "ga:socialInteractionAction": 1, - "ga:contentGroup3": 1, - "ga:contentGroup4": 1, - "ga:contentGroup5": 1, - "ga:dbmClickExchange": 1, - "ga:socialInteractionNetwork": 1, - "ga:goalCompletionsAll": 1, - "ga:productDetailViews": 1, - "ga:dcmClickCreativeTypeId": 1, - "ga:language": 1, - "ga:socialInteractions": 1, - "ga:experimentVariant": 1, - "ga:isMobile": 1, - "ga:exitScreenName": 1, - "ga:productRevenuePerPurchase": 1, - "ga:internalPromotionPosition": 1, - "ga:bounces": 1, - "ga:socialNetwork": 1, - "ga:dbmClickExchangeId": 1, - "ga:dsKeyword": 1, - "ga:revenuePerItem": 1, - "ga:cartToDetailRate": 1, - "ga:adDistributionNetwork": 1, - "ga:userBucket": 1, - "ga:socialEngagementType": 1, - "ga:dsKeywordId": 1, - "ga:longitude": 1, - "ga:dcmClickAdTypeId": 1, - "ga:nthHour": 1, - "ga:mobileInputSelector": 1, - "ga:timeOnScreen": 1, - "ga:shoppingStage": 1, - "ga:adGroup": 1, - "ga:localTransactionTax": 1, - "ga:experimentCombination": 1, - "ga:week": 1, - "ga:dcmClickCampaign": 1, - "ga:sourcePropertyDisplayName": 1, - "ga:dbmClickAdvertiserId": 1, - "ga:hour": 1, - "ga:adQueryWordCount": 1, - "ga:dbmClickCreativeName": 1, - "ga:productListClicks": 1, - "ga:dcmClickSitePlacementId": 1, - "ga:uniqueDimensionCombinations": 1, - "ga:contentGroupUniqueViews2": 1, - "ga:contentGroupUniqueViews1": 1, - "ga:adTargetingType": 1, - "ga:screenDepth": 1, - "ga:uniqueEvents": 1, - "ga:contentGroupUniqueViews5": 1, - "ga:users": 1, - "ga:contentGroupUniqueViews4": 1, - "ga:appInstallerId": 1, - "ga:contentGroupUniqueViews3": 1, - "ga:revenuePerUser": 1, - "ga:refundAmount": 1, - "ga:dcmClickRenderingId": 1, - "ga:adKeywordMatchType": 1, - "ga:subContinent": 1, - "ga:adsenseExits": 1, - "ga:appId": 1, - "ga:checkoutOptions": 1, - "ga:internalPromotionCTR": 1, - "ga:daysSinceLastSession": 1, - "ga:pageviews": 1, - "ga:goalXXStarts": 1, - "ga:userType": 1, - "ga:dcmClickCreative": 1, - "ga:sessionCount": 1, - "ga:itemRevenue": 1, - "ga:nthDay": 1, - "ga:screenviewsPerSession": 1, - "ga:dcmClickSiteId": 1, - "ga:externalActivityId": 1, - "ga:dbmClickSiteId": 1, - "ga:dcmClickCreativeVersion": 1, - "ga:browserSize": 1, - "ga:minute": 1, - "ga:dcmFloodlightActivityGroupId": 1, - "ga:adSlotPosition": 1, - "ga:year": 1, - "ga:exitPagePath": 1, - "ga:sessionsPerUser": 1, - "ga:entranceBounceRate": 1, - "ga:customVarNameXX": 1, - "ga:quantityRemovedFromCart": 1, - "ga:socialInteractionTarget": 1, - "ga:transactionsPerSession": 1, - "ga:appVersion": 1, - "ga:dcmClickAdvertiserId": 1, - "ga:dcmFloodlightActivityAndGroup": 1, - "ga:country": 1, - "ga:goalValueAll": 1, - "ga:userGender": 1, - "ga:pagePath": 1, - "ga:dcmClickCampaignId": 1, - "ga:adMatchedQuery": 1, - "ga:dsAdGroupId": 1, - "ga:totalValue": 1, - "ga:hasSocialSourceReferral": 1, - "ga:browserVersion": 1, - "ga:nthMinute": 1, - "ga:eventValue": 1, - "ga:exitRate": 1, - "ga:eventLabel": 1, - "ga:operatingSystemVersion": 1, - "ga:mobileDeviceMarketingName": 1, - "ga:sessionDurationBucket": 1, - "ga:dcmFloodlightRevenue": 1, - "ga:experimentId": 1, - "ga:dateHour": 1, - "ga:totalRefunds": 1, - "ga:dateHourMinute": 1, - "ga:itemQuantity": 1, - "ga:goalValuePerSession": 1, - "ga:adDisplayUrl": 1, - "ga:transactionsPerUser": 1, - "ga:transactionShipping": 1, - "ga:dcmClickAdType": 1, - "ga:metro": 1, - "ga:internalPromotionClicks": 1, - "ga:yearMonth": 1, - "ga:avgSessionDuration": 1, - "ga:city": 1, - "ga:sessionsWithEvent": 1, - "ga:transactions": 1, - "ga:countryIsoCode": 1, - "ga:goalConversionRateAll": 1, - "ga:dsAgency": 1, - "ga:clientId": 1, - "ga:dcmFloodlightActivityId": 1, - "ga:fullReferrer": 1, - "ga:productRefunds": 1, - "ga:dcmClickAdvertiser": 1, - "ga:socialInteractionNetworkActionSession": 1, - "ga:hostname": 1, - "ga:sessionDuration": 1, - "ga:quantityCheckedOut": 1, - "ga:interestOtherCategory": 1, - "ga:adContent": 1, - "ga:internalPromotionViews": 1, - "ga:dataSource": 1, - "ga:pageTitle": 1, - "ga:userDefinedValue": 1, - "ga:dsEngineAccountId": 1, - "ga:subContinentCode": 1, - "ga:mobileDeviceModel": 1, - "ga:adFormat": 1, - "ga:adwordsCriteriaID": 1, - "ga:date": 1, - "ga:screenColors": 1, - "ga:operatingSystem": 1, - "ga:day": 1, - "ga:localTransactionRevenue": 1, - "ga:javaEnabled": 1, - "ga:medium": 1, - "ga:region": 1, - "ga:pagePathLevel4": 1, - "ga:quantityAddedToCart": 1, - "ga:currencyCode": 1, - "ga:pagePathLevel1": 1, - "ga:dcmClickAdId": 1, - "ga:pagePathLevel3": 1, - "ga:dcmClickAd": 1, - "ga:pagePathLevel2": 1, - "ga:goalXXConversionRate": 1, - "ga:month": 1, - "ga:yearWeek": 1, - "ga:exits": 1, - "ga:dsAgencyId": 1, - "ga:dayOfWeekName": 1, - "ga:mobileDeviceBranding": 1, - "ga:eventsPerSessionWithEvent": 1, - "ga:regionIsoCode": 1, - "ga:calcMetric_\u003cNAME\u003e": 1, - "ga:goalAbandonsAll": 1, - "ga:isoYearIsoWeek": 1, - "ga:dimensionXX": 1, - "ga:productListViews": 1, - "ga:dcmFloodlightAdvertiserId": 1, - "ga:browser": 1, - "ga:transactionRevenuePerSession": 1, - "ga:interestAffinityCategory": 1, - "ga:regionId": 1, - "ga:dbmClickInsertionOrderId": 1, - "ga:campaignCode": 1 - }, - "gdn_targeting": { - "ga:totalPublisherRevenuePer1000Sessions": 1, - "ga:transactionTax": 1, - "ga:percentNewSessions": 1, - "ga:backfillClicks": 1, - "ga:avgServerConnectionTime": 1, - "ga:productCheckouts": 1, - "ga:newUsers": 1, - "ga:RPC": 1, - "ga:adxMonetizedPageviews": 1, - "ga:avgPageLoadTime": 1, - "ga:backfillCTR": 1, - "ga:isoWeek": 1, - "ga:goalStartsAll": 1, - "ga:avgDomContentLoadedTime": 1, - "ga:domainLookupTime": 1, - "ga:adwordsCreativeID": 1, - "ga:adCost": 1, - "ga:dfpCoverage": 1, - "ga:localRefundAmount": 1, - "ga:goalXXValue": 1, - "ga:sourceMedium": 1, - "ga:uniquePurchases": 1, - "ga:pageLoadSample": 1, - "ga:totalPublisherMonetizedPageviews": 1, - "ga:sessions": 1, - "ga:adxImpressions": 1, - "ga:adsenseCoverage": 1, - "ga:searchUniques": 1, - "ga:screenviews": 1, - "ga:isTablet": 1, - "ga:productAddsToCart": 1, - "ga:avgScreenviewDuration": 1, - "ga:source": 1, - "ga:percentSearchRefinements": 1, - "ga:dfpImpressions": 1, - "ga:timeOnPage": 1, - "ga:localTransactionShipping": 1, - "ga:bounceRate": 1, - "ga:entrances": 1, - "ga:revenuePerTransaction": 1, - "ga:ROI": 1, - "ga:dcmFloodlightQuantity": 1, - "ga:redirectionTime": 1, - "ga:productRemovesFromCart": 1, - "ga:transactionRevenue": 1, - "ga:adSlot": 1, - "ga:CTR": 1, - "ga:entranceRate": 1, - "ga:buyToDetailRate": 1, - "ga:goalAbandonRateAll": 1, - "ga:adxViewableImpressionsPercent": 1, - "ga:dfpLineItemId": 1, - "ga:avgSearchResultViews": 1, - "ga:adwordsCampaignID": 1, - "ga:backfillRevenuePer1000Sessions": 1, - "ga:productListCTR": 1, - "ga:avgDomainLookupTime": 1, - "ga:totalPublisherImpressionsPerSession": 1, - "ga:adxClicks": 1, - "ga:pageValue": 1, - "ga:dfpClicks": 1, - "ga:dfpImpressionsPerSession": 1, - "ga:localProductRefundAmount": 1, - "ga:organicSearches": 1, - "ga:isTrueViewVideoAd": 1, - "ga:adsenseECPM": 1, - "ga:adxImpressionsPerSession": 1, - "ga:searchRefinements": 1, - "ga:quantityRefunded": 1, - "ga:nthMonth": 1, - "ga:avgTimeOnPage": 1, - "ga:adxCTR": 1, - "ga:goalXXAbandonRate": 1, - "ga:deviceCategory": 1, - "ga:nthWeek": 1, - "ga:adwordsCustomerID": 1, - "ga:totalPublisherRevenue": 1, - "ga:adClicks": 1, - "ga:adsenseViewableImpressionPercent": 1, - "ga:trafficType": 1, - "ga:itemsPerPurchase": 1, - "ga:productRefundAmount": 1, - "ga:avgDomInteractiveTime": 1, - "ga:adsenseRevenue": 1, - "ga:goalXXCompletions": 1, - "ga:goalXXAbandons": 1, - "ga:ROAS": 1, - "ga:campaign": 1, - "ga:isoYear": 1, - "ga:channelGrouping": 1, - "ga:dfpRevenue": 1, - "ga:keyword": 1, - "ga:adwordsCustomerName": 1, - "ga:pageviewsPerSession": 1, - "ga:dayOfWeek": 1, - "ga:adwordsAdGroupID": 1, - "ga:localItemRevenue": 1, - "ga:searchGoalXXConversionRate": 1, - "ga:socialInteractionNetwork": 1, - "ga:goalCompletionsAll": 1, - "ga:productDetailViews": 1, - "ga:adsenseAdsClicks": 1, - "ga:isMobile": 1, - "ga:searchResultViews": 1, - "ga:productRevenuePerPurchase": 1, - "ga:totalPublisherECPM": 1, - "ga:bounces": 1, - "ga:searchGoalConversionRateAll": 1, - "ga:avgPageDownloadTime": 1, - "ga:socialNetwork": 1, - "ga:costPerTransaction": 1, - "ga:revenuePerItem": 1, - "ga:cartToDetailRate": 1, - "ga:adDistributionNetwork": 1, - "ga:domInteractiveTime": 1, - "ga:percentSessionsWithSearch": 1, - "ga:nthHour": 1, - "ga:adsenseAdUnitsViewed": 1, - "ga:timeOnScreen": 1, - "ga:adGroup": 1, - "ga:localTransactionTax": 1, - "ga:week": 1, - "ga:goalValueAllPerSearch": 1, - "ga:hour": 1, - "ga:dfpViewableImpressionsPercent": 1, - "ga:productListClicks": 1, - "ga:domContentLoadedTime": 1, - "ga:uniqueDimensionCombinations": 1, - "ga:uniqueEvents": 1, - "ga:users": 1, - "ga:revenuePerUser": 1, - "ga:refundAmount": 1, - "ga:adKeywordMatchType": 1, - "ga:searchDepth": 1, - "ga:adsenseExits": 1, - "ga:pageviews": 1, - "ga:goalXXStarts": 1, - "ga:itemRevenue": 1, - "ga:nthDay": 1, - "ga:totalPublisherClicks": 1, - "ga:screenviewsPerSession": 1, - "ga:serverConnectionTime": 1, - "ga:searchExits": 1, - "ga:speedMetricsSample": 1, - "ga:backfillViewableImpressionsPercent": 1, - "ga:year": 1, - "ga:sessionsPerUser": 1, - "ga:entranceBounceRate": 1, - "ga:quantityRemovedFromCart": 1, - "ga:transactionsPerSession": 1, - "ga:pageDownloadTime": 1, - "ga:goalValueAll": 1, - "ga:totalPublisherImpressions": 1, - "ga:totalValue": 1, - "ga:adsenseAdsViewed": 1, - "ga:exitRate": 1, - "ga:dfpECPM": 1, - "ga:backfillMonetizedPageviews": 1, - "ga:adxCoverage": 1, - "ga:totalPublisherCoverage": 1, - "ga:dcmFloodlightRevenue": 1, - "ga:uniquePageviews": 1, - "ga:dateHour": 1, - "ga:totalRefunds": 1, - "ga:itemQuantity": 1, - "ga:avgSearchDuration": 1, - "ga:goalValuePerSession": 1, - "ga:transactionsPerUser": 1, - "ga:transactionShipping": 1, - "ga:yearMonth": 1, - "ga:avgSessionDuration": 1, - "ga:backfillECPM": 1, - "ga:domLatencyMetricsSample": 1, - "ga:transactions": 1, - "ga:costPerConversion": 1, - "ga:avgSearchDepth": 1, - "ga:goalConversionRateAll": 1, - "ga:dfpMonetizedPageviews": 1, - "ga:searchSessions": 1, - "ga:dfpLineItemName": 1, - "ga:productRefunds": 1, - "ga:costPerGoalConversion": 1, - "ga:sessionDuration": 1, - "ga:quantityCheckedOut": 1, - "ga:adxECPM": 1, - "ga:uniqueScreenviews": 1, - "ga:avgUserTimingValue": 1, - "ga:adContent": 1, - "ga:dataSource": 1, - "ga:dfpRevenuePer1000Sessions": 1, - "ga:backfillCoverage": 1, - "ga:serverResponseTime": 1, - "ga:totalPublisherViewableImpressionsPercent": 1, - "ga:backfillRevenue": 1, - "ga:adwordsCriteriaID": 1, - "ga:date": 1, - "ga:userTimingValue": 1, - "ga:day": 1, - "ga:dfpCTR": 1, - "ga:adsenseCTR": 1, - "ga:avgServerResponseTime": 1, - "ga:localTransactionRevenue": 1, - "ga:searchExitRate": 1, - "ga:backfillImpressionsPerSession": 1, - "ga:CPM": 1, - "ga:medium": 1, - "ga:adDestinationUrl": 1, - "ga:quantityAddedToCart": 1, - "ga:currencyCode": 1, - "ga:searchDuration": 1, - "ga:margin": 1, - "ga:backfillImpressions": 1, - "ga:goalXXConversionRate": 1, - "ga:month": 1, - "ga:yearWeek": 1, - "ga:exits": 1, - "ga:CPC": 1, - "ga:adxRevenuePer1000Sessions": 1, - "ga:dayOfWeekName": 1, - "ga:impressions": 1, - "ga:adsensePageImpressions": 1, - "ga:avgRedirectionTime": 1, - "ga:pageLoadTime": 1, - "ga:calcMetric_\u003cNAME\u003e": 1, - "ga:goalAbandonsAll": 1, - "ga:isoYearIsoWeek": 1, - "ga:productListViews": 1, - "ga:transactionRevenuePerSession": 1, - "ga:userTimingSample": 1, - "ga:adxRevenue": 1, - "ga:totalPublisherCTR": 1 - }, - "local_transaction": { - "ga:localItemRevenue": 1, - "ga:localTransactionRevenue": 1, - "ga:localTransactionTax": 1, - "ga:transactionId": 1, - "ga:localProductRefundAmount": 1, - "ga:localTransactionShipping": 1, - "ga:currencyCode": 1, - "ga:localRefundAmount": 1 - }, - "all_metrics_for_cohorts_overview": { - "ga:sessions": 1, - "ga:sessionDuration": 1, - "ga:avgSessionDuration": 1, - "ga:screenviews": 1, - "ga:pageviews": 1, - "ga:calcMetric_\u003cNAME\u003e": 1, - "ga:goalCompletionsAll": 1, - "ga:transactions": 1, - "ga:transactionRevenue": 1, - "ga:goalConversionRateAll": 1, - "ga:transactionRevenuePerSession": 1, - "ga:revenuePerTransaction": 1, - "ga:transactionsPerSession": 1, - "ga:screenviewsPerSession": 1, - "ga:pageviewsPerSession": 1 - }, - "per_wmx_url": { - "ga:goalValuePerSession": 1, - "ga:percentNewSessions": 1, - "ga:week": 1, - "ga:transactionsPerUser": 1, - "ga:nthMonth": 1, - "ga:yearMonth": 1, - "ga:avgSessionDuration": 1, - "ga:newUsers": 1, - "ga:goalXXAbandonRate": 1, - "ga:deviceCategory": 1, - "ga:transactions": 1, - "ga:countryIsoCode": 1, - "ga:goalConversionRateAll": 1, - "ga:nthWeek": 1, - "ga:goalStartsAll": 1, - "ga:goalXXValue": 1, - "ga:users": 1, - "ga:sourceMedium": 1, - "ga:revenuePerUser": 1, - "ga:refundAmount": 1, - "ga:sessions": 1, - "ga:hostname": 1, - "ga:sessionDuration": 1, - "ga:goalXXCompletions": 1, - "ga:pageviews": 1, - "ga:source": 1, - "ga:goalXXAbandons": 1, - "ga:goalXXStarts": 1, - "ga:landingPagePath": 1, - "ga:bounceRate": 1, - "ga:nthDay": 1, - "ga:revenuePerTransaction": 1, - "ga:pageviewsPerSession": 1, - "ga:dayOfWeek": 1, - "ga:date": 1, - "ga:day": 1, - "ga:year": 1, - "ga:transactionRevenue": 1, - "ga:goalCompletionsAll": 1, - "ga:sessionsPerUser": 1, - "ga:medium": 1, - "ga:transactionsPerSession": 1, - "ga:goalAbandonRateAll": 1, - "ga:country": 1, - "ga:goalXXConversionRate": 1, - "ga:goalValueAll": 1, - "ga:month": 1, - "ga:yearWeek": 1, - "ga:bounces": 1, - "ga:dayOfWeekName": 1, - "ga:totalValue": 1, - "ga:calcMetric_\u003cNAME\u003e": 1, - "ga:goalAbandonsAll": 1, - "ga:transactionRevenuePerSession": 1, - "ga:totalRefunds": 1 - }, - "per_active_visitors_date_active_visitors_1": { - "ga:totalPublisherRevenuePer1000Sessions": 1, - "ga:transactionTax": 1, - "ga:backfillClicks": 1, - "ga:percentNewSessions": 1, - "ga:avgServerConnectionTime": 1, - "ga:productCheckouts": 1, - "ga:newUsers": 1, - "ga:RPC": 1, - "ga:adxMonetizedPageviews": 1, - "ga:avgPageLoadTime": 1, - "ga:backfillCTR": 1, - "ga:goalStartsAll": 1, - "ga:avgDomContentLoadedTime": 1, - "ga:domainLookupTime": 1, - "ga:dfpCoverage": 1, - "ga:goalXXValue": 1, - "ga:uniquePurchases": 1, - "ga:pageLoadSample": 1, - "ga:sessions": 1, - "ga:totalPublisherMonetizedPageviews": 1, - "ga:exceptions": 1, - "ga:metricXX": 1, - "ga:adxImpressions": 1, - "ga:adsenseCoverage": 1, - "ga:searchUniques": 1, - "ga:screenviews": 1, - "ga:productAddsToCart": 1, - "ga:avgScreenviewDuration": 1, - "ga:percentSearchRefinements": 1, - "ga:dfpImpressions": 1, - "ga:timeOnPage": 1, - "ga:bounceRate": 1, - "ga:entrances": 1, - "ga:revenuePerTransaction": 1, - "ga:dcmFloodlightQuantity": 1, - "ga:redirectionTime": 1, - "ga:productRemovesFromCart": 1, - "ga:dbmCPA": 1, - "ga:dbmCPC": 1, - "ga:transactionRevenue": 1, - "ga:dbmCPM": 1, - "ga:CTR": 1, - "ga:entranceRate": 1, - "ga:buyToDetailRate": 1, - "ga:goalAbandonRateAll": 1, - "ga:avgEventValue": 1, - "ga:dcmCTR": 1, - "ga:adxViewableImpressionsPercent": 1, - "ga:socialInteractionsPerSession": 1, - "ga:fatalExceptionsPerScreenview": 1, - "ga:avgSearchResultViews": 1, - "ga:backfillRevenuePer1000Sessions": 1, - "ga:productListCTR": 1, - "ga:avgDomainLookupTime": 1, - "ga:hits": 1, - "ga:totalPublisherImpressionsPerSession": 1, - "ga:adxClicks": 1, - "ga:pageValue": 1, - "ga:dfpClicks": 1, - "ga:dfpImpressionsPerSession": 1, - "ga:organicSearches": 1, - "ga:adsenseECPM": 1, - "ga:adxImpressionsPerSession": 1, - "ga:searchRefinements": 1, - "ga:quantityRefunded": 1, - "ga:avgTimeOnPage": 1, - "ga:goalXXAbandonRate": 1, - "ga:adxCTR": 1, - "ga:totalPublisherRevenue": 1, - "ga:adClicks": 1, - "ga:adsenseViewableImpressionPercent": 1, - "ga:uniqueSocialInteractions": 1, - "ga:totalEvents": 1, - "ga:itemsPerPurchase": 1, - "ga:productRefundAmount": 1, - "ga:avgDomInteractiveTime": 1, - "ga:goalXXCompletions": 1, - "ga:adsenseRevenue": 1, - "ga:goalXXAbandons": 1, - "ga:dbmCost": 1, - "ga:dfpRevenue": 1, - "ga:pageviewsPerSession": 1, - "ga:fatalExceptions": 1, - "ga:searchGoalXXConversionRate": 1, - "ga:goalCompletionsAll": 1, - "ga:productDetailViews": 1, - "ga:dbmCTR": 1, - "ga:adsenseAdsClicks": 1, - "ga:socialInteractions": 1, - "ga:dcmROAS": 1, - "ga:searchResultViews": 1, - "ga:productRevenuePerPurchase": 1, - "ga:totalPublisherECPM": 1, - "ga:bounces": 1, - "ga:dbmClicks": 1, - "ga:searchGoalConversionRateAll": 1, - "ga:avgPageDownloadTime": 1, - "ga:revenuePerItem": 1, - "ga:cartToDetailRate": 1, - "ga:dbmImpressions": 1, - "ga:domInteractiveTime": 1, - "ga:percentSessionsWithSearch": 1, - "ga:adsenseAdUnitsViewed": 1, - "ga:timeOnScreen": 1, - "ga:dbmConversions": 1, - "ga:goalValueAllPerSearch": 1, - "ga:dfpViewableImpressionsPercent": 1, - "ga:domContentLoadedTime": 1, - "ga:productListClicks": 1, - "ga:uniqueDimensionCombinations": 1, - "ga:uniqueEvents": 1, - "ga:refundAmount": 1, - "ga:searchDepth": 1, - "ga:pageviews": 1, - "ga:goalXXStarts": 1, - "ga:1dayUsers": 1, - "ga:itemRevenue": 1, - "ga:nthDay": 1, - "ga:totalPublisherClicks": 1, - "ga:screenviewsPerSession": 1, - "ga:serverConnectionTime": 1, - "ga:searchExits": 1, - "ga:speedMetricsSample": 1, - "ga:backfillViewableImpressionsPercent": 1, - "ga:entranceBounceRate": 1, - "ga:quantityRemovedFromCart": 1, - "ga:transactionsPerSession": 1, - "ga:pageDownloadTime": 1, - "ga:goalValueAll": 1, - "ga:dcmCost": 1, - "ga:totalPublisherImpressions": 1, - "ga:totalValue": 1, - "ga:adsenseAdsViewed": 1, - "ga:eventValue": 1, - "ga:exitRate": 1, - "ga:dfpECPM": 1, - "ga:backfillMonetizedPageviews": 1, - "ga:dbmROAS": 1, - "ga:adxCoverage": 1, - "ga:totalPublisherCoverage": 1, - "ga:dcmFloodlightRevenue": 1, - "ga:uniquePageviews": 1, - "ga:exceptionsPerScreenview": 1, - "ga:totalRefunds": 1, - "ga:itemQuantity": 1, - "ga:avgSearchDuration": 1, - "ga:goalValuePerSession": 1, - "ga:transactionShipping": 1, - "ga:avgSessionDuration": 1, - "ga:backfillECPM": 1, - "ga:domLatencyMetricsSample": 1, - "ga:sessionsWithEvent": 1, - "ga:transactions": 1, - "ga:avgSearchDepth": 1, - "ga:goalConversionRateAll": 1, - "ga:dfpMonetizedPageviews": 1, - "ga:dcmRPC": 1, - "ga:searchSessions": 1, - "ga:productRefunds": 1, - "ga:dcmClicks": 1, - "ga:sessionDuration": 1, - "ga:quantityCheckedOut": 1, - "ga:adxECPM": 1, - "ga:uniqueScreenviews": 1, - "ga:avgUserTimingValue": 1, - "ga:dfpRevenuePer1000Sessions": 1, - "ga:backfillCoverage": 1, - "ga:serverResponseTime": 1, - "ga:totalPublisherViewableImpressionsPercent": 1, - "ga:backfillRevenue": 1, - "ga:date": 1, - "ga:dcmCPC": 1, - "ga:userTimingValue": 1, - "ga:day": 1, - "ga:dfpCTR": 1, - "ga:adsenseCTR": 1, - "ga:avgServerResponseTime": 1, - "ga:searchExitRate": 1, - "ga:backfillImpressionsPerSession": 1, - "ga:quantityAddedToCart": 1, - "ga:searchDuration": 1, - "ga:backfillImpressions": 1, - "ga:goalXXConversionRate": 1, - "ga:exits": 1, - "ga:adxRevenuePer1000Sessions": 1, - "ga:impressions": 1, - "ga:adsensePageImpressions": 1, - "ga:avgRedirectionTime": 1, - "ga:eventsPerSessionWithEvent": 1, - "ga:pageLoadTime": 1, - "ga:dcmImpressions": 1, - "ga:calcMetric_\u003cNAME\u003e": 1, - "ga:goalAbandonsAll": 1, - "ga:dcmROI": 1, - "ga:productListViews": 1, - "ga:dcmMargin": 1, - "ga:transactionRevenuePerSession": 1, - "ga:userTimingSample": 1, - "ga:adxRevenue": 1, - "ga:totalPublisherCTR": 1 - }, - "per_content_with_local_currency": { - "ga:totalPublisherRevenuePer1000Sessions": 1, - "ga:transactionTax": 1, - "ga:metroId": 1, - "ga:backfillClicks": 1, - "ga:percentNewSessions": 1, - "ga:avgServerConnectionTime": 1, - "ga:productCheckouts": 1, - "ga:newUsers": 1, - "ga:adxMonetizedPageviews": 1, - "ga:avgPageLoadTime": 1, - "ga:flashVersion": 1, - "ga:backfillCTR": 1, - "ga:isoWeek": 1, - "ga:internalPromotionId": 1, - "ga:searchDestinationPage": 1, - "ga:goalStartsAll": 1, - "ga:avgDomContentLoadedTime": 1, - "ga:domainLookupTime": 1, - "ga:adwordsCreativeID": 1, - "ga:networkLocation": 1, - "ga:dfpCoverage": 1, - "ga:localRefundAmount": 1, - "ga:goalXXValue": 1, - "ga:experimentName": 1, - "ga:uniquePurchases": 1, - "ga:pageLoadSample": 1, - "ga:pageDepth": 1, - "ga:landingContentGroup4": 1, - "ga:landingContentGroup3": 1, - "ga:sessions": 1, - "ga:totalPublisherMonetizedPageviews": 1, - "ga:landingContentGroup2": 1, - "ga:landingContentGroup1": 1, - "ga:previousPagePath": 1, - "ga:metricXX": 1, - "ga:adxImpressions": 1, - "ga:landingContentGroup5": 1, - "ga:adsenseCoverage": 1, - "ga:screenResolution": 1, - "ga:searchUniques": 1, - "ga:screenviews": 1, - "ga:isTablet": 1, - "ga:productAddsToCart": 1, - "ga:avgScreenviewDuration": 1, - "ga:userTimingCategory": 1, - "ga:percentSearchRefinements": 1, - "ga:experimentOutcomeType": 1, - "ga:networkDomain": 1, - "ga:dfpImpressions": 1, - "ga:timeOnPage": 1, - "ga:localTransactionShipping": 1, - "ga:bounceRate": 1, - "ga:entrances": 1, - "ga:revenuePerTransaction": 1, - "ga:dcmFloodlightQuantity": 1, - "ga:redirectionTime": 1, - "ga:screenName": 1, - "ga:productRemovesFromCart": 1, - "ga:internalPromotionCreative": 1, - "ga:transactionRevenue": 1, - "ga:secondPagePath": 1, - "ga:entranceRate": 1, - "ga:buyToDetailRate": 1, - "ga:goalAbandonRateAll": 1, - "ga:adxViewableImpressionsPercent": 1, - "ga:socialInteractionsPerSession": 1, - "ga:avgSearchResultViews": 1, - "ga:adwordsCampaignID": 1, - "ga:backfillRevenuePer1000Sessions": 1, - "ga:productListCTR": 1, - "ga:avgDomainLookupTime": 1, - "ga:socialInteractionNetworkAction": 1, - "ga:totalPublisherImpressionsPerSession": 1, - "ga:adxClicks": 1, - "ga:pageValue": 1, - "ga:dfpClicks": 1, - "ga:internalPromotionName": 1, - "ga:dfpImpressionsPerSession": 1, - "ga:cityId": 1, - "ga:localProductRefundAmount": 1, - "ga:organicSearches": 1, - "ga:landingScreenName": 1, - "ga:previousContentGroup1": 1, - "ga:previousContentGroup2": 1, - "ga:adsenseECPM": 1, - "ga:previousContentGroup3": 1, - "ga:adxImpressionsPerSession": 1, - "ga:previousContentGroup4": 1, - "ga:searchRefinements": 1, - "ga:appName": 1, - "ga:quantityRefunded": 1, - "ga:latitude": 1, - "ga:nthMonth": 1, - "ga:previousContentGroup5": 1, - "ga:avgTimeOnPage": 1, - "ga:sourcePropertyTrackingId": 1, - "ga:goalXXAbandonRate": 1, - "ga:adxCTR": 1, - "ga:continentId": 1, - "ga:deviceCategory": 1, - "ga:nthWeek": 1, - "ga:interestInMarketCategory": 1, - "ga:adMatchType": 1, - "ga:adwordsCustomerID": 1, - "ga:totalPublisherRevenue": 1, - "ga:userAgeBracket": 1, - "ga:adsenseViewableImpressionPercent": 1, - "ga:uniqueSocialInteractions": 1, - "ga:itemsPerPurchase": 1, - "ga:productRefundAmount": 1, - "ga:avgDomInteractiveTime": 1, - "ga:goalXXCompletions": 1, - "ga:adsenseRevenue": 1, - "ga:continent": 1, - "ga:goalXXAbandons": 1, - "ga:isoYear": 1, - "ga:customVarValueXX": 1, - "ga:landingPagePath": 1, - "ga:dfpRevenue": 1, - "ga:adwordsCustomerName": 1, - "ga:mobileDeviceInfo": 1, - "ga:pageviewsPerSession": 1, - "ga:dayOfWeek": 1, - "ga:adwordsAdGroupID": 1, - "ga:localItemRevenue": 1, - "ga:searchGoalXXConversionRate": 1, - "ga:contentGroup1": 1, - "ga:contentGroup2": 1, - "ga:socialInteractionAction": 1, - "ga:contentGroup3": 1, - "ga:contentGroup4": 1, - "ga:contentGroup5": 1, - "ga:socialInteractionNetwork": 1, - "ga:goalCompletionsAll": 1, - "ga:productDetailViews": 1, - "ga:language": 1, - "ga:adsenseAdsClicks": 1, - "ga:searchAfterDestinationPage": 1, - "ga:socialInteractions": 1, - "ga:userTimingLabel": 1, - "ga:experimentVariant": 1, - "ga:isMobile": 1, - "ga:searchResultViews": 1, - "ga:exitScreenName": 1, - "ga:productRevenuePerPurchase": 1, - "ga:totalPublisherECPM": 1, - "ga:internalPromotionPosition": 1, - "ga:bounces": 1, - "ga:searchGoalConversionRateAll": 1, - "ga:avgPageDownloadTime": 1, - "ga:revenuePerItem": 1, - "ga:cartToDetailRate": 1, - "ga:adDistributionNetwork": 1, - "ga:userBucket": 1, - "ga:domInteractiveTime": 1, - "ga:socialEngagementType": 1, - "ga:percentSessionsWithSearch": 1, - "ga:longitude": 1, - "ga:nthHour": 1, - "ga:adsenseAdUnitsViewed": 1, - "ga:mobileInputSelector": 1, - "ga:timeOnScreen": 1, - "ga:shoppingStage": 1, - "ga:localTransactionTax": 1, - "ga:experimentCombination": 1, - "ga:week": 1, - "ga:sourcePropertyDisplayName": 1, - "ga:goalValueAllPerSearch": 1, - "ga:hour": 1, - "ga:dfpViewableImpressionsPercent": 1, - "ga:domContentLoadedTime": 1, - "ga:productListClicks": 1, - "ga:nextPagePath": 1, - "ga:uniqueDimensionCombinations": 1, - "ga:contentGroupUniqueViews2": 1, - "ga:contentGroupUniqueViews1": 1, - "ga:adTargetingType": 1, - "ga:screenDepth": 1, - "ga:uniqueEvents": 1, - "ga:users": 1, - "ga:contentGroupUniqueViews5": 1, - "ga:contentGroupUniqueViews4": 1, - "ga:appInstallerId": 1, - "ga:contentGroupUniqueViews3": 1, - "ga:revenuePerUser": 1, - "ga:refundAmount": 1, - "ga:adKeywordMatchType": 1, - "ga:searchDepth": 1, - "ga:subContinent": 1, - "ga:adsenseExits": 1, - "ga:appId": 1, - "ga:checkoutOptions": 1, - "ga:internalPromotionCTR": 1, - "ga:daysSinceLastSession": 1, - "ga:pageviews": 1, - "ga:userTimingVariable": 1, - "ga:goalXXStarts": 1, - "ga:userType": 1, - "ga:sessionCount": 1, - "ga:itemRevenue": 1, - "ga:nthDay": 1, - "ga:totalPublisherClicks": 1, - "ga:screenviewsPerSession": 1, - "ga:serverConnectionTime": 1, - "ga:searchExits": 1, - "ga:externalActivityId": 1, - "ga:speedMetricsSample": 1, - "ga:browserSize": 1, - "ga:backfillViewableImpressionsPercent": 1, - "ga:minute": 1, - "ga:year": 1, - "ga:exitPagePath": 1, - "ga:sessionsPerUser": 1, - "ga:adTargetingOption": 1, - "ga:entranceBounceRate": 1, - "ga:customVarNameXX": 1, - "ga:previousPageLinkId": 1, - "ga:quantityRemovedFromCart": 1, - "ga:socialInteractionTarget": 1, - "ga:transactionsPerSession": 1, - "ga:appVersion": 1, - "ga:pageDownloadTime": 1, - "ga:country": 1, - "ga:goalValueAll": 1, - "ga:userGender": 1, - "ga:pagePath": 1, - "ga:totalPublisherImpressions": 1, - "ga:totalValue": 1, - "ga:browserVersion": 1, - "ga:adsenseAdsViewed": 1, - "ga:nthMinute": 1, - "ga:exitRate": 1, - "ga:dfpECPM": 1, - "ga:backfillMonetizedPageviews": 1, - "ga:adxCoverage": 1, - "ga:operatingSystemVersion": 1, - "ga:mobileDeviceMarketingName": 1, - "ga:totalPublisherCoverage": 1, - "ga:sessionDurationBucket": 1, - "ga:dcmFloodlightRevenue": 1, - "ga:uniquePageviews": 1, - "ga:experimentId": 1, - "ga:dateHour": 1, - "ga:totalRefunds": 1, - "ga:dateHourMinute": 1, - "ga:itemQuantity": 1, - "ga:avgSearchDuration": 1, - "ga:goalValuePerSession": 1, - "ga:adDisplayUrl": 1, - "ga:transactionsPerUser": 1, - "ga:transactionShipping": 1, - "ga:metro": 1, - "ga:internalPromotionClicks": 1, - "ga:yearMonth": 1, - "ga:avgSessionDuration": 1, - "ga:backfillECPM": 1, - "ga:city": 1, - "ga:domLatencyMetricsSample": 1, - "ga:transactions": 1, - "ga:countryIsoCode": 1, - "ga:avgSearchDepth": 1, - "ga:goalConversionRateAll": 1, - "ga:dfpMonetizedPageviews": 1, - "ga:clientId": 1, - "ga:searchSessions": 1, - "ga:productRefunds": 1, - "ga:socialInteractionNetworkActionSession": 1, - "ga:nextContentGroup1": 1, - "ga:hostname": 1, - "ga:nextContentGroup2": 1, - "ga:nextContentGroup3": 1, - "ga:nextContentGroup4": 1, - "ga:sessionDuration": 1, - "ga:quantityCheckedOut": 1, - "ga:adxECPM": 1, - "ga:nextContentGroup5": 1, - "ga:uniqueScreenviews": 1, - "ga:avgUserTimingValue": 1, - "ga:interestOtherCategory": 1, - "ga:internalPromotionViews": 1, - "ga:dataSource": 1, - "ga:dfpRevenuePer1000Sessions": 1, - "ga:backfillCoverage": 1, - "ga:serverResponseTime": 1, - "ga:pageTitle": 1, - "ga:userDefinedValue": 1, - "ga:totalPublisherViewableImpressionsPercent": 1, - "ga:adPlacementDomain": 1, - "ga:backfillRevenue": 1, - "ga:subContinentCode": 1, - "ga:mobileDeviceModel": 1, - "ga:adFormat": 1, - "ga:adwordsCriteriaID": 1, - "ga:date": 1, - "ga:screenColors": 1, - "ga:operatingSystem": 1, - "ga:userTimingValue": 1, - "ga:day": 1, - "ga:dfpCTR": 1, - "ga:adsenseCTR": 1, - "ga:avgServerResponseTime": 1, - "ga:localTransactionRevenue": 1, - "ga:searchExitRate": 1, - "ga:javaEnabled": 1, - "ga:backfillImpressionsPerSession": 1, - "ga:adDestinationUrl": 1, - "ga:region": 1, - "ga:pagePathLevel4": 1, - "ga:quantityAddedToCart": 1, - "ga:currencyCode": 1, - "ga:pagePathLevel1": 1, - "ga:searchDuration": 1, - "ga:pagePathLevel3": 1, - "ga:backfillImpressions": 1, - "ga:pagePathLevel2": 1, - "ga:goalXXConversionRate": 1, - "ga:month": 1, - "ga:yearWeek": 1, - "ga:exits": 1, - "ga:adxRevenuePer1000Sessions": 1, - "ga:dayOfWeekName": 1, - "ga:adsensePageImpressions": 1, - "ga:mobileDeviceBranding": 1, - "ga:avgRedirectionTime": 1, - "ga:pageLoadTime": 1, - "ga:regionIsoCode": 1, - "ga:calcMetric_\u003cNAME\u003e": 1, - "ga:goalAbandonsAll": 1, - "ga:isoYearIsoWeek": 1, - "ga:dimensionXX": 1, - "ga:productListViews": 1, - "ga:browser": 1, - "ga:transactionRevenuePerSession": 1, - "ga:interestAffinityCategory": 1, - "ga:regionId": 1, - "ga:adPlacementUrl": 1, - "ga:userTimingSample": 1, - "ga:adxRevenue": 1, - "ga:totalPublisherCTR": 1 - }, - "ga_experiment_results_metrics": { - "ga:experimentName": 1, - "ga:experimentCombination": 1, - "ga:nthDay": 1, - "ga:experimentVariant": 1, - "ga:experimentId": 1 - }, - "per_geo_dimension_widening_country_iso_code": { - "ga:dimensionXX": 1, - "ga:countryIsoCode": 1 - }, - "per_geo_dimension_widening_region_id": { - "ga:dimensionXX": 1, - "ga:regionId": 1 - }, - "per_active_visitors_nthday_active_visitors_30": { - "ga:totalPublisherRevenuePer1000Sessions": 1, - "ga:transactionTax": 1, - "ga:backfillClicks": 1, - "ga:percentNewSessions": 1, - "ga:avgServerConnectionTime": 1, - "ga:productCheckouts": 1, - "ga:newUsers": 1, - "ga:RPC": 1, - "ga:adxMonetizedPageviews": 1, - "ga:avgPageLoadTime": 1, - "ga:backfillCTR": 1, - "ga:goalStartsAll": 1, - "ga:avgDomContentLoadedTime": 1, - "ga:domainLookupTime": 1, - "ga:dfpCoverage": 1, - "ga:goalXXValue": 1, - "ga:uniquePurchases": 1, - "ga:pageLoadSample": 1, - "ga:sessions": 1, - "ga:totalPublisherMonetizedPageviews": 1, - "ga:exceptions": 1, - "ga:metricXX": 1, - "ga:adxImpressions": 1, - "ga:adsenseCoverage": 1, - "ga:searchUniques": 1, - "ga:screenviews": 1, - "ga:productAddsToCart": 1, - "ga:avgScreenviewDuration": 1, - "ga:percentSearchRefinements": 1, - "ga:dfpImpressions": 1, - "ga:timeOnPage": 1, - "ga:bounceRate": 1, - "ga:entrances": 1, - "ga:revenuePerTransaction": 1, - "ga:dcmFloodlightQuantity": 1, - "ga:redirectionTime": 1, - "ga:productRemovesFromCart": 1, - "ga:dbmCPA": 1, - "ga:dbmCPC": 1, - "ga:transactionRevenue": 1, - "ga:dbmCPM": 1, - "ga:CTR": 1, - "ga:entranceRate": 1, - "ga:buyToDetailRate": 1, - "ga:goalAbandonRateAll": 1, - "ga:avgEventValue": 1, - "ga:dcmCTR": 1, - "ga:adxViewableImpressionsPercent": 1, - "ga:socialInteractionsPerSession": 1, - "ga:fatalExceptionsPerScreenview": 1, - "ga:avgSearchResultViews": 1, - "ga:backfillRevenuePer1000Sessions": 1, - "ga:productListCTR": 1, - "ga:avgDomainLookupTime": 1, - "ga:hits": 1, - "ga:totalPublisherImpressionsPerSession": 1, - "ga:adxClicks": 1, - "ga:pageValue": 1, - "ga:dfpClicks": 1, - "ga:dfpImpressionsPerSession": 1, - "ga:organicSearches": 1, - "ga:adsenseECPM": 1, - "ga:adxImpressionsPerSession": 1, - "ga:searchRefinements": 1, - "ga:quantityRefunded": 1, - "ga:avgTimeOnPage": 1, - "ga:goalXXAbandonRate": 1, - "ga:adxCTR": 1, - "ga:totalPublisherRevenue": 1, - "ga:adClicks": 1, - "ga:adsenseViewableImpressionPercent": 1, - "ga:uniqueSocialInteractions": 1, - "ga:totalEvents": 1, - "ga:itemsPerPurchase": 1, - "ga:productRefundAmount": 1, - "ga:avgDomInteractiveTime": 1, - "ga:goalXXCompletions": 1, - "ga:adsenseRevenue": 1, - "ga:goalXXAbandons": 1, - "ga:dbmCost": 1, - "ga:dfpRevenue": 1, - "ga:pageviewsPerSession": 1, - "ga:fatalExceptions": 1, - "ga:searchGoalXXConversionRate": 1, - "ga:goalCompletionsAll": 1, - "ga:productDetailViews": 1, - "ga:dbmCTR": 1, - "ga:adsenseAdsClicks": 1, - "ga:socialInteractions": 1, - "ga:dcmROAS": 1, - "ga:searchResultViews": 1, - "ga:productRevenuePerPurchase": 1, - "ga:totalPublisherECPM": 1, - "ga:bounces": 1, - "ga:dbmClicks": 1, - "ga:searchGoalConversionRateAll": 1, - "ga:avgPageDownloadTime": 1, - "ga:revenuePerItem": 1, - "ga:cartToDetailRate": 1, - "ga:dbmImpressions": 1, - "ga:domInteractiveTime": 1, - "ga:percentSessionsWithSearch": 1, - "ga:adsenseAdUnitsViewed": 1, - "ga:timeOnScreen": 1, - "ga:dbmConversions": 1, - "ga:goalValueAllPerSearch": 1, - "ga:dfpViewableImpressionsPercent": 1, - "ga:domContentLoadedTime": 1, - "ga:productListClicks": 1, - "ga:30dayUsers": 1, - "ga:uniqueDimensionCombinations": 1, - "ga:uniqueEvents": 1, - "ga:refundAmount": 1, - "ga:searchDepth": 1, - "ga:pageviews": 1, - "ga:goalXXStarts": 1, - "ga:itemRevenue": 1, - "ga:nthDay": 1, - "ga:totalPublisherClicks": 1, - "ga:screenviewsPerSession": 1, - "ga:serverConnectionTime": 1, - "ga:searchExits": 1, - "ga:speedMetricsSample": 1, - "ga:backfillViewableImpressionsPercent": 1, - "ga:entranceBounceRate": 1, - "ga:quantityRemovedFromCart": 1, - "ga:transactionsPerSession": 1, - "ga:pageDownloadTime": 1, - "ga:goalValueAll": 1, - "ga:dcmCost": 1, - "ga:totalPublisherImpressions": 1, - "ga:totalValue": 1, - "ga:adsenseAdsViewed": 1, - "ga:eventValue": 1, - "ga:exitRate": 1, - "ga:dfpECPM": 1, - "ga:backfillMonetizedPageviews": 1, - "ga:dbmROAS": 1, - "ga:adxCoverage": 1, - "ga:totalPublisherCoverage": 1, - "ga:dcmFloodlightRevenue": 1, - "ga:uniquePageviews": 1, - "ga:exceptionsPerScreenview": 1, - "ga:totalRefunds": 1, - "ga:itemQuantity": 1, - "ga:avgSearchDuration": 1, - "ga:goalValuePerSession": 1, - "ga:transactionShipping": 1, - "ga:avgSessionDuration": 1, - "ga:backfillECPM": 1, - "ga:domLatencyMetricsSample": 1, - "ga:sessionsWithEvent": 1, - "ga:transactions": 1, - "ga:avgSearchDepth": 1, - "ga:goalConversionRateAll": 1, - "ga:dfpMonetizedPageviews": 1, - "ga:dcmRPC": 1, - "ga:searchSessions": 1, - "ga:productRefunds": 1, - "ga:dcmClicks": 1, - "ga:sessionDuration": 1, - "ga:quantityCheckedOut": 1, - "ga:adxECPM": 1, - "ga:uniqueScreenviews": 1, - "ga:avgUserTimingValue": 1, - "ga:dfpRevenuePer1000Sessions": 1, - "ga:backfillCoverage": 1, - "ga:serverResponseTime": 1, - "ga:totalPublisherViewableImpressionsPercent": 1, - "ga:backfillRevenue": 1, - "ga:date": 1, - "ga:dcmCPC": 1, - "ga:userTimingValue": 1, - "ga:day": 1, - "ga:dfpCTR": 1, - "ga:adsenseCTR": 1, - "ga:avgServerResponseTime": 1, - "ga:searchExitRate": 1, - "ga:backfillImpressionsPerSession": 1, - "ga:quantityAddedToCart": 1, - "ga:searchDuration": 1, - "ga:backfillImpressions": 1, - "ga:goalXXConversionRate": 1, - "ga:exits": 1, - "ga:adxRevenuePer1000Sessions": 1, - "ga:impressions": 1, - "ga:adsensePageImpressions": 1, - "ga:avgRedirectionTime": 1, - "ga:eventsPerSessionWithEvent": 1, - "ga:pageLoadTime": 1, - "ga:dcmImpressions": 1, - "ga:calcMetric_\u003cNAME\u003e": 1, - "ga:goalAbandonsAll": 1, - "ga:dcmROI": 1, - "ga:productListViews": 1, - "ga:dcmMargin": 1, - "ga:transactionRevenuePerSession": 1, - "ga:userTimingSample": 1, - "ga:adxRevenue": 1, - "ga:totalPublisherCTR": 1 - }, - "per_active_visitors_date_active_visitors_7": { - "ga:totalPublisherRevenuePer1000Sessions": 1, - "ga:transactionTax": 1, - "ga:backfillClicks": 1, - "ga:percentNewSessions": 1, - "ga:avgServerConnectionTime": 1, - "ga:productCheckouts": 1, - "ga:newUsers": 1, - "ga:RPC": 1, - "ga:adxMonetizedPageviews": 1, - "ga:avgPageLoadTime": 1, - "ga:backfillCTR": 1, - "ga:goalStartsAll": 1, - "ga:avgDomContentLoadedTime": 1, - "ga:domainLookupTime": 1, - "ga:dfpCoverage": 1, - "ga:goalXXValue": 1, - "ga:uniquePurchases": 1, - "ga:pageLoadSample": 1, - "ga:sessions": 1, - "ga:totalPublisherMonetizedPageviews": 1, - "ga:exceptions": 1, - "ga:metricXX": 1, - "ga:adxImpressions": 1, - "ga:adsenseCoverage": 1, - "ga:searchUniques": 1, - "ga:screenviews": 1, - "ga:productAddsToCart": 1, - "ga:avgScreenviewDuration": 1, - "ga:percentSearchRefinements": 1, - "ga:dfpImpressions": 1, - "ga:timeOnPage": 1, - "ga:bounceRate": 1, - "ga:entrances": 1, - "ga:revenuePerTransaction": 1, - "ga:dcmFloodlightQuantity": 1, - "ga:redirectionTime": 1, - "ga:productRemovesFromCart": 1, - "ga:dbmCPA": 1, - "ga:dbmCPC": 1, - "ga:transactionRevenue": 1, - "ga:dbmCPM": 1, - "ga:CTR": 1, - "ga:entranceRate": 1, - "ga:buyToDetailRate": 1, - "ga:goalAbandonRateAll": 1, - "ga:avgEventValue": 1, - "ga:dcmCTR": 1, - "ga:adxViewableImpressionsPercent": 1, - "ga:socialInteractionsPerSession": 1, - "ga:fatalExceptionsPerScreenview": 1, - "ga:avgSearchResultViews": 1, - "ga:backfillRevenuePer1000Sessions": 1, - "ga:productListCTR": 1, - "ga:avgDomainLookupTime": 1, - "ga:hits": 1, - "ga:totalPublisherImpressionsPerSession": 1, - "ga:adxClicks": 1, - "ga:pageValue": 1, - "ga:dfpClicks": 1, - "ga:dfpImpressionsPerSession": 1, - "ga:organicSearches": 1, - "ga:adsenseECPM": 1, - "ga:adxImpressionsPerSession": 1, - "ga:searchRefinements": 1, - "ga:quantityRefunded": 1, - "ga:avgTimeOnPage": 1, - "ga:goalXXAbandonRate": 1, - "ga:adxCTR": 1, - "ga:totalPublisherRevenue": 1, - "ga:adClicks": 1, - "ga:adsenseViewableImpressionPercent": 1, - "ga:uniqueSocialInteractions": 1, - "ga:totalEvents": 1, - "ga:itemsPerPurchase": 1, - "ga:productRefundAmount": 1, - "ga:avgDomInteractiveTime": 1, - "ga:goalXXCompletions": 1, - "ga:adsenseRevenue": 1, - "ga:goalXXAbandons": 1, - "ga:dbmCost": 1, - "ga:dfpRevenue": 1, - "ga:pageviewsPerSession": 1, - "ga:fatalExceptions": 1, - "ga:searchGoalXXConversionRate": 1, - "ga:goalCompletionsAll": 1, - "ga:productDetailViews": 1, - "ga:dbmCTR": 1, - "ga:adsenseAdsClicks": 1, - "ga:socialInteractions": 1, - "ga:dcmROAS": 1, - "ga:searchResultViews": 1, - "ga:productRevenuePerPurchase": 1, - "ga:totalPublisherECPM": 1, - "ga:bounces": 1, - "ga:dbmClicks": 1, - "ga:searchGoalConversionRateAll": 1, - "ga:avgPageDownloadTime": 1, - "ga:revenuePerItem": 1, - "ga:cartToDetailRate": 1, - "ga:dbmImpressions": 1, - "ga:domInteractiveTime": 1, - "ga:percentSessionsWithSearch": 1, - "ga:adsenseAdUnitsViewed": 1, - "ga:timeOnScreen": 1, - "ga:dbmConversions": 1, - "ga:goalValueAllPerSearch": 1, - "ga:dfpViewableImpressionsPercent": 1, - "ga:domContentLoadedTime": 1, - "ga:productListClicks": 1, - "ga:uniqueDimensionCombinations": 1, - "ga:uniqueEvents": 1, - "ga:refundAmount": 1, - "ga:searchDepth": 1, - "ga:pageviews": 1, - "ga:goalXXStarts": 1, - "ga:itemRevenue": 1, - "ga:nthDay": 1, - "ga:totalPublisherClicks": 1, - "ga:screenviewsPerSession": 1, - "ga:serverConnectionTime": 1, - "ga:searchExits": 1, - "ga:speedMetricsSample": 1, - "ga:backfillViewableImpressionsPercent": 1, - "ga:entranceBounceRate": 1, - "ga:quantityRemovedFromCart": 1, - "ga:transactionsPerSession": 1, - "ga:pageDownloadTime": 1, - "ga:goalValueAll": 1, - "ga:dcmCost": 1, - "ga:totalPublisherImpressions": 1, - "ga:totalValue": 1, - "ga:adsenseAdsViewed": 1, - "ga:eventValue": 1, - "ga:7dayUsers": 1, - "ga:exitRate": 1, - "ga:dfpECPM": 1, - "ga:backfillMonetizedPageviews": 1, - "ga:dbmROAS": 1, - "ga:adxCoverage": 1, - "ga:totalPublisherCoverage": 1, - "ga:dcmFloodlightRevenue": 1, - "ga:uniquePageviews": 1, - "ga:exceptionsPerScreenview": 1, - "ga:totalRefunds": 1, - "ga:itemQuantity": 1, - "ga:avgSearchDuration": 1, - "ga:goalValuePerSession": 1, - "ga:transactionShipping": 1, - "ga:avgSessionDuration": 1, - "ga:backfillECPM": 1, - "ga:domLatencyMetricsSample": 1, - "ga:sessionsWithEvent": 1, - "ga:transactions": 1, - "ga:avgSearchDepth": 1, - "ga:goalConversionRateAll": 1, - "ga:dfpMonetizedPageviews": 1, - "ga:dcmRPC": 1, - "ga:searchSessions": 1, - "ga:productRefunds": 1, - "ga:dcmClicks": 1, - "ga:sessionDuration": 1, - "ga:quantityCheckedOut": 1, - "ga:adxECPM": 1, - "ga:uniqueScreenviews": 1, - "ga:avgUserTimingValue": 1, - "ga:dfpRevenuePer1000Sessions": 1, - "ga:backfillCoverage": 1, - "ga:serverResponseTime": 1, - "ga:totalPublisherViewableImpressionsPercent": 1, - "ga:backfillRevenue": 1, - "ga:date": 1, - "ga:dcmCPC": 1, - "ga:userTimingValue": 1, - "ga:day": 1, - "ga:dfpCTR": 1, - "ga:adsenseCTR": 1, - "ga:avgServerResponseTime": 1, - "ga:searchExitRate": 1, - "ga:backfillImpressionsPerSession": 1, - "ga:quantityAddedToCart": 1, - "ga:searchDuration": 1, - "ga:backfillImpressions": 1, - "ga:goalXXConversionRate": 1, - "ga:exits": 1, - "ga:adxRevenuePer1000Sessions": 1, - "ga:impressions": 1, - "ga:adsensePageImpressions": 1, - "ga:avgRedirectionTime": 1, - "ga:eventsPerSessionWithEvent": 1, - "ga:pageLoadTime": 1, - "ga:dcmImpressions": 1, - "ga:calcMetric_\u003cNAME\u003e": 1, - "ga:goalAbandonsAll": 1, - "ga:dcmROI": 1, - "ga:productListViews": 1, - "ga:dcmMargin": 1, - "ga:transactionRevenuePerSession": 1, - "ga:userTimingSample": 1, - "ga:adxRevenue": 1, - "ga:totalPublisherCTR": 1 - }, - "phone_analytics": { - "ga:referralPath": 1, - "ga:adGroup": 1, - "ga:metroId": 1, - "ga:week": 1, - "ga:metro": 1, - "ga:nthMonth": 1, - "ga:latitude": 1, - "ga:yearMonth": 1, - "ga:city": 1, - "ga:hour": 1, - "ga:continentId": 1, - "ga:deviceCategory": 1, - "ga:countryIsoCode": 1, - "ga:nthWeek": 1, - "ga:interestInMarketCategory": 1, - "ga:networkLocation": 1, - "ga:userAgeBracket": 1, - "ga:sourceMedium": 1, - "ga:subContinent": 1, - "ga:interestOtherCategory": 1, - "ga:continent": 1, - "ga:isTablet": 1, - "ga:adContent": 1, - "ga:source": 1, - "ga:campaign": 1, - "ga:userType": 1, - "ga:networkDomain": 1, - "ga:dataSource": 1, - "ga:landingPagePath": 1, - "ga:nthDay": 1, - "ga:channelGrouping": 1, - "ga:keyword": 1, - "ga:dayOfWeek": 1, - "ga:subContinentCode": 1, - "ga:date": 1, - "ga:day": 1, - "ga:year": 1, - "ga:exitPagePath": 1, - "ga:medium": 1, - "ga:region": 1, - "ga:isMobile": 1, - "ga:country": 1, - "ga:month": 1, - "ga:userGender": 1, - "ga:yearWeek": 1, - "ga:adwordsCampaignID": 1, - "ga:dayOfWeekName": 1, - "ga:socialNetwork": 1, - "ga:regionIsoCode": 1, - "ga:cityId": 1, - "ga:interestAffinityCategory": 1, - "ga:longitude": 1, - "ga:nthHour": 1, - "ga:regionId": 1, - "ga:dateHour": 1 - }, - "per_dimension_widening": { - "ga:mobileDeviceModel": 1, - "ga:appName": 1, - "ga:screenColors": 1, - "ga:operatingSystem": 1, - "ga:javaEnabled": 1, - "ga:language": 1, - "ga:appVersion": 1, - "ga:networkLocation": 1, - "ga:isMobile": 1, - "ga:appInstallerId": 1, - "ga:pagePath": 1, - "ga:appId": 1, - "ga:metricXX": 1, - "ga:hostname": 1, - "ga:browserVersion": 1, - "ga:mobileDeviceBranding": 1, - "ga:screenResolution": 1, - "ga:isTablet": 1, - "ga:dimensionXX": 1, - "ga:networkDomain": 1, - "ga:sessionCount": 1, - "ga:operatingSystemVersion": 1, - "ga:browser": 1, - "ga:mobileDeviceMarketingName": 1, - "ga:pageTitle": 1, - "ga:mobileInputSelector": 1 - }, - "per_active_visitors_day_active_visitors_28": { - "ga:totalPublisherRevenuePer1000Sessions": 1, - "ga:transactionTax": 1, - "ga:backfillClicks": 1, - "ga:percentNewSessions": 1, - "ga:avgServerConnectionTime": 1, - "ga:productCheckouts": 1, - "ga:28dayUsers": 1, - "ga:newUsers": 1, - "ga:RPC": 1, - "ga:adxMonetizedPageviews": 1, - "ga:avgPageLoadTime": 1, - "ga:backfillCTR": 1, - "ga:goalStartsAll": 1, - "ga:avgDomContentLoadedTime": 1, - "ga:domainLookupTime": 1, - "ga:dfpCoverage": 1, - "ga:goalXXValue": 1, - "ga:uniquePurchases": 1, - "ga:pageLoadSample": 1, - "ga:sessions": 1, - "ga:totalPublisherMonetizedPageviews": 1, - "ga:exceptions": 1, - "ga:metricXX": 1, - "ga:adxImpressions": 1, - "ga:adsenseCoverage": 1, - "ga:searchUniques": 1, - "ga:screenviews": 1, - "ga:productAddsToCart": 1, - "ga:avgScreenviewDuration": 1, - "ga:percentSearchRefinements": 1, - "ga:dfpImpressions": 1, - "ga:timeOnPage": 1, - "ga:bounceRate": 1, - "ga:entrances": 1, - "ga:revenuePerTransaction": 1, - "ga:dcmFloodlightQuantity": 1, - "ga:redirectionTime": 1, - "ga:productRemovesFromCart": 1, - "ga:dbmCPA": 1, - "ga:dbmCPC": 1, - "ga:transactionRevenue": 1, - "ga:dbmCPM": 1, - "ga:CTR": 1, - "ga:entranceRate": 1, - "ga:buyToDetailRate": 1, - "ga:goalAbandonRateAll": 1, - "ga:avgEventValue": 1, - "ga:dcmCTR": 1, - "ga:adxViewableImpressionsPercent": 1, - "ga:socialInteractionsPerSession": 1, - "ga:fatalExceptionsPerScreenview": 1, - "ga:avgSearchResultViews": 1, - "ga:backfillRevenuePer1000Sessions": 1, - "ga:productListCTR": 1, - "ga:avgDomainLookupTime": 1, - "ga:hits": 1, - "ga:totalPublisherImpressionsPerSession": 1, - "ga:adxClicks": 1, - "ga:pageValue": 1, - "ga:dfpClicks": 1, - "ga:dfpImpressionsPerSession": 1, - "ga:organicSearches": 1, - "ga:adsenseECPM": 1, - "ga:adxImpressionsPerSession": 1, - "ga:searchRefinements": 1, - "ga:quantityRefunded": 1, - "ga:avgTimeOnPage": 1, - "ga:goalXXAbandonRate": 1, - "ga:adxCTR": 1, - "ga:totalPublisherRevenue": 1, - "ga:adClicks": 1, - "ga:adsenseViewableImpressionPercent": 1, - "ga:uniqueSocialInteractions": 1, - "ga:totalEvents": 1, - "ga:itemsPerPurchase": 1, - "ga:productRefundAmount": 1, - "ga:avgDomInteractiveTime": 1, - "ga:goalXXCompletions": 1, - "ga:adsenseRevenue": 1, - "ga:goalXXAbandons": 1, - "ga:dbmCost": 1, - "ga:dfpRevenue": 1, - "ga:pageviewsPerSession": 1, - "ga:fatalExceptions": 1, - "ga:searchGoalXXConversionRate": 1, - "ga:goalCompletionsAll": 1, - "ga:productDetailViews": 1, - "ga:dbmCTR": 1, - "ga:adsenseAdsClicks": 1, - "ga:socialInteractions": 1, - "ga:dcmROAS": 1, - "ga:searchResultViews": 1, - "ga:productRevenuePerPurchase": 1, - "ga:totalPublisherECPM": 1, - "ga:bounces": 1, - "ga:dbmClicks": 1, - "ga:searchGoalConversionRateAll": 1, - "ga:avgPageDownloadTime": 1, - "ga:revenuePerItem": 1, - "ga:cartToDetailRate": 1, - "ga:dbmImpressions": 1, - "ga:domInteractiveTime": 1, - "ga:percentSessionsWithSearch": 1, - "ga:adsenseAdUnitsViewed": 1, - "ga:timeOnScreen": 1, - "ga:dbmConversions": 1, - "ga:goalValueAllPerSearch": 1, - "ga:dfpViewableImpressionsPercent": 1, - "ga:domContentLoadedTime": 1, - "ga:productListClicks": 1, - "ga:uniqueDimensionCombinations": 1, - "ga:uniqueEvents": 1, - "ga:refundAmount": 1, - "ga:searchDepth": 1, - "ga:pageviews": 1, - "ga:goalXXStarts": 1, - "ga:itemRevenue": 1, - "ga:nthDay": 1, - "ga:totalPublisherClicks": 1, - "ga:screenviewsPerSession": 1, - "ga:serverConnectionTime": 1, - "ga:searchExits": 1, - "ga:speedMetricsSample": 1, - "ga:backfillViewableImpressionsPercent": 1, - "ga:entranceBounceRate": 1, - "ga:quantityRemovedFromCart": 1, - "ga:transactionsPerSession": 1, - "ga:pageDownloadTime": 1, - "ga:goalValueAll": 1, - "ga:dcmCost": 1, - "ga:totalPublisherImpressions": 1, - "ga:totalValue": 1, - "ga:adsenseAdsViewed": 1, - "ga:eventValue": 1, - "ga:exitRate": 1, - "ga:dfpECPM": 1, - "ga:backfillMonetizedPageviews": 1, - "ga:dbmROAS": 1, - "ga:adxCoverage": 1, - "ga:totalPublisherCoverage": 1, - "ga:dcmFloodlightRevenue": 1, - "ga:uniquePageviews": 1, - "ga:exceptionsPerScreenview": 1, - "ga:totalRefunds": 1, - "ga:itemQuantity": 1, - "ga:avgSearchDuration": 1, - "ga:goalValuePerSession": 1, - "ga:transactionShipping": 1, - "ga:avgSessionDuration": 1, - "ga:backfillECPM": 1, - "ga:domLatencyMetricsSample": 1, - "ga:sessionsWithEvent": 1, - "ga:transactions": 1, - "ga:avgSearchDepth": 1, - "ga:goalConversionRateAll": 1, - "ga:dfpMonetizedPageviews": 1, - "ga:dcmRPC": 1, - "ga:searchSessions": 1, - "ga:productRefunds": 1, - "ga:dcmClicks": 1, - "ga:sessionDuration": 1, - "ga:quantityCheckedOut": 1, - "ga:adxECPM": 1, - "ga:uniqueScreenviews": 1, - "ga:avgUserTimingValue": 1, - "ga:dfpRevenuePer1000Sessions": 1, - "ga:backfillCoverage": 1, - "ga:serverResponseTime": 1, - "ga:totalPublisherViewableImpressionsPercent": 1, - "ga:backfillRevenue": 1, - "ga:date": 1, - "ga:dcmCPC": 1, - "ga:userTimingValue": 1, - "ga:day": 1, - "ga:dfpCTR": 1, - "ga:adsenseCTR": 1, - "ga:avgServerResponseTime": 1, - "ga:searchExitRate": 1, - "ga:backfillImpressionsPerSession": 1, - "ga:quantityAddedToCart": 1, - "ga:searchDuration": 1, - "ga:backfillImpressions": 1, - "ga:goalXXConversionRate": 1, - "ga:exits": 1, - "ga:adxRevenuePer1000Sessions": 1, - "ga:impressions": 1, - "ga:adsensePageImpressions": 1, - "ga:avgRedirectionTime": 1, - "ga:eventsPerSessionWithEvent": 1, - "ga:pageLoadTime": 1, - "ga:dcmImpressions": 1, - "ga:calcMetric_\u003cNAME\u003e": 1, - "ga:goalAbandonsAll": 1, - "ga:dcmROI": 1, - "ga:productListViews": 1, - "ga:dcmMargin": 1, - "ga:transactionRevenuePerSession": 1, - "ga:userTimingSample": 1, - "ga:adxRevenue": 1, - "ga:totalPublisherCTR": 1 - }, - "per_active_visitors_day_active_visitors_1": { - "ga:totalPublisherRevenuePer1000Sessions": 1, - "ga:transactionTax": 1, - "ga:backfillClicks": 1, - "ga:percentNewSessions": 1, - "ga:avgServerConnectionTime": 1, - "ga:productCheckouts": 1, - "ga:newUsers": 1, - "ga:RPC": 1, - "ga:adxMonetizedPageviews": 1, - "ga:avgPageLoadTime": 1, - "ga:backfillCTR": 1, - "ga:goalStartsAll": 1, - "ga:avgDomContentLoadedTime": 1, - "ga:domainLookupTime": 1, - "ga:dfpCoverage": 1, - "ga:goalXXValue": 1, - "ga:uniquePurchases": 1, - "ga:pageLoadSample": 1, - "ga:sessions": 1, - "ga:totalPublisherMonetizedPageviews": 1, - "ga:exceptions": 1, - "ga:metricXX": 1, - "ga:adxImpressions": 1, - "ga:adsenseCoverage": 1, - "ga:searchUniques": 1, - "ga:screenviews": 1, - "ga:productAddsToCart": 1, - "ga:avgScreenviewDuration": 1, - "ga:percentSearchRefinements": 1, - "ga:dfpImpressions": 1, - "ga:timeOnPage": 1, - "ga:bounceRate": 1, - "ga:entrances": 1, - "ga:revenuePerTransaction": 1, - "ga:dcmFloodlightQuantity": 1, - "ga:redirectionTime": 1, - "ga:productRemovesFromCart": 1, - "ga:dbmCPA": 1, - "ga:dbmCPC": 1, - "ga:transactionRevenue": 1, - "ga:dbmCPM": 1, - "ga:CTR": 1, - "ga:entranceRate": 1, - "ga:buyToDetailRate": 1, - "ga:goalAbandonRateAll": 1, - "ga:avgEventValue": 1, - "ga:dcmCTR": 1, - "ga:adxViewableImpressionsPercent": 1, - "ga:socialInteractionsPerSession": 1, - "ga:fatalExceptionsPerScreenview": 1, - "ga:avgSearchResultViews": 1, - "ga:backfillRevenuePer1000Sessions": 1, - "ga:productListCTR": 1, - "ga:avgDomainLookupTime": 1, - "ga:hits": 1, - "ga:totalPublisherImpressionsPerSession": 1, - "ga:adxClicks": 1, - "ga:pageValue": 1, - "ga:dfpClicks": 1, - "ga:dfpImpressionsPerSession": 1, - "ga:organicSearches": 1, - "ga:adsenseECPM": 1, - "ga:adxImpressionsPerSession": 1, - "ga:searchRefinements": 1, - "ga:quantityRefunded": 1, - "ga:avgTimeOnPage": 1, - "ga:goalXXAbandonRate": 1, - "ga:adxCTR": 1, - "ga:totalPublisherRevenue": 1, - "ga:adClicks": 1, - "ga:adsenseViewableImpressionPercent": 1, - "ga:uniqueSocialInteractions": 1, - "ga:totalEvents": 1, - "ga:itemsPerPurchase": 1, - "ga:productRefundAmount": 1, - "ga:avgDomInteractiveTime": 1, - "ga:goalXXCompletions": 1, - "ga:adsenseRevenue": 1, - "ga:goalXXAbandons": 1, - "ga:dbmCost": 1, - "ga:dfpRevenue": 1, - "ga:pageviewsPerSession": 1, - "ga:fatalExceptions": 1, - "ga:searchGoalXXConversionRate": 1, - "ga:goalCompletionsAll": 1, - "ga:productDetailViews": 1, - "ga:dbmCTR": 1, - "ga:adsenseAdsClicks": 1, - "ga:socialInteractions": 1, - "ga:dcmROAS": 1, - "ga:searchResultViews": 1, - "ga:productRevenuePerPurchase": 1, - "ga:totalPublisherECPM": 1, - "ga:bounces": 1, - "ga:dbmClicks": 1, - "ga:searchGoalConversionRateAll": 1, - "ga:avgPageDownloadTime": 1, - "ga:revenuePerItem": 1, - "ga:cartToDetailRate": 1, - "ga:dbmImpressions": 1, - "ga:domInteractiveTime": 1, - "ga:percentSessionsWithSearch": 1, - "ga:adsenseAdUnitsViewed": 1, - "ga:timeOnScreen": 1, - "ga:dbmConversions": 1, - "ga:goalValueAllPerSearch": 1, - "ga:dfpViewableImpressionsPercent": 1, - "ga:domContentLoadedTime": 1, - "ga:productListClicks": 1, - "ga:uniqueDimensionCombinations": 1, - "ga:uniqueEvents": 1, - "ga:refundAmount": 1, - "ga:searchDepth": 1, - "ga:pageviews": 1, - "ga:goalXXStarts": 1, - "ga:1dayUsers": 1, - "ga:itemRevenue": 1, - "ga:nthDay": 1, - "ga:totalPublisherClicks": 1, - "ga:screenviewsPerSession": 1, - "ga:serverConnectionTime": 1, - "ga:searchExits": 1, - "ga:speedMetricsSample": 1, - "ga:backfillViewableImpressionsPercent": 1, - "ga:entranceBounceRate": 1, - "ga:quantityRemovedFromCart": 1, - "ga:transactionsPerSession": 1, - "ga:pageDownloadTime": 1, - "ga:goalValueAll": 1, - "ga:dcmCost": 1, - "ga:totalPublisherImpressions": 1, - "ga:totalValue": 1, - "ga:adsenseAdsViewed": 1, - "ga:eventValue": 1, - "ga:exitRate": 1, - "ga:dfpECPM": 1, - "ga:backfillMonetizedPageviews": 1, - "ga:dbmROAS": 1, - "ga:adxCoverage": 1, - "ga:totalPublisherCoverage": 1, - "ga:dcmFloodlightRevenue": 1, - "ga:uniquePageviews": 1, - "ga:exceptionsPerScreenview": 1, - "ga:totalRefunds": 1, - "ga:itemQuantity": 1, - "ga:avgSearchDuration": 1, - "ga:goalValuePerSession": 1, - "ga:transactionShipping": 1, - "ga:avgSessionDuration": 1, - "ga:backfillECPM": 1, - "ga:domLatencyMetricsSample": 1, - "ga:sessionsWithEvent": 1, - "ga:transactions": 1, - "ga:avgSearchDepth": 1, - "ga:goalConversionRateAll": 1, - "ga:dfpMonetizedPageviews": 1, - "ga:dcmRPC": 1, - "ga:searchSessions": 1, - "ga:productRefunds": 1, - "ga:dcmClicks": 1, - "ga:sessionDuration": 1, - "ga:quantityCheckedOut": 1, - "ga:adxECPM": 1, - "ga:uniqueScreenviews": 1, - "ga:avgUserTimingValue": 1, - "ga:dfpRevenuePer1000Sessions": 1, - "ga:backfillCoverage": 1, - "ga:serverResponseTime": 1, - "ga:totalPublisherViewableImpressionsPercent": 1, - "ga:backfillRevenue": 1, - "ga:date": 1, - "ga:dcmCPC": 1, - "ga:userTimingValue": 1, - "ga:day": 1, - "ga:dfpCTR": 1, - "ga:adsenseCTR": 1, - "ga:avgServerResponseTime": 1, - "ga:searchExitRate": 1, - "ga:backfillImpressionsPerSession": 1, - "ga:quantityAddedToCart": 1, - "ga:searchDuration": 1, - "ga:backfillImpressions": 1, - "ga:goalXXConversionRate": 1, - "ga:exits": 1, - "ga:adxRevenuePer1000Sessions": 1, - "ga:impressions": 1, - "ga:adsensePageImpressions": 1, - "ga:avgRedirectionTime": 1, - "ga:eventsPerSessionWithEvent": 1, - "ga:pageLoadTime": 1, - "ga:dcmImpressions": 1, - "ga:calcMetric_\u003cNAME\u003e": 1, - "ga:goalAbandonsAll": 1, - "ga:dcmROI": 1, - "ga:productListViews": 1, - "ga:dcmMargin": 1, - "ga:transactionRevenuePerSession": 1, - "ga:userTimingSample": 1, - "ga:adxRevenue": 1, - "ga:totalPublisherCTR": 1 - }, - "per_goal_funnel_request": { - "ga:revenuePerUser": 1, - "ga:refundAmount": 1, - "ga:sessions": 1, - "ga:transactionsPerUser": 1, - "ga:metricXX": 1, - "ga:calcMetric_\u003cNAME\u003e": 1, - "ga:transactions": 1, - "ga:transactionRevenue": 1, - "ga:goalCompletionsAll": 1, - "ga:sessionsPerUser": 1, - "ga:dimensionXX": 1, - "ga:goalConversionRateAll": 1, - "ga:transactionRevenuePerSession": 1, - "ga:transactionsPerSession": 1, - "ga:revenuePerTransaction": 1, - "ga:users": 1, - "ga:totalRefunds": 1 - }, - "per_tv_campaign": { - "ga:month": 1, - "ga:yearWeek": 1, - "ga:week": 1, - "ga:date": 1, - "ga:dayOfWeekName": 1, - "ga:nthMonth": 1, - "ga:metricXX": 1, - "ga:yearMonth": 1, - "ga:day": 1, - "ga:minute": 1, - "ga:nthMinute": 1, - "ga:year": 1, - "ga:hour": 1, - "ga:isoYearIsoWeek": 1, - "ga:dimensionXX": 1, - "ga:isoYear": 1, - "ga:nthWeek": 1, - "ga:isoWeek": 1, - "ga:nthDay": 1, - "ga:nthHour": 1, - "ga:dateHour": 1, - "ga:dayOfWeek": 1, - "ga:dateHourMinute": 1 - }, - "all_metrics_for_audiences_overview": { - "ga:goalValuePerSession": 1, - "ga:metroId": 1, - "ga:percentNewSessions": 1, - "ga:week": 1, - "ga:acquisitionSource": 1, - "ga:transactionsPerUser": 1, - "ga:metro": 1, - "ga:nthMonth": 1, - "ga:latitude": 1, - "ga:yearMonth": 1, - "ga:avgSessionDuration": 1, - "ga:newUsers": 1, - "ga:city": 1, - "ga:goalXXAbandonRate": 1, - "ga:continentId": 1, - "ga:transactions": 1, - "ga:countryIsoCode": 1, - "ga:goalConversionRateAll": 1, - "ga:flashVersion": 1, - "ga:nthWeek": 1, - "ga:interestInMarketCategory": 1, - "ga:goalStartsAll": 1, - "ga:networkLocation": 1, - "ga:userAgeBracket": 1, - "ga:goalXXValue": 1, - "ga:users": 1, - "ga:revenuePerUser": 1, - "ga:subContinent": 1, - "ga:sessions": 1, - "ga:sessionDuration": 1, - "ga:screenResolution": 1, - "ga:goalXXCompletions": 1, - "ga:screenviews": 1, - "ga:interestOtherCategory": 1, - "ga:continent": 1, - "ga:pageviews": 1, - "ga:goalXXAbandons": 1, - "ga:goalXXStarts": 1, - "ga:userType": 1, - "ga:networkDomain": 1, - "ga:bounceRate": 1, - "ga:nthDay": 1, - "ga:revenuePerTransaction": 1, - "ga:screenviewsPerSession": 1, - "ga:pageviewsPerSession": 1, - "ga:dayOfWeek": 1, - "ga:acquisitionTrafficChannel": 1, - "ga:subContinentCode": 1, - "ga:browserSize": 1, - "ga:date": 1, - "ga:screenColors": 1, - "ga:operatingSystem": 1, - "ga:day": 1, - "ga:year": 1, - "ga:transactionRevenue": 1, - "ga:goalCompletionsAll": 1, - "ga:sessionsPerUser": 1, - "ga:javaEnabled": 1, - "ga:language": 1, - "ga:acquisitionMedium": 1, - "ga:region": 1, - "ga:transactionsPerSession": 1, - "ga:goalAbandonRateAll": 1, - "ga:country": 1, - "ga:goalXXConversionRate": 1, - "ga:goalValueAll": 1, - "ga:month": 1, - "ga:userGender": 1, - "ga:yearWeek": 1, - "ga:acquisitionCampaign": 1, - "ga:bounces": 1, - "ga:dayOfWeekName": 1, - "ga:acquisitionSourceMedium": 1, - "ga:totalValue": 1, - "ga:browserVersion": 1, - "ga:regionIsoCode": 1, - "ga:calcMetric_\u003cNAME\u003e": 1, - "ga:goalAbandonsAll": 1, - "ga:cityId": 1, - "ga:operatingSystemVersion": 1, - "ga:browser": 1, - "ga:transactionRevenuePerSession": 1, - "ga:interestAffinityCategory": 1, - "ga:longitude": 1, - "ga:regionId": 1 - }, - "per_social_plus_site": { - "ga:goalValuePerSession": 1, - "ga:week": 1, - "ga:nthMonth": 1, - "ga:yearMonth": 1, - "ga:avgSessionDuration": 1, - "ga:hour": 1, - "ga:transactions": 1, - "ga:goalConversionRateAll": 1, - "ga:nthWeek": 1, - "ga:isoWeek": 1, - "ga:goalXXValue": 1, - "ga:refundAmount": 1, - "ga:adsenseExits": 1, - "ga:sessions": 1, - "ga:metricXX": 1, - "ga:sessionDuration": 1, - "ga:goalXXCompletions": 1, - "ga:screenviews": 1, - "ga:pageviews": 1, - "ga:socialActivityContentUrl": 1, - "ga:isoYear": 1, - "ga:bounceRate": 1, - "ga:nthDay": 1, - "ga:entrances": 1, - "ga:revenuePerTransaction": 1, - "ga:screenviewsPerSession": 1, - "ga:pageviewsPerSession": 1, - "ga:dayOfWeek": 1, - "ga:date": 1, - "ga:day": 1, - "ga:year": 1, - "ga:transactionRevenue": 1, - "ga:goalCompletionsAll": 1, - "ga:entranceBounceRate": 1, - "ga:entranceRate": 1, - "ga:transactionsPerSession": 1, - "ga:goalXXConversionRate": 1, - "ga:goalValueAll": 1, - "ga:month": 1, - "ga:yearWeek": 1, - "ga:exits": 1, - "ga:bounces": 1, - "ga:dayOfWeekName": 1, - "ga:totalValue": 1, - "ga:hasSocialSourceReferral": 1, - "ga:hits": 1, - "ga:socialNetwork": 1, - "ga:calcMetric_\u003cNAME\u003e": 1, - "ga:pageValue": 1, - "ga:exitRate": 1, - "ga:isoYearIsoWeek": 1, - "ga:dimensionXX": 1, - "ga:transactionRevenuePerSession": 1, - "ga:uniquePageviews": 1, - "ga:nthHour": 1, - "ga:dateHour": 1, - "ga:totalRefunds": 1 - }, - "all_metrics_for_active_visitors_cubes": { - "ga:totalPublisherRevenuePer1000Sessions": 1, - "ga:transactionTax": 1, - "ga:backfillClicks": 1, - "ga:percentNewSessions": 1, - "ga:avgServerConnectionTime": 1, - "ga:productCheckouts": 1, - "ga:newUsers": 1, - "ga:RPC": 1, - "ga:adxMonetizedPageviews": 1, - "ga:avgPageLoadTime": 1, - "ga:backfillCTR": 1, - "ga:goalStartsAll": 1, - "ga:avgDomContentLoadedTime": 1, - "ga:domainLookupTime": 1, - "ga:dfpCoverage": 1, - "ga:goalXXValue": 1, - "ga:uniquePurchases": 1, - "ga:pageLoadSample": 1, - "ga:sessions": 1, - "ga:totalPublisherMonetizedPageviews": 1, - "ga:exceptions": 1, - "ga:metricXX": 1, - "ga:adxImpressions": 1, - "ga:adsenseCoverage": 1, - "ga:searchUniques": 1, - "ga:screenviews": 1, - "ga:productAddsToCart": 1, - "ga:avgScreenviewDuration": 1, - "ga:percentSearchRefinements": 1, - "ga:dfpImpressions": 1, - "ga:timeOnPage": 1, - "ga:bounceRate": 1, - "ga:entrances": 1, - "ga:revenuePerTransaction": 1, - "ga:dcmFloodlightQuantity": 1, - "ga:redirectionTime": 1, - "ga:productRemovesFromCart": 1, - "ga:dbmCPA": 1, - "ga:dbmCPC": 1, - "ga:transactionRevenue": 1, - "ga:dbmCPM": 1, - "ga:CTR": 1, - "ga:entranceRate": 1, - "ga:buyToDetailRate": 1, - "ga:goalAbandonRateAll": 1, - "ga:avgEventValue": 1, - "ga:dcmCTR": 1, - "ga:adxViewableImpressionsPercent": 1, - "ga:socialInteractionsPerSession": 1, - "ga:fatalExceptionsPerScreenview": 1, - "ga:avgSearchResultViews": 1, - "ga:backfillRevenuePer1000Sessions": 1, - "ga:productListCTR": 1, - "ga:avgDomainLookupTime": 1, - "ga:hits": 1, - "ga:totalPublisherImpressionsPerSession": 1, - "ga:adxClicks": 1, - "ga:pageValue": 1, - "ga:dfpClicks": 1, - "ga:dfpImpressionsPerSession": 1, - "ga:organicSearches": 1, - "ga:adsenseECPM": 1, - "ga:adxImpressionsPerSession": 1, - "ga:searchRefinements": 1, - "ga:quantityRefunded": 1, - "ga:avgTimeOnPage": 1, - "ga:goalXXAbandonRate": 1, - "ga:adxCTR": 1, - "ga:totalPublisherRevenue": 1, - "ga:adClicks": 1, - "ga:adsenseViewableImpressionPercent": 1, - "ga:uniqueSocialInteractions": 1, - "ga:totalEvents": 1, - "ga:itemsPerPurchase": 1, - "ga:productRefundAmount": 1, - "ga:avgDomInteractiveTime": 1, - "ga:goalXXCompletions": 1, - "ga:adsenseRevenue": 1, - "ga:goalXXAbandons": 1, - "ga:dbmCost": 1, - "ga:dfpRevenue": 1, - "ga:pageviewsPerSession": 1, - "ga:fatalExceptions": 1, - "ga:searchGoalXXConversionRate": 1, - "ga:goalCompletionsAll": 1, - "ga:productDetailViews": 1, - "ga:dbmCTR": 1, - "ga:adsenseAdsClicks": 1, - "ga:socialInteractions": 1, - "ga:dcmROAS": 1, - "ga:searchResultViews": 1, - "ga:productRevenuePerPurchase": 1, - "ga:totalPublisherECPM": 1, - "ga:bounces": 1, - "ga:dbmClicks": 1, - "ga:searchGoalConversionRateAll": 1, - "ga:avgPageDownloadTime": 1, - "ga:revenuePerItem": 1, - "ga:cartToDetailRate": 1, - "ga:dbmImpressions": 1, - "ga:domInteractiveTime": 1, - "ga:percentSessionsWithSearch": 1, - "ga:adsenseAdUnitsViewed": 1, - "ga:timeOnScreen": 1, - "ga:dbmConversions": 1, - "ga:goalValueAllPerSearch": 1, - "ga:dfpViewableImpressionsPercent": 1, - "ga:domContentLoadedTime": 1, - "ga:productListClicks": 1, - "ga:uniqueDimensionCombinations": 1, - "ga:uniqueEvents": 1, - "ga:refundAmount": 1, - "ga:searchDepth": 1, - "ga:pageviews": 1, - "ga:goalXXStarts": 1, - "ga:itemRevenue": 1, - "ga:totalPublisherClicks": 1, - "ga:screenviewsPerSession": 1, - "ga:serverConnectionTime": 1, - "ga:searchExits": 1, - "ga:speedMetricsSample": 1, - "ga:backfillViewableImpressionsPercent": 1, - "ga:entranceBounceRate": 1, - "ga:quantityRemovedFromCart": 1, - "ga:transactionsPerSession": 1, - "ga:pageDownloadTime": 1, - "ga:goalValueAll": 1, - "ga:dcmCost": 1, - "ga:totalPublisherImpressions": 1, - "ga:totalValue": 1, - "ga:adsenseAdsViewed": 1, - "ga:eventValue": 1, - "ga:exitRate": 1, - "ga:dfpECPM": 1, - "ga:backfillMonetizedPageviews": 1, - "ga:dbmROAS": 1, - "ga:adxCoverage": 1, - "ga:totalPublisherCoverage": 1, - "ga:dcmFloodlightRevenue": 1, - "ga:uniquePageviews": 1, - "ga:exceptionsPerScreenview": 1, - "ga:totalRefunds": 1, - "ga:itemQuantity": 1, - "ga:avgSearchDuration": 1, - "ga:goalValuePerSession": 1, - "ga:transactionShipping": 1, - "ga:avgSessionDuration": 1, - "ga:backfillECPM": 1, - "ga:domLatencyMetricsSample": 1, - "ga:sessionsWithEvent": 1, - "ga:transactions": 1, - "ga:avgSearchDepth": 1, - "ga:goalConversionRateAll": 1, - "ga:dfpMonetizedPageviews": 1, - "ga:dcmRPC": 1, - "ga:searchSessions": 1, - "ga:productRefunds": 1, - "ga:dcmClicks": 1, - "ga:sessionDuration": 1, - "ga:quantityCheckedOut": 1, - "ga:adxECPM": 1, - "ga:uniqueScreenviews": 1, - "ga:avgUserTimingValue": 1, - "ga:dfpRevenuePer1000Sessions": 1, - "ga:backfillCoverage": 1, - "ga:serverResponseTime": 1, - "ga:totalPublisherViewableImpressionsPercent": 1, - "ga:backfillRevenue": 1, - "ga:dcmCPC": 1, - "ga:userTimingValue": 1, - "ga:dfpCTR": 1, - "ga:adsenseCTR": 1, - "ga:avgServerResponseTime": 1, - "ga:searchExitRate": 1, - "ga:backfillImpressionsPerSession": 1, - "ga:quantityAddedToCart": 1, - "ga:searchDuration": 1, - "ga:backfillImpressions": 1, - "ga:goalXXConversionRate": 1, - "ga:exits": 1, - "ga:adxRevenuePer1000Sessions": 1, - "ga:impressions": 1, - "ga:adsensePageImpressions": 1, - "ga:avgRedirectionTime": 1, - "ga:eventsPerSessionWithEvent": 1, - "ga:pageLoadTime": 1, - "ga:dcmImpressions": 1, - "ga:calcMetric_\u003cNAME\u003e": 1, - "ga:goalAbandonsAll": 1, - "ga:dcmROI": 1, - "ga:productListViews": 1, - "ga:dcmMargin": 1, - "ga:transactionRevenuePerSession": 1, - "ga:userTimingSample": 1, - "ga:adxRevenue": 1, - "ga:totalPublisherCTR": 1 - }, - "per_campaign_shasta_with_local_currency": { - "ga:totalPublisherRevenuePer1000Sessions": 1, - "ga:transactionTax": 1, - "ga:backfillClicks": 1, - "ga:percentNewSessions": 1, - "ga:avgServerConnectionTime": 1, - "ga:productCheckouts": 1, - "ga:newUsers": 1, - "ga:RPC": 1, - "ga:adxMonetizedPageviews": 1, - "ga:avgPageLoadTime": 1, - "ga:backfillCTR": 1, - "ga:isoWeek": 1, - "ga:goalStartsAll": 1, - "ga:avgDomContentLoadedTime": 1, - "ga:domainLookupTime": 1, - "ga:adwordsCreativeID": 1, - "ga:dfpCoverage": 1, - "ga:adCost": 1, - "ga:localRefundAmount": 1, - "ga:goalXXValue": 1, - "ga:sourceMedium": 1, - "ga:uniquePurchases": 1, - "ga:pageLoadSample": 1, - "ga:sessions": 1, - "ga:totalPublisherMonetizedPageviews": 1, - "ga:metricXX": 1, - "ga:adxImpressions": 1, - "ga:adsenseCoverage": 1, - "ga:searchUniques": 1, - "ga:screenviews": 1, - "ga:isTablet": 1, - "ga:productAddsToCart": 1, - "ga:avgScreenviewDuration": 1, - "ga:source": 1, - "ga:percentSearchRefinements": 1, - "ga:dfpImpressions": 1, - "ga:timeOnPage": 1, - "ga:localTransactionShipping": 1, - "ga:bounceRate": 1, - "ga:entrances": 1, - "ga:revenuePerTransaction": 1, - "ga:ROI": 1, - "ga:dcmFloodlightQuantity": 1, - "ga:redirectionTime": 1, - "ga:productRemovesFromCart": 1, - "ga:transactionRevenue": 1, - "ga:adSlot": 1, - "ga:CTR": 1, - "ga:entranceRate": 1, - "ga:buyToDetailRate": 1, - "ga:goalAbandonRateAll": 1, - "ga:adxViewableImpressionsPercent": 1, - "ga:avgSearchResultViews": 1, - "ga:adwordsCampaignID": 1, - "ga:backfillRevenuePer1000Sessions": 1, - "ga:productListCTR": 1, - "ga:avgDomainLookupTime": 1, - "ga:totalPublisherImpressionsPerSession": 1, - "ga:adxClicks": 1, - "ga:pageValue": 1, - "ga:dfpClicks": 1, - "ga:dfpImpressionsPerSession": 1, - "ga:localProductRefundAmount": 1, - "ga:organicSearches": 1, - "ga:isTrueViewVideoAd": 1, - "ga:adsenseECPM": 1, - "ga:adxImpressionsPerSession": 1, - "ga:searchRefinements": 1, - "ga:quantityRefunded": 1, - "ga:nthMonth": 1, - "ga:avgTimeOnPage": 1, - "ga:goalXXAbandonRate": 1, - "ga:adxCTR": 1, - "ga:deviceCategory": 1, - "ga:nthWeek": 1, - "ga:adwordsCustomerID": 1, - "ga:totalPublisherRevenue": 1, - "ga:adClicks": 1, - "ga:adsenseViewableImpressionPercent": 1, - "ga:trafficType": 1, - "ga:itemsPerPurchase": 1, - "ga:productRefundAmount": 1, - "ga:avgDomInteractiveTime": 1, - "ga:goalXXCompletions": 1, - "ga:adsenseRevenue": 1, - "ga:goalXXAbandons": 1, - "ga:ROAS": 1, - "ga:campaign": 1, - "ga:isoYear": 1, - "ga:channelGrouping": 1, - "ga:dfpRevenue": 1, - "ga:adwordsCustomerName": 1, - "ga:keyword": 1, - "ga:pageviewsPerSession": 1, - "ga:dayOfWeek": 1, - "ga:adwordsAdGroupID": 1, - "ga:localItemRevenue": 1, - "ga:searchGoalXXConversionRate": 1, - "ga:goalCompletionsAll": 1, - "ga:productDetailViews": 1, - "ga:adsenseAdsClicks": 1, - "ga:isMobile": 1, - "ga:searchResultViews": 1, - "ga:productRevenuePerPurchase": 1, - "ga:totalPublisherECPM": 1, - "ga:bounces": 1, - "ga:searchGoalConversionRateAll": 1, - "ga:avgPageDownloadTime": 1, - "ga:socialNetwork": 1, - "ga:costPerTransaction": 1, - "ga:revenuePerItem": 1, - "ga:cartToDetailRate": 1, - "ga:adDistributionNetwork": 1, - "ga:domInteractiveTime": 1, - "ga:percentSessionsWithSearch": 1, - "ga:nthHour": 1, - "ga:adsenseAdUnitsViewed": 1, - "ga:timeOnScreen": 1, - "ga:adGroup": 1, - "ga:localTransactionTax": 1, - "ga:week": 1, - "ga:goalValueAllPerSearch": 1, - "ga:hour": 1, - "ga:dfpViewableImpressionsPercent": 1, - "ga:domContentLoadedTime": 1, - "ga:productListClicks": 1, - "ga:uniqueDimensionCombinations": 1, - "ga:uniqueEvents": 1, - "ga:users": 1, - "ga:revenuePerUser": 1, - "ga:refundAmount": 1, - "ga:adKeywordMatchType": 1, - "ga:searchDepth": 1, - "ga:adsenseExits": 1, - "ga:pageviews": 1, - "ga:goalXXStarts": 1, - "ga:itemRevenue": 1, - "ga:nthDay": 1, - "ga:totalPublisherClicks": 1, - "ga:screenviewsPerSession": 1, - "ga:serverConnectionTime": 1, - "ga:searchExits": 1, - "ga:speedMetricsSample": 1, - "ga:backfillViewableImpressionsPercent": 1, - "ga:year": 1, - "ga:sessionsPerUser": 1, - "ga:entranceBounceRate": 1, - "ga:quantityRemovedFromCart": 1, - "ga:transactionsPerSession": 1, - "ga:pageDownloadTime": 1, - "ga:goalValueAll": 1, - "ga:totalPublisherImpressions": 1, - "ga:totalValue": 1, - "ga:adsenseAdsViewed": 1, - "ga:exitRate": 1, - "ga:dfpECPM": 1, - "ga:backfillMonetizedPageviews": 1, - "ga:adxCoverage": 1, - "ga:totalPublisherCoverage": 1, - "ga:dcmFloodlightRevenue": 1, - "ga:uniquePageviews": 1, - "ga:dateHour": 1, - "ga:totalRefunds": 1, - "ga:itemQuantity": 1, - "ga:avgSearchDuration": 1, - "ga:goalValuePerSession": 1, - "ga:transactionsPerUser": 1, - "ga:transactionShipping": 1, - "ga:yearMonth": 1, - "ga:avgSessionDuration": 1, - "ga:backfillECPM": 1, - "ga:domLatencyMetricsSample": 1, - "ga:transactions": 1, - "ga:costPerConversion": 1, - "ga:avgSearchDepth": 1, - "ga:goalConversionRateAll": 1, - "ga:dfpMonetizedPageviews": 1, - "ga:searchSessions": 1, - "ga:productRefunds": 1, - "ga:costPerGoalConversion": 1, - "ga:sessionDuration": 1, - "ga:quantityCheckedOut": 1, - "ga:adxECPM": 1, - "ga:uniqueScreenviews": 1, - "ga:avgUserTimingValue": 1, - "ga:adContent": 1, - "ga:dataSource": 1, - "ga:dfpRevenuePer1000Sessions": 1, - "ga:backfillCoverage": 1, - "ga:serverResponseTime": 1, - "ga:totalPublisherViewableImpressionsPercent": 1, - "ga:backfillRevenue": 1, - "ga:adwordsCriteriaID": 1, - "ga:date": 1, - "ga:userTimingValue": 1, - "ga:day": 1, - "ga:dfpCTR": 1, - "ga:adsenseCTR": 1, - "ga:avgServerResponseTime": 1, - "ga:localTransactionRevenue": 1, - "ga:searchExitRate": 1, - "ga:backfillImpressionsPerSession": 1, - "ga:CPM": 1, - "ga:medium": 1, - "ga:adDestinationUrl": 1, - "ga:quantityAddedToCart": 1, - "ga:currencyCode": 1, - "ga:searchDuration": 1, - "ga:margin": 1, - "ga:backfillImpressions": 1, - "ga:goalXXConversionRate": 1, - "ga:month": 1, - "ga:yearWeek": 1, - "ga:exits": 1, - "ga:CPC": 1, - "ga:adxRevenuePer1000Sessions": 1, - "ga:dayOfWeekName": 1, - "ga:impressions": 1, - "ga:adsensePageImpressions": 1, - "ga:avgRedirectionTime": 1, - "ga:pageLoadTime": 1, - "ga:calcMetric_\u003cNAME\u003e": 1, - "ga:goalAbandonsAll": 1, - "ga:isoYearIsoWeek": 1, - "ga:dimensionXX": 1, - "ga:productListViews": 1, - "ga:transactionRevenuePerSession": 1, - "ga:userTimingSample": 1, - "ga:adxRevenue": 1, - "ga:totalPublisherCTR": 1 - }, - "per_dfa_floodlight_model": { - "ga:metroId": 1, - "ga:percentNewSessions": 1, - "ga:week": 1, - "ga:dbmConversions": 1, - "ga:newUsers": 1, - "ga:hour": 1, - "ga:flashVersion": 1, - "ga:isoWeek": 1, - "ga:internalPromotionId": 1, - "ga:goalStartsAll": 1, - "ga:networkLocation": 1, - "ga:goalXXValue": 1, - "ga:refundAmount": 1, - "ga:subContinent": 1, - "ga:sessions": 1, - "ga:metricXX": 1, - "ga:screenResolution": 1, - "ga:isTablet": 1, - "ga:pageviews": 1, - "ga:goalXXStarts": 1, - "ga:networkDomain": 1, - "ga:bounceRate": 1, - "ga:nthDay": 1, - "ga:revenuePerTransaction": 1, - "ga:dcmFloodlightQuantity": 1, - "ga:browserSize": 1, - "ga:dbmCPA": 1, - "ga:dbmCPC": 1, - "ga:dcmFloodlightActivityGroupId": 1, - "ga:year": 1, - "ga:internalPromotionCreative": 1, - "ga:transactionRevenue": 1, - "ga:dbmCPM": 1, - "ga:goalAbandonRateAll": 1, - "ga:transactionsPerSession": 1, - "ga:dcmCTR": 1, - "ga:dcmFloodlightActivityAndGroup": 1, - "ga:country": 1, - "ga:goalValueAll": 1, - "ga:dcmCost": 1, - "ga:totalValue": 1, - "ga:browserVersion": 1, - "ga:dbmROAS": 1, - "ga:internalPromotionName": 1, - "ga:cityId": 1, - "ga:operatingSystemVersion": 1, - "ga:dcmFloodlightRevenue": 1, - "ga:dateHour": 1, - "ga:dcmFloodlightSpotId": 1, - "ga:totalRefunds": 1, - "ga:goalValuePerSession": 1, - "ga:dcmFloodlightActivity": 1, - "ga:metro": 1, - "ga:latitude": 1, - "ga:nthMonth": 1, - "ga:yearMonth": 1, - "ga:avgSessionDuration": 1, - "ga:city": 1, - "ga:goalXXAbandonRate": 1, - "ga:deviceCategory": 1, - "ga:continentId": 1, - "ga:transactions": 1, - "ga:countryIsoCode": 1, - "ga:goalConversionRateAll": 1, - "ga:nthWeek": 1, - "ga:dcmRPC": 1, - "ga:dcmFloodlightActivityId": 1, - "ga:dcmFloodlightActivityGroup": 1, - "ga:dcmClicks": 1, - "ga:sessionDuration": 1, - "ga:goalXXCompletions": 1, - "ga:continent": 1, - "ga:goalXXAbandons": 1, - "ga:isoYear": 1, - "ga:dbmCost": 1, - "ga:dataSource": 1, - "ga:pageviewsPerSession": 1, - "ga:dayOfWeek": 1, - "ga:subContinentCode": 1, - "ga:date": 1, - "ga:dcmCPC": 1, - "ga:screenColors": 1, - "ga:operatingSystem": 1, - "ga:day": 1, - "ga:goalCompletionsAll": 1, - "ga:dbmCTR": 1, - "ga:javaEnabled": 1, - "ga:language": 1, - "ga:region": 1, - "ga:dcmROAS": 1, - "ga:isMobile": 1, - "ga:goalXXConversionRate": 1, - "ga:month": 1, - "ga:yearWeek": 1, - "ga:internalPromotionPosition": 1, - "ga:bounces": 1, - "ga:dayOfWeekName": 1, - "ga:dbmClicks": 1, - "ga:dcmImpressions": 1, - "ga:regionIsoCode": 1, - "ga:calcMetric_\u003cNAME\u003e": 1, - "ga:goalAbandonsAll": 1, - "ga:isoYearIsoWeek": 1, - "ga:dimensionXX": 1, - "ga:dcmROI": 1, - "ga:dcmMargin": 1, - "ga:dcmFloodlightAdvertiserId": 1, - "ga:browser": 1, - "ga:transactionRevenuePerSession": 1, - "ga:dbmImpressions": 1, - "ga:longitude": 1, - "ga:regionId": 1, - "ga:nthHour": 1 - }, - "per_product_with_local_currency": { - "ga:metroId": 1, - "ga:week": 1, - "ga:productCheckouts": 1, - "ga:dcmClickCampaign": 1, - "ga:dcmClickSite": 1, - "ga:eventAction": 1, - "ga:dbmClickAdvertiserId": 1, - "ga:hour": 1, - "ga:dbmClickLineItemId": 1, - "ga:dbmClickCreativeName": 1, - "ga:dsAdvertiserId": 1, - "ga:productListClicks": 1, - "ga:flashVersion": 1, - "ga:dcmClickSitePlacementId": 1, - "ga:isoWeek": 1, - "ga:internalPromotionId": 1, - "ga:dsEngineAccount": 1, - "ga:productSku": 1, - "ga:networkLocation": 1, - "ga:sourceMedium": 1, - "ga:dcmClickRenderingId": 1, - "ga:uniquePurchases": 1, - "ga:productListPosition": 1, - "ga:subContinent": 1, - "ga:dbmClickSite": 1, - "ga:metricXX": 1, - "ga:dcmClickSpotId": 1, - "ga:screenResolution": 1, - "ga:isTablet": 1, - "ga:productAddsToCart": 1, - "ga:socialActivityContentUrl": 1, - "ga:source": 1, - "ga:userType": 1, - "ga:dsAdGroup": 1, - "ga:networkDomain": 1, - "ga:dcmClickCreative": 1, - "ga:transactionId": 1, - "ga:sessionCount": 1, - "ga:itemRevenue": 1, - "ga:nthDay": 1, - "ga:dcmClickCreativeId": 1, - "ga:productVariant": 1, - "ga:dcmClickSiteId": 1, - "ga:dbmClickSiteId": 1, - "ga:screenName": 1, - "ga:dcmClickCreativeVersion": 1, - "ga:browserSize": 1, - "ga:productRemovesFromCart": 1, - "ga:dcmFloodlightActivityGroupId": 1, - "ga:year": 1, - "ga:internalPromotionCreative": 1, - "ga:productName": 1, - "ga:quantityRemovedFromCart": 1, - "ga:eventCategory": 1, - "ga:buyToDetailRate": 1, - "ga:dcmClickAdvertiserId": 1, - "ga:dcmFloodlightActivityAndGroup": 1, - "ga:country": 1, - "ga:userGender": 1, - "ga:pagePath": 1, - "ga:productListCTR": 1, - "ga:dcmClickCampaignId": 1, - "ga:dbmClickInsertionOrder": 1, - "ga:dsAdGroupId": 1, - "ga:hasSocialSourceReferral": 1, - "ga:browserVersion": 1, - "ga:dcmClickCreativeType": 1, - "ga:internalPromotionName": 1, - "ga:dbmClickLineItem": 1, - "ga:cityId": 1, - "ga:eventLabel": 1, - "ga:operatingSystemVersion": 1, - "ga:localProductRefundAmount": 1, - "ga:sessionDurationBucket": 1, - "ga:landingScreenName": 1, - "ga:dateHour": 1, - "ga:dbmClickAdvertiser": 1, - "ga:dcmFloodlightSpotId": 1, - "ga:itemQuantity": 1, - "ga:searchKeyword": 1, - "ga:dcmFloodlightActivity": 1, - "ga:dsAdvertiser": 1, - "ga:dcmClickAdType": 1, - "ga:metro": 1, - "ga:quantityRefunded": 1, - "ga:latitude": 1, - "ga:nthMonth": 1, - "ga:yearMonth": 1, - "ga:city": 1, - "ga:continentId": 1, - "ga:deviceCategory": 1, - "ga:countryIsoCode": 1, - "ga:dcmClickSitePlacement": 1, - "ga:dbmClickCreativeId": 1, - "ga:dsAgency": 1, - "ga:nthWeek": 1, - "ga:dsCampaign": 1, - "ga:interestInMarketCategory": 1, - "ga:clientId": 1, - "ga:userAgeBracket": 1, - "ga:productCategoryHierarchy": 1, - "ga:dcmFloodlightActivityId": 1, - "ga:productRefunds": 1, - "ga:dcmFloodlightActivityGroup": 1, - "ga:dcmClickAdvertiser": 1, - "ga:productBrand": 1, - "ga:itemsPerPurchase": 1, - "ga:productRefundAmount": 1, - "ga:hostname": 1, - "ga:quantityCheckedOut": 1, - "ga:continent": 1, - "ga:interestOtherCategory": 1, - "ga:adContent": 1, - "ga:campaign": 1, - "ga:isoYear": 1, - "ga:landingPagePath": 1, - "ga:dataSource": 1, - "ga:productListName": 1, - "ga:channelGrouping": 1, - "ga:dsCampaignId": 1, - "ga:pageTitle": 1, - "ga:keyword": 1, - "ga:userDefinedValue": 1, - "ga:dsEngineAccountId": 1, - "ga:dayOfWeek": 1, - "ga:productCategoryLevel1": 1, - "ga:localItemRevenue": 1, - "ga:productCategoryLevel2": 1, - "ga:subContinentCode": 1, - "ga:productCategoryLevel5": 1, - "ga:date": 1, - "ga:productCategoryLevel3": 1, - "ga:screenColors": 1, - "ga:productCategoryLevel4": 1, - "ga:operatingSystem": 1, - "ga:day": 1, - "ga:dbmClickExchange": 1, - "ga:productDetailViews": 1, - "ga:dcmClickCreativeTypeId": 1, - "ga:javaEnabled": 1, - "ga:language": 1, - "ga:medium": 1, - "ga:region": 1, - "ga:quantityAddedToCart": 1, - "ga:currencyCode": 1, - "ga:isMobile": 1, - "ga:dcmClickAdId": 1, - "ga:exitScreenName": 1, - "ga:dcmClickAd": 1, - "ga:productRevenuePerPurchase": 1, - "ga:month": 1, - "ga:yearWeek": 1, - "ga:internalPromotionPosition": 1, - "ga:dsAgencyId": 1, - "ga:dayOfWeekName": 1, - "ga:socialNetwork": 1, - "ga:dbmClickExchangeId": 1, - "ga:regionIsoCode": 1, - "ga:dsKeyword": 1, - "ga:isoYearIsoWeek": 1, - "ga:dimensionXX": 1, - "ga:productListViews": 1, - "ga:revenuePerItem": 1, - "ga:cartToDetailRate": 1, - "ga:dcmFloodlightAdvertiserId": 1, - "ga:browser": 1, - "ga:userBucket": 1, - "ga:interestAffinityCategory": 1, - "ga:dsKeywordId": 1, - "ga:productCouponCode": 1, - "ga:longitude": 1, - "ga:dcmClickAdTypeId": 1, - "ga:regionId": 1, - "ga:nthHour": 1, - "ga:dbmClickInsertionOrderId": 1 - }, - "smart_goals": { - "ga:referralPath": 1, - "ga:adGroup": 1, - "ga:metroId": 1, - "ga:percentNewSessions": 1, - "ga:week": 1, - "ga:newUsers": 1, - "ga:goalValueAllPerSearch": 1, - "ga:hour": 1, - "ga:flashVersion": 1, - "ga:goalStartsAll": 1, - "ga:adwordsCreativeID": 1, - "ga:networkLocation": 1, - "ga:goalXXValue": 1, - "ga:sourceMedium": 1, - "ga:adKeywordMatchType": 1, - "ga:searchDepth": 1, - "ga:subContinent": 1, - "ga:sessions": 1, - "ga:screenResolution": 1, - "ga:searchUniques": 1, - "ga:isTablet": 1, - "ga:pageviews": 1, - "ga:source": 1, - "ga:percentSearchRefinements": 1, - "ga:goalXXStarts": 1, - "ga:networkDomain": 1, - "ga:timeOnPage": 1, - "ga:bounceRate": 1, - "ga:nthDay": 1, - "ga:entrances": 1, - "ga:revenuePerTransaction": 1, - "ga:searchExits": 1, - "ga:browserSize": 1, - "ga:year": 1, - "ga:transactionRevenue": 1, - "ga:entranceBounceRate": 1, - "ga:adSlot": 1, - "ga:entranceRate": 1, - "ga:transactionsPerSession": 1, - "ga:goalAbandonRateAll": 1, - "ga:country": 1, - "ga:goalValueAll": 1, - "ga:avgSearchResultViews": 1, - "ga:adwordsCampaignID": 1, - "ga:totalValue": 1, - "ga:browserVersion": 1, - "ga:cityId": 1, - "ga:operatingSystemVersion": 1, - "ga:uniquePageviews": 1, - "ga:dateHour": 1, - "ga:avgSearchDuration": 1, - "ga:goalValuePerSession": 1, - "ga:searchRefinements": 1, - "ga:metro": 1, - "ga:nthMonth": 1, - "ga:latitude": 1, - "ga:yearMonth": 1, - "ga:avgSessionDuration": 1, - "ga:city": 1, - "ga:avgTimeOnPage": 1, - "ga:goalXXAbandonRate": 1, - "ga:continentId": 1, - "ga:deviceCategory": 1, - "ga:transactions": 1, - "ga:countryIsoCode": 1, - "ga:goalConversionRateAll": 1, - "ga:avgSearchDepth": 1, - "ga:nthWeek": 1, - "ga:adwordsCustomerID": 1, - "ga:searchSessions": 1, - "ga:trafficType": 1, - "ga:sessionDuration": 1, - "ga:goalXXCompletions": 1, - "ga:continent": 1, - "ga:adContent": 1, - "ga:goalXXAbandons": 1, - "ga:campaign": 1, - "ga:dataSource": 1, - "ga:channelGrouping": 1, - "ga:keyword": 1, - "ga:adwordsCustomerName": 1, - "ga:pageviewsPerSession": 1, - "ga:dayOfWeek": 1, - "ga:adwordsAdGroupID": 1, - "ga:subContinentCode": 1, - "ga:searchGoalXXConversionRate": 1, - "ga:adwordsCriteriaID": 1, - "ga:date": 1, - "ga:screenColors": 1, - "ga:operatingSystem": 1, - "ga:day": 1, - "ga:goalCompletionsAll": 1, - "ga:searchExitRate": 1, - "ga:javaEnabled": 1, - "ga:language": 1, - "ga:medium": 1, - "ga:adDestinationUrl": 1, - "ga:region": 1, - "ga:isMobile": 1, - "ga:searchDuration": 1, - "ga:searchResultViews": 1, - "ga:goalXXConversionRate": 1, - "ga:month": 1, - "ga:yearWeek": 1, - "ga:exits": 1, - "ga:bounces": 1, - "ga:dayOfWeekName": 1, - "ga:searchGoalConversionRateAll": 1, - "ga:regionIsoCode": 1, - "ga:calcMetric_\u003cNAME\u003e": 1, - "ga:goalAbandonsAll": 1, - "ga:browser": 1, - "ga:transactionRevenuePerSession": 1, - "ga:adDistributionNetwork": 1, - "ga:percentSessionsWithSearch": 1, - "ga:longitude": 1, - "ga:nthHour": 1, - "ga:regionId": 1 - }, - "per_active_visitors_nthday_active_visitors_28": { - "ga:totalPublisherRevenuePer1000Sessions": 1, - "ga:transactionTax": 1, - "ga:backfillClicks": 1, - "ga:percentNewSessions": 1, - "ga:avgServerConnectionTime": 1, - "ga:productCheckouts": 1, - "ga:28dayUsers": 1, - "ga:newUsers": 1, - "ga:RPC": 1, - "ga:adxMonetizedPageviews": 1, - "ga:avgPageLoadTime": 1, - "ga:backfillCTR": 1, - "ga:goalStartsAll": 1, - "ga:avgDomContentLoadedTime": 1, - "ga:domainLookupTime": 1, - "ga:dfpCoverage": 1, - "ga:goalXXValue": 1, - "ga:uniquePurchases": 1, - "ga:pageLoadSample": 1, - "ga:sessions": 1, - "ga:totalPublisherMonetizedPageviews": 1, - "ga:exceptions": 1, - "ga:metricXX": 1, - "ga:adxImpressions": 1, - "ga:adsenseCoverage": 1, - "ga:searchUniques": 1, - "ga:screenviews": 1, - "ga:productAddsToCart": 1, - "ga:avgScreenviewDuration": 1, - "ga:percentSearchRefinements": 1, - "ga:dfpImpressions": 1, - "ga:timeOnPage": 1, - "ga:bounceRate": 1, - "ga:entrances": 1, - "ga:revenuePerTransaction": 1, - "ga:dcmFloodlightQuantity": 1, - "ga:redirectionTime": 1, - "ga:productRemovesFromCart": 1, - "ga:dbmCPA": 1, - "ga:dbmCPC": 1, - "ga:transactionRevenue": 1, - "ga:dbmCPM": 1, - "ga:CTR": 1, - "ga:entranceRate": 1, - "ga:buyToDetailRate": 1, - "ga:goalAbandonRateAll": 1, - "ga:avgEventValue": 1, - "ga:dcmCTR": 1, - "ga:adxViewableImpressionsPercent": 1, - "ga:socialInteractionsPerSession": 1, - "ga:fatalExceptionsPerScreenview": 1, - "ga:avgSearchResultViews": 1, - "ga:backfillRevenuePer1000Sessions": 1, - "ga:productListCTR": 1, - "ga:avgDomainLookupTime": 1, - "ga:hits": 1, - "ga:totalPublisherImpressionsPerSession": 1, - "ga:adxClicks": 1, - "ga:pageValue": 1, - "ga:dfpClicks": 1, - "ga:dfpImpressionsPerSession": 1, - "ga:organicSearches": 1, - "ga:adsenseECPM": 1, - "ga:adxImpressionsPerSession": 1, - "ga:searchRefinements": 1, - "ga:quantityRefunded": 1, - "ga:avgTimeOnPage": 1, - "ga:goalXXAbandonRate": 1, - "ga:adxCTR": 1, - "ga:totalPublisherRevenue": 1, - "ga:adClicks": 1, - "ga:adsenseViewableImpressionPercent": 1, - "ga:uniqueSocialInteractions": 1, - "ga:totalEvents": 1, - "ga:itemsPerPurchase": 1, - "ga:productRefundAmount": 1, - "ga:avgDomInteractiveTime": 1, - "ga:goalXXCompletions": 1, - "ga:adsenseRevenue": 1, - "ga:goalXXAbandons": 1, - "ga:dbmCost": 1, - "ga:dfpRevenue": 1, - "ga:pageviewsPerSession": 1, - "ga:fatalExceptions": 1, - "ga:searchGoalXXConversionRate": 1, - "ga:goalCompletionsAll": 1, - "ga:productDetailViews": 1, - "ga:dbmCTR": 1, - "ga:adsenseAdsClicks": 1, - "ga:socialInteractions": 1, - "ga:dcmROAS": 1, - "ga:searchResultViews": 1, - "ga:productRevenuePerPurchase": 1, - "ga:totalPublisherECPM": 1, - "ga:bounces": 1, - "ga:dbmClicks": 1, - "ga:searchGoalConversionRateAll": 1, - "ga:avgPageDownloadTime": 1, - "ga:revenuePerItem": 1, - "ga:cartToDetailRate": 1, - "ga:dbmImpressions": 1, - "ga:domInteractiveTime": 1, - "ga:percentSessionsWithSearch": 1, - "ga:adsenseAdUnitsViewed": 1, - "ga:timeOnScreen": 1, - "ga:dbmConversions": 1, - "ga:goalValueAllPerSearch": 1, - "ga:dfpViewableImpressionsPercent": 1, - "ga:domContentLoadedTime": 1, - "ga:productListClicks": 1, - "ga:uniqueDimensionCombinations": 1, - "ga:uniqueEvents": 1, - "ga:refundAmount": 1, - "ga:searchDepth": 1, - "ga:pageviews": 1, - "ga:goalXXStarts": 1, - "ga:itemRevenue": 1, - "ga:nthDay": 1, - "ga:totalPublisherClicks": 1, - "ga:screenviewsPerSession": 1, - "ga:serverConnectionTime": 1, - "ga:searchExits": 1, - "ga:speedMetricsSample": 1, - "ga:backfillViewableImpressionsPercent": 1, - "ga:entranceBounceRate": 1, - "ga:quantityRemovedFromCart": 1, - "ga:transactionsPerSession": 1, - "ga:pageDownloadTime": 1, - "ga:goalValueAll": 1, - "ga:dcmCost": 1, - "ga:totalPublisherImpressions": 1, - "ga:totalValue": 1, - "ga:adsenseAdsViewed": 1, - "ga:eventValue": 1, - "ga:exitRate": 1, - "ga:dfpECPM": 1, - "ga:backfillMonetizedPageviews": 1, - "ga:dbmROAS": 1, - "ga:adxCoverage": 1, - "ga:totalPublisherCoverage": 1, - "ga:dcmFloodlightRevenue": 1, - "ga:uniquePageviews": 1, - "ga:exceptionsPerScreenview": 1, - "ga:totalRefunds": 1, - "ga:itemQuantity": 1, - "ga:avgSearchDuration": 1, - "ga:goalValuePerSession": 1, - "ga:transactionShipping": 1, - "ga:avgSessionDuration": 1, - "ga:backfillECPM": 1, - "ga:domLatencyMetricsSample": 1, - "ga:sessionsWithEvent": 1, - "ga:transactions": 1, - "ga:avgSearchDepth": 1, - "ga:goalConversionRateAll": 1, - "ga:dfpMonetizedPageviews": 1, - "ga:dcmRPC": 1, - "ga:searchSessions": 1, - "ga:productRefunds": 1, - "ga:dcmClicks": 1, - "ga:sessionDuration": 1, - "ga:quantityCheckedOut": 1, - "ga:adxECPM": 1, - "ga:uniqueScreenviews": 1, - "ga:avgUserTimingValue": 1, - "ga:dfpRevenuePer1000Sessions": 1, - "ga:backfillCoverage": 1, - "ga:serverResponseTime": 1, - "ga:totalPublisherViewableImpressionsPercent": 1, - "ga:backfillRevenue": 1, - "ga:date": 1, - "ga:dcmCPC": 1, - "ga:userTimingValue": 1, - "ga:day": 1, - "ga:dfpCTR": 1, - "ga:adsenseCTR": 1, - "ga:avgServerResponseTime": 1, - "ga:searchExitRate": 1, - "ga:backfillImpressionsPerSession": 1, - "ga:quantityAddedToCart": 1, - "ga:searchDuration": 1, - "ga:backfillImpressions": 1, - "ga:goalXXConversionRate": 1, - "ga:exits": 1, - "ga:adxRevenuePer1000Sessions": 1, - "ga:impressions": 1, - "ga:adsensePageImpressions": 1, - "ga:avgRedirectionTime": 1, - "ga:eventsPerSessionWithEvent": 1, - "ga:pageLoadTime": 1, - "ga:dcmImpressions": 1, - "ga:calcMetric_\u003cNAME\u003e": 1, - "ga:goalAbandonsAll": 1, - "ga:dcmROI": 1, - "ga:productListViews": 1, - "ga:dcmMargin": 1, - "ga:transactionRevenuePerSession": 1, - "ga:userTimingSample": 1, - "ga:adxRevenue": 1, - "ga:totalPublisherCTR": 1 - }, - "gwo_bandit_metrics": { - "ga:totalPublisherRevenuePer1000Sessions": 1, - "ga:experimentCombination": 1, - "ga:percentNewSessions": 1, - "ga:backfillClicks": 1, - "ga:newUsers": 1, - "ga:goalValueAllPerSearch": 1, - "ga:adxMonetizedPageviews": 1, - "ga:dfpViewableImpressionsPercent": 1, - "ga:backfillCTR": 1, - "ga:goalStartsAll": 1, - "ga:dfpCoverage": 1, - "ga:goalXXValue": 1, - "ga:refundAmount": 1, - "ga:experimentName": 1, - "ga:searchDepth": 1, - "ga:adsenseExits": 1, - "ga:totalPublisherMonetizedPageviews": 1, - "ga:sessions": 1, - "ga:exceptions": 1, - "ga:adxImpressions": 1, - "ga:adsenseCoverage": 1, - "ga:searchUniques": 1, - "ga:screenviews": 1, - "ga:pageviews": 1, - "ga:percentSearchRefinements": 1, - "ga:goalXXStarts": 1, - "ga:experimentOutcomeType": 1, - "ga:dfpImpressions": 1, - "ga:timeOnPage": 1, - "ga:bounceRate": 1, - "ga:entrances": 1, - "ga:totalPublisherClicks": 1, - "ga:revenuePerTransaction": 1, - "ga:screenviewsPerSession": 1, - "ga:searchExits": 1, - "ga:dcmFloodlightQuantity": 1, - "ga:backfillViewableImpressionsPercent": 1, - "ga:transactionRevenue": 1, - "ga:entranceBounceRate": 1, - "ga:entranceRate": 1, - "ga:experimentOutcomes": 1, - "ga:goalAbandonRateAll": 1, - "ga:transactionsPerSession": 1, - "ga:adxViewableImpressionsPercent": 1, - "ga:goalValueAll": 1, - "ga:fatalExceptionsPerScreenview": 1, - "ga:avgSearchResultViews": 1, - "ga:backfillRevenuePer1000Sessions": 1, - "ga:totalPublisherImpressions": 1, - "ga:totalValue": 1, - "ga:adsenseAdsViewed": 1, - "ga:totalPublisherImpressionsPerSession": 1, - "ga:adxClicks": 1, - "ga:exitRate": 1, - "ga:dfpECPM": 1, - "ga:backfillMonetizedPageviews": 1, - "ga:dfpClicks": 1, - "ga:dfpImpressionsPerSession": 1, - "ga:adxCoverage": 1, - "ga:totalPublisherCoverage": 1, - "ga:dcmFloodlightRevenue": 1, - "ga:uniquePageviews": 1, - "ga:exceptionsPerScreenview": 1, - "ga:experimentId": 1, - "ga:totalRefunds": 1, - "ga:avgSearchDuration": 1, - "ga:adsenseECPM": 1, - "ga:goalValuePerSession": 1, - "ga:adxImpressionsPerSession": 1, - "ga:searchRefinements": 1, - "ga:avgSessionDuration": 1, - "ga:backfillECPM": 1, - "ga:avgTimeOnPage": 1, - "ga:adxCTR": 1, - "ga:goalXXAbandonRate": 1, - "ga:transactions": 1, - "ga:avgSearchDepth": 1, - "ga:goalConversionRateAll": 1, - "ga:dfpMonetizedPageviews": 1, - "ga:totalPublisherRevenue": 1, - "ga:searchSessions": 1, - "ga:adsenseViewableImpressionPercent": 1, - "ga:sessionDuration": 1, - "ga:adxECPM": 1, - "ga:experimentStarts": 1, - "ga:adsenseRevenue": 1, - "ga:goalXXCompletions": 1, - "ga:goalXXAbandons": 1, - "ga:dfpRevenuePer1000Sessions": 1, - "ga:backfillCoverage": 1, - "ga:dfpRevenue": 1, - "ga:pageviewsPerSession": 1, - "ga:totalPublisherViewableImpressionsPercent": 1, - "ga:fatalExceptions": 1, - "ga:backfillRevenue": 1, - "ga:searchGoalXXConversionRate": 1, - "ga:dfpCTR": 1, - "ga:adsenseCTR": 1, - "ga:goalCompletionsAll": 1, - "ga:searchExitRate": 1, - "ga:adsenseAdsClicks": 1, - "ga:backfillImpressionsPerSession": 1, - "ga:experimentVariant": 1, - "ga:searchDuration": 1, - "ga:searchResultViews": 1, - "ga:backfillImpressions": 1, - "ga:goalXXConversionRate": 1, - "ga:totalPublisherECPM": 1, - "ga:exits": 1, - "ga:bounces": 1, - "ga:adxRevenuePer1000Sessions": 1, - "ga:adsensePageImpressions": 1, - "ga:searchGoalConversionRateAll": 1, - "ga:calcMetric_\u003cNAME\u003e": 1, - "ga:goalAbandonsAll": 1, - "ga:transactionRevenuePerSession": 1, - "ga:percentSessionsWithSearch": 1, - "ga:adsenseAdUnitsViewed": 1, - "ga:adxRevenue": 1, - "ga:totalPublisherCTR": 1 - }, - "Cube:analytics/per_value_site_search_without_transaction_product_dimensions": { - "ga:totalPublisherRevenuePer1000Sessions": 1, - "ga:referralPath": 1, - "ga:transactionTax": 1, - "ga:metroId": 1, - "ga:backfillClicks": 1, - "ga:percentNewSessions": 1, - "ga:productCheckouts": 1, - "ga:newUsers": 1, - "ga:dcmClickSite": 1, - "ga:dbmClickLineItemId": 1, - "ga:adxMonetizedPageviews": 1, - "ga:dsAdvertiserId": 1, - "ga:flashVersion": 1, - "ga:backfillCTR": 1, - "ga:isoWeek": 1, - "ga:internalPromotionId": 1, - "ga:searchDestinationPage": 1, - "ga:goalStartsAll": 1, - "ga:dsEngineAccount": 1, - "ga:adwordsCreativeID": 1, - "ga:sessionsToTransaction": 1, - "ga:networkLocation": 1, - "ga:dfpCoverage": 1, - "ga:goalXXValue": 1, - "ga:sourceMedium": 1, - "ga:uniquePurchases": 1, - "ga:pageDepth": 1, - "ga:landingContentGroup4": 1, - "ga:landingContentGroup3": 1, - "ga:sessions": 1, - "ga:totalPublisherMonetizedPageviews": 1, - "ga:landingContentGroup2": 1, - "ga:landingContentGroup1": 1, - "ga:previousPagePath": 1, - "ga:dbmClickSite": 1, - "ga:metricXX": 1, - "ga:adxImpressions": 1, - "ga:dcmClickSpotId": 1, - "ga:landingContentGroup5": 1, - "ga:adsenseCoverage": 1, - "ga:screenResolution": 1, - "ga:searchUniques": 1, - "ga:screenviews": 1, - "ga:isTablet": 1, - "ga:productAddsToCart": 1, - "ga:avgScreenviewDuration": 1, - "ga:source": 1, - "ga:percentSearchRefinements": 1, - "ga:dsAdGroup": 1, - "ga:networkDomain": 1, - "ga:dfpImpressions": 1, - "ga:timeOnPage": 1, - "ga:bounceRate": 1, - "ga:entrances": 1, - "ga:revenuePerTransaction": 1, - "ga:dcmClickCreativeId": 1, - "ga:dcmFloodlightQuantity": 1, - "ga:screenName": 1, - "ga:productRemovesFromCart": 1, - "ga:internalPromotionCreative": 1, - "ga:transactionRevenue": 1, - "ga:adSlot": 1, - "ga:secondPagePath": 1, - "ga:entranceRate": 1, - "ga:buyToDetailRate": 1, - "ga:goalAbandonRateAll": 1, - "ga:searchUsed": 1, - "ga:avgEventValue": 1, - "ga:adxViewableImpressionsPercent": 1, - "ga:socialInteractionsPerSession": 1, - "ga:avgSearchResultViews": 1, - "ga:adwordsCampaignID": 1, - "ga:backfillRevenuePer1000Sessions": 1, - "ga:productListCTR": 1, - "ga:dbmClickInsertionOrder": 1, - "ga:socialInteractionNetworkAction": 1, - "ga:hits": 1, - "ga:totalPublisherImpressionsPerSession": 1, - "ga:adxClicks": 1, - "ga:dcmClickCreativeType": 1, - "ga:pageValue": 1, - "ga:dfpClicks": 1, - "ga:internalPromotionName": 1, - "ga:dbmClickLineItem": 1, - "ga:dfpImpressionsPerSession": 1, - "ga:cityId": 1, - "ga:organicSearches": 1, - "ga:searchKeywordRefinement": 1, - "ga:landingScreenName": 1, - "ga:dbmClickAdvertiser": 1, - "ga:dcmFloodlightSpotId": 1, - "ga:previousContentGroup1": 1, - "ga:searchKeyword": 1, - "ga:previousContentGroup2": 1, - "ga:adsenseECPM": 1, - "ga:previousContentGroup3": 1, - "ga:adxImpressionsPerSession": 1, - "ga:previousContentGroup4": 1, - "ga:searchRefinements": 1, - "ga:dcmFloodlightActivity": 1, - "ga:appName": 1, - "ga:dsAdvertiser": 1, - "ga:quantityRefunded": 1, - "ga:latitude": 1, - "ga:nthMonth": 1, - "ga:previousContentGroup5": 1, - "ga:avgTimeOnPage": 1, - "ga:sourcePropertyTrackingId": 1, - "ga:goalXXAbandonRate": 1, - "ga:adxCTR": 1, - "ga:continentId": 1, - "ga:deviceCategory": 1, - "ga:dcmClickSitePlacement": 1, - "ga:dbmClickCreativeId": 1, - "ga:nthWeek": 1, - "ga:dsCampaign": 1, - "ga:interestInMarketCategory": 1, - "ga:adMatchType": 1, - "ga:adwordsCustomerID": 1, - "ga:totalPublisherRevenue": 1, - "ga:userAgeBracket": 1, - "ga:adsenseViewableImpressionPercent": 1, - "ga:uniqueSocialInteractions": 1, - "ga:totalEvents": 1, - "ga:dcmFloodlightActivityGroup": 1, - "ga:trafficType": 1, - "ga:itemsPerPurchase": 1, - "ga:productRefundAmount": 1, - "ga:goalXXCompletions": 1, - "ga:adsenseRevenue": 1, - "ga:continent": 1, - "ga:goalXXAbandons": 1, - "ga:campaign": 1, - "ga:isoYear": 1, - "ga:customVarValueXX": 1, - "ga:landingPagePath": 1, - "ga:channelGrouping": 1, - "ga:searchCategory": 1, - "ga:dfpRevenue": 1, - "ga:adwordsCustomerName": 1, - "ga:dsCampaignId": 1, - "ga:mobileDeviceInfo": 1, - "ga:keyword": 1, - "ga:pageviewsPerSession": 1, - "ga:dayOfWeek": 1, - "ga:adwordsAdGroupID": 1, - "ga:orderCouponCode": 1, - "ga:searchGoalXXConversionRate": 1, - "ga:socialInteractionAction": 1, - "ga:dbmClickExchange": 1, - "ga:socialInteractionNetwork": 1, - "ga:goalCompletionsAll": 1, - "ga:productDetailViews": 1, - "ga:dcmClickCreativeTypeId": 1, - "ga:language": 1, - "ga:adsenseAdsClicks": 1, - "ga:searchAfterDestinationPage": 1, - "ga:affiliation": 1, - "ga:socialInteractions": 1, - "ga:isMobile": 1, - "ga:searchResultViews": 1, - "ga:exitScreenName": 1, - "ga:productRevenuePerPurchase": 1, - "ga:totalPublisherECPM": 1, - "ga:internalPromotionPosition": 1, - "ga:bounces": 1, - "ga:searchGoalConversionRateAll": 1, - "ga:socialNetwork": 1, - "ga:dbmClickExchangeId": 1, - "ga:dsKeyword": 1, - "ga:revenuePerItem": 1, - "ga:cartToDetailRate": 1, - "ga:adDistributionNetwork": 1, - "ga:userBucket": 1, - "ga:socialEngagementType": 1, - "ga:dsKeywordId": 1, - "ga:percentSessionsWithSearch": 1, - "ga:longitude": 1, - "ga:dcmClickAdTypeId": 1, - "ga:nthHour": 1, - "ga:adsenseAdUnitsViewed": 1, - "ga:mobileInputSelector": 1, - "ga:timeOnScreen": 1, - "ga:shoppingStage": 1, - "ga:adGroup": 1, - "ga:week": 1, - "ga:dcmClickCampaign": 1, - "ga:sourcePropertyDisplayName": 1, - "ga:goalValueAllPerSearch": 1, - "ga:dbmClickAdvertiserId": 1, - "ga:hour": 1, - "ga:adQueryWordCount": 1, - "ga:dfpViewableImpressionsPercent": 1, - "ga:daysToTransaction": 1, - "ga:dbmClickCreativeName": 1, - "ga:searchStartPage": 1, - "ga:productListClicks": 1, - "ga:nextPagePath": 1, - "ga:dcmClickSitePlacementId": 1, - "ga:uniqueDimensionCombinations": 1, - "ga:adTargetingType": 1, - "ga:screenDepth": 1, - "ga:uniqueEvents": 1, - "ga:users": 1, - "ga:appInstallerId": 1, - "ga:revenuePerUser": 1, - "ga:refundAmount": 1, - "ga:dcmClickRenderingId": 1, - "ga:adKeywordMatchType": 1, - "ga:searchDepth": 1, - "ga:subContinent": 1, - "ga:adsenseExits": 1, - "ga:appId": 1, - "ga:checkoutOptions": 1, - "ga:internalPromotionCTR": 1, - "ga:daysSinceLastSession": 1, - "ga:pageviews": 1, - "ga:goalXXStarts": 1, - "ga:userType": 1, - "ga:dcmClickCreative": 1, - "ga:transactionId": 1, - "ga:sessionCount": 1, - "ga:itemRevenue": 1, - "ga:nthDay": 1, - "ga:totalPublisherClicks": 1, - "ga:screenviewsPerSession": 1, - "ga:searchExits": 1, - "ga:dcmClickSiteId": 1, - "ga:externalActivityId": 1, - "ga:dbmClickSiteId": 1, - "ga:dcmClickCreativeVersion": 1, - "ga:browserSize": 1, - "ga:backfillViewableImpressionsPercent": 1, - "ga:minute": 1, - "ga:dcmFloodlightActivityGroupId": 1, - "ga:year": 1, - "ga:exitPagePath": 1, - "ga:sessionsPerUser": 1, - "ga:adTargetingOption": 1, - "ga:entranceBounceRate": 1, - "ga:customVarNameXX": 1, - "ga:quantityRemovedFromCart": 1, - "ga:socialInteractionTarget": 1, - "ga:transactionsPerSession": 1, - "ga:appVersion": 1, - "ga:dcmClickAdvertiserId": 1, - "ga:dcmFloodlightActivityAndGroup": 1, - "ga:country": 1, - "ga:goalValueAll": 1, - "ga:userGender": 1, - "ga:pagePath": 1, - "ga:dcmClickCampaignId": 1, - "ga:adMatchedQuery": 1, - "ga:totalPublisherImpressions": 1, - "ga:dsAdGroupId": 1, - "ga:totalValue": 1, - "ga:browserVersion": 1, - "ga:adsenseAdsViewed": 1, - "ga:nthMinute": 1, - "ga:eventValue": 1, - "ga:exitRate": 1, - "ga:dfpECPM": 1, - "ga:backfillMonetizedPageviews": 1, - "ga:adxCoverage": 1, - "ga:operatingSystemVersion": 1, - "ga:mobileDeviceMarketingName": 1, - "ga:totalPublisherCoverage": 1, - "ga:sessionDurationBucket": 1, - "ga:dcmFloodlightRevenue": 1, - "ga:uniquePageviews": 1, - "ga:dateHour": 1, - "ga:totalRefunds": 1, - "ga:dateHourMinute": 1, - "ga:itemQuantity": 1, - "ga:avgSearchDuration": 1, - "ga:goalValuePerSession": 1, - "ga:adDisplayUrl": 1, - "ga:transactionsPerUser": 1, - "ga:transactionShipping": 1, - "ga:dcmClickAdType": 1, - "ga:metro": 1, - "ga:internalPromotionClicks": 1, - "ga:yearMonth": 1, - "ga:avgSessionDuration": 1, - "ga:backfillECPM": 1, - "ga:city": 1, - "ga:sessionsWithEvent": 1, - "ga:transactions": 1, - "ga:countryIsoCode": 1, - "ga:avgSearchDepth": 1, - "ga:goalConversionRateAll": 1, - "ga:dsAgency": 1, - "ga:dfpMonetizedPageviews": 1, - "ga:clientId": 1, - "ga:dcmFloodlightActivityId": 1, - "ga:searchSessions": 1, - "ga:fullReferrer": 1, - "ga:productRefunds": 1, - "ga:dcmClickAdvertiser": 1, - "ga:socialInteractionNetworkActionSession": 1, - "ga:nextContentGroup1": 1, - "ga:hostname": 1, - "ga:nextContentGroup2": 1, - "ga:nextContentGroup3": 1, - "ga:nextContentGroup4": 1, - "ga:sessionDuration": 1, - "ga:quantityCheckedOut": 1, - "ga:adxECPM": 1, - "ga:nextContentGroup5": 1, - "ga:interestOtherCategory": 1, - "ga:internalPromotionViews": 1, - "ga:dataSource": 1, - "ga:dfpRevenuePer1000Sessions": 1, - "ga:backfillCoverage": 1, - "ga:userDefinedValue": 1, - "ga:totalPublisherViewableImpressionsPercent": 1, - "ga:dsEngineAccountId": 1, - "ga:adPlacementDomain": 1, - "ga:backfillRevenue": 1, - "ga:subContinentCode": 1, - "ga:mobileDeviceModel": 1, - "ga:adFormat": 1, - "ga:adwordsCriteriaID": 1, - "ga:date": 1, - "ga:screenColors": 1, - "ga:operatingSystem": 1, - "ga:day": 1, - "ga:dfpCTR": 1, - "ga:adsenseCTR": 1, - "ga:searchExitRate": 1, - "ga:javaEnabled": 1, - "ga:backfillImpressionsPerSession": 1, - "ga:medium": 1, - "ga:adDestinationUrl": 1, - "ga:region": 1, - "ga:quantityAddedToCart": 1, - "ga:dcmClickAdId": 1, - "ga:searchDuration": 1, - "ga:backfillImpressions": 1, - "ga:dcmClickAd": 1, - "ga:goalXXConversionRate": 1, - "ga:month": 1, - "ga:yearWeek": 1, - "ga:exits": 1, - "ga:adxRevenuePer1000Sessions": 1, - "ga:dsAgencyId": 1, - "ga:dayOfWeekName": 1, - "ga:adsensePageImpressions": 1, - "ga:mobileDeviceBranding": 1, - "ga:eventsPerSessionWithEvent": 1, - "ga:regionIsoCode": 1, - "ga:calcMetric_\u003cNAME\u003e": 1, - "ga:goalAbandonsAll": 1, - "ga:isoYearIsoWeek": 1, - "ga:dimensionXX": 1, - "ga:productListViews": 1, - "ga:dcmFloodlightAdvertiserId": 1, - "ga:browser": 1, - "ga:transactionRevenuePerSession": 1, - "ga:interestAffinityCategory": 1, - "ga:regionId": 1, - "ga:adPlacementUrl": 1, - "ga:adxRevenue": 1, - "ga:dbmClickInsertionOrderId": 1, - "ga:totalPublisherCTR": 1, - "ga:campaignCode": 1 - }, - "per_orphan": { - "ga:totalPublisherRevenuePer1000Sessions": 1, - "ga:transactionTax": 1, - "ga:percentNewSessions": 1, - "ga:backfillClicks": 1, - "ga:week": 1, - "ga:productCheckouts": 1, - "ga:newUsers": 1, - "ga:goalValueAllPerSearch": 1, - "ga:hour": 1, - "ga:adxMonetizedPageviews": 1, - "ga:dfpViewableImpressionsPercent": 1, - "ga:productListClicks": 1, - "ga:backfillCTR": 1, - "ga:isoWeek": 1, - "ga:goalStartsAll": 1, - "ga:uniqueDimensionCombinations": 1, - "ga:dfpCoverage": 1, - "ga:goalXXValue": 1, - "ga:uniqueEvents": 1, - "ga:users": 1, - "ga:appInstallerId": 1, - "ga:revenuePerUser": 1, - "ga:refundAmount": 1, - "ga:uniquePurchases": 1, - "ga:searchDepth": 1, - "ga:adsenseExits": 1, - "ga:totalPublisherMonetizedPageviews": 1, - "ga:sessions": 1, - "ga:appId": 1, - "ga:metricXX": 1, - "ga:adxImpressions": 1, - "ga:adsenseCoverage": 1, - "ga:searchUniques": 1, - "ga:screenviews": 1, - "ga:productAddsToCart": 1, - "ga:avgScreenviewDuration": 1, - "ga:pageviews": 1, - "ga:percentSearchRefinements": 1, - "ga:goalXXStarts": 1, - "ga:dfpImpressions": 1, - "ga:timeOnPage": 1, - "ga:bounceRate": 1, - "ga:itemRevenue": 1, - "ga:nthDay": 1, - "ga:entrances": 1, - "ga:totalPublisherClicks": 1, - "ga:revenuePerTransaction": 1, - "ga:screenviewsPerSession": 1, - "ga:searchExits": 1, - "ga:dcmFloodlightQuantity": 1, - "ga:screenName": 1, - "ga:productRemovesFromCart": 1, - "ga:backfillViewableImpressionsPercent": 1, - "ga:year": 1, - "ga:transactionRevenue": 1, - "ga:sessionsPerUser": 1, - "ga:entranceBounceRate": 1, - "ga:quantityRemovedFromCart": 1, - "ga:entranceRate": 1, - "ga:buyToDetailRate": 1, - "ga:goalAbandonRateAll": 1, - "ga:transactionsPerSession": 1, - "ga:appVersion": 1, - "ga:avgEventValue": 1, - "ga:adxViewableImpressionsPercent": 1, - "ga:goalValueAll": 1, - "ga:avgSearchResultViews": 1, - "ga:backfillRevenuePer1000Sessions": 1, - "ga:productListCTR": 1, - "ga:totalPublisherImpressions": 1, - "ga:totalValue": 1, - "ga:adsenseAdsViewed": 1, - "ga:hits": 1, - "ga:eventValue": 1, - "ga:totalPublisherImpressionsPerSession": 1, - "ga:adxClicks": 1, - "ga:pageValue": 1, - "ga:exitRate": 1, - "ga:dfpECPM": 1, - "ga:backfillMonetizedPageviews": 1, - "ga:dfpClicks": 1, - "ga:dfpImpressionsPerSession": 1, - "ga:adxCoverage": 1, - "ga:totalPublisherCoverage": 1, - "ga:organicSearches": 1, - "ga:dcmFloodlightRevenue": 1, - "ga:uniquePageviews": 1, - "ga:dateHour": 1, - "ga:totalRefunds": 1, - "ga:itemQuantity": 1, - "ga:avgSearchDuration": 1, - "ga:adsenseECPM": 1, - "ga:goalValuePerSession": 1, - "ga:adxImpressionsPerSession": 1, - "ga:searchRefinements": 1, - "ga:appName": 1, - "ga:transactionsPerUser": 1, - "ga:transactionShipping": 1, - "ga:quantityRefunded": 1, - "ga:nthMonth": 1, - "ga:yearMonth": 1, - "ga:avgSessionDuration": 1, - "ga:backfillECPM": 1, - "ga:avgTimeOnPage": 1, - "ga:adxCTR": 1, - "ga:sessionsWithEvent": 1, - "ga:goalXXAbandonRate": 1, - "ga:transactions": 1, - "ga:avgSearchDepth": 1, - "ga:goalConversionRateAll": 1, - "ga:nthWeek": 1, - "ga:dfpMonetizedPageviews": 1, - "ga:totalPublisherRevenue": 1, - "ga:searchSessions": 1, - "ga:adsenseViewableImpressionPercent": 1, - "ga:productRefunds": 1, - "ga:totalEvents": 1, - "ga:itemsPerPurchase": 1, - "ga:productRefundAmount": 1, - "ga:sessionDuration": 1, - "ga:quantityCheckedOut": 1, - "ga:adxECPM": 1, - "ga:adsenseRevenue": 1, - "ga:uniqueScreenviews": 1, - "ga:goalXXCompletions": 1, - "ga:goalXXAbandons": 1, - "ga:isoYear": 1, - "ga:dfpRevenuePer1000Sessions": 1, - "ga:backfillCoverage": 1, - "ga:dfpRevenue": 1, - "ga:pageviewsPerSession": 1, - "ga:totalPublisherViewableImpressionsPercent": 1, - "ga:dayOfWeek": 1, - "ga:backfillRevenue": 1, - "ga:searchGoalXXConversionRate": 1, - "ga:date": 1, - "ga:day": 1, - "ga:dfpCTR": 1, - "ga:adsenseCTR": 1, - "ga:goalCompletionsAll": 1, - "ga:productDetailViews": 1, - "ga:searchExitRate": 1, - "ga:adsenseAdsClicks": 1, - "ga:backfillImpressionsPerSession": 1, - "ga:quantityAddedToCart": 1, - "ga:searchDuration": 1, - "ga:searchResultViews": 1, - "ga:backfillImpressions": 1, - "ga:goalXXConversionRate": 1, - "ga:productRevenuePerPurchase": 1, - "ga:month": 1, - "ga:totalPublisherECPM": 1, - "ga:yearWeek": 1, - "ga:exits": 1, - "ga:bounces": 1, - "ga:adxRevenuePer1000Sessions": 1, - "ga:dayOfWeekName": 1, - "ga:adsensePageImpressions": 1, - "ga:searchGoalConversionRateAll": 1, - "ga:eventsPerSessionWithEvent": 1, - "ga:calcMetric_\u003cNAME\u003e": 1, - "ga:goalAbandonsAll": 1, - "ga:isoYearIsoWeek": 1, - "ga:dimensionXX": 1, - "ga:productListViews": 1, - "ga:revenuePerItem": 1, - "ga:cartToDetailRate": 1, - "ga:transactionRevenuePerSession": 1, - "ga:percentSessionsWithSearch": 1, - "ga:nthHour": 1, - "ga:adsenseAdUnitsViewed": 1, - "ga:adxRevenue": 1, - "ga:totalPublisherCTR": 1, - "ga:timeOnScreen": 1 - }, - "ga_exp_objective_metrics": { - "ga:avgSearchDuration": 1, - "ga:adsenseECPM": 1, - "ga:goalValuePerSession": 1, - "ga:experimentCombination": 1, - "ga:searchRefinements": 1, - "ga:avgSessionDuration": 1, - "ga:goalValueAllPerSearch": 1, - "ga:goalXXAbandonRate": 1, - "ga:transactions": 1, - "ga:goalConversionRateAll": 1, - "ga:avgSearchDepth": 1, - "ga:goalStartsAll": 1, - "ga:goalXXValue": 1, - "ga:searchSessions": 1, - "ga:adsenseViewableImpressionPercent": 1, - "ga:refundAmount": 1, - "ga:experimentName": 1, - "ga:searchDepth": 1, - "ga:sessions": 1, - "ga:exceptions": 1, - "ga:sessionDuration": 1, - "ga:adsenseCoverage": 1, - "ga:adsenseRevenue": 1, - "ga:goalXXCompletions": 1, - "ga:screenviews": 1, - "ga:searchUniques": 1, - "ga:pageviews": 1, - "ga:percentSearchRefinements": 1, - "ga:goalXXAbandons": 1, - "ga:goalXXStarts": 1, - "ga:experimentOutcomeType": 1, - "ga:bounceRate": 1, - "ga:revenuePerTransaction": 1, - "ga:screenviewsPerSession": 1, - "ga:pageviewsPerSession": 1, - "ga:searchExits": 1, - "ga:fatalExceptions": 1, - "ga:searchGoalXXConversionRate": 1, - "ga:adsenseCTR": 1, - "ga:transactionRevenue": 1, - "ga:goalCompletionsAll": 1, - "ga:searchExitRate": 1, - "ga:adsenseAdsClicks": 1, - "ga:transactionsPerSession": 1, - "ga:goalAbandonRateAll": 1, - "ga:experimentVariant": 1, - "ga:searchDuration": 1, - "ga:searchResultViews": 1, - "ga:goalXXConversionRate": 1, - "ga:goalValueAll": 1, - "ga:fatalExceptionsPerScreenview": 1, - "ga:avgSearchResultViews": 1, - "ga:bounces": 1, - "ga:adsensePageImpressions": 1, - "ga:totalValue": 1, - "ga:searchGoalConversionRateAll": 1, - "ga:adsenseAdsViewed": 1, - "ga:calcMetric_\u003cNAME\u003e": 1, - "ga:goalAbandonsAll": 1, - "ga:transactionRevenuePerSession": 1, - "ga:exceptionsPerScreenview": 1, - "ga:percentSessionsWithSearch": 1, - "ga:experimentId": 1, - "ga:adsenseAdUnitsViewed": 1, - "ga:totalRefunds": 1 - }, - "per_active_visitors_day_active_visitors_30": { - "ga:totalPublisherRevenuePer1000Sessions": 1, - "ga:transactionTax": 1, - "ga:backfillClicks": 1, - "ga:percentNewSessions": 1, - "ga:avgServerConnectionTime": 1, - "ga:productCheckouts": 1, - "ga:newUsers": 1, - "ga:RPC": 1, - "ga:adxMonetizedPageviews": 1, - "ga:avgPageLoadTime": 1, - "ga:backfillCTR": 1, - "ga:goalStartsAll": 1, - "ga:avgDomContentLoadedTime": 1, - "ga:domainLookupTime": 1, - "ga:dfpCoverage": 1, - "ga:goalXXValue": 1, - "ga:uniquePurchases": 1, - "ga:pageLoadSample": 1, - "ga:sessions": 1, - "ga:totalPublisherMonetizedPageviews": 1, - "ga:exceptions": 1, - "ga:metricXX": 1, - "ga:adxImpressions": 1, - "ga:adsenseCoverage": 1, - "ga:searchUniques": 1, - "ga:screenviews": 1, - "ga:productAddsToCart": 1, - "ga:avgScreenviewDuration": 1, - "ga:percentSearchRefinements": 1, - "ga:dfpImpressions": 1, - "ga:timeOnPage": 1, - "ga:bounceRate": 1, - "ga:entrances": 1, - "ga:revenuePerTransaction": 1, - "ga:dcmFloodlightQuantity": 1, - "ga:redirectionTime": 1, - "ga:productRemovesFromCart": 1, - "ga:dbmCPA": 1, - "ga:dbmCPC": 1, - "ga:transactionRevenue": 1, - "ga:dbmCPM": 1, - "ga:CTR": 1, - "ga:entranceRate": 1, - "ga:buyToDetailRate": 1, - "ga:goalAbandonRateAll": 1, - "ga:avgEventValue": 1, - "ga:dcmCTR": 1, - "ga:adxViewableImpressionsPercent": 1, - "ga:socialInteractionsPerSession": 1, - "ga:fatalExceptionsPerScreenview": 1, - "ga:avgSearchResultViews": 1, - "ga:backfillRevenuePer1000Sessions": 1, - "ga:productListCTR": 1, - "ga:avgDomainLookupTime": 1, - "ga:hits": 1, - "ga:totalPublisherImpressionsPerSession": 1, - "ga:adxClicks": 1, - "ga:pageValue": 1, - "ga:dfpClicks": 1, - "ga:dfpImpressionsPerSession": 1, - "ga:organicSearches": 1, - "ga:adsenseECPM": 1, - "ga:adxImpressionsPerSession": 1, - "ga:searchRefinements": 1, - "ga:quantityRefunded": 1, - "ga:avgTimeOnPage": 1, - "ga:goalXXAbandonRate": 1, - "ga:adxCTR": 1, - "ga:totalPublisherRevenue": 1, - "ga:adClicks": 1, - "ga:adsenseViewableImpressionPercent": 1, - "ga:uniqueSocialInteractions": 1, - "ga:totalEvents": 1, - "ga:itemsPerPurchase": 1, - "ga:productRefundAmount": 1, - "ga:avgDomInteractiveTime": 1, - "ga:goalXXCompletions": 1, - "ga:adsenseRevenue": 1, - "ga:goalXXAbandons": 1, - "ga:dbmCost": 1, - "ga:dfpRevenue": 1, - "ga:pageviewsPerSession": 1, - "ga:fatalExceptions": 1, - "ga:searchGoalXXConversionRate": 1, - "ga:goalCompletionsAll": 1, - "ga:productDetailViews": 1, - "ga:dbmCTR": 1, - "ga:adsenseAdsClicks": 1, - "ga:socialInteractions": 1, - "ga:dcmROAS": 1, - "ga:searchResultViews": 1, - "ga:productRevenuePerPurchase": 1, - "ga:totalPublisherECPM": 1, - "ga:bounces": 1, - "ga:dbmClicks": 1, - "ga:searchGoalConversionRateAll": 1, - "ga:avgPageDownloadTime": 1, - "ga:revenuePerItem": 1, - "ga:cartToDetailRate": 1, - "ga:dbmImpressions": 1, - "ga:domInteractiveTime": 1, - "ga:percentSessionsWithSearch": 1, - "ga:adsenseAdUnitsViewed": 1, - "ga:timeOnScreen": 1, - "ga:dbmConversions": 1, - "ga:goalValueAllPerSearch": 1, - "ga:dfpViewableImpressionsPercent": 1, - "ga:domContentLoadedTime": 1, - "ga:productListClicks": 1, - "ga:30dayUsers": 1, - "ga:uniqueDimensionCombinations": 1, - "ga:uniqueEvents": 1, - "ga:refundAmount": 1, - "ga:searchDepth": 1, - "ga:pageviews": 1, - "ga:goalXXStarts": 1, - "ga:itemRevenue": 1, - "ga:nthDay": 1, - "ga:totalPublisherClicks": 1, - "ga:screenviewsPerSession": 1, - "ga:serverConnectionTime": 1, - "ga:searchExits": 1, - "ga:speedMetricsSample": 1, - "ga:backfillViewableImpressionsPercent": 1, - "ga:entranceBounceRate": 1, - "ga:quantityRemovedFromCart": 1, - "ga:transactionsPerSession": 1, - "ga:pageDownloadTime": 1, - "ga:goalValueAll": 1, - "ga:dcmCost": 1, - "ga:totalPublisherImpressions": 1, - "ga:totalValue": 1, - "ga:adsenseAdsViewed": 1, - "ga:eventValue": 1, - "ga:exitRate": 1, - "ga:dfpECPM": 1, - "ga:backfillMonetizedPageviews": 1, - "ga:dbmROAS": 1, - "ga:adxCoverage": 1, - "ga:totalPublisherCoverage": 1, - "ga:dcmFloodlightRevenue": 1, - "ga:uniquePageviews": 1, - "ga:exceptionsPerScreenview": 1, - "ga:totalRefunds": 1, - "ga:itemQuantity": 1, - "ga:avgSearchDuration": 1, - "ga:goalValuePerSession": 1, - "ga:transactionShipping": 1, - "ga:avgSessionDuration": 1, - "ga:backfillECPM": 1, - "ga:domLatencyMetricsSample": 1, - "ga:sessionsWithEvent": 1, - "ga:transactions": 1, - "ga:avgSearchDepth": 1, - "ga:goalConversionRateAll": 1, - "ga:dfpMonetizedPageviews": 1, - "ga:dcmRPC": 1, - "ga:searchSessions": 1, - "ga:productRefunds": 1, - "ga:dcmClicks": 1, - "ga:sessionDuration": 1, - "ga:quantityCheckedOut": 1, - "ga:adxECPM": 1, - "ga:uniqueScreenviews": 1, - "ga:avgUserTimingValue": 1, - "ga:dfpRevenuePer1000Sessions": 1, - "ga:backfillCoverage": 1, - "ga:serverResponseTime": 1, - "ga:totalPublisherViewableImpressionsPercent": 1, - "ga:backfillRevenue": 1, - "ga:date": 1, - "ga:dcmCPC": 1, - "ga:userTimingValue": 1, - "ga:day": 1, - "ga:dfpCTR": 1, - "ga:adsenseCTR": 1, - "ga:avgServerResponseTime": 1, - "ga:searchExitRate": 1, - "ga:backfillImpressionsPerSession": 1, - "ga:quantityAddedToCart": 1, - "ga:searchDuration": 1, - "ga:backfillImpressions": 1, - "ga:goalXXConversionRate": 1, - "ga:exits": 1, - "ga:adxRevenuePer1000Sessions": 1, - "ga:impressions": 1, - "ga:adsensePageImpressions": 1, - "ga:avgRedirectionTime": 1, - "ga:eventsPerSessionWithEvent": 1, - "ga:pageLoadTime": 1, - "ga:dcmImpressions": 1, - "ga:calcMetric_\u003cNAME\u003e": 1, - "ga:goalAbandonsAll": 1, - "ga:dcmROI": 1, - "ga:productListViews": 1, - "ga:dcmMargin": 1, - "ga:transactionRevenuePerSession": 1, - "ga:userTimingSample": 1, - "ga:adxRevenue": 1, - "ga:totalPublisherCTR": 1 - }, - "per_active_visitors_day_active_visitors_7": { - "ga:totalPublisherRevenuePer1000Sessions": 1, - "ga:transactionTax": 1, - "ga:backfillClicks": 1, - "ga:percentNewSessions": 1, - "ga:avgServerConnectionTime": 1, - "ga:productCheckouts": 1, - "ga:newUsers": 1, - "ga:RPC": 1, - "ga:adxMonetizedPageviews": 1, - "ga:avgPageLoadTime": 1, - "ga:backfillCTR": 1, - "ga:goalStartsAll": 1, - "ga:avgDomContentLoadedTime": 1, - "ga:domainLookupTime": 1, - "ga:dfpCoverage": 1, - "ga:goalXXValue": 1, - "ga:uniquePurchases": 1, - "ga:pageLoadSample": 1, - "ga:sessions": 1, - "ga:totalPublisherMonetizedPageviews": 1, - "ga:exceptions": 1, - "ga:metricXX": 1, - "ga:adxImpressions": 1, - "ga:adsenseCoverage": 1, - "ga:searchUniques": 1, - "ga:screenviews": 1, - "ga:productAddsToCart": 1, - "ga:avgScreenviewDuration": 1, - "ga:percentSearchRefinements": 1, - "ga:dfpImpressions": 1, - "ga:timeOnPage": 1, - "ga:bounceRate": 1, - "ga:entrances": 1, - "ga:revenuePerTransaction": 1, - "ga:dcmFloodlightQuantity": 1, - "ga:redirectionTime": 1, - "ga:productRemovesFromCart": 1, - "ga:dbmCPA": 1, - "ga:dbmCPC": 1, - "ga:transactionRevenue": 1, - "ga:dbmCPM": 1, - "ga:CTR": 1, - "ga:entranceRate": 1, - "ga:buyToDetailRate": 1, - "ga:goalAbandonRateAll": 1, - "ga:avgEventValue": 1, - "ga:dcmCTR": 1, - "ga:adxViewableImpressionsPercent": 1, - "ga:socialInteractionsPerSession": 1, - "ga:fatalExceptionsPerScreenview": 1, - "ga:avgSearchResultViews": 1, - "ga:backfillRevenuePer1000Sessions": 1, - "ga:productListCTR": 1, - "ga:avgDomainLookupTime": 1, - "ga:hits": 1, - "ga:totalPublisherImpressionsPerSession": 1, - "ga:adxClicks": 1, - "ga:pageValue": 1, - "ga:dfpClicks": 1, - "ga:dfpImpressionsPerSession": 1, - "ga:organicSearches": 1, - "ga:adsenseECPM": 1, - "ga:adxImpressionsPerSession": 1, - "ga:searchRefinements": 1, - "ga:quantityRefunded": 1, - "ga:avgTimeOnPage": 1, - "ga:goalXXAbandonRate": 1, - "ga:adxCTR": 1, - "ga:totalPublisherRevenue": 1, - "ga:adClicks": 1, - "ga:adsenseViewableImpressionPercent": 1, - "ga:uniqueSocialInteractions": 1, - "ga:totalEvents": 1, - "ga:itemsPerPurchase": 1, - "ga:productRefundAmount": 1, - "ga:avgDomInteractiveTime": 1, - "ga:goalXXCompletions": 1, - "ga:adsenseRevenue": 1, - "ga:goalXXAbandons": 1, - "ga:dbmCost": 1, - "ga:dfpRevenue": 1, - "ga:pageviewsPerSession": 1, - "ga:fatalExceptions": 1, - "ga:searchGoalXXConversionRate": 1, - "ga:goalCompletionsAll": 1, - "ga:productDetailViews": 1, - "ga:dbmCTR": 1, - "ga:adsenseAdsClicks": 1, - "ga:socialInteractions": 1, - "ga:dcmROAS": 1, - "ga:searchResultViews": 1, - "ga:productRevenuePerPurchase": 1, - "ga:totalPublisherECPM": 1, - "ga:bounces": 1, - "ga:dbmClicks": 1, - "ga:searchGoalConversionRateAll": 1, - "ga:avgPageDownloadTime": 1, - "ga:revenuePerItem": 1, - "ga:cartToDetailRate": 1, - "ga:dbmImpressions": 1, - "ga:domInteractiveTime": 1, - "ga:percentSessionsWithSearch": 1, - "ga:adsenseAdUnitsViewed": 1, - "ga:timeOnScreen": 1, - "ga:dbmConversions": 1, - "ga:goalValueAllPerSearch": 1, - "ga:dfpViewableImpressionsPercent": 1, - "ga:domContentLoadedTime": 1, - "ga:productListClicks": 1, - "ga:uniqueDimensionCombinations": 1, - "ga:uniqueEvents": 1, - "ga:refundAmount": 1, - "ga:searchDepth": 1, - "ga:pageviews": 1, - "ga:goalXXStarts": 1, - "ga:itemRevenue": 1, - "ga:nthDay": 1, - "ga:totalPublisherClicks": 1, - "ga:screenviewsPerSession": 1, - "ga:serverConnectionTime": 1, - "ga:searchExits": 1, - "ga:speedMetricsSample": 1, - "ga:backfillViewableImpressionsPercent": 1, - "ga:entranceBounceRate": 1, - "ga:quantityRemovedFromCart": 1, - "ga:transactionsPerSession": 1, - "ga:pageDownloadTime": 1, - "ga:goalValueAll": 1, - "ga:dcmCost": 1, - "ga:totalPublisherImpressions": 1, - "ga:totalValue": 1, - "ga:adsenseAdsViewed": 1, - "ga:eventValue": 1, - "ga:7dayUsers": 1, - "ga:exitRate": 1, - "ga:dfpECPM": 1, - "ga:backfillMonetizedPageviews": 1, - "ga:dbmROAS": 1, - "ga:adxCoverage": 1, - "ga:totalPublisherCoverage": 1, - "ga:dcmFloodlightRevenue": 1, - "ga:uniquePageviews": 1, - "ga:exceptionsPerScreenview": 1, - "ga:totalRefunds": 1, - "ga:itemQuantity": 1, - "ga:avgSearchDuration": 1, - "ga:goalValuePerSession": 1, - "ga:transactionShipping": 1, - "ga:avgSessionDuration": 1, - "ga:backfillECPM": 1, - "ga:domLatencyMetricsSample": 1, - "ga:sessionsWithEvent": 1, - "ga:transactions": 1, - "ga:avgSearchDepth": 1, - "ga:goalConversionRateAll": 1, - "ga:dfpMonetizedPageviews": 1, - "ga:dcmRPC": 1, - "ga:searchSessions": 1, - "ga:productRefunds": 1, - "ga:dcmClicks": 1, - "ga:sessionDuration": 1, - "ga:quantityCheckedOut": 1, - "ga:adxECPM": 1, - "ga:uniqueScreenviews": 1, - "ga:avgUserTimingValue": 1, - "ga:dfpRevenuePer1000Sessions": 1, - "ga:backfillCoverage": 1, - "ga:serverResponseTime": 1, - "ga:totalPublisherViewableImpressionsPercent": 1, - "ga:backfillRevenue": 1, - "ga:date": 1, - "ga:dcmCPC": 1, - "ga:userTimingValue": 1, - "ga:day": 1, - "ga:dfpCTR": 1, - "ga:adsenseCTR": 1, - "ga:avgServerResponseTime": 1, - "ga:searchExitRate": 1, - "ga:backfillImpressionsPerSession": 1, - "ga:quantityAddedToCart": 1, - "ga:searchDuration": 1, - "ga:backfillImpressions": 1, - "ga:goalXXConversionRate": 1, - "ga:exits": 1, - "ga:adxRevenuePer1000Sessions": 1, - "ga:impressions": 1, - "ga:adsensePageImpressions": 1, - "ga:avgRedirectionTime": 1, - "ga:eventsPerSessionWithEvent": 1, - "ga:pageLoadTime": 1, - "ga:dcmImpressions": 1, - "ga:calcMetric_\u003cNAME\u003e": 1, - "ga:goalAbandonsAll": 1, - "ga:dcmROI": 1, - "ga:productListViews": 1, - "ga:dcmMargin": 1, - "ga:transactionRevenuePerSession": 1, - "ga:userTimingSample": 1, - "ga:adxRevenue": 1, - "ga:totalPublisherCTR": 1 - }, - "cohorts_overview_nth_day": { - "ga:acquisitionTrafficChannel": 1, - "ga:acquisitionSource": 1, - "ga:cohortRevenuePerUser": 1, - "ga:avgSessionDuration": 1, - "ga:cohortActiveUsers": 1, - "ga:cohortTotalUsersWithLifetimeCriteria": 1, - "ga:goalCompletionsAll": 1, - "ga:transactions": 1, - "ga:transactionRevenue": 1, - "ga:cohortSessionsPerUserWithLifetimeCriteria": 1, - "ga:cohort": 1, - "ga:goalConversionRateAll": 1, - "ga:cohortGoalCompletionsPerUserWithLifetimeCriteria": 1, - "ga:cohortGoalCompletionsPerUser": 1, - "ga:acquisitionMedium": 1, - "ga:transactionsPerSession": 1, - "ga:cohortRevenuePerUserWithLifetimeCriteria": 1, - "ga:cohortSessionDurationPerUserWithLifetimeCriteria": 1, - "ga:cohortPageviewsPerUser": 1, - "ga:cohortTotalUsers": 1, - "ga:acquisitionCampaign": 1, - "ga:sessions": 1, - "ga:cohortRetentionRate": 1, - "ga:acquisitionSourceMedium": 1, - "ga:cohortAppviewsPerUser": 1, - "ga:cohortNthDay": 1, - "ga:cohortSessionsPerUser": 1, - "ga:sessionDuration": 1, - "ga:cohortPageviewsPerUserWithLifetimeCriteria": 1, - "ga:screenviews": 1, - "ga:pageviews": 1, - "ga:calcMetric_\u003cNAME\u003e": 1, - "ga:transactionRevenuePerSession": 1, - "ga:cohortSessionDurationPerUser": 1, - "ga:revenuePerTransaction": 1, - "ga:screenviewsPerSession": 1, - "ga:pageviewsPerSession": 1, - "ga:cohortAppviewsPerUserWithLifetimeCriteria": 1 - }, - "per_goal_request_uri": { - "ga:goalValuePerSession": 1, - "ga:week": 1, - "ga:date": 1, - "ga:nthMonth": 1, - "ga:yearMonth": 1, - "ga:day": 1, - "ga:minute": 1, - "ga:year": 1, - "ga:hour": 1, - "ga:goalXXAbandonRate": 1, - "ga:goalCompletionsAll": 1, - "ga:goalConversionRateAll": 1, - "ga:nthWeek": 1, - "ga:isoWeek": 1, - "ga:goalStartsAll": 1, - "ga:goalAbandonRateAll": 1, - "ga:goalXXValue": 1, - "ga:goalXXConversionRate": 1, - "ga:goalValueAll": 1, - "ga:month": 1, - "ga:goalPreviousStep1": 1, - "ga:yearWeek": 1, - "ga:goalPreviousStep3": 1, - "ga:goalPreviousStep2": 1, - "ga:sessions": 1, - "ga:dayOfWeekName": 1, - "ga:metricXX": 1, - "ga:nthMinute": 1, - "ga:goalXXCompletions": 1, - "ga:calcMetric_\u003cNAME\u003e": 1, - "ga:goalAbandonsAll": 1, - "ga:isoYearIsoWeek": 1, - "ga:dimensionXX": 1, - "ga:goalXXAbandons": 1, - "ga:goalXXStarts": 1, - "ga:isoYear": 1, - "ga:nthDay": 1, - "ga:dcmFloodlightRevenue": 1, - "ga:goalCompletionLocation": 1, - "ga:nthHour": 1, - "ga:dateHour": 1, - "ga:dayOfWeek": 1, - "ga:dateHourMinute": 1, - "ga:dcmFloodlightQuantity": 1 - }, - "per_web_property_query_RESTRICTED": { - "ga:totalPublisherRevenuePer1000Sessions": 1, - "ga:transactionTax": 1, - "ga:percentNewSessions": 1, - "ga:backfillClicks": 1, - "ga:week": 1, - "ga:productCheckouts": 1, - "ga:newUsers": 1, - "ga:goalValueAllPerSearch": 1, - "ga:hour": 1, - "ga:RPC": 1, - "ga:adxMonetizedPageviews": 1, - "ga:dfpViewableImpressionsPercent": 1, - "ga:productListClicks": 1, - "ga:backfillCTR": 1, - "ga:isoWeek": 1, - "ga:goalStartsAll": 1, - "ga:adCost": 1, - "ga:dfpCoverage": 1, - "ga:goalXXValue": 1, - "ga:users": 1, - "ga:revenuePerUser": 1, - "ga:refundAmount": 1, - "ga:uniquePurchases": 1, - "ga:searchDepth": 1, - "ga:adsenseExits": 1, - "ga:totalPublisherMonetizedPageviews": 1, - "ga:sessions": 1, - "ga:adxImpressions": 1, - "ga:adsenseCoverage": 1, - "ga:searchUniques": 1, - "ga:screenviews": 1, - "ga:productAddsToCart": 1, - "ga:pageviews": 1, - "ga:percentSearchRefinements": 1, - "ga:goalXXStarts": 1, - "ga:dfpImpressions": 1, - "ga:timeOnPage": 1, - "ga:bounceRate": 1, - "ga:itemRevenue": 1, - "ga:nthDay": 1, - "ga:entrances": 1, - "ga:totalPublisherClicks": 1, - "ga:revenuePerTransaction": 1, - "ga:ROI": 1, - "ga:screenviewsPerSession": 1, - "ga:searchExits": 1, - "ga:dcmFloodlightQuantity": 1, - "ga:productRemovesFromCart": 1, - "ga:backfillViewableImpressionsPercent": 1, - "ga:year": 1, - "ga:transactionRevenue": 1, - "ga:sessionsPerUser": 1, - "ga:entranceBounceRate": 1, - "ga:CTR": 1, - "ga:quantityRemovedFromCart": 1, - "ga:entranceRate": 1, - "ga:buyToDetailRate": 1, - "ga:goalAbandonRateAll": 1, - "ga:transactionsPerSession": 1, - "ga:adxViewableImpressionsPercent": 1, - "ga:socialInteractionsPerSession": 1, - "ga:goalValueAll": 1, - "ga:avgSearchResultViews": 1, - "ga:backfillRevenuePer1000Sessions": 1, - "ga:productListCTR": 1, - "ga:totalPublisherImpressions": 1, - "ga:totalValue": 1, - "ga:adsenseAdsViewed": 1, - "ga:totalPublisherImpressionsPerSession": 1, - "ga:adxClicks": 1, - "ga:pageValue": 1, - "ga:exitRate": 1, - "ga:dfpECPM": 1, - "ga:backfillMonetizedPageviews": 1, - "ga:dfpClicks": 1, - "ga:dfpImpressionsPerSession": 1, - "ga:adxCoverage": 1, - "ga:totalPublisherCoverage": 1, - "ga:dcmFloodlightRevenue": 1, - "ga:uniquePageviews": 1, - "ga:dateHour": 1, - "ga:totalRefunds": 1, - "ga:itemQuantity": 1, - "ga:avgSearchDuration": 1, - "ga:adsenseECPM": 1, - "ga:goalValuePerSession": 1, - "ga:adxImpressionsPerSession": 1, - "ga:searchRefinements": 1, - "ga:transactionsPerUser": 1, - "ga:transactionShipping": 1, - "ga:quantityRefunded": 1, - "ga:nthMonth": 1, - "ga:yearMonth": 1, - "ga:avgSessionDuration": 1, - "ga:backfillECPM": 1, - "ga:avgTimeOnPage": 1, - "ga:adxCTR": 1, - "ga:sessionsWithEvent": 1, - "ga:goalXXAbandonRate": 1, - "ga:transactions": 1, - "ga:costPerConversion": 1, - "ga:avgSearchDepth": 1, - "ga:goalConversionRateAll": 1, - "ga:nthWeek": 1, - "ga:dfpMonetizedPageviews": 1, - "ga:totalPublisherRevenue": 1, - "ga:searchSessions": 1, - "ga:adClicks": 1, - "ga:uniqueSocialInteractions": 1, - "ga:adsenseViewableImpressionPercent": 1, - "ga:productRefunds": 1, - "ga:totalEvents": 1, - "ga:costPerGoalConversion": 1, - "ga:itemsPerPurchase": 1, - "ga:productRefundAmount": 1, - "ga:sessionDuration": 1, - "ga:quantityCheckedOut": 1, - "ga:adxECPM": 1, - "ga:adsenseRevenue": 1, - "ga:goalXXCompletions": 1, - "ga:goalXXAbandons": 1, - "ga:ROAS": 1, - "ga:isoYear": 1, - "ga:dfpRevenuePer1000Sessions": 1, - "ga:backfillCoverage": 1, - "ga:dfpRevenue": 1, - "ga:pageviewsPerSession": 1, - "ga:totalPublisherViewableImpressionsPercent": 1, - "ga:dayOfWeek": 1, - "ga:backfillRevenue": 1, - "ga:searchGoalXXConversionRate": 1, - "ga:date": 1, - "ga:day": 1, - "ga:dfpCTR": 1, - "ga:adsenseCTR": 1, - "ga:goalCompletionsAll": 1, - "ga:productDetailViews": 1, - "ga:searchExitRate": 1, - "ga:adsenseAdsClicks": 1, - "ga:backfillImpressionsPerSession": 1, - "ga:CPM": 1, - "ga:socialInteractions": 1, - "ga:quantityAddedToCart": 1, - "ga:searchDuration": 1, - "ga:searchResultViews": 1, - "ga:margin": 1, - "ga:backfillImpressions": 1, - "ga:goalXXConversionRate": 1, - "ga:productRevenuePerPurchase": 1, - "ga:month": 1, - "ga:totalPublisherECPM": 1, - "ga:yearWeek": 1, - "ga:exits": 1, - "ga:CPC": 1, - "ga:bounces": 1, - "ga:adxRevenuePer1000Sessions": 1, - "ga:dayOfWeekName": 1, - "ga:impressions": 1, - "ga:adsensePageImpressions": 1, - "ga:searchGoalConversionRateAll": 1, - "ga:eventsPerSessionWithEvent": 1, - "ga:costPerTransaction": 1, - "ga:calcMetric_\u003cNAME\u003e": 1, - "ga:goalAbandonsAll": 1, - "ga:isoYearIsoWeek": 1, - "ga:productListViews": 1, - "ga:revenuePerItem": 1, - "ga:cartToDetailRate": 1, - "ga:transactionRevenuePerSession": 1, - "ga:percentSessionsWithSearch": 1, - "ga:nthHour": 1, - "ga:adsenseAdUnitsViewed": 1, - "ga:adxRevenue": 1, - "ga:totalPublisherCTR": 1 - }, - "per_sitelink_extension": { - "ga:totalPublisherRevenuePer1000Sessions": 1, - "ga:referralPath": 1, - "ga:transactionTax": 1, - "ga:backfillClicks": 1, - "ga:percentNewSessions": 1, - "ga:avgServerConnectionTime": 1, - "ga:productCheckouts": 1, - "ga:newUsers": 1, - "ga:RPC": 1, - "ga:adxMonetizedPageviews": 1, - "ga:avgPageLoadTime": 1, - "ga:backfillCTR": 1, - "ga:isoWeek": 1, - "ga:goalStartsAll": 1, - "ga:avgDomContentLoadedTime": 1, - "ga:domainLookupTime": 1, - "ga:adwordsCreativeID": 1, - "ga:dfpCoverage": 1, - "ga:adCost": 1, - "ga:localRefundAmount": 1, - "ga:goalXXValue": 1, - "ga:sourceMedium": 1, - "ga:uniquePurchases": 1, - "ga:pageLoadSample": 1, - "ga:sessions": 1, - "ga:totalPublisherMonetizedPageviews": 1, - "ga:metricXX": 1, - "ga:adxImpressions": 1, - "ga:adsenseCoverage": 1, - "ga:searchUniques": 1, - "ga:screenviews": 1, - "ga:isTablet": 1, - "ga:productAddsToCart": 1, - "ga:avgScreenviewDuration": 1, - "ga:source": 1, - "ga:percentSearchRefinements": 1, - "ga:dfpImpressions": 1, - "ga:timeOnPage": 1, - "ga:localTransactionShipping": 1, - "ga:bounceRate": 1, - "ga:entrances": 1, - "ga:revenuePerTransaction": 1, - "ga:ROI": 1, - "ga:dcmFloodlightQuantity": 1, - "ga:redirectionTime": 1, - "ga:productRemovesFromCart": 1, - "ga:transactionRevenue": 1, - "ga:CTR": 1, - "ga:entranceRate": 1, - "ga:buyToDetailRate": 1, - "ga:goalAbandonRateAll": 1, - "ga:adxViewableImpressionsPercent": 1, - "ga:avgSearchResultViews": 1, - "ga:adwordsCampaignID": 1, - "ga:backfillRevenuePer1000Sessions": 1, - "ga:productListCTR": 1, - "ga:avgDomainLookupTime": 1, - "ga:totalPublisherImpressionsPerSession": 1, - "ga:adxClicks": 1, - "ga:pageValue": 1, - "ga:dfpClicks": 1, - "ga:dfpImpressionsPerSession": 1, - "ga:localProductRefundAmount": 1, - "ga:organicSearches": 1, - "ga:adsenseECPM": 1, - "ga:adxImpressionsPerSession": 1, - "ga:searchRefinements": 1, - "ga:quantityRefunded": 1, - "ga:nthMonth": 1, - "ga:avgTimeOnPage": 1, - "ga:goalXXAbandonRate": 1, - "ga:adxCTR": 1, - "ga:deviceCategory": 1, - "ga:nthWeek": 1, - "ga:adwordsCustomerID": 1, - "ga:totalPublisherRevenue": 1, - "ga:adClicks": 1, - "ga:adsenseViewableImpressionPercent": 1, - "ga:trafficType": 1, - "ga:itemsPerPurchase": 1, - "ga:productRefundAmount": 1, - "ga:avgDomInteractiveTime": 1, - "ga:goalXXCompletions": 1, - "ga:adsenseRevenue": 1, - "ga:goalXXAbandons": 1, - "ga:ROAS": 1, - "ga:campaign": 1, - "ga:isoYear": 1, - "ga:channelGrouping": 1, - "ga:dfpRevenue": 1, - "ga:adwordsCustomerName": 1, - "ga:pageviewsPerSession": 1, - "ga:dayOfWeek": 1, - "ga:localItemRevenue": 1, - "ga:searchGoalXXConversionRate": 1, - "ga:goalCompletionsAll": 1, - "ga:productDetailViews": 1, - "ga:adsenseAdsClicks": 1, - "ga:isMobile": 1, - "ga:searchResultViews": 1, - "ga:productRevenuePerPurchase": 1, - "ga:totalPublisherECPM": 1, - "ga:bounces": 1, - "ga:searchGoalConversionRateAll": 1, - "ga:avgPageDownloadTime": 1, - "ga:costPerTransaction": 1, - "ga:revenuePerItem": 1, - "ga:cartToDetailRate": 1, - "ga:adDistributionNetwork": 1, - "ga:domInteractiveTime": 1, - "ga:percentSessionsWithSearch": 1, - "ga:nthHour": 1, - "ga:adsenseAdUnitsViewed": 1, - "ga:timeOnScreen": 1, - "ga:localTransactionTax": 1, - "ga:week": 1, - "ga:goalValueAllPerSearch": 1, - "ga:hour": 1, - "ga:dfpViewableImpressionsPercent": 1, - "ga:domContentLoadedTime": 1, - "ga:productListClicks": 1, - "ga:uniqueDimensionCombinations": 1, - "ga:uniqueEvents": 1, - "ga:users": 1, - "ga:revenuePerUser": 1, - "ga:refundAmount": 1, - "ga:searchDepth": 1, - "ga:adsenseExits": 1, - "ga:pageviews": 1, - "ga:goalXXStarts": 1, - "ga:itemRevenue": 1, - "ga:nthDay": 1, - "ga:totalPublisherClicks": 1, - "ga:screenviewsPerSession": 1, - "ga:serverConnectionTime": 1, - "ga:searchExits": 1, - "ga:speedMetricsSample": 1, - "ga:backfillViewableImpressionsPercent": 1, - "ga:year": 1, - "ga:sessionsPerUser": 1, - "ga:entranceBounceRate": 1, - "ga:quantityRemovedFromCart": 1, - "ga:transactionsPerSession": 1, - "ga:pageDownloadTime": 1, - "ga:goalValueAll": 1, - "ga:totalPublisherImpressions": 1, - "ga:totalValue": 1, - "ga:adsenseAdsViewed": 1, - "ga:exitRate": 1, - "ga:dfpECPM": 1, - "ga:backfillMonetizedPageviews": 1, - "ga:adxCoverage": 1, - "ga:totalPublisherCoverage": 1, - "ga:dcmFloodlightRevenue": 1, - "ga:uniquePageviews": 1, - "ga:dateHour": 1, - "ga:totalRefunds": 1, - "ga:itemQuantity": 1, - "ga:avgSearchDuration": 1, - "ga:goalValuePerSession": 1, - "ga:adDisplayUrl": 1, - "ga:transactionsPerUser": 1, - "ga:transactionShipping": 1, - "ga:yearMonth": 1, - "ga:avgSessionDuration": 1, - "ga:backfillECPM": 1, - "ga:domLatencyMetricsSample": 1, - "ga:transactions": 1, - "ga:costPerConversion": 1, - "ga:avgSearchDepth": 1, - "ga:goalConversionRateAll": 1, - "ga:dfpMonetizedPageviews": 1, - "ga:searchSessions": 1, - "ga:productRefunds": 1, - "ga:costPerGoalConversion": 1, - "ga:sessionDuration": 1, - "ga:quantityCheckedOut": 1, - "ga:adxECPM": 1, - "ga:uniqueScreenviews": 1, - "ga:avgUserTimingValue": 1, - "ga:adContent": 1, - "ga:dataSource": 1, - "ga:dfpRevenuePer1000Sessions": 1, - "ga:backfillCoverage": 1, - "ga:serverResponseTime": 1, - "ga:totalPublisherViewableImpressionsPercent": 1, - "ga:backfillRevenue": 1, - "ga:date": 1, - "ga:userTimingValue": 1, - "ga:day": 1, - "ga:dfpCTR": 1, - "ga:adsenseCTR": 1, - "ga:avgServerResponseTime": 1, - "ga:localTransactionRevenue": 1, - "ga:searchExitRate": 1, - "ga:backfillImpressionsPerSession": 1, - "ga:CPM": 1, - "ga:medium": 1, - "ga:adDestinationUrl": 1, - "ga:quantityAddedToCart": 1, - "ga:currencyCode": 1, - "ga:searchDuration": 1, - "ga:margin": 1, - "ga:backfillImpressions": 1, - "ga:goalXXConversionRate": 1, - "ga:month": 1, - "ga:yearWeek": 1, - "ga:exits": 1, - "ga:CPC": 1, - "ga:adxRevenuePer1000Sessions": 1, - "ga:dayOfWeekName": 1, - "ga:impressions": 1, - "ga:adsensePageImpressions": 1, - "ga:avgRedirectionTime": 1, - "ga:pageLoadTime": 1, - "ga:calcMetric_\u003cNAME\u003e": 1, - "ga:goalAbandonsAll": 1, - "ga:isoYearIsoWeek": 1, - "ga:dimensionXX": 1, - "ga:productListViews": 1, - "ga:transactionRevenuePerSession": 1, - "ga:userTimingSample": 1, - "ga:adxRevenue": 1, - "ga:totalPublisherCTR": 1 - }, - "per_campaign_with_local_currency": { - "ga:totalPublisherRevenuePer1000Sessions": 1, - "ga:referralPath": 1, - "ga:transactionTax": 1, - "ga:backfillClicks": 1, - "ga:percentNewSessions": 1, - "ga:avgServerConnectionTime": 1, - "ga:productCheckouts": 1, - "ga:newUsers": 1, - "ga:RPC": 1, - "ga:adxMonetizedPageviews": 1, - "ga:avgPageLoadTime": 1, - "ga:backfillCTR": 1, - "ga:isoWeek": 1, - "ga:goalStartsAll": 1, - "ga:avgDomContentLoadedTime": 1, - "ga:domainLookupTime": 1, - "ga:dfpCoverage": 1, - "ga:adCost": 1, - "ga:localRefundAmount": 1, - "ga:goalXXValue": 1, - "ga:sourceMedium": 1, - "ga:experimentName": 1, - "ga:uniquePurchases": 1, - "ga:pageLoadSample": 1, - "ga:sessions": 1, - "ga:totalPublisherMonetizedPageviews": 1, - "ga:metricXX": 1, - "ga:adxImpressions": 1, - "ga:adsenseCoverage": 1, - "ga:searchUniques": 1, - "ga:screenviews": 1, - "ga:isTablet": 1, - "ga:productAddsToCart": 1, - "ga:avgScreenviewDuration": 1, - "ga:source": 1, - "ga:percentSearchRefinements": 1, - "ga:experimentOutcomeType": 1, - "ga:dfpImpressions": 1, - "ga:timeOnPage": 1, - "ga:localTransactionShipping": 1, - "ga:bounceRate": 1, - "ga:entrances": 1, - "ga:revenuePerTransaction": 1, - "ga:ROI": 1, - "ga:dcmFloodlightQuantity": 1, - "ga:redirectionTime": 1, - "ga:productRemovesFromCart": 1, - "ga:transactionRevenue": 1, - "ga:adSlot": 1, - "ga:CTR": 1, - "ga:entranceRate": 1, - "ga:buyToDetailRate": 1, - "ga:goalAbandonRateAll": 1, - "ga:adxViewableImpressionsPercent": 1, - "ga:avgSearchResultViews": 1, - "ga:backfillRevenuePer1000Sessions": 1, - "ga:productListCTR": 1, - "ga:avgDomainLookupTime": 1, - "ga:totalPublisherImpressionsPerSession": 1, - "ga:adxClicks": 1, - "ga:pageValue": 1, - "ga:dfpClicks": 1, - "ga:dfpImpressionsPerSession": 1, - "ga:localProductRefundAmount": 1, - "ga:organicSearches": 1, - "ga:isTrueViewVideoAd": 1, - "ga:adsenseECPM": 1, - "ga:adxImpressionsPerSession": 1, - "ga:searchRefinements": 1, - "ga:appName": 1, - "ga:quantityRefunded": 1, - "ga:nthMonth": 1, - "ga:avgTimeOnPage": 1, - "ga:goalXXAbandonRate": 1, - "ga:adxCTR": 1, - "ga:deviceCategory": 1, - "ga:nthWeek": 1, - "ga:totalPublisherRevenue": 1, - "ga:adClicks": 1, - "ga:adsenseViewableImpressionPercent": 1, - "ga:trafficType": 1, - "ga:itemsPerPurchase": 1, - "ga:productRefundAmount": 1, - "ga:avgDomInteractiveTime": 1, - "ga:goalXXCompletions": 1, - "ga:adsenseRevenue": 1, - "ga:goalXXAbandons": 1, - "ga:ROAS": 1, - "ga:campaign": 1, - "ga:isoYear": 1, - "ga:channelGrouping": 1, - "ga:dfpRevenue": 1, - "ga:keyword": 1, - "ga:pageviewsPerSession": 1, - "ga:dayOfWeek": 1, - "ga:adwordsAdGroupID": 1, - "ga:localItemRevenue": 1, - "ga:searchGoalXXConversionRate": 1, - "ga:goalCompletionsAll": 1, - "ga:productDetailViews": 1, - "ga:adsenseAdsClicks": 1, - "ga:experimentVariant": 1, - "ga:isMobile": 1, - "ga:searchResultViews": 1, - "ga:productRevenuePerPurchase": 1, - "ga:totalPublisherECPM": 1, - "ga:bounces": 1, - "ga:searchGoalConversionRateAll": 1, - "ga:avgPageDownloadTime": 1, - "ga:socialNetwork": 1, - "ga:costPerTransaction": 1, - "ga:revenuePerItem": 1, - "ga:cartToDetailRate": 1, - "ga:domInteractiveTime": 1, - "ga:percentSessionsWithSearch": 1, - "ga:nthHour": 1, - "ga:adsenseAdUnitsViewed": 1, - "ga:timeOnScreen": 1, - "ga:adGroup": 1, - "ga:localTransactionTax": 1, - "ga:experimentCombination": 1, - "ga:week": 1, - "ga:goalValueAllPerSearch": 1, - "ga:hour": 1, - "ga:dfpViewableImpressionsPercent": 1, - "ga:domContentLoadedTime": 1, - "ga:productListClicks": 1, - "ga:uniqueDimensionCombinations": 1, - "ga:uniqueEvents": 1, - "ga:users": 1, - "ga:appInstallerId": 1, - "ga:revenuePerUser": 1, - "ga:refundAmount": 1, - "ga:searchDepth": 1, - "ga:adsenseExits": 1, - "ga:appId": 1, - "ga:pageviews": 1, - "ga:goalXXStarts": 1, - "ga:itemRevenue": 1, - "ga:nthDay": 1, - "ga:totalPublisherClicks": 1, - "ga:screenviewsPerSession": 1, - "ga:serverConnectionTime": 1, - "ga:searchExits": 1, - "ga:externalActivityId": 1, - "ga:speedMetricsSample": 1, - "ga:backfillViewableImpressionsPercent": 1, - "ga:adSlotPosition": 1, - "ga:year": 1, - "ga:sessionsPerUser": 1, - "ga:adTargetingOption": 1, - "ga:entranceBounceRate": 1, - "ga:quantityRemovedFromCart": 1, - "ga:transactionsPerSession": 1, - "ga:appVersion": 1, - "ga:pageDownloadTime": 1, - "ga:goalValueAll": 1, - "ga:totalPublisherImpressions": 1, - "ga:totalValue": 1, - "ga:adsenseAdsViewed": 1, - "ga:exitRate": 1, - "ga:dfpECPM": 1, - "ga:backfillMonetizedPageviews": 1, - "ga:adxCoverage": 1, - "ga:totalPublisherCoverage": 1, - "ga:dcmFloodlightRevenue": 1, - "ga:uniquePageviews": 1, - "ga:experimentId": 1, - "ga:dateHour": 1, - "ga:totalRefunds": 1, - "ga:itemQuantity": 1, - "ga:avgSearchDuration": 1, - "ga:goalValuePerSession": 1, - "ga:transactionsPerUser": 1, - "ga:transactionShipping": 1, - "ga:yearMonth": 1, - "ga:avgSessionDuration": 1, - "ga:backfillECPM": 1, - "ga:domLatencyMetricsSample": 1, - "ga:transactions": 1, - "ga:costPerConversion": 1, - "ga:avgSearchDepth": 1, - "ga:goalConversionRateAll": 1, - "ga:dfpMonetizedPageviews": 1, - "ga:searchSessions": 1, - "ga:fullReferrer": 1, - "ga:productRefunds": 1, - "ga:costPerGoalConversion": 1, - "ga:sessionDuration": 1, - "ga:quantityCheckedOut": 1, - "ga:adxECPM": 1, - "ga:uniqueScreenviews": 1, - "ga:avgUserTimingValue": 1, - "ga:adContent": 1, - "ga:dataSource": 1, - "ga:dfpRevenuePer1000Sessions": 1, - "ga:backfillCoverage": 1, - "ga:serverResponseTime": 1, - "ga:totalPublisherViewableImpressionsPercent": 1, - "ga:adPlacementDomain": 1, - "ga:backfillRevenue": 1, - "ga:date": 1, - "ga:userTimingValue": 1, - "ga:day": 1, - "ga:dfpCTR": 1, - "ga:adsenseCTR": 1, - "ga:avgServerResponseTime": 1, - "ga:localTransactionRevenue": 1, - "ga:searchExitRate": 1, - "ga:backfillImpressionsPerSession": 1, - "ga:CPM": 1, - "ga:medium": 1, - "ga:adDestinationUrl": 1, - "ga:quantityAddedToCart": 1, - "ga:currencyCode": 1, - "ga:searchDuration": 1, - "ga:margin": 1, - "ga:backfillImpressions": 1, - "ga:goalXXConversionRate": 1, - "ga:month": 1, - "ga:yearWeek": 1, - "ga:exits": 1, - "ga:CPC": 1, - "ga:adxRevenuePer1000Sessions": 1, - "ga:dayOfWeekName": 1, - "ga:impressions": 1, - "ga:adsensePageImpressions": 1, - "ga:avgRedirectionTime": 1, - "ga:pageLoadTime": 1, - "ga:calcMetric_\u003cNAME\u003e": 1, - "ga:goalAbandonsAll": 1, - "ga:isoYearIsoWeek": 1, - "ga:dimensionXX": 1, - "ga:productListViews": 1, - "ga:transactionRevenuePerSession": 1, - "ga:adPlacementUrl": 1, - "ga:userTimingSample": 1, - "ga:adxRevenue": 1, - "ga:totalPublisherCTR": 1, - "ga:campaignCode": 1 - }, - "Cube:analytics/per_ecommerce_refund_import_without_transaction_product_metrics": { - "ga:transactionId": 1, - "ga:quantityRefunded": 1, - "ga:productSku": 1 - }, - "per_active_visitors_nthday_active_visitors_1": { - "ga:totalPublisherRevenuePer1000Sessions": 1, - "ga:transactionTax": 1, - "ga:backfillClicks": 1, - "ga:percentNewSessions": 1, - "ga:avgServerConnectionTime": 1, - "ga:productCheckouts": 1, - "ga:newUsers": 1, - "ga:RPC": 1, - "ga:adxMonetizedPageviews": 1, - "ga:avgPageLoadTime": 1, - "ga:backfillCTR": 1, - "ga:goalStartsAll": 1, - "ga:avgDomContentLoadedTime": 1, - "ga:domainLookupTime": 1, - "ga:dfpCoverage": 1, - "ga:goalXXValue": 1, - "ga:uniquePurchases": 1, - "ga:pageLoadSample": 1, - "ga:sessions": 1, - "ga:totalPublisherMonetizedPageviews": 1, - "ga:exceptions": 1, - "ga:metricXX": 1, - "ga:adxImpressions": 1, - "ga:adsenseCoverage": 1, - "ga:searchUniques": 1, - "ga:screenviews": 1, - "ga:productAddsToCart": 1, - "ga:avgScreenviewDuration": 1, - "ga:percentSearchRefinements": 1, - "ga:dfpImpressions": 1, - "ga:timeOnPage": 1, - "ga:bounceRate": 1, - "ga:entrances": 1, - "ga:revenuePerTransaction": 1, - "ga:dcmFloodlightQuantity": 1, - "ga:redirectionTime": 1, - "ga:productRemovesFromCart": 1, - "ga:dbmCPA": 1, - "ga:dbmCPC": 1, - "ga:transactionRevenue": 1, - "ga:dbmCPM": 1, - "ga:CTR": 1, - "ga:entranceRate": 1, - "ga:buyToDetailRate": 1, - "ga:goalAbandonRateAll": 1, - "ga:avgEventValue": 1, - "ga:dcmCTR": 1, - "ga:adxViewableImpressionsPercent": 1, - "ga:socialInteractionsPerSession": 1, - "ga:fatalExceptionsPerScreenview": 1, - "ga:avgSearchResultViews": 1, - "ga:backfillRevenuePer1000Sessions": 1, - "ga:productListCTR": 1, - "ga:avgDomainLookupTime": 1, - "ga:hits": 1, - "ga:totalPublisherImpressionsPerSession": 1, - "ga:adxClicks": 1, - "ga:pageValue": 1, - "ga:dfpClicks": 1, - "ga:dfpImpressionsPerSession": 1, - "ga:organicSearches": 1, - "ga:adsenseECPM": 1, - "ga:adxImpressionsPerSession": 1, - "ga:searchRefinements": 1, - "ga:quantityRefunded": 1, - "ga:avgTimeOnPage": 1, - "ga:goalXXAbandonRate": 1, - "ga:adxCTR": 1, - "ga:totalPublisherRevenue": 1, - "ga:adClicks": 1, - "ga:adsenseViewableImpressionPercent": 1, - "ga:uniqueSocialInteractions": 1, - "ga:totalEvents": 1, - "ga:itemsPerPurchase": 1, - "ga:productRefundAmount": 1, - "ga:avgDomInteractiveTime": 1, - "ga:goalXXCompletions": 1, - "ga:adsenseRevenue": 1, - "ga:goalXXAbandons": 1, - "ga:dbmCost": 1, - "ga:dfpRevenue": 1, - "ga:pageviewsPerSession": 1, - "ga:fatalExceptions": 1, - "ga:searchGoalXXConversionRate": 1, - "ga:goalCompletionsAll": 1, - "ga:productDetailViews": 1, - "ga:dbmCTR": 1, - "ga:adsenseAdsClicks": 1, - "ga:socialInteractions": 1, - "ga:dcmROAS": 1, - "ga:searchResultViews": 1, - "ga:productRevenuePerPurchase": 1, - "ga:totalPublisherECPM": 1, - "ga:bounces": 1, - "ga:dbmClicks": 1, - "ga:searchGoalConversionRateAll": 1, - "ga:avgPageDownloadTime": 1, - "ga:revenuePerItem": 1, - "ga:cartToDetailRate": 1, - "ga:dbmImpressions": 1, - "ga:domInteractiveTime": 1, - "ga:percentSessionsWithSearch": 1, - "ga:adsenseAdUnitsViewed": 1, - "ga:timeOnScreen": 1, - "ga:dbmConversions": 1, - "ga:goalValueAllPerSearch": 1, - "ga:dfpViewableImpressionsPercent": 1, - "ga:domContentLoadedTime": 1, - "ga:productListClicks": 1, - "ga:uniqueDimensionCombinations": 1, - "ga:uniqueEvents": 1, - "ga:refundAmount": 1, - "ga:searchDepth": 1, - "ga:pageviews": 1, - "ga:goalXXStarts": 1, - "ga:1dayUsers": 1, - "ga:itemRevenue": 1, - "ga:nthDay": 1, - "ga:totalPublisherClicks": 1, - "ga:screenviewsPerSession": 1, - "ga:serverConnectionTime": 1, - "ga:searchExits": 1, - "ga:speedMetricsSample": 1, - "ga:backfillViewableImpressionsPercent": 1, - "ga:entranceBounceRate": 1, - "ga:quantityRemovedFromCart": 1, - "ga:transactionsPerSession": 1, - "ga:pageDownloadTime": 1, - "ga:goalValueAll": 1, - "ga:dcmCost": 1, - "ga:totalPublisherImpressions": 1, - "ga:totalValue": 1, - "ga:adsenseAdsViewed": 1, - "ga:eventValue": 1, - "ga:exitRate": 1, - "ga:dfpECPM": 1, - "ga:backfillMonetizedPageviews": 1, - "ga:dbmROAS": 1, - "ga:adxCoverage": 1, - "ga:totalPublisherCoverage": 1, - "ga:dcmFloodlightRevenue": 1, - "ga:uniquePageviews": 1, - "ga:exceptionsPerScreenview": 1, - "ga:totalRefunds": 1, - "ga:itemQuantity": 1, - "ga:avgSearchDuration": 1, - "ga:goalValuePerSession": 1, - "ga:transactionShipping": 1, - "ga:avgSessionDuration": 1, - "ga:backfillECPM": 1, - "ga:domLatencyMetricsSample": 1, - "ga:sessionsWithEvent": 1, - "ga:transactions": 1, - "ga:avgSearchDepth": 1, - "ga:goalConversionRateAll": 1, - "ga:dfpMonetizedPageviews": 1, - "ga:dcmRPC": 1, - "ga:searchSessions": 1, - "ga:productRefunds": 1, - "ga:dcmClicks": 1, - "ga:sessionDuration": 1, - "ga:quantityCheckedOut": 1, - "ga:adxECPM": 1, - "ga:uniqueScreenviews": 1, - "ga:avgUserTimingValue": 1, - "ga:dfpRevenuePer1000Sessions": 1, - "ga:backfillCoverage": 1, - "ga:serverResponseTime": 1, - "ga:totalPublisherViewableImpressionsPercent": 1, - "ga:backfillRevenue": 1, - "ga:date": 1, - "ga:dcmCPC": 1, - "ga:userTimingValue": 1, - "ga:day": 1, - "ga:dfpCTR": 1, - "ga:adsenseCTR": 1, - "ga:avgServerResponseTime": 1, - "ga:searchExitRate": 1, - "ga:backfillImpressionsPerSession": 1, - "ga:quantityAddedToCart": 1, - "ga:searchDuration": 1, - "ga:backfillImpressions": 1, - "ga:goalXXConversionRate": 1, - "ga:exits": 1, - "ga:adxRevenuePer1000Sessions": 1, - "ga:impressions": 1, - "ga:adsensePageImpressions": 1, - "ga:avgRedirectionTime": 1, - "ga:eventsPerSessionWithEvent": 1, - "ga:pageLoadTime": 1, - "ga:dcmImpressions": 1, - "ga:calcMetric_\u003cNAME\u003e": 1, - "ga:goalAbandonsAll": 1, - "ga:dcmROI": 1, - "ga:productListViews": 1, - "ga:dcmMargin": 1, - "ga:transactionRevenuePerSession": 1, - "ga:userTimingSample": 1, - "ga:adxRevenue": 1, - "ga:totalPublisherCTR": 1 - }, - "per_dfa_model": { - "ga:metroId": 1, - "ga:percentNewSessions": 1, - "ga:week": 1, - "ga:dbmConversions": 1, - "ga:dcmLastEventAdvertiserId": 1, - "ga:newUsers": 1, - "ga:hour": 1, - "ga:dbmLastEventLineItemId": 1, - "ga:dcmLastEventAdvertiser": 1, - "ga:flashVersion": 1, - "ga:isoWeek": 1, - "ga:internalPromotionId": 1, - "ga:dcmLastEventCampaignId": 1, - "ga:goalStartsAll": 1, - "ga:dbmLastEventCreativeName": 1, - "ga:networkLocation": 1, - "ga:goalXXValue": 1, - "ga:users": 1, - "ga:revenuePerUser": 1, - "ga:refundAmount": 1, - "ga:subContinent": 1, - "ga:sessions": 1, - "ga:dbmLastEventSiteId": 1, - "ga:dcmLastEventAd": 1, - "ga:metricXX": 1, - "ga:dcmLastEventSpotId": 1, - "ga:screenResolution": 1, - "ga:isTablet": 1, - "ga:pageviews": 1, - "ga:goalXXStarts": 1, - "ga:networkDomain": 1, - "ga:bounceRate": 1, - "ga:nthDay": 1, - "ga:revenuePerTransaction": 1, - "ga:dbmLastEventAdvertiser": 1, - "ga:dbmLastEventAdvertiserId": 1, - "ga:dcmFloodlightQuantity": 1, - "ga:browserSize": 1, - "ga:dbmCPA": 1, - "ga:dbmCPC": 1, - "ga:year": 1, - "ga:dcmLastEventSitePlacementId": 1, - "ga:internalPromotionCreative": 1, - "ga:transactionRevenue": 1, - "ga:sessionsPerUser": 1, - "ga:dbmCPM": 1, - "ga:goalAbandonRateAll": 1, - "ga:transactionsPerSession": 1, - "ga:dcmLastEventAdType": 1, - "ga:dcmCTR": 1, - "ga:country": 1, - "ga:dcmLastEventCreativeVersion": 1, - "ga:goalValueAll": 1, - "ga:dcmLastEventSite": 1, - "ga:dbmLastEventInsertionOrderId": 1, - "ga:dcmCost": 1, - "ga:totalValue": 1, - "ga:browserVersion": 1, - "ga:dcmLastEventCreativeId": 1, - "ga:dbmROAS": 1, - "ga:internalPromotionName": 1, - "ga:cityId": 1, - "ga:operatingSystemVersion": 1, - "ga:dcmFloodlightRevenue": 1, - "ga:dcmLastEventCreative": 1, - "ga:dateHour": 1, - "ga:dbmLastEventSite": 1, - "ga:totalRefunds": 1, - "ga:dcmLastEventSitePlacement": 1, - "ga:dcmLastEventSiteId": 1, - "ga:goalValuePerSession": 1, - "ga:dcmLastEventCampaign": 1, - "ga:transactionsPerUser": 1, - "ga:metro": 1, - "ga:latitude": 1, - "ga:nthMonth": 1, - "ga:yearMonth": 1, - "ga:avgSessionDuration": 1, - "ga:city": 1, - "ga:goalXXAbandonRate": 1, - "ga:deviceCategory": 1, - "ga:continentId": 1, - "ga:transactions": 1, - "ga:countryIsoCode": 1, - "ga:dbmLastEventExchange": 1, - "ga:goalConversionRateAll": 1, - "ga:nthWeek": 1, - "ga:dcmRPC": 1, - "ga:dbmLastEventCreativeId": 1, - "ga:dcmClicks": 1, - "ga:dcmLastEventAttributionType": 1, - "ga:sessionDuration": 1, - "ga:dbmLastEventExchangeId": 1, - "ga:dbmLastEventInsertionOrder": 1, - "ga:goalXXCompletions": 1, - "ga:continent": 1, - "ga:goalXXAbandons": 1, - "ga:isoYear": 1, - "ga:dbmCost": 1, - "ga:dcmLastEventCreativeType": 1, - "ga:dataSource": 1, - "ga:pageviewsPerSession": 1, - "ga:dcmLastEventAdTypeId": 1, - "ga:dayOfWeek": 1, - "ga:dcmLastEventCreativeTypeId": 1, - "ga:dcmLastEventAdId": 1, - "ga:subContinentCode": 1, - "ga:date": 1, - "ga:dcmCPC": 1, - "ga:screenColors": 1, - "ga:operatingSystem": 1, - "ga:day": 1, - "ga:dcmLastEventRenderingId": 1, - "ga:goalCompletionsAll": 1, - "ga:dbmCTR": 1, - "ga:javaEnabled": 1, - "ga:language": 1, - "ga:region": 1, - "ga:dcmROAS": 1, - "ga:dbmLastEventLineItem": 1, - "ga:isMobile": 1, - "ga:goalXXConversionRate": 1, - "ga:month": 1, - "ga:yearWeek": 1, - "ga:internalPromotionPosition": 1, - "ga:bounces": 1, - "ga:dayOfWeekName": 1, - "ga:dbmClicks": 1, - "ga:dcmImpressions": 1, - "ga:regionIsoCode": 1, - "ga:calcMetric_\u003cNAME\u003e": 1, - "ga:goalAbandonsAll": 1, - "ga:isoYearIsoWeek": 1, - "ga:dimensionXX": 1, - "ga:dcmROI": 1, - "ga:dcmMargin": 1, - "ga:browser": 1, - "ga:transactionRevenuePerSession": 1, - "ga:dbmImpressions": 1, - "ga:longitude": 1, - "ga:regionId": 1, - "ga:nthHour": 1 - }, - "per_geo_dimension_widening_city_id": { - "ga:dimensionXX": 1, - "ga:cityId": 1 - }, - "smart_data_dimension_subcube": { - "ga:percentNewSessions": 1, - "ga:week": 1, - "ga:transactionsPerUser": 1, - "ga:date": 1, - "ga:nthMonth": 1, - "ga:day": 1, - "ga:yearMonth": 1, - "ga:avgSessionDuration": 1, - "ga:newUsers": 1, - "ga:year": 1, - "ga:sessionsPerUser": 1, - "ga:transactions": 1, - "ga:transactionRevenue": 1, - "ga:nthWeek": 1, - "ga:medium": 1, - "ga:transactionsPerSession": 1, - "ga:users": 1, - "ga:sourceMedium": 1, - "ga:revenuePerUser": 1, - "ga:month": 1, - "ga:yearWeek": 1, - "ga:bounces": 1, - "ga:sessions": 1, - "ga:dayOfWeekName": 1, - "ga:sessionDuration": 1, - "ga:pageviews": 1, - "ga:calcMetric_\u003cNAME\u003e": 1, - "ga:source": 1, - "ga:bounceRate": 1, - "ga:transactionRevenuePerSession": 1, - "ga:channelGrouping": 1, - "ga:nthDay": 1, - "ga:revenuePerTransaction": 1, - "ga:pageviewsPerSession": 1, - "ga:dayOfWeek": 1 - }, - "per_campaign_dart_search": { - "ga:transactionTax": 1, - "ga:percentNewSessions": 1, - "ga:week": 1, - "ga:avgServerConnectionTime": 1, - "ga:newUsers": 1, - "ga:hour": 1, - "ga:avgPageLoadTime": 1, - "ga:dsAdvertiserId": 1, - "ga:domContentLoadedTime": 1, - "ga:flashVersion": 1, - "ga:isoWeek": 1, - "ga:goalStartsAll": 1, - "ga:uniqueDimensionCombinations": 1, - "ga:avgDomContentLoadedTime": 1, - "ga:domainLookupTime": 1, - "ga:dsEngineAccount": 1, - "ga:goalXXValue": 1, - "ga:uniqueEvents": 1, - "ga:users": 1, - "ga:revenuePerUser": 1, - "ga:refundAmount": 1, - "ga:pageLoadSample": 1, - "ga:adsenseExits": 1, - "ga:totalPublisherMonetizedPageviews": 1, - "ga:sessions": 1, - "ga:metricXX": 1, - "ga:dsRevenuePerClick": 1, - "ga:screenResolution": 1, - "ga:screenviews": 1, - "ga:avgScreenviewDuration": 1, - "ga:pageviews": 1, - "ga:goalXXStarts": 1, - "ga:dsAdGroup": 1, - "ga:timeOnPage": 1, - "ga:bounceRate": 1, - "ga:nthDay": 1, - "ga:entrances": 1, - "ga:revenuePerTransaction": 1, - "ga:screenviewsPerSession": 1, - "ga:serverConnectionTime": 1, - "ga:redirectionTime": 1, - "ga:speedMetricsSample": 1, - "ga:browserSize": 1, - "ga:year": 1, - "ga:transactionRevenue": 1, - "ga:sessionsPerUser": 1, - "ga:entranceBounceRate": 1, - "ga:entranceRate": 1, - "ga:goalAbandonRateAll": 1, - "ga:transactionsPerSession": 1, - "ga:pageDownloadTime": 1, - "ga:goalValueAll": 1, - "ga:dsCPC": 1, - "ga:avgDomainLookupTime": 1, - "ga:dsAdGroupId": 1, - "ga:totalValue": 1, - "ga:browserVersion": 1, - "ga:pageValue": 1, - "ga:exitRate": 1, - "ga:operatingSystemVersion": 1, - "ga:organicSearches": 1, - "ga:uniquePageviews": 1, - "ga:dateHour": 1, - "ga:totalRefunds": 1, - "ga:dsCost": 1, - "ga:dsImpressions": 1, - "ga:goalValuePerSession": 1, - "ga:dsAdvertiser": 1, - "ga:transactionsPerUser": 1, - "ga:dsReturnOnAdSpend": 1, - "ga:transactionShipping": 1, - "ga:nthMonth": 1, - "ga:yearMonth": 1, - "ga:avgSessionDuration": 1, - "ga:avgTimeOnPage": 1, - "ga:domLatencyMetricsSample": 1, - "ga:goalXXAbandonRate": 1, - "ga:transactions": 1, - "ga:goalConversionRateAll": 1, - "ga:dsAgency": 1, - "ga:nthWeek": 1, - "ga:dsCampaign": 1, - "ga:sessionDuration": 1, - "ga:avgDomInteractiveTime": 1, - "ga:uniqueScreenviews": 1, - "ga:goalXXCompletions": 1, - "ga:avgUserTimingValue": 1, - "ga:goalXXAbandons": 1, - "ga:isoYear": 1, - "ga:serverResponseTime": 1, - "ga:dsCampaignId": 1, - "ga:pageviewsPerSession": 1, - "ga:dayOfWeek": 1, - "ga:dsEngineAccountId": 1, - "ga:date": 1, - "ga:screenColors": 1, - "ga:operatingSystem": 1, - "ga:dsClicks": 1, - "ga:userTimingValue": 1, - "ga:day": 1, - "ga:avgServerResponseTime": 1, - "ga:goalCompletionsAll": 1, - "ga:javaEnabled": 1, - "ga:language": 1, - "ga:goalXXConversionRate": 1, - "ga:month": 1, - "ga:yearWeek": 1, - "ga:exits": 1, - "ga:bounces": 1, - "ga:dsAgencyId": 1, - "ga:dayOfWeekName": 1, - "ga:avgPageDownloadTime": 1, - "ga:dsProfit": 1, - "ga:avgRedirectionTime": 1, - "ga:pageLoadTime": 1, - "ga:calcMetric_\u003cNAME\u003e": 1, - "ga:dsKeyword": 1, - "ga:goalAbandonsAll": 1, - "ga:isoYearIsoWeek": 1, - "ga:dimensionXX": 1, - "ga:browser": 1, - "ga:transactionRevenuePerSession": 1, - "ga:dsCTR": 1, - "ga:domInteractiveTime": 1, - "ga:dsKeywordId": 1, - "ga:nthHour": 1, - "ga:userTimingSample": 1, - "ga:timeOnScreen": 1 - }, - "per_query_with_cost_metrics": { - "ga:totalPublisherRevenuePer1000Sessions": 1, - "ga:referralPath": 1, - "ga:transactionTax": 1, - "ga:backfillClicks": 1, - "ga:percentNewSessions": 1, - "ga:avgServerConnectionTime": 1, - "ga:productCheckouts": 1, - "ga:newUsers": 1, - "ga:RPC": 1, - "ga:adxMonetizedPageviews": 1, - "ga:avgPageLoadTime": 1, - "ga:backfillCTR": 1, - "ga:isoWeek": 1, - "ga:goalStartsAll": 1, - "ga:avgDomContentLoadedTime": 1, - "ga:domainLookupTime": 1, - "ga:adwordsCreativeID": 1, - "ga:dfpCoverage": 1, - "ga:adCost": 1, - "ga:localRefundAmount": 1, - "ga:goalXXValue": 1, - "ga:sourceMedium": 1, - "ga:uniquePurchases": 1, - "ga:pageLoadSample": 1, - "ga:sessions": 1, - "ga:totalPublisherMonetizedPageviews": 1, - "ga:metricXX": 1, - "ga:adxImpressions": 1, - "ga:adsenseCoverage": 1, - "ga:searchUniques": 1, - "ga:screenviews": 1, - "ga:isTablet": 1, - "ga:productAddsToCart": 1, - "ga:avgScreenviewDuration": 1, - "ga:source": 1, - "ga:percentSearchRefinements": 1, - "ga:dfpImpressions": 1, - "ga:timeOnPage": 1, - "ga:localTransactionShipping": 1, - "ga:bounceRate": 1, - "ga:entrances": 1, - "ga:revenuePerTransaction": 1, - "ga:ROI": 1, - "ga:dcmFloodlightQuantity": 1, - "ga:redirectionTime": 1, - "ga:productRemovesFromCart": 1, - "ga:transactionRevenue": 1, - "ga:adSlot": 1, - "ga:CTR": 1, - "ga:entranceRate": 1, - "ga:buyToDetailRate": 1, - "ga:goalAbandonRateAll": 1, - "ga:adxViewableImpressionsPercent": 1, - "ga:avgSearchResultViews": 1, - "ga:adwordsCampaignID": 1, - "ga:backfillRevenuePer1000Sessions": 1, - "ga:productListCTR": 1, - "ga:avgDomainLookupTime": 1, - "ga:totalPublisherImpressionsPerSession": 1, - "ga:adxClicks": 1, - "ga:pageValue": 1, - "ga:dfpClicks": 1, - "ga:dfpImpressionsPerSession": 1, - "ga:localProductRefundAmount": 1, - "ga:organicSearches": 1, - "ga:isTrueViewVideoAd": 1, - "ga:adsenseECPM": 1, - "ga:adxImpressionsPerSession": 1, - "ga:searchRefinements": 1, - "ga:quantityRefunded": 1, - "ga:nthMonth": 1, - "ga:avgTimeOnPage": 1, - "ga:goalXXAbandonRate": 1, - "ga:adxCTR": 1, - "ga:deviceCategory": 1, - "ga:nthWeek": 1, - "ga:adMatchType": 1, - "ga:adwordsCustomerID": 1, - "ga:totalPublisherRevenue": 1, - "ga:adClicks": 1, - "ga:adsenseViewableImpressionPercent": 1, - "ga:trafficType": 1, - "ga:itemsPerPurchase": 1, - "ga:productRefundAmount": 1, - "ga:avgDomInteractiveTime": 1, - "ga:goalXXCompletions": 1, - "ga:adsenseRevenue": 1, - "ga:goalXXAbandons": 1, - "ga:ROAS": 1, - "ga:campaign": 1, - "ga:isoYear": 1, - "ga:channelGrouping": 1, - "ga:dfpRevenue": 1, - "ga:adwordsCustomerName": 1, - "ga:keyword": 1, - "ga:pageviewsPerSession": 1, - "ga:dayOfWeek": 1, - "ga:adwordsAdGroupID": 1, - "ga:localItemRevenue": 1, - "ga:searchGoalXXConversionRate": 1, - "ga:goalCompletionsAll": 1, - "ga:productDetailViews": 1, - "ga:adsenseAdsClicks": 1, - "ga:isMobile": 1, - "ga:searchResultViews": 1, - "ga:productRevenuePerPurchase": 1, - "ga:totalPublisherECPM": 1, - "ga:bounces": 1, - "ga:searchGoalConversionRateAll": 1, - "ga:avgPageDownloadTime": 1, - "ga:socialNetwork": 1, - "ga:costPerTransaction": 1, - "ga:revenuePerItem": 1, - "ga:cartToDetailRate": 1, - "ga:adDistributionNetwork": 1, - "ga:domInteractiveTime": 1, - "ga:percentSessionsWithSearch": 1, - "ga:nthHour": 1, - "ga:adsenseAdUnitsViewed": 1, - "ga:timeOnScreen": 1, - "ga:adGroup": 1, - "ga:localTransactionTax": 1, - "ga:week": 1, - "ga:goalValueAllPerSearch": 1, - "ga:hour": 1, - "ga:adQueryWordCount": 1, - "ga:dfpViewableImpressionsPercent": 1, - "ga:domContentLoadedTime": 1, - "ga:productListClicks": 1, - "ga:uniqueDimensionCombinations": 1, - "ga:uniqueEvents": 1, - "ga:users": 1, - "ga:revenuePerUser": 1, - "ga:refundAmount": 1, - "ga:adKeywordMatchType": 1, - "ga:searchDepth": 1, - "ga:adsenseExits": 1, - "ga:pageviews": 1, - "ga:goalXXStarts": 1, - "ga:itemRevenue": 1, - "ga:nthDay": 1, - "ga:totalPublisherClicks": 1, - "ga:screenviewsPerSession": 1, - "ga:serverConnectionTime": 1, - "ga:searchExits": 1, - "ga:speedMetricsSample": 1, - "ga:backfillViewableImpressionsPercent": 1, - "ga:year": 1, - "ga:sessionsPerUser": 1, - "ga:entranceBounceRate": 1, - "ga:quantityRemovedFromCart": 1, - "ga:transactionsPerSession": 1, - "ga:pageDownloadTime": 1, - "ga:goalValueAll": 1, - "ga:adMatchedQuery": 1, - "ga:totalPublisherImpressions": 1, - "ga:totalValue": 1, - "ga:adsenseAdsViewed": 1, - "ga:exitRate": 1, - "ga:dfpECPM": 1, - "ga:backfillMonetizedPageviews": 1, - "ga:adxCoverage": 1, - "ga:totalPublisherCoverage": 1, - "ga:dcmFloodlightRevenue": 1, - "ga:uniquePageviews": 1, - "ga:dateHour": 1, - "ga:totalRefunds": 1, - "ga:itemQuantity": 1, - "ga:avgSearchDuration": 1, - "ga:goalValuePerSession": 1, - "ga:adDisplayUrl": 1, - "ga:transactionsPerUser": 1, - "ga:transactionShipping": 1, - "ga:yearMonth": 1, - "ga:avgSessionDuration": 1, - "ga:backfillECPM": 1, - "ga:domLatencyMetricsSample": 1, - "ga:transactions": 1, - "ga:costPerConversion": 1, - "ga:avgSearchDepth": 1, - "ga:goalConversionRateAll": 1, - "ga:dfpMonetizedPageviews": 1, - "ga:searchSessions": 1, - "ga:productRefunds": 1, - "ga:costPerGoalConversion": 1, - "ga:sessionDuration": 1, - "ga:quantityCheckedOut": 1, - "ga:adxECPM": 1, - "ga:uniqueScreenviews": 1, - "ga:avgUserTimingValue": 1, - "ga:adContent": 1, - "ga:dataSource": 1, - "ga:dfpRevenuePer1000Sessions": 1, - "ga:backfillCoverage": 1, - "ga:serverResponseTime": 1, - "ga:totalPublisherViewableImpressionsPercent": 1, - "ga:backfillRevenue": 1, - "ga:adwordsCriteriaID": 1, - "ga:date": 1, - "ga:userTimingValue": 1, - "ga:day": 1, - "ga:dfpCTR": 1, - "ga:adsenseCTR": 1, - "ga:avgServerResponseTime": 1, - "ga:localTransactionRevenue": 1, - "ga:searchExitRate": 1, - "ga:backfillImpressionsPerSession": 1, - "ga:CPM": 1, - "ga:medium": 1, - "ga:adDestinationUrl": 1, - "ga:quantityAddedToCart": 1, - "ga:currencyCode": 1, - "ga:searchDuration": 1, - "ga:margin": 1, - "ga:backfillImpressions": 1, - "ga:goalXXConversionRate": 1, - "ga:month": 1, - "ga:yearWeek": 1, - "ga:exits": 1, - "ga:CPC": 1, - "ga:adxRevenuePer1000Sessions": 1, - "ga:dayOfWeekName": 1, - "ga:impressions": 1, - "ga:adsensePageImpressions": 1, - "ga:avgRedirectionTime": 1, - "ga:pageLoadTime": 1, - "ga:calcMetric_\u003cNAME\u003e": 1, - "ga:goalAbandonsAll": 1, - "ga:isoYearIsoWeek": 1, - "ga:dimensionXX": 1, - "ga:productListViews": 1, - "ga:transactionRevenuePerSession": 1, - "ga:userTimingSample": 1, - "ga:adxRevenue": 1, - "ga:totalPublisherCTR": 1 - }, - "gwo_transaction_subcube": { - "ga:itemQuantity": 1, - "ga:transactionTax": 1, - "ga:experimentCombination": 1, - "ga:productRemovesFromCart": 1, - "ga:transactionShipping": 1, - "ga:quantityRefunded": 1, - "ga:productCheckouts": 1, - "ga:transactions": 1, - "ga:transactionRevenue": 1, - "ga:productDetailViews": 1, - "ga:productListClicks": 1, - "ga:quantityRemovedFromCart": 1, - "ga:buyToDetailRate": 1, - "ga:quantityAddedToCart": 1, - "ga:experimentVariant": 1, - "ga:refundAmount": 1, - "ga:productRevenuePerPurchase": 1, - "ga:experimentName": 1, - "ga:uniquePurchases": 1, - "ga:productRefunds": 1, - "ga:productListCTR": 1, - "ga:itemsPerPurchase": 1, - "ga:productRefundAmount": 1, - "ga:quantityCheckedOut": 1, - "ga:productAddsToCart": 1, - "ga:productListViews": 1, - "ga:experimentOutcomeType": 1, - "ga:revenuePerItem": 1, - "ga:transactionId": 1, - "ga:cartToDetailRate": 1, - "ga:itemRevenue": 1, - "ga:revenuePerTransaction": 1, - "ga:experimentId": 1, - "ga:totalRefunds": 1 - }, - "enhanced_campaign": { - "ga:totalPublisherRevenuePer1000Sessions": 1, - "ga:transactionTax": 1, - "ga:backfillClicks": 1, - "ga:percentNewSessions": 1, - "ga:avgServerConnectionTime": 1, - "ga:productCheckouts": 1, - "ga:newUsers": 1, - "ga:RPC": 1, - "ga:adxMonetizedPageviews": 1, - "ga:avgPageLoadTime": 1, - "ga:backfillCTR": 1, - "ga:isoWeek": 1, - "ga:goalStartsAll": 1, - "ga:avgDomContentLoadedTime": 1, - "ga:domainLookupTime": 1, - "ga:dfpCoverage": 1, - "ga:adCost": 1, - "ga:goalXXValue": 1, - "ga:sourceMedium": 1, - "ga:uniquePurchases": 1, - "ga:pageLoadSample": 1, - "ga:sessions": 1, - "ga:totalPublisherMonetizedPageviews": 1, - "ga:metricXX": 1, - "ga:adxImpressions": 1, - "ga:adsenseCoverage": 1, - "ga:searchUniques": 1, - "ga:screenviews": 1, - "ga:productAddsToCart": 1, - "ga:avgScreenviewDuration": 1, - "ga:source": 1, - "ga:percentSearchRefinements": 1, - "ga:dfpImpressions": 1, - "ga:timeOnPage": 1, - "ga:bounceRate": 1, - "ga:entrances": 1, - "ga:revenuePerTransaction": 1, - "ga:ROI": 1, - "ga:dcmFloodlightQuantity": 1, - "ga:redirectionTime": 1, - "ga:productRemovesFromCart": 1, - "ga:transactionRevenue": 1, - "ga:CTR": 1, - "ga:entranceRate": 1, - "ga:buyToDetailRate": 1, - "ga:goalAbandonRateAll": 1, - "ga:adxViewableImpressionsPercent": 1, - "ga:avgSearchResultViews": 1, - "ga:adwordsCampaignID": 1, - "ga:backfillRevenuePer1000Sessions": 1, - "ga:productListCTR": 1, - "ga:avgDomainLookupTime": 1, - "ga:totalPublisherImpressionsPerSession": 1, - "ga:adxClicks": 1, - "ga:pageValue": 1, - "ga:dfpClicks": 1, - "ga:dfpImpressionsPerSession": 1, - "ga:organicSearches": 1, - "ga:adsenseECPM": 1, - "ga:adxImpressionsPerSession": 1, - "ga:searchRefinements": 1, - "ga:quantityRefunded": 1, - "ga:nthMonth": 1, - "ga:avgTimeOnPage": 1, - "ga:goalXXAbandonRate": 1, - "ga:adxCTR": 1, - "ga:nthWeek": 1, - "ga:adwordsCustomerID": 1, - "ga:totalPublisherRevenue": 1, - "ga:adClicks": 1, - "ga:adsenseViewableImpressionPercent": 1, - "ga:trafficType": 1, - "ga:itemsPerPurchase": 1, - "ga:productRefundAmount": 1, - "ga:avgDomInteractiveTime": 1, - "ga:goalXXCompletions": 1, - "ga:adsenseRevenue": 1, - "ga:goalXXAbandons": 1, - "ga:ROAS": 1, - "ga:campaign": 1, - "ga:isoYear": 1, - "ga:dfpRevenue": 1, - "ga:adwordsCustomerName": 1, - "ga:pageviewsPerSession": 1, - "ga:dayOfWeek": 1, - "ga:adwordsAdGroupID": 1, - "ga:searchGoalXXConversionRate": 1, - "ga:goalCompletionsAll": 1, - "ga:productDetailViews": 1, - "ga:adsenseAdsClicks": 1, - "ga:searchResultViews": 1, - "ga:productRevenuePerPurchase": 1, - "ga:totalPublisherECPM": 1, - "ga:bounces": 1, - "ga:searchGoalConversionRateAll": 1, - "ga:avgPageDownloadTime": 1, - "ga:costPerTransaction": 1, - "ga:revenuePerItem": 1, - "ga:cartToDetailRate": 1, - "ga:adDistributionNetwork": 1, - "ga:domInteractiveTime": 1, - "ga:percentSessionsWithSearch": 1, - "ga:nthHour": 1, - "ga:adsenseAdUnitsViewed": 1, - "ga:timeOnScreen": 1, - "ga:adGroup": 1, - "ga:week": 1, - "ga:goalValueAllPerSearch": 1, - "ga:hour": 1, - "ga:dfpViewableImpressionsPercent": 1, - "ga:domContentLoadedTime": 1, - "ga:productListClicks": 1, - "ga:uniqueDimensionCombinations": 1, - "ga:uniqueEvents": 1, - "ga:users": 1, - "ga:revenuePerUser": 1, - "ga:refundAmount": 1, - "ga:searchDepth": 1, - "ga:adsenseExits": 1, - "ga:pageviews": 1, - "ga:goalXXStarts": 1, - "ga:itemRevenue": 1, - "ga:nthDay": 1, - "ga:totalPublisherClicks": 1, - "ga:screenviewsPerSession": 1, - "ga:serverConnectionTime": 1, - "ga:searchExits": 1, - "ga:externalActivityId": 1, - "ga:speedMetricsSample": 1, - "ga:backfillViewableImpressionsPercent": 1, - "ga:year": 1, - "ga:sessionsPerUser": 1, - "ga:entranceBounceRate": 1, - "ga:quantityRemovedFromCart": 1, - "ga:transactionsPerSession": 1, - "ga:pageDownloadTime": 1, - "ga:goalValueAll": 1, - "ga:totalPublisherImpressions": 1, - "ga:totalValue": 1, - "ga:adsenseAdsViewed": 1, - "ga:exitRate": 1, - "ga:dfpECPM": 1, - "ga:backfillMonetizedPageviews": 1, - "ga:adxCoverage": 1, - "ga:totalPublisherCoverage": 1, - "ga:dcmFloodlightRevenue": 1, - "ga:uniquePageviews": 1, - "ga:dateHour": 1, - "ga:totalRefunds": 1, - "ga:itemQuantity": 1, - "ga:avgSearchDuration": 1, - "ga:goalValuePerSession": 1, - "ga:transactionsPerUser": 1, - "ga:transactionShipping": 1, - "ga:yearMonth": 1, - "ga:avgSessionDuration": 1, - "ga:backfillECPM": 1, - "ga:domLatencyMetricsSample": 1, - "ga:transactions": 1, - "ga:costPerConversion": 1, - "ga:avgSearchDepth": 1, - "ga:goalConversionRateAll": 1, - "ga:dfpMonetizedPageviews": 1, - "ga:searchSessions": 1, - "ga:productRefunds": 1, - "ga:costPerGoalConversion": 1, - "ga:sessionDuration": 1, - "ga:quantityCheckedOut": 1, - "ga:adxECPM": 1, - "ga:uniqueScreenviews": 1, - "ga:avgUserTimingValue": 1, - "ga:dfpRevenuePer1000Sessions": 1, - "ga:backfillCoverage": 1, - "ga:serverResponseTime": 1, - "ga:totalPublisherViewableImpressionsPercent": 1, - "ga:backfillRevenue": 1, - "ga:date": 1, - "ga:userTimingValue": 1, - "ga:day": 1, - "ga:dfpCTR": 1, - "ga:adsenseCTR": 1, - "ga:avgServerResponseTime": 1, - "ga:searchExitRate": 1, - "ga:backfillImpressionsPerSession": 1, - "ga:CPM": 1, - "ga:medium": 1, - "ga:quantityAddedToCart": 1, - "ga:searchDuration": 1, - "ga:margin": 1, - "ga:backfillImpressions": 1, - "ga:goalXXConversionRate": 1, - "ga:month": 1, - "ga:yearWeek": 1, - "ga:exits": 1, - "ga:CPC": 1, - "ga:adxRevenuePer1000Sessions": 1, - "ga:dayOfWeekName": 1, - "ga:impressions": 1, - "ga:adsensePageImpressions": 1, - "ga:avgRedirectionTime": 1, - "ga:pageLoadTime": 1, - "ga:calcMetric_\u003cNAME\u003e": 1, - "ga:goalAbandonsAll": 1, - "ga:isoYearIsoWeek": 1, - "ga:productListViews": 1, - "ga:transactionRevenuePerSession": 1, - "ga:userTimingSample": 1, - "ga:adxRevenue": 1, - "ga:totalPublisherCTR": 1 - }, - "per_content_with_gwo_id_and_outcomes": { - "ga:totalPublisherRevenuePer1000Sessions": 1, - "ga:transactionTax": 1, - "ga:metroId": 1, - "ga:backfillClicks": 1, - "ga:percentNewSessions": 1, - "ga:avgServerConnectionTime": 1, - "ga:productCheckouts": 1, - "ga:newUsers": 1, - "ga:adxMonetizedPageviews": 1, - "ga:avgPageLoadTime": 1, - "ga:flashVersion": 1, - "ga:backfillCTR": 1, - "ga:isoWeek": 1, - "ga:internalPromotionId": 1, - "ga:searchDestinationPage": 1, - "ga:goalStartsAll": 1, - "ga:avgDomContentLoadedTime": 1, - "ga:domainLookupTime": 1, - "ga:adwordsCreativeID": 1, - "ga:networkLocation": 1, - "ga:dfpCoverage": 1, - "ga:goalXXValue": 1, - "ga:experimentName": 1, - "ga:uniquePurchases": 1, - "ga:pageLoadSample": 1, - "ga:pageDepth": 1, - "ga:landingContentGroup4": 1, - "ga:landingContentGroup3": 1, - "ga:sessions": 1, - "ga:totalPublisherMonetizedPageviews": 1, - "ga:landingContentGroup2": 1, - "ga:landingContentGroup1": 1, - "ga:previousPagePath": 1, - "ga:metricXX": 1, - "ga:adxImpressions": 1, - "ga:landingContentGroup5": 1, - "ga:adsenseCoverage": 1, - "ga:screenResolution": 1, - "ga:searchUniques": 1, - "ga:screenviews": 1, - "ga:isTablet": 1, - "ga:productAddsToCart": 1, - "ga:avgScreenviewDuration": 1, - "ga:userTimingCategory": 1, - "ga:percentSearchRefinements": 1, - "ga:experimentOutcomeType": 1, - "ga:networkDomain": 1, - "ga:dfpImpressions": 1, - "ga:timeOnPage": 1, - "ga:bounceRate": 1, - "ga:entrances": 1, - "ga:revenuePerTransaction": 1, - "ga:dcmFloodlightQuantity": 1, - "ga:redirectionTime": 1, - "ga:screenName": 1, - "ga:productRemovesFromCart": 1, - "ga:internalPromotionCreative": 1, - "ga:transactionRevenue": 1, - "ga:secondPagePath": 1, - "ga:entranceRate": 1, - "ga:buyToDetailRate": 1, - "ga:goalAbandonRateAll": 1, - "ga:adxViewableImpressionsPercent": 1, - "ga:socialInteractionsPerSession": 1, - "ga:avgSearchResultViews": 1, - "ga:adwordsCampaignID": 1, - "ga:backfillRevenuePer1000Sessions": 1, - "ga:productListCTR": 1, - "ga:avgDomainLookupTime": 1, - "ga:socialInteractionNetworkAction": 1, - "ga:totalPublisherImpressionsPerSession": 1, - "ga:adxClicks": 1, - "ga:pageValue": 1, - "ga:dfpClicks": 1, - "ga:internalPromotionName": 1, - "ga:dfpImpressionsPerSession": 1, - "ga:cityId": 1, - "ga:organicSearches": 1, - "ga:landingScreenName": 1, - "ga:previousContentGroup1": 1, - "ga:previousContentGroup2": 1, - "ga:adsenseECPM": 1, - "ga:previousContentGroup3": 1, - "ga:adxImpressionsPerSession": 1, - "ga:previousContentGroup4": 1, - "ga:searchRefinements": 1, - "ga:appName": 1, - "ga:quantityRefunded": 1, - "ga:latitude": 1, - "ga:nthMonth": 1, - "ga:previousContentGroup5": 1, - "ga:avgTimeOnPage": 1, - "ga:sourcePropertyTrackingId": 1, - "ga:goalXXAbandonRate": 1, - "ga:adxCTR": 1, - "ga:continentId": 1, - "ga:deviceCategory": 1, - "ga:nthWeek": 1, - "ga:interestInMarketCategory": 1, - "ga:adMatchType": 1, - "ga:adwordsCustomerID": 1, - "ga:totalPublisherRevenue": 1, - "ga:userAgeBracket": 1, - "ga:adsenseViewableImpressionPercent": 1, - "ga:uniqueSocialInteractions": 1, - "ga:itemsPerPurchase": 1, - "ga:productRefundAmount": 1, - "ga:avgDomInteractiveTime": 1, - "ga:experimentStarts": 1, - "ga:goalXXCompletions": 1, - "ga:adsenseRevenue": 1, - "ga:continent": 1, - "ga:goalXXAbandons": 1, - "ga:isoYear": 1, - "ga:customVarValueXX": 1, - "ga:landingPagePath": 1, - "ga:dfpRevenue": 1, - "ga:adwordsCustomerName": 1, - "ga:mobileDeviceInfo": 1, - "ga:pageviewsPerSession": 1, - "ga:dayOfWeek": 1, - "ga:adwordsAdGroupID": 1, - "ga:searchGoalXXConversionRate": 1, - "ga:contentGroup1": 1, - "ga:contentGroup2": 1, - "ga:socialInteractionAction": 1, - "ga:contentGroup3": 1, - "ga:contentGroup4": 1, - "ga:contentGroup5": 1, - "ga:socialInteractionNetwork": 1, - "ga:goalCompletionsAll": 1, - "ga:productDetailViews": 1, - "ga:language": 1, - "ga:adsenseAdsClicks": 1, - "ga:searchAfterDestinationPage": 1, - "ga:socialInteractions": 1, - "ga:userTimingLabel": 1, - "ga:experimentVariant": 1, - "ga:isMobile": 1, - "ga:searchResultViews": 1, - "ga:exitScreenName": 1, - "ga:productRevenuePerPurchase": 1, - "ga:totalPublisherECPM": 1, - "ga:internalPromotionPosition": 1, - "ga:bounces": 1, - "ga:searchGoalConversionRateAll": 1, - "ga:avgPageDownloadTime": 1, - "ga:revenuePerItem": 1, - "ga:cartToDetailRate": 1, - "ga:adDistributionNetwork": 1, - "ga:userBucket": 1, - "ga:domInteractiveTime": 1, - "ga:socialEngagementType": 1, - "ga:percentSessionsWithSearch": 1, - "ga:longitude": 1, - "ga:nthHour": 1, - "ga:adsenseAdUnitsViewed": 1, - "ga:mobileInputSelector": 1, - "ga:timeOnScreen": 1, - "ga:shoppingStage": 1, - "ga:experimentCombination": 1, - "ga:week": 1, - "ga:sourcePropertyDisplayName": 1, - "ga:goalValueAllPerSearch": 1, - "ga:hour": 1, - "ga:dfpViewableImpressionsPercent": 1, - "ga:domContentLoadedTime": 1, - "ga:productListClicks": 1, - "ga:nextPagePath": 1, - "ga:uniqueDimensionCombinations": 1, - "ga:contentGroupUniqueViews2": 1, - "ga:contentGroupUniqueViews1": 1, - "ga:adTargetingType": 1, - "ga:screenDepth": 1, - "ga:uniqueEvents": 1, - "ga:users": 1, - "ga:contentGroupUniqueViews5": 1, - "ga:contentGroupUniqueViews4": 1, - "ga:appInstallerId": 1, - "ga:contentGroupUniqueViews3": 1, - "ga:revenuePerUser": 1, - "ga:refundAmount": 1, - "ga:adKeywordMatchType": 1, - "ga:searchDepth": 1, - "ga:subContinent": 1, - "ga:adsenseExits": 1, - "ga:appId": 1, - "ga:checkoutOptions": 1, - "ga:internalPromotionCTR": 1, - "ga:daysSinceLastSession": 1, - "ga:pageviews": 1, - "ga:userTimingVariable": 1, - "ga:goalXXStarts": 1, - "ga:userType": 1, - "ga:sessionCount": 1, - "ga:itemRevenue": 1, - "ga:nthDay": 1, - "ga:totalPublisherClicks": 1, - "ga:screenviewsPerSession": 1, - "ga:serverConnectionTime": 1, - "ga:searchExits": 1, - "ga:externalActivityId": 1, - "ga:speedMetricsSample": 1, - "ga:browserSize": 1, - "ga:backfillViewableImpressionsPercent": 1, - "ga:minute": 1, - "ga:year": 1, - "ga:exitPagePath": 1, - "ga:sessionsPerUser": 1, - "ga:adTargetingOption": 1, - "ga:entranceBounceRate": 1, - "ga:customVarNameXX": 1, - "ga:previousPageLinkId": 1, - "ga:quantityRemovedFromCart": 1, - "ga:socialInteractionTarget": 1, - "ga:experimentOutcomes": 1, - "ga:transactionsPerSession": 1, - "ga:appVersion": 1, - "ga:pageDownloadTime": 1, - "ga:country": 1, - "ga:goalValueAll": 1, - "ga:userGender": 1, - "ga:pagePath": 1, - "ga:totalPublisherImpressions": 1, - "ga:totalValue": 1, - "ga:browserVersion": 1, - "ga:adsenseAdsViewed": 1, - "ga:nthMinute": 1, - "ga:exitRate": 1, - "ga:dfpECPM": 1, - "ga:backfillMonetizedPageviews": 1, - "ga:adxCoverage": 1, - "ga:operatingSystemVersion": 1, - "ga:mobileDeviceMarketingName": 1, - "ga:totalPublisherCoverage": 1, - "ga:sessionDurationBucket": 1, - "ga:dcmFloodlightRevenue": 1, - "ga:uniquePageviews": 1, - "ga:experimentId": 1, - "ga:dateHour": 1, - "ga:totalRefunds": 1, - "ga:dateHourMinute": 1, - "ga:itemQuantity": 1, - "ga:avgSearchDuration": 1, - "ga:goalValuePerSession": 1, - "ga:adDisplayUrl": 1, - "ga:transactionsPerUser": 1, - "ga:transactionShipping": 1, - "ga:metro": 1, - "ga:internalPromotionClicks": 1, - "ga:yearMonth": 1, - "ga:avgSessionDuration": 1, - "ga:backfillECPM": 1, - "ga:city": 1, - "ga:domLatencyMetricsSample": 1, - "ga:transactions": 1, - "ga:countryIsoCode": 1, - "ga:avgSearchDepth": 1, - "ga:goalConversionRateAll": 1, - "ga:dfpMonetizedPageviews": 1, - "ga:clientId": 1, - "ga:searchSessions": 1, - "ga:productRefunds": 1, - "ga:socialInteractionNetworkActionSession": 1, - "ga:nextContentGroup1": 1, - "ga:hostname": 1, - "ga:nextContentGroup2": 1, - "ga:nextContentGroup3": 1, - "ga:nextContentGroup4": 1, - "ga:sessionDuration": 1, - "ga:quantityCheckedOut": 1, - "ga:adxECPM": 1, - "ga:nextContentGroup5": 1, - "ga:uniqueScreenviews": 1, - "ga:avgUserTimingValue": 1, - "ga:interestOtherCategory": 1, - "ga:internalPromotionViews": 1, - "ga:dataSource": 1, - "ga:dfpRevenuePer1000Sessions": 1, - "ga:backfillCoverage": 1, - "ga:serverResponseTime": 1, - "ga:pageTitle": 1, - "ga:userDefinedValue": 1, - "ga:totalPublisherViewableImpressionsPercent": 1, - "ga:adPlacementDomain": 1, - "ga:backfillRevenue": 1, - "ga:subContinentCode": 1, - "ga:mobileDeviceModel": 1, - "ga:adFormat": 1, - "ga:adwordsCriteriaID": 1, - "ga:date": 1, - "ga:screenColors": 1, - "ga:operatingSystem": 1, - "ga:userTimingValue": 1, - "ga:day": 1, - "ga:dfpCTR": 1, - "ga:adsenseCTR": 1, - "ga:avgServerResponseTime": 1, - "ga:searchExitRate": 1, - "ga:javaEnabled": 1, - "ga:backfillImpressionsPerSession": 1, - "ga:adDestinationUrl": 1, - "ga:region": 1, - "ga:pagePathLevel4": 1, - "ga:quantityAddedToCart": 1, - "ga:pagePathLevel1": 1, - "ga:searchDuration": 1, - "ga:pagePathLevel3": 1, - "ga:backfillImpressions": 1, - "ga:pagePathLevel2": 1, - "ga:goalXXConversionRate": 1, - "ga:month": 1, - "ga:yearWeek": 1, - "ga:exits": 1, - "ga:adxRevenuePer1000Sessions": 1, - "ga:dayOfWeekName": 1, - "ga:adsensePageImpressions": 1, - "ga:mobileDeviceBranding": 1, - "ga:avgRedirectionTime": 1, - "ga:pageLoadTime": 1, - "ga:regionIsoCode": 1, - "ga:calcMetric_\u003cNAME\u003e": 1, - "ga:goalAbandonsAll": 1, - "ga:isoYearIsoWeek": 1, - "ga:dimensionXX": 1, - "ga:productListViews": 1, - "ga:browser": 1, - "ga:transactionRevenuePerSession": 1, - "ga:interestAffinityCategory": 1, - "ga:regionId": 1, - "ga:adPlacementUrl": 1, - "ga:userTimingSample": 1, - "ga:adxRevenue": 1, - "ga:totalPublisherCTR": 1 - }, - "per_user_id_dimension_widening": { - "ga:dimensionXX": 1 - }, - "per_geo_dimension_widening_sub_continent_code": { - "ga:dimensionXX": 1, - "ga:subContinentCode": 1 - }, - "store_visits": { - "ga:referralPath": 1, - "ga:adGroup": 1, - "ga:metroId": 1, - "ga:percentNewSessions": 1, - "ga:week": 1, - "ga:metro": 1, - "ga:nthMonth": 1, - "ga:latitude": 1, - "ga:yearMonth": 1, - "ga:avgSessionDuration": 1, - "ga:newUsers": 1, - "ga:city": 1, - "ga:avgTimeOnPage": 1, - "ga:hour": 1, - "ga:continentId": 1, - "ga:deviceCategory": 1, - "ga:countryIsoCode": 1, - "ga:nthWeek": 1, - "ga:networkLocation": 1, - "ga:users": 1, - "ga:sourceMedium": 1, - "ga:subContinent": 1, - "ga:sessions": 1, - "ga:sessionDuration": 1, - "ga:continent": 1, - "ga:isTablet": 1, - "ga:pageviews": 1, - "ga:adContent": 1, - "ga:source": 1, - "ga:campaign": 1, - "ga:networkDomain": 1, - "ga:timeOnPage": 1, - "ga:dataSource": 1, - "ga:bounceRate": 1, - "ga:nthDay": 1, - "ga:channelGrouping": 1, - "ga:entrances": 1, - "ga:keyword": 1, - "ga:pageviewsPerSession": 1, - "ga:dayOfWeek": 1, - "ga:subContinentCode": 1, - "ga:date": 1, - "ga:day": 1, - "ga:year": 1, - "ga:sessionsPerUser": 1, - "ga:entranceBounceRate": 1, - "ga:medium": 1, - "ga:entranceRate": 1, - "ga:region": 1, - "ga:isMobile": 1, - "ga:country": 1, - "ga:month": 1, - "ga:yearWeek": 1, - "ga:adwordsCampaignID": 1, - "ga:exits": 1, - "ga:bounces": 1, - "ga:dayOfWeekName": 1, - "ga:regionIsoCode": 1, - "ga:calcMetric_\u003cNAME\u003e": 1, - "ga:cityId": 1, - "ga:uniquePageviews": 1, - "ga:longitude": 1, - "ga:nthHour": 1, - "ga:regionId": 1, - "ga:dateHour": 1 - }, - "per_active_visitors_nthday_active_visitors_7": { - "ga:totalPublisherRevenuePer1000Sessions": 1, - "ga:transactionTax": 1, - "ga:backfillClicks": 1, - "ga:percentNewSessions": 1, - "ga:avgServerConnectionTime": 1, - "ga:productCheckouts": 1, - "ga:newUsers": 1, - "ga:RPC": 1, - "ga:adxMonetizedPageviews": 1, - "ga:avgPageLoadTime": 1, - "ga:backfillCTR": 1, - "ga:goalStartsAll": 1, - "ga:avgDomContentLoadedTime": 1, - "ga:domainLookupTime": 1, - "ga:dfpCoverage": 1, - "ga:goalXXValue": 1, - "ga:uniquePurchases": 1, - "ga:pageLoadSample": 1, - "ga:sessions": 1, - "ga:totalPublisherMonetizedPageviews": 1, - "ga:exceptions": 1, - "ga:metricXX": 1, - "ga:adxImpressions": 1, - "ga:adsenseCoverage": 1, - "ga:searchUniques": 1, - "ga:screenviews": 1, - "ga:productAddsToCart": 1, - "ga:avgScreenviewDuration": 1, - "ga:percentSearchRefinements": 1, - "ga:dfpImpressions": 1, - "ga:timeOnPage": 1, - "ga:bounceRate": 1, - "ga:entrances": 1, - "ga:revenuePerTransaction": 1, - "ga:dcmFloodlightQuantity": 1, - "ga:redirectionTime": 1, - "ga:productRemovesFromCart": 1, - "ga:dbmCPA": 1, - "ga:dbmCPC": 1, - "ga:transactionRevenue": 1, - "ga:dbmCPM": 1, - "ga:CTR": 1, - "ga:entranceRate": 1, - "ga:buyToDetailRate": 1, - "ga:goalAbandonRateAll": 1, - "ga:avgEventValue": 1, - "ga:dcmCTR": 1, - "ga:adxViewableImpressionsPercent": 1, - "ga:socialInteractionsPerSession": 1, - "ga:fatalExceptionsPerScreenview": 1, - "ga:avgSearchResultViews": 1, - "ga:backfillRevenuePer1000Sessions": 1, - "ga:productListCTR": 1, - "ga:avgDomainLookupTime": 1, - "ga:hits": 1, - "ga:totalPublisherImpressionsPerSession": 1, - "ga:adxClicks": 1, - "ga:pageValue": 1, - "ga:dfpClicks": 1, - "ga:dfpImpressionsPerSession": 1, - "ga:organicSearches": 1, - "ga:adsenseECPM": 1, - "ga:adxImpressionsPerSession": 1, - "ga:searchRefinements": 1, - "ga:quantityRefunded": 1, - "ga:avgTimeOnPage": 1, - "ga:goalXXAbandonRate": 1, - "ga:adxCTR": 1, - "ga:totalPublisherRevenue": 1, - "ga:adClicks": 1, - "ga:adsenseViewableImpressionPercent": 1, - "ga:uniqueSocialInteractions": 1, - "ga:totalEvents": 1, - "ga:itemsPerPurchase": 1, - "ga:productRefundAmount": 1, - "ga:avgDomInteractiveTime": 1, - "ga:goalXXCompletions": 1, - "ga:adsenseRevenue": 1, - "ga:goalXXAbandons": 1, - "ga:dbmCost": 1, - "ga:dfpRevenue": 1, - "ga:pageviewsPerSession": 1, - "ga:fatalExceptions": 1, - "ga:searchGoalXXConversionRate": 1, - "ga:goalCompletionsAll": 1, - "ga:productDetailViews": 1, - "ga:dbmCTR": 1, - "ga:adsenseAdsClicks": 1, - "ga:socialInteractions": 1, - "ga:dcmROAS": 1, - "ga:searchResultViews": 1, - "ga:productRevenuePerPurchase": 1, - "ga:totalPublisherECPM": 1, - "ga:bounces": 1, - "ga:dbmClicks": 1, - "ga:searchGoalConversionRateAll": 1, - "ga:avgPageDownloadTime": 1, - "ga:revenuePerItem": 1, - "ga:cartToDetailRate": 1, - "ga:dbmImpressions": 1, - "ga:domInteractiveTime": 1, - "ga:percentSessionsWithSearch": 1, - "ga:adsenseAdUnitsViewed": 1, - "ga:timeOnScreen": 1, - "ga:dbmConversions": 1, - "ga:goalValueAllPerSearch": 1, - "ga:dfpViewableImpressionsPercent": 1, - "ga:domContentLoadedTime": 1, - "ga:productListClicks": 1, - "ga:uniqueDimensionCombinations": 1, - "ga:uniqueEvents": 1, - "ga:refundAmount": 1, - "ga:searchDepth": 1, - "ga:pageviews": 1, - "ga:goalXXStarts": 1, - "ga:itemRevenue": 1, - "ga:nthDay": 1, - "ga:totalPublisherClicks": 1, - "ga:screenviewsPerSession": 1, - "ga:serverConnectionTime": 1, - "ga:searchExits": 1, - "ga:speedMetricsSample": 1, - "ga:backfillViewableImpressionsPercent": 1, - "ga:entranceBounceRate": 1, - "ga:quantityRemovedFromCart": 1, - "ga:transactionsPerSession": 1, - "ga:pageDownloadTime": 1, - "ga:goalValueAll": 1, - "ga:dcmCost": 1, - "ga:totalPublisherImpressions": 1, - "ga:totalValue": 1, - "ga:adsenseAdsViewed": 1, - "ga:eventValue": 1, - "ga:7dayUsers": 1, - "ga:exitRate": 1, - "ga:dfpECPM": 1, - "ga:backfillMonetizedPageviews": 1, - "ga:dbmROAS": 1, - "ga:adxCoverage": 1, - "ga:totalPublisherCoverage": 1, - "ga:dcmFloodlightRevenue": 1, - "ga:uniquePageviews": 1, - "ga:exceptionsPerScreenview": 1, - "ga:totalRefunds": 1, - "ga:itemQuantity": 1, - "ga:avgSearchDuration": 1, - "ga:goalValuePerSession": 1, - "ga:transactionShipping": 1, - "ga:avgSessionDuration": 1, - "ga:backfillECPM": 1, - "ga:domLatencyMetricsSample": 1, - "ga:sessionsWithEvent": 1, - "ga:transactions": 1, - "ga:avgSearchDepth": 1, - "ga:goalConversionRateAll": 1, - "ga:dfpMonetizedPageviews": 1, - "ga:dcmRPC": 1, - "ga:searchSessions": 1, - "ga:productRefunds": 1, - "ga:dcmClicks": 1, - "ga:sessionDuration": 1, - "ga:quantityCheckedOut": 1, - "ga:adxECPM": 1, - "ga:uniqueScreenviews": 1, - "ga:avgUserTimingValue": 1, - "ga:dfpRevenuePer1000Sessions": 1, - "ga:backfillCoverage": 1, - "ga:serverResponseTime": 1, - "ga:totalPublisherViewableImpressionsPercent": 1, - "ga:backfillRevenue": 1, - "ga:date": 1, - "ga:dcmCPC": 1, - "ga:userTimingValue": 1, - "ga:day": 1, - "ga:dfpCTR": 1, - "ga:adsenseCTR": 1, - "ga:avgServerResponseTime": 1, - "ga:searchExitRate": 1, - "ga:backfillImpressionsPerSession": 1, - "ga:quantityAddedToCart": 1, - "ga:searchDuration": 1, - "ga:backfillImpressions": 1, - "ga:goalXXConversionRate": 1, - "ga:exits": 1, - "ga:adxRevenuePer1000Sessions": 1, - "ga:impressions": 1, - "ga:adsensePageImpressions": 1, - "ga:avgRedirectionTime": 1, - "ga:eventsPerSessionWithEvent": 1, - "ga:pageLoadTime": 1, - "ga:dcmImpressions": 1, - "ga:calcMetric_\u003cNAME\u003e": 1, - "ga:goalAbandonsAll": 1, - "ga:dcmROI": 1, - "ga:productListViews": 1, - "ga:dcmMargin": 1, - "ga:transactionRevenuePerSession": 1, - "ga:userTimingSample": 1, - "ga:adxRevenue": 1, - "ga:totalPublisherCTR": 1 - }, - "per_exception": { - "ga:percentNewSessions": 1, - "ga:week": 1, - "ga:appName": 1, - "ga:nthMonth": 1, - "ga:yearMonth": 1, - "ga:avgSessionDuration": 1, - "ga:newUsers": 1, - "ga:avgTimeOnPage": 1, - "ga:hour": 1, - "ga:sessionsWithEvent": 1, - "ga:deviceCategory": 1, - "ga:flashVersion": 1, - "ga:nthWeek": 1, - "ga:isoWeek": 1, - "ga:appInstallerId": 1, - "ga:totalEvents": 1, - "ga:sessions": 1, - "ga:appId": 1, - "ga:exceptions": 1, - "ga:metricXX": 1, - "ga:exceptionDescription": 1, - "ga:sessionDuration": 1, - "ga:screenResolution": 1, - "ga:uniqueScreenviews": 1, - "ga:screenviews": 1, - "ga:isTablet": 1, - "ga:avgScreenviewDuration": 1, - "ga:pageviews": 1, - "ga:isoYear": 1, - "ga:timeOnPage": 1, - "ga:dataSource": 1, - "ga:nthDay": 1, - "ga:screenviewsPerSession": 1, - "ga:mobileDeviceInfo": 1, - "ga:pageTitle": 1, - "ga:pageviewsPerSession": 1, - "ga:dayOfWeek": 1, - "ga:fatalExceptions": 1, - "ga:mobileDeviceModel": 1, - "ga:screenName": 1, - "ga:browserSize": 1, - "ga:date": 1, - "ga:screenColors": 1, - "ga:operatingSystem": 1, - "ga:day": 1, - "ga:year": 1, - "ga:javaEnabled": 1, - "ga:language": 1, - "ga:appVersion": 1, - "ga:isMobile": 1, - "ga:avgEventValue": 1, - "ga:fatalExceptionsPerScreenview": 1, - "ga:month": 1, - "ga:yearWeek": 1, - "ga:exits": 1, - "ga:pagePath": 1, - "ga:dayOfWeekName": 1, - "ga:browserVersion": 1, - "ga:mobileDeviceBranding": 1, - "ga:eventValue": 1, - "ga:eventsPerSessionWithEvent": 1, - "ga:calcMetric_\u003cNAME\u003e": 1, - "ga:exitRate": 1, - "ga:isoYearIsoWeek": 1, - "ga:dimensionXX": 1, - "ga:operatingSystemVersion": 1, - "ga:browser": 1, - "ga:mobileDeviceMarketingName": 1, - "ga:uniquePageviews": 1, - "ga:exceptionsPerScreenview": 1, - "ga:nthHour": 1, - "ga:dateHour": 1, - "ga:mobileInputSelector": 1, - "ga:timeOnScreen": 1 - }, - "channel_grouping_rule_key": { - "ga:sessions": 1, - "ga:calcMetric_\u003cNAME\u003e": 1 - }, - "per_active_visitors_date_active_visitors_30": { - "ga:totalPublisherRevenuePer1000Sessions": 1, - "ga:transactionTax": 1, - "ga:backfillClicks": 1, - "ga:percentNewSessions": 1, - "ga:avgServerConnectionTime": 1, - "ga:productCheckouts": 1, - "ga:newUsers": 1, - "ga:RPC": 1, - "ga:adxMonetizedPageviews": 1, - "ga:avgPageLoadTime": 1, - "ga:backfillCTR": 1, - "ga:goalStartsAll": 1, - "ga:avgDomContentLoadedTime": 1, - "ga:domainLookupTime": 1, - "ga:dfpCoverage": 1, - "ga:goalXXValue": 1, - "ga:uniquePurchases": 1, - "ga:pageLoadSample": 1, - "ga:sessions": 1, - "ga:totalPublisherMonetizedPageviews": 1, - "ga:exceptions": 1, - "ga:metricXX": 1, - "ga:adxImpressions": 1, - "ga:adsenseCoverage": 1, - "ga:searchUniques": 1, - "ga:screenviews": 1, - "ga:productAddsToCart": 1, - "ga:avgScreenviewDuration": 1, - "ga:percentSearchRefinements": 1, - "ga:dfpImpressions": 1, - "ga:timeOnPage": 1, - "ga:bounceRate": 1, - "ga:entrances": 1, - "ga:revenuePerTransaction": 1, - "ga:dcmFloodlightQuantity": 1, - "ga:redirectionTime": 1, - "ga:productRemovesFromCart": 1, - "ga:dbmCPA": 1, - "ga:dbmCPC": 1, - "ga:transactionRevenue": 1, - "ga:dbmCPM": 1, - "ga:CTR": 1, - "ga:entranceRate": 1, - "ga:buyToDetailRate": 1, - "ga:goalAbandonRateAll": 1, - "ga:avgEventValue": 1, - "ga:dcmCTR": 1, - "ga:adxViewableImpressionsPercent": 1, - "ga:socialInteractionsPerSession": 1, - "ga:fatalExceptionsPerScreenview": 1, - "ga:avgSearchResultViews": 1, - "ga:backfillRevenuePer1000Sessions": 1, - "ga:productListCTR": 1, - "ga:avgDomainLookupTime": 1, - "ga:hits": 1, - "ga:totalPublisherImpressionsPerSession": 1, - "ga:adxClicks": 1, - "ga:pageValue": 1, - "ga:dfpClicks": 1, - "ga:dfpImpressionsPerSession": 1, - "ga:organicSearches": 1, - "ga:adsenseECPM": 1, - "ga:adxImpressionsPerSession": 1, - "ga:searchRefinements": 1, - "ga:quantityRefunded": 1, - "ga:avgTimeOnPage": 1, - "ga:goalXXAbandonRate": 1, - "ga:adxCTR": 1, - "ga:totalPublisherRevenue": 1, - "ga:adClicks": 1, - "ga:adsenseViewableImpressionPercent": 1, - "ga:uniqueSocialInteractions": 1, - "ga:totalEvents": 1, - "ga:itemsPerPurchase": 1, - "ga:productRefundAmount": 1, - "ga:avgDomInteractiveTime": 1, - "ga:goalXXCompletions": 1, - "ga:adsenseRevenue": 1, - "ga:goalXXAbandons": 1, - "ga:dbmCost": 1, - "ga:dfpRevenue": 1, - "ga:pageviewsPerSession": 1, - "ga:fatalExceptions": 1, - "ga:searchGoalXXConversionRate": 1, - "ga:goalCompletionsAll": 1, - "ga:productDetailViews": 1, - "ga:dbmCTR": 1, - "ga:adsenseAdsClicks": 1, - "ga:socialInteractions": 1, - "ga:dcmROAS": 1, - "ga:searchResultViews": 1, - "ga:productRevenuePerPurchase": 1, - "ga:totalPublisherECPM": 1, - "ga:bounces": 1, - "ga:dbmClicks": 1, - "ga:searchGoalConversionRateAll": 1, - "ga:avgPageDownloadTime": 1, - "ga:revenuePerItem": 1, - "ga:cartToDetailRate": 1, - "ga:dbmImpressions": 1, - "ga:domInteractiveTime": 1, - "ga:percentSessionsWithSearch": 1, - "ga:adsenseAdUnitsViewed": 1, - "ga:timeOnScreen": 1, - "ga:dbmConversions": 1, - "ga:goalValueAllPerSearch": 1, - "ga:dfpViewableImpressionsPercent": 1, - "ga:domContentLoadedTime": 1, - "ga:productListClicks": 1, - "ga:30dayUsers": 1, - "ga:uniqueDimensionCombinations": 1, - "ga:uniqueEvents": 1, - "ga:refundAmount": 1, - "ga:searchDepth": 1, - "ga:pageviews": 1, - "ga:goalXXStarts": 1, - "ga:itemRevenue": 1, - "ga:nthDay": 1, - "ga:totalPublisherClicks": 1, - "ga:screenviewsPerSession": 1, - "ga:serverConnectionTime": 1, - "ga:searchExits": 1, - "ga:speedMetricsSample": 1, - "ga:backfillViewableImpressionsPercent": 1, - "ga:entranceBounceRate": 1, - "ga:quantityRemovedFromCart": 1, - "ga:transactionsPerSession": 1, - "ga:pageDownloadTime": 1, - "ga:goalValueAll": 1, - "ga:dcmCost": 1, - "ga:totalPublisherImpressions": 1, - "ga:totalValue": 1, - "ga:adsenseAdsViewed": 1, - "ga:eventValue": 1, - "ga:exitRate": 1, - "ga:dfpECPM": 1, - "ga:backfillMonetizedPageviews": 1, - "ga:dbmROAS": 1, - "ga:adxCoverage": 1, - "ga:totalPublisherCoverage": 1, - "ga:dcmFloodlightRevenue": 1, - "ga:uniquePageviews": 1, - "ga:exceptionsPerScreenview": 1, - "ga:totalRefunds": 1, - "ga:itemQuantity": 1, - "ga:avgSearchDuration": 1, - "ga:goalValuePerSession": 1, - "ga:transactionShipping": 1, - "ga:avgSessionDuration": 1, - "ga:backfillECPM": 1, - "ga:domLatencyMetricsSample": 1, - "ga:sessionsWithEvent": 1, - "ga:transactions": 1, - "ga:avgSearchDepth": 1, - "ga:goalConversionRateAll": 1, - "ga:dfpMonetizedPageviews": 1, - "ga:dcmRPC": 1, - "ga:searchSessions": 1, - "ga:productRefunds": 1, - "ga:dcmClicks": 1, - "ga:sessionDuration": 1, - "ga:quantityCheckedOut": 1, - "ga:adxECPM": 1, - "ga:uniqueScreenviews": 1, - "ga:avgUserTimingValue": 1, - "ga:dfpRevenuePer1000Sessions": 1, - "ga:backfillCoverage": 1, - "ga:serverResponseTime": 1, - "ga:totalPublisherViewableImpressionsPercent": 1, - "ga:backfillRevenue": 1, - "ga:date": 1, - "ga:dcmCPC": 1, - "ga:userTimingValue": 1, - "ga:day": 1, - "ga:dfpCTR": 1, - "ga:adsenseCTR": 1, - "ga:avgServerResponseTime": 1, - "ga:searchExitRate": 1, - "ga:backfillImpressionsPerSession": 1, - "ga:quantityAddedToCart": 1, - "ga:searchDuration": 1, - "ga:backfillImpressions": 1, - "ga:goalXXConversionRate": 1, - "ga:exits": 1, - "ga:adxRevenuePer1000Sessions": 1, - "ga:impressions": 1, - "ga:adsensePageImpressions": 1, - "ga:avgRedirectionTime": 1, - "ga:eventsPerSessionWithEvent": 1, - "ga:pageLoadTime": 1, - "ga:dcmImpressions": 1, - "ga:calcMetric_\u003cNAME\u003e": 1, - "ga:goalAbandonsAll": 1, - "ga:dcmROI": 1, - "ga:productListViews": 1, - "ga:dcmMargin": 1, - "ga:transactionRevenuePerSession": 1, - "ga:userTimingSample": 1, - "ga:adxRevenue": 1, - "ga:totalPublisherCTR": 1 - }, - "cohorts_overview_nth_month": { - "ga:acquisitionTrafficChannel": 1, - "ga:acquisitionSource": 1, - "ga:cohortRevenuePerUser": 1, - "ga:avgSessionDuration": 1, - "ga:cohortActiveUsers": 1, - "ga:cohortTotalUsersWithLifetimeCriteria": 1, - "ga:goalCompletionsAll": 1, - "ga:transactions": 1, - "ga:transactionRevenue": 1, - "ga:cohortSessionsPerUserWithLifetimeCriteria": 1, - "ga:cohort": 1, - "ga:goalConversionRateAll": 1, - "ga:cohortGoalCompletionsPerUserWithLifetimeCriteria": 1, - "ga:cohortGoalCompletionsPerUser": 1, - "ga:acquisitionMedium": 1, - "ga:transactionsPerSession": 1, - "ga:cohortRevenuePerUserWithLifetimeCriteria": 1, - "ga:cohortSessionDurationPerUserWithLifetimeCriteria": 1, - "ga:cohortPageviewsPerUser": 1, - "ga:cohortTotalUsers": 1, - "ga:acquisitionCampaign": 1, - "ga:sessions": 1, - "ga:cohortRetentionRate": 1, - "ga:acquisitionSourceMedium": 1, - "ga:cohortAppviewsPerUser": 1, - "ga:cohortSessionsPerUser": 1, - "ga:sessionDuration": 1, - "ga:cohortPageviewsPerUserWithLifetimeCriteria": 1, - "ga:screenviews": 1, - "ga:pageviews": 1, - "ga:calcMetric_\u003cNAME\u003e": 1, - "ga:transactionRevenuePerSession": 1, - "ga:cohortSessionDurationPerUser": 1, - "ga:cohortNthMonth": 1, - "ga:revenuePerTransaction": 1, - "ga:screenviewsPerSession": 1, - "ga:pageviewsPerSession": 1, - "ga:cohortAppviewsPerUserWithLifetimeCriteria": 1 - }, - "per_active_visitors_nthday_active_visitors_14": { - "ga:totalPublisherRevenuePer1000Sessions": 1, - "ga:transactionTax": 1, - "ga:backfillClicks": 1, - "ga:percentNewSessions": 1, - "ga:avgServerConnectionTime": 1, - "ga:productCheckouts": 1, - "ga:newUsers": 1, - "ga:RPC": 1, - "ga:adxMonetizedPageviews": 1, - "ga:avgPageLoadTime": 1, - "ga:backfillCTR": 1, - "ga:goalStartsAll": 1, - "ga:avgDomContentLoadedTime": 1, - "ga:domainLookupTime": 1, - "ga:dfpCoverage": 1, - "ga:goalXXValue": 1, - "ga:uniquePurchases": 1, - "ga:pageLoadSample": 1, - "ga:sessions": 1, - "ga:totalPublisherMonetizedPageviews": 1, - "ga:exceptions": 1, - "ga:metricXX": 1, - "ga:adxImpressions": 1, - "ga:adsenseCoverage": 1, - "ga:searchUniques": 1, - "ga:screenviews": 1, - "ga:productAddsToCart": 1, - "ga:avgScreenviewDuration": 1, - "ga:percentSearchRefinements": 1, - "ga:dfpImpressions": 1, - "ga:timeOnPage": 1, - "ga:bounceRate": 1, - "ga:entrances": 1, - "ga:revenuePerTransaction": 1, - "ga:dcmFloodlightQuantity": 1, - "ga:redirectionTime": 1, - "ga:productRemovesFromCart": 1, - "ga:dbmCPA": 1, - "ga:dbmCPC": 1, - "ga:transactionRevenue": 1, - "ga:dbmCPM": 1, - "ga:CTR": 1, - "ga:entranceRate": 1, - "ga:buyToDetailRate": 1, - "ga:goalAbandonRateAll": 1, - "ga:avgEventValue": 1, - "ga:dcmCTR": 1, - "ga:adxViewableImpressionsPercent": 1, - "ga:socialInteractionsPerSession": 1, - "ga:fatalExceptionsPerScreenview": 1, - "ga:avgSearchResultViews": 1, - "ga:backfillRevenuePer1000Sessions": 1, - "ga:productListCTR": 1, - "ga:avgDomainLookupTime": 1, - "ga:hits": 1, - "ga:totalPublisherImpressionsPerSession": 1, - "ga:adxClicks": 1, - "ga:pageValue": 1, - "ga:dfpClicks": 1, - "ga:dfpImpressionsPerSession": 1, - "ga:organicSearches": 1, - "ga:adsenseECPM": 1, - "ga:adxImpressionsPerSession": 1, - "ga:searchRefinements": 1, - "ga:quantityRefunded": 1, - "ga:avgTimeOnPage": 1, - "ga:goalXXAbandonRate": 1, - "ga:adxCTR": 1, - "ga:totalPublisherRevenue": 1, - "ga:adClicks": 1, - "ga:adsenseViewableImpressionPercent": 1, - "ga:uniqueSocialInteractions": 1, - "ga:totalEvents": 1, - "ga:itemsPerPurchase": 1, - "ga:productRefundAmount": 1, - "ga:avgDomInteractiveTime": 1, - "ga:goalXXCompletions": 1, - "ga:adsenseRevenue": 1, - "ga:goalXXAbandons": 1, - "ga:dbmCost": 1, - "ga:dfpRevenue": 1, - "ga:pageviewsPerSession": 1, - "ga:fatalExceptions": 1, - "ga:searchGoalXXConversionRate": 1, - "ga:goalCompletionsAll": 1, - "ga:productDetailViews": 1, - "ga:dbmCTR": 1, - "ga:14dayUsers": 1, - "ga:adsenseAdsClicks": 1, - "ga:socialInteractions": 1, - "ga:dcmROAS": 1, - "ga:searchResultViews": 1, - "ga:productRevenuePerPurchase": 1, - "ga:totalPublisherECPM": 1, - "ga:bounces": 1, - "ga:dbmClicks": 1, - "ga:searchGoalConversionRateAll": 1, - "ga:avgPageDownloadTime": 1, - "ga:revenuePerItem": 1, - "ga:cartToDetailRate": 1, - "ga:dbmImpressions": 1, - "ga:domInteractiveTime": 1, - "ga:percentSessionsWithSearch": 1, - "ga:adsenseAdUnitsViewed": 1, - "ga:timeOnScreen": 1, - "ga:dbmConversions": 1, - "ga:goalValueAllPerSearch": 1, - "ga:dfpViewableImpressionsPercent": 1, - "ga:domContentLoadedTime": 1, - "ga:productListClicks": 1, - "ga:uniqueDimensionCombinations": 1, - "ga:uniqueEvents": 1, - "ga:refundAmount": 1, - "ga:searchDepth": 1, - "ga:pageviews": 1, - "ga:goalXXStarts": 1, - "ga:itemRevenue": 1, - "ga:nthDay": 1, - "ga:totalPublisherClicks": 1, - "ga:screenviewsPerSession": 1, - "ga:serverConnectionTime": 1, - "ga:searchExits": 1, - "ga:speedMetricsSample": 1, - "ga:backfillViewableImpressionsPercent": 1, - "ga:entranceBounceRate": 1, - "ga:quantityRemovedFromCart": 1, - "ga:transactionsPerSession": 1, - "ga:pageDownloadTime": 1, - "ga:goalValueAll": 1, - "ga:dcmCost": 1, - "ga:totalPublisherImpressions": 1, - "ga:totalValue": 1, - "ga:adsenseAdsViewed": 1, - "ga:eventValue": 1, - "ga:exitRate": 1, - "ga:dfpECPM": 1, - "ga:backfillMonetizedPageviews": 1, - "ga:dbmROAS": 1, - "ga:adxCoverage": 1, - "ga:totalPublisherCoverage": 1, - "ga:dcmFloodlightRevenue": 1, - "ga:uniquePageviews": 1, - "ga:exceptionsPerScreenview": 1, - "ga:totalRefunds": 1, - "ga:itemQuantity": 1, - "ga:avgSearchDuration": 1, - "ga:goalValuePerSession": 1, - "ga:transactionShipping": 1, - "ga:avgSessionDuration": 1, - "ga:backfillECPM": 1, - "ga:domLatencyMetricsSample": 1, - "ga:sessionsWithEvent": 1, - "ga:transactions": 1, - "ga:avgSearchDepth": 1, - "ga:goalConversionRateAll": 1, - "ga:dfpMonetizedPageviews": 1, - "ga:dcmRPC": 1, - "ga:searchSessions": 1, - "ga:productRefunds": 1, - "ga:dcmClicks": 1, - "ga:sessionDuration": 1, - "ga:quantityCheckedOut": 1, - "ga:adxECPM": 1, - "ga:uniqueScreenviews": 1, - "ga:avgUserTimingValue": 1, - "ga:dfpRevenuePer1000Sessions": 1, - "ga:backfillCoverage": 1, - "ga:serverResponseTime": 1, - "ga:totalPublisherViewableImpressionsPercent": 1, - "ga:backfillRevenue": 1, - "ga:date": 1, - "ga:dcmCPC": 1, - "ga:userTimingValue": 1, - "ga:day": 1, - "ga:dfpCTR": 1, - "ga:adsenseCTR": 1, - "ga:avgServerResponseTime": 1, - "ga:searchExitRate": 1, - "ga:backfillImpressionsPerSession": 1, - "ga:quantityAddedToCart": 1, - "ga:searchDuration": 1, - "ga:backfillImpressions": 1, - "ga:goalXXConversionRate": 1, - "ga:exits": 1, - "ga:adxRevenuePer1000Sessions": 1, - "ga:impressions": 1, - "ga:adsensePageImpressions": 1, - "ga:avgRedirectionTime": 1, - "ga:eventsPerSessionWithEvent": 1, - "ga:pageLoadTime": 1, - "ga:dcmImpressions": 1, - "ga:calcMetric_\u003cNAME\u003e": 1, - "ga:goalAbandonsAll": 1, - "ga:dcmROI": 1, - "ga:productListViews": 1, - "ga:dcmMargin": 1, - "ga:transactionRevenuePerSession": 1, - "ga:userTimingSample": 1, - "ga:adxRevenue": 1, - "ga:totalPublisherCTR": 1 - } -} diff --git a/src/components/DimensionsMetricsExplorer/index.spec.tsx b/src/components/DimensionsMetricsExplorer/index.spec.tsx deleted file mode 100644 index 7136ce7b1..000000000 --- a/src/components/DimensionsMetricsExplorer/index.spec.tsx +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright 2020 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 * as React from "react" -import * as renderer from "@testing-library/react" -import { withProviders } from "../../test-utils" -import userEvent from "@testing-library/user-event" -import "@testing-library/jest-dom" - -import DimensionMetricsExplorer from "./index" - -describe("Dimensions and Metrics Explorer", () => { - // This test may go out of date, but we want at least once instance of making - // sure the intersection logic works for compatable dimensions. - it("disables incompatable metric when 'User Type' dimension is selected", async () => { - const { wrapped, gapi } = withProviders() - const { getByText, findByLabelText } = renderer.render(wrapped) - - // Wait for api promise to resolve so it won't render "fetching". - await renderer.act(async () => { - // metadata: { columns: { list: () => metadataColumnsPromise } }, - await gapi!.client!.analytics!.metadata!.columns!.list!() - // await gapi.client.analytics.management.accountSummaries.list() - }) - - await renderer.act(async () => { - userEvent.click(getByText("User")) - const userType = await findByLabelText(/User Type/) - const oneDayActiveUsers = await findByLabelText(/1 Day Active Users/) - expect(userType).not.toBeDisabled() - expect(oneDayActiveUsers).not.toBeDisabled() - userEvent.click(userType) - expect(oneDayActiveUsers).toBeDisabled() - }) - }) -}) diff --git a/src/components/DimensionsMetricsExplorer/index.tsx b/src/components/DimensionsMetricsExplorer/index.tsx deleted file mode 100644 index 3e9de689c..000000000 --- a/src/components/DimensionsMetricsExplorer/index.tsx +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2020 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 * as React from "react" - -import Typography from "@material-ui/core/Typography" -import Explorer from "./Explorer" - -export const DimensionsMetricsExplorer = () => { - return ( - <> - - The Dimensions & Metrics Explorer lists and describes all of the - dimensions and metrics available through the Core Reporting API. - - - - The Dimensions & Metrics Explorer has the following features: - - - - Explore all of the dimensions and metrics – Search or - browse by group. Select a dimension or metric for additional details - such as descriptions and attributes. - - - - Identify valid combinations – Not all dimensions and - metrics can be queried together. Only certain dimensions and metrics can - be used together to create valid combinations. Select a dimension or - metric checkbox to see all the other values that can be combined in the - same query. - - - - - ) -} - -export default DimensionsMetricsExplorer diff --git a/src/components/DimensionsMetricsExplorer/useAnchorRedirects.ts b/src/components/DimensionsMetricsExplorer/useAnchorRedirects.ts deleted file mode 100644 index a6affec6a..000000000 --- a/src/components/DimensionsMetricsExplorer/useAnchorRedirects.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { navigate } from "gatsby" -import { useLocation } from "@reach/router" -import { useEffect } from "react" - -// This is used to do client-side redirects from the old ga:id style hash that -// was used in the old demos and tools site. -const useAnchorRedirects = ( - columns: gapi.client.analytics.Column[] | undefined -) => { - const { hash, pathname } = useLocation() - - useEffect(() => { - if (hash === undefined || hash === "" || columns === undefined) { - return - } - if (hash.startsWith("#ga:")) { - const id = hash.substring(1) - const column = columns.find(column => { - return column.id === id - }) - // This is the case where there isn't a dim/met to redirect to. - if (column === undefined) { - return - } - const group = column.attributes!.group - const newUrl = - pathname + - group.toLowerCase().replaceAll(" ", "-") + - "#" + - hash.substring(4) - navigate(newUrl, { replace: true }) - } - }, [hash, columns, pathname]) -} - -export default useAnchorRedirects diff --git a/src/components/DimensionsMetricsExplorer/useColumns.ts b/src/components/DimensionsMetricsExplorer/useColumns.ts deleted file mode 100644 index 60fbec388..000000000 --- a/src/components/DimensionsMetricsExplorer/useColumns.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { StorageKey } from "@/constants" -import useCached from "@/hooks/useCached" -import { Requestable, RequestStatus } from "@/types" -import { Column } from "@/types/ua" -import moment from "moment" -import { useCallback, useMemo } from "react" -import { useSelector } from "react-redux" - -const useColumns = (): Requestable< - { columns: Column[] }, - {}, - {}, - { error: any } -> => { - const gapi = useSelector((a: AppState) => a.gapi) - const metadataAPI = useMemo(() => gapi?.client?.analytics?.metadata, [gapi]) - - const requestReady = useMemo(() => metadataAPI !== undefined, [metadataAPI]) - - const makeRequest = useCallback(async () => { - if (metadataAPI === undefined) { - throw new Error("Invalid invariant - metadataAPI must be defined here.") - } - return metadataAPI.columns - .list({ reportType: "ga" }) - .then(response => response.result.items) - }, [metadataAPI]) - - const columnsRequest = useCached( - StorageKey.dimensionsMetricsExplorerColumns, - makeRequest, - moment.duration(5, "minutes"), - requestReady - ) - - return useMemo(() => { - switch (columnsRequest.status) { - case RequestStatus.Successful: { - const columns = columnsRequest.value - if (columns === undefined) { - throw new Error("invalid invarint - columns must be defined here") - } - return { status: columnsRequest.status, columns } - } - case RequestStatus.NotStarted: - case RequestStatus.InProgress: - return { status: columnsRequest.status } - case RequestStatus.Failed: { - return columnsRequest - } - } - }, [columnsRequest]) -} - -export default useColumns diff --git a/src/components/ErrorFallback/index.tsx b/src/components/ErrorFallback/index.tsx index 651813796..adbede71e 100644 --- a/src/components/ErrorFallback/index.tsx +++ b/src/components/ErrorFallback/index.tsx @@ -1,36 +1,50 @@ -import { makeStyles, Typography } from "@material-ui/core" -import { FallbackProps } from "react-error-boundary" +import {Typography} from "@mui/material" +import { styled } from '@mui/material/styles'; + +import {FallbackProps} from "react-error-boundary" import * as React from "react" import CodeBlock from "../CodeBlock" -import { PAB } from "../Buttons" +import {PAB} from "../Buttons" import Warning from "../Warning" -const useStyles = makeStyles(theme => ({ - error: { +const PREFIX = 'ErrorFallback'; + +const classes = { + error: `${PREFIX}-error`, + resetButton: `${PREFIX}-resetButton` +}; + +const Root = styled('section')(( + { + theme + } +) => ({ + [`&.${classes.error}`]: { padding: theme.spacing(2), maxWidth: theme.breakpoints.values.md, }, - resetButton: { + + [`& .${classes.resetButton}`]: { marginTop: theme.spacing(1), - }, -})) + } +})); const ErrorFallback: React.FC = ({ error, resetErrorBoundary, }) => { - const classes = useStyles() + return ( -
+ Something went wrong {error.message} Reset App -
- ) + + ); } export default ErrorFallback diff --git a/src/components/ExternalLink.tsx b/src/components/ExternalLink.tsx index a41ab1597..46676c995 100644 --- a/src/components/ExternalLink.tsx +++ b/src/components/ExternalLink.tsx @@ -1,49 +1,67 @@ import * as React from "react" -import { makeStyles, Tooltip } from "@material-ui/core" -import { Launch } from "@material-ui/icons" +import { styled } from '@mui/material/styles'; + +import { Tooltip } from "@mui/material" + +import { Launch } from "@mui/icons-material" import clsx from "classnames" +import {PropsWithChildren} from 'react'; + +const PREFIX = 'ExternalLink'; -const useStyles = makeStyles(_ => ({ - link: { +const classes = { + link: `${PREFIX}-link`, + icon: `${PREFIX}-icon`, + hover: `${PREFIX}-hover` +}; + +const Root = styled('div')(() => ({ + [`& .${classes.link}`]: { display: "inline-flex", alignItems: "center", }, - icon: { + + [`& .${classes.icon}`]: { marginLeft: "0.5ch", color: "inherit", }, - hover: { + + [`& .${classes.hover}`]: { "&:hover": { opacity: 1.0, }, opacity: 0.3, - }, -})) + } +})); -const ExternalLink: React.FC<{ +type Props = { href: string title?: string hover?: true | undefined -}> = ({ href, title, children, hover }) => { - const classes = useStyles() +} + +const ExternalLink: React.FC> = ({ href, title, children, hover }) => { + return ( - - - {children} - - - - ) + + + + {children} + + + + + ); } export default ExternalLink diff --git a/src/components/GA4Pickers/index.tsx b/src/components/GA4Pickers/index.tsx index 91616884b..690b5afc3 100644 --- a/src/components/GA4Pickers/index.tsx +++ b/src/components/GA4Pickers/index.tsx @@ -14,35 +14,46 @@ import * as React from "react" -import { Typography, TextField, makeStyles } from "@material-ui/core" +import { styled } from '@mui/material/styles'; + +import { Typography, TextField } from "@mui/material" import Autocomplete, { createFilterOptions, -} from "@material-ui/lab/Autocomplete" +} from "@mui/material/Autocomplete" import { useState } from "react" import { Dispatch, RequestStatus } from "@/types" import useAvailableColumns from "./useAvailableColumns" import { DimensionsAndMetricsRequestCtx } from "../ga4/DimensionsMetricsExplorer/useDimensionsAndMetrics" -const useColumnStyles = makeStyles(() => ({ - option: { +const PREFIX = 'DimensionsPicker'; + +const classes = { + option: `${PREFIX}-option`, + left: `${PREFIX}-left` +}; + +const StyledTextField + = styled(TextField +)(() => ({ + [`& .${classes.option}`]: { display: "flex", width: "100%", }, - left: { + + [`& .${classes.left}`]: { flexGrow: 1, display: "flex", flexDirection: "column", - }, -})) + } +})); export type GA4Dimension = gapi.client.analyticsdata.DimensionMetadata export type GA4Dimensions = GA4Dimension[] | undefined export type GA4Metric = gapi.client.analyticsdata.MetricMetadata export type GA4Metrics = GA4Metric[] | undefined -type GA4Column = GA4Dimension | GA4Dimension +type GA4Column = GA4Dimension | GA4Metric const Column: React.FC<{ column: GA4Column }> = ({ column }) => { - const classes = useColumnStyles() return (
@@ -95,7 +106,7 @@ export const DimensionsPicker: React.FC<{ multiple loading={request.status === RequestStatus.InProgress} options={dimensionOptionsLessSelected || []} - getOptionLabel={dimension => dimension.apiName!} + getOptionLabel={ (dimension) => typeof dimension === "string" ? dimension : dimension.apiName!} value={dimensions || []} onChange={(_event, value) => { if (setDimensions !== undefined) { @@ -109,9 +120,13 @@ export const DimensionsPicker: React.FC<{ : setDimensionIDs((value as GA4Dimension[]).map(m => m.apiName!)) } }} - renderOption={column => } + renderOption={(props, column) => ( +
  • + +
  • + )} renderInput={params => ( - metric.apiName!} + getOptionLabel={ (metric) => typeof metric === "string" ? metric : metric.apiName!} value={metrics || []} onChange={(_event, value) => { if (setMetrics !== undefined) { @@ -177,9 +192,13 @@ export const MetricsPicker: React.FC<{ : setMetricsIDs((value as GA4Metric[]).map(m => m.apiName!)) } }} - renderOption={column => } + renderOption={(props, column) => ( +
  • + +
  • + )} renderInput={params => ( - dimension.apiName!} + getOptionLabel={ (dimension) => typeof dimension === "string" ? dimension : dimension.apiName!} value={selected === undefined ? null : selected} onChange={(_event, value) => setSelected(value === null ? undefined : (value as GA4Dimension)) } - renderOption={column => } + renderOption={(props, column) => ( +
  • + +
  • + )} renderInput={params => ( - { if ( @@ -349,14 +372,18 @@ export const MetricPicker: React.FC<{ freeSolo loading={request.status === RequestStatus.InProgress} options={metricOptionsLessSelected || []} - getOptionLabel={metric => metric.apiName!} + getOptionLabel={ (metric) => typeof metric === "string" ? metric : metric.apiName!} value={selected === undefined ? null : selected} onChange={(_event, value) => setSelected(value === null ? undefined : (value as GA4Metric)) } - renderOption={column => } + renderOption={(props, column) => ( +
  • + +
  • + )} renderInput={params => ( - ({ + [`&.${classes.dateRange}`]: { + display: "inline-flex", + "&> :not(:first-child)": { + marginLeft: theme.spacing(1), + }, + }, + + [`& .${classes.wideInput}`]: { + flexGrow: 1, + } +})); interface GADateProps extends LinkedTextFieldProps {} @@ -26,18 +51,6 @@ export const GADate: React.FC = ({ ) } -const useStyles = makeStyles(theme => ({ - dateRange: { - display: "inline-flex", - "&> :not(:first-child)": { - marginLeft: theme.spacing(1), - }, - }, - wideInput: { - flexGrow: 1, - }, -})) - type DateRange = gapi.client.analyticsdata.DateRange interface GADateRangeProps { value: DateRange @@ -49,10 +62,10 @@ export const GADateRange: React.FC = ({ setValue, showName, }) => { - const classes = useStyles() + return ( - + {showName && ( = ({ setValue(old => ({ ...old, endDate })) }} /> - - ) + + ); } export default GADate diff --git a/src/components/HitBuilder/HitCard.tsx b/src/components/HitBuilder/HitCard.tsx deleted file mode 100644 index 14af35508..000000000 --- a/src/components/HitBuilder/HitCard.tsx +++ /dev/null @@ -1,368 +0,0 @@ -// Copyright 2020 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 React from "react" - -import Warning from "@material-ui/icons/Warning" -import ErrorIcon from "@material-ui/icons/Error" -import Button from "@material-ui/core/Button" -import TextField from "@material-ui/core/TextField" -import Check from "@material-ui/icons/Check" -import Send from "@material-ui/icons/Send" -import Cached from "@material-ui/icons/Cached" -import Paper from "@material-ui/core/Paper" -import Typography from "@material-ui/core/Typography" -import makeStyles from "@material-ui/core/styles/makeStyles" -import orange from "@material-ui/core/colors/orange" -import green from "@material-ui/core/colors/green" -import yellow from "@material-ui/core/colors/yellow" -import red from "@material-ui/core/colors/red" -import classnames from "classnames" - -import { PAB } from "@/components/Buttons" -import CopyButton from "@/components/CopyButton" -import { ParametersAPI, Validation } from "./hooks" -import { HitStatus } from "./types" - -const useStyles = makeStyles(theme => ({ - hitElement: { - padding: theme.spacing(2, 3), - display: "flex", - flexDirection: "column", - }, - hitElementActions: { - marginTop: theme.spacing(2), - display: "flex", - "& > button": { - marginRight: theme.spacing(1), - }, - }, - addParameterButton: { - marginLeft: theme.spacing(1), - }, - validationStatus: { - // Picked this value through a bit of trial and error, but having a - // minHeight makes this not jump around during the "sending" and - // "validating" states. - minHeight: theme.spacing(24), - margin: theme.spacing(-3, -3, 1, -3), - padding: theme.spacing(0, 3), - "& > span": { - "& > svg": { - fontSize: theme.typography.h1.fontSize, - }, - "& > h3": { - marginLeft: theme.spacing(1), - fontSize: theme.typography.h2.fontSize, - }, - display: "flex", - alignItems: "center", - marginTop: theme.spacing(1), - }, - }, - [HitStatus.Validating]: { - backgroundColor: orange[100], - color: orange[900], - }, - [HitStatus.Sending]: { - backgroundColor: orange[100], - color: orange[900], - }, - [HitStatus.Invalid]: { - backgroundColor: red[100], - color: red[900], - }, - [HitStatus.Sent]: { - backgroundColor: green[100], - color: green[900], - }, - [HitStatus.Valid]: { - backgroundColor: green[100], - color: green[900], - }, - [HitStatus.Unvalidated]: { - backgroundColor: yellow[100], - color: yellow[900], - }, - httpInfo: { - margin: theme.spacing(1, 0, 2, 0), - "& > span": { - fontFamily: "'Source Code Pro', monospace", - }, - }, - payload: { - flexGrow: 1, - }, -})) - -interface HitCardProps { - hitPayload: string - hitStatus: Validation["hitStatus"] - validationMessages: Validation["validationMessages"] - sendHit: Validation["sendHit"] - validateHit: Validation["validateHit"] - addParameter: ParametersAPI["addParameter"] - hasParameter: ParametersAPI["hasParameter"] - setParametersFromString: ParametersAPI["setParametersFromString"] -} - -const HitCard: React.FC = ({ - validateHit, - sendHit, - hitPayload, - hitStatus, - validationMessages, - addParameter, - hasParameter, - setParametersFromString, -}) => { - const classes = useStyles() - const [value, setValue] = React.useState(hitPayload) - - // Update the localState of then input when the hitPayload changes. - React.useEffect(() => { - setValue(hitPayload) - }, [hitPayload]) - - const onChange = React.useCallback( - (e: React.ChangeEvent) => { - setValue(e.target.value) - setParametersFromString(e.target.value) - }, - [setParametersFromString] - ) - return ( - - -
    - - POST /collect HTTP/1.1 - -
    - - Host: www.google-analytics.com - -
    - - -
    - ) -} - -interface ValidationStatusProps { - validationMessages: Validation["validationMessages"] - hitStatus: Validation["hitStatus"] - addParameter: ParametersAPI["addParameter"] - hasParameter: ParametersAPI["hasParameter"] -} - -const ValidationStatus: React.FC = ({ - validationMessages, - hitStatus, - addParameter, - hasParameter, -}) => { - const classes = useStyles() - - let headerIcon: JSX.Element | null = null - let hitHeading: JSX.Element | null = null - let hitContent: JSX.Element[] | JSX.Element | null = null - switch (hitStatus) { - case HitStatus.Sent: - case HitStatus.Valid: { - headerIcon = - hitHeading = Hit is valid! - hitContent = ( - <> - - Use the controls below to copy the hit or share it with coworkers. - - - You can also send the hit to Google Analytics and watch it in action - in the Real Time view. - - - ) - break - } - case HitStatus.Invalid: { - headerIcon = - hitHeading = Hit is invalid! - hitContent = ( -
      - {validationMessages.map(message => { - let addParameterButton: JSX.Element | null = null - if ( - message.code === "VALUE_REQUIRED" && - !hasParameter(message.param) - ) { - addParameterButton = ( - - ) - } - return ( -
    • - - {message.description} - {addParameterButton} - -
    • - ) - })} -
    - ) - break - } - case HitStatus.Sending: - case HitStatus.Validating: { - headerIcon = - hitHeading = ( - - {hitStatus === HitStatus.Sending ? "Sending" : "Validating"} hit... - - ) - break - } - case HitStatus.Unvalidated: { - headerIcon = - hitHeading = ( - This hit has not been validated. - ) - hitContent = ( - <> - - You can update the hit using any of the controls below. - - - When you're done editing parameters, click the "Validate hit" button - to make sure everything's OK. - - - ) - break - } - default: { - throw new Error(`${hitStatus} has not been accounted for.`) - } - } - return ( - - - {headerIcon} - {hitHeading} - - {hitContent} - - ) -} - -interface HitActionsProps { - hitPayload: string - hitStatus: Validation["hitStatus"] - validateHit: Validation["validateHit"] - sendHit: Validation["sendHit"] -} - -const HitActions: React.FC = ({ - hitStatus, - hitPayload, - validateHit, - sendHit, -}) => { - const classes = useStyles() - - switch (hitStatus) { - case HitStatus.Sent: - case HitStatus.Valid: { - const sendHitButton = ( - : } - onClick={sendHit} - className="Button Button--success Button-withIcon" - variant="contained" - > - Send to GA - - ) - - const sharableLinkToHit = - window.location.protocol + - "//" + - window.location.host + - window.location.pathname + - "?" + - hitPayload - return ( -
    - {sendHitButton} - - -
    - ) - } - default: { - return ( -
    - - {hitStatus === HitStatus.Validating - ? "Validating..." - : "Validate hit"} - -
    - ) - } - } -} - -export default HitCard diff --git a/src/components/HitBuilder/Parameters.tsx b/src/components/HitBuilder/Parameters.tsx deleted file mode 100644 index 1fecc7259..000000000 --- a/src/components/HitBuilder/Parameters.tsx +++ /dev/null @@ -1,299 +0,0 @@ -import * as React from "react" - -import { Delete, Refresh } from "@material-ui/icons" -import makeStyles from "@material-ui/core/styles/makeStyles" -import FormControl from "@material-ui/core/FormControl" -import InputLabel from "@material-ui/core/InputLabel" -import MenuItem from "@material-ui/core/MenuItem" -import Select from "@material-ui/core/Select" -import TextField from "@material-ui/core/TextField" -import Typography from "@material-ui/core/Typography" -import InputAdornment from "@material-ui/core/InputAdornment" -import Tooltip from "@material-ui/core/Tooltip" -import IconButton from "@material-ui/core/IconButton" -import Autocomplete from "@material-ui/lab/Autocomplete" -import Add from "@material-ui/icons/Add" -import Button from "@material-ui/core/Button" -import { v4 as uuid } from "uuid" - -import { HIT_TYPES, Property } from "./types" -import { Validation, ParametersAPI } from "./hooks" - -const useStyles = makeStyles(theme => ({ - subdued: { - color: theme.palette.grey[500], - }, - propertyOption: { - display: "flex", - width: "100%", - flexDirection: "column", - position: "relative", - "& > span": { - position: "absolute", - right: theme.spacing(2), - }, - }, - inputs: { - maxWidth: "600px", - display: "flex", - flexDirection: "column", - "& > div": { - margin: theme.spacing(1), - }, - "& > button": { - alignSelf: "flex-end", - margin: theme.spacing(2), - marginRight: theme.spacing(1), - }, - }, - addedParam: { - display: "flex", - "& > div:first-child": { - marginRight: theme.spacing(1), - }, - "& > div:nth-child(2)": { - flexGrow: 1, - }, - }, -})) - -interface ParametersProps { - updateParameterName: ParametersAPI["updateParameterName"] - updateParameterValue: ParametersAPI["updateParameterValue"] - removeParameter: ParametersAPI["removeParameter"] - shouldFocus: ParametersAPI["shouldFocus"] - addParameter: ParametersAPI["addParameter"] - parameters: ParametersAPI["parameters"] - properties: Property[] - validationMessages: Validation["validationMessages"] -} -const Parameters: React.FC = ({ - updateParameterName, - updateParameterValue, - shouldFocus, - removeParameter, - addParameter, - parameters, - properties, -}) => { - const classes = useStyles() - const newParam = React.useRef(null) - const [v, t, tid, cid, ...otherParams] = parameters - - const setHitType = React.useCallback( - hitType => { - updateParameterValue(t.id, hitType) - }, - [t.id, updateParameterValue] - ) - - const setCid = React.useCallback( - newId => { - updateParameterValue(cid.id, newId) - }, - [cid.id, updateParameterValue] - ) - - const setTid = React.useCallback( - newTid => { - updateParameterValue(tid.id, newTid) - }, - [tid.id, updateParameterValue] - ) - const [localPropertyInput, setLocalPropertyInput] = React.useState("") - - React.useEffect(() => { - if (tid.value !== localPropertyInput) { - setLocalPropertyInput(tid.value as string) - } - }, [tid.value, localPropertyInput]) - - return ( -
    - - v - - - - - id="t" - data-testid={`change-t`} - blurOnSelect - openOnFocus - autoHighlight - autoSelect - multiple={false} - options={HIT_TYPES} - freeSolo - getOptionLabel={a => a} - renderOption={e => e} - value={t.value as string} - renderInput={params => ( - - )} - onChange={(_, value) => { - setHitType(value) - }} - /> - - - id="tid" - blurOnSelect - freeSolo - openOnFocus - autoHighlight - multiple={false} - options={properties} - getOptionLabel={a => a.id} - inputValue={localPropertyInput} - onChange={(_, value) => { - if (value !== null) { - // TODO fix the type here later. - setTid((value as any).id) - } - }} - onInputChange={(_, value, reason) => { - // Don't set the local property input if the reason was reset. - if (reason === "clear" || reason === "input") { - setLocalPropertyInput(value) - setTid(value) - } - }} - filterOptions={(options, state) => { - return options.filter(option => { - return [option.group, option.id, option.name].find(v => - v.match(state.inputValue) - ) - }) - }} - renderOption={a => { - return ( -
    - - {a.name} - - - {a.id} - - - {a.group} - -
    - ) - }} - renderInput={params => ( - - )} - /> - - setCid(e.target.value)} - label="cid" - variant="outlined" - size="small" - InputProps={{ - endAdornment: ( - - - setCid(uuid())} - > - - - - - ), - }} - /> - - {otherParams.map((param, idx) => { - const isDuplicate = - otherParams.find( - other => - param.name !== "" && - other.id !== param.id && - param.name === other.name - ) !== undefined - const helperText = isDuplicate ? "Duplicate Parameter Name" : undefined - return ( -
    - { - updateParameterName(param.id, e.target.value) - }} - /> - { - updateParameterValue(param.id, e.target.value) - }} - InputProps={{ - endAdornment: ( - - - { - removeParameter(param.id) - }} - > - - - - - ), - }} - /> -
    - ) - })} - - -
    - ) -} -export default Parameters diff --git a/src/components/HitBuilder/hit.ts b/src/components/HitBuilder/hit.ts deleted file mode 100644 index a1262bfa3..000000000 --- a/src/components/HitBuilder/hit.ts +++ /dev/null @@ -1,163 +0,0 @@ -// Copyright 2020 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 { WindowLocation } from "@reach/router" -import querystring from "querystring" - -import { - Param, - Params, - RequiredParams, - ParamV, - ParamT, - ParamTId, - ParamCId, - ParamOptional, - HIT_TYPES, -} from "./types" - -const DEFAULT_HIT = "v=1&t=pageview" - -/** - * Gets the initial hit from the URL if present. If no hit is found in the URL - * the default hit is used. - * @return The default hit. - */ -export function getInitialHitAndUpdateUrl(l: WindowLocation): string { - const query = l.search.slice(1) - - if (query === "") { - return DEFAULT_HIT - } - // Remove the query params after initial load. - window.history.replaceState({}, document.title, window.location.pathname) - return query -} - -/** - * Accepts a hit payload or URL and converts it into an array of param objects - * where the required params are always first and in the correct order. - * @param hit A query string or hit payload. - */ -export function convertHitToParams( - nextId: () => number, - hit: string = "" -): Params { - // If the hit contains a "?", remove it and all characters before it. - const searchIndex = hit.indexOf("?") - if (searchIndex > -1) hit = hit.slice(searchIndex + 1) - - let query: querystring.ParsedUrlQuery = {} - try { - query = querystring.parse(hit) - } catch (e) { - // It's common to paste in a string that's invalid, but we can easily - // recover from here. - } - - // Create required params first, regardless of order in the hit. - const v: ParamV = { - id: nextId(), - name: RequiredParams.V, - value: query[RequiredParams.V] || "1", - required: true, - } - const t: ParamT = { - id: nextId(), - name: RequiredParams.T, - value: query[RequiredParams.T] || HIT_TYPES[0], - required: true, - } - const tid: ParamTId = { - id: nextId(), - name: RequiredParams.T_Id, - value: query[RequiredParams.T_Id] || "", - required: true, - } - const cid: ParamCId = { - id: nextId(), - name: RequiredParams.C_Id, - value: query[RequiredParams.C_Id] || "", - required: true, - } - delete query[RequiredParams.V] - delete query[RequiredParams.T] - delete query[RequiredParams.T_Id] - delete query[RequiredParams.C_Id] - - // Create optional params after required params. - const others: ParamOptional[] = Object.entries(query).map(([name, v]) => { - const value = v === undefined ? "" : v - return { - name, - value, - id: nextId(), - isOptional: true, - } - }) - const params: Params = [v, t, tid, cid, ...others] - return params -} - -/** - * Returns the hit model data as a query string. - * @param params An array of param objects. - */ -export function convertParamsToHit(params: Param[]): string { - const query: { [name: string]: any } = {} - for (const { name, value } of params) { - if (value === "") { - continue - } - query[name] = value - } - - return querystring.stringify(query) -} - -export interface ValidationResult { - response: { - parserMessage: any[] - hitParsingResult: { - valid: boolean - parserMessage: { - messageType: any - description: string - messageCode: any - parameter: string - }[] - hit: string - }[] - } - hit: string -} - -/** - * Sends a validation request to the Measurement Protocol Validation Server - * and returns a promise that will be fulfilled with the response. - * @param hit A Measurement Protocol hit payload. - */ -export async function getHitValidationResult( - hit: string -): Promise { - const apiResponse = await fetch( - "https://www.google-analytics.com/debug/collect", - { - method: "POST", - body: hit, - } - ) - const asJson = await apiResponse.json() - return { response: asJson, hit } -} diff --git a/src/components/HitBuilder/hooks.ts b/src/components/HitBuilder/hooks.ts deleted file mode 100644 index 6cd372168..000000000 --- a/src/components/HitBuilder/hooks.ts +++ /dev/null @@ -1,274 +0,0 @@ -// Copyright 2020 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 * as React from "react" - -import { useSelector } from "react-redux" -import { useLocation } from "@reach/router" - -import { Params, Param, ValidationMessage, HitStatus, Property } from "./types" -import * as hitUtils from "./hit" - -const formatMessage = (message: { - parameter: any - description: string - messageType: any - messageCode: any -}) => { - const linkRegex = /Please see http:\/\/goo\.gl\/a8d4RP#\w+ for details\.$/ - return { - param: message.parameter, - description: message.description.replace(linkRegex, "").trim(), - type: message.messageType, - code: message.messageCode, - } -} - -const sleep = async (milliseconds: number): Promise => { - return new Promise(resolve => { - window.setTimeout(() => { - resolve() - }, milliseconds) - }) -} - -export type Validation = { - validationMessages: ValidationMessage[] - hitStatus: HitStatus - // Validate the hit against the measurement protocol validation server - validateHit: () => void - // Send the hit to GA - sendHit: () => void -} -type UseValidationServer = (parameters: Params) => Validation -export const useValidationServer: UseValidationServer = parameters => { - const [hitStatus, setHitStatus] = React.useState(HitStatus.Unvalidated) - - React.useEffect(() => { - setHitStatus(HitStatus.Unvalidated) - }, [parameters]) - - const [validationMessages, setValidationMessages] = React.useState< - ValidationMessage[] - >([]) - - const validateHit = React.useCallback(() => { - setHitStatus(HitStatus.Validating) - try { - const hit = hitUtils.convertParamsToHit(parameters) - Promise.all([ - hitUtils.getHitValidationResult(hit), - sleep(500), - ]).then(([validationResult, _]) => { - const result = validationResult.response.hitParsingResult[0] - const validationMessages = result.parserMessage.filter( - // TODO - I might want to do something different with ERRORS - // versus INFOs. Check what the current one does. - message => message.messageType === "ERROR" - ) - setValidationMessages(validationMessages.map(formatMessage)) - if (result.valid) { - setHitStatus(HitStatus.Valid) - } else { - setHitStatus(HitStatus.Invalid) - } - }) - } catch (e) {} - }, [parameters]) - - const sendHit = React.useCallback(async () => { - setHitStatus(HitStatus.Sending) - const hit = hitUtils.convertParamsToHit(parameters) - await Promise.all([ - sleep(500), - fetch("https://www.google-analytics.com/collect", { - method: "POST", - body: hit, - }), - ]) - setHitStatus(HitStatus.Sent) - }, [parameters]) - - return { validationMessages, validateHit, hitStatus, sendHit } -} - -let id = 0 -const nextId = () => { - id++ - return id -} - -export type ParametersAPI = { - updateParameterName: (id: number, newName: string) => void - updateParameterValue: (id: number, newValue: any) => void - addParameter: (parameterName?: string) => void - removeParameter: (id: number) => void - hasParameter: (parameterName: string) => boolean - setParametersFromString: (paramString: string) => void - parameters: Params - shouldFocus: (id: number, value: boolean) => boolean - setFocus: (id: number, value: boolean) => void -} -type UseParameters = () => ParametersAPI -export const useParameters: UseParameters = () => { - const location = useLocation() - - const [parameters, setParameters] = React.useState(() => { - const initial = hitUtils.getInitialHitAndUpdateUrl(location) - return hitUtils.convertHitToParams(nextId, initial) - }) - - const [focusData, setFocusData] = React.useState< - | { - id: number - value: boolean - } - | undefined - >(undefined) - - const setParametersFromString = React.useCallback((paramString: string) => { - setFocusData(undefined) - setParameters(hitUtils.convertHitToParams(nextId, paramString)) - }, []) - - // Sets the focus to a particular param/value combo - const setFocus = React.useCallback((id, value = false) => { - setFocusData({ id, value }) - }, []) - - const resetFocus = React.useCallback(() => { - setFocusData(undefined) - }, [setFocusData]) - - const shouldFocus = React.useCallback( - (id: number, value = false) => { - if (focusData === undefined) { - return false - } - // Not sure about the value part. - return focusData.id === id && focusData.value === value - }, - [focusData] - ) - - const hasParameter = React.useCallback( - (parameterName: string): boolean => { - const param = parameters.find(p => p.name === parameterName) - return param !== undefined - }, - [parameters] - ) - - const addParameter = React.useCallback( - (parameterName?: string) => { - const id = nextId() - const nuParameter: Param = { id, name: parameterName || "", value: "" } - setParameters(([v, t, tid, cid, ...others]) => { - return [v, t, tid, cid, ...others.concat([nuParameter])] - }) - setFocus(id, parameterName !== undefined) - }, - [setFocus] - ) - - const removeParameter = React.useCallback( - (id: number) => { - setParameters(([v, t, tid, cid, ...others]) => { - resetFocus() - return [v, t, tid, cid, ...others.filter(a => a.id !== id)] - }) - }, - [resetFocus] - ) - - const updateParameterName = React.useCallback( - (id: number, newName: string) => { - setParameters(([v, t, tid, cid, ...others]) => { - return [ - v, - t, - tid, - cid, - ...others.map(param => - param.id === id ? { ...param, name: newName } : param - ), - ] - }) - }, - [] - ) - - const updateParameterValue = React.useCallback( - (id: number, newValue: any) => { - setParameters(params => { - const nuParams = params.map(param => - param.id === id ? { ...param, value: newValue } : param - ) as Params - return nuParams - }) - }, - [] - ) - - return { - setFocus, - shouldFocus, - updateParameterName, - updateParameterValue, - addParameter, - removeParameter, - hasParameter, - setParametersFromString, - parameters, - } -} - -type UseProperties = () => { - properties: Property[] -} -// This hook encapsulates the logic for getting the user's GA properties using -// the management api. -export const useProperties: UseProperties = () => { - const gapi = useSelector((state: AppState) => state.gapi) - const managementAPI = React.useMemo( - () => gapi?.client?.analytics?.management, - [gapi] - ) - const [properties, setProperties] = React.useState([]) - - React.useEffect(() => { - if (managementAPI === undefined) { - return - } - ;(async () => { - const summaries = (await managementAPI.accountSummaries?.list({})).result - const properties: Property[] = [] - summaries.items?.forEach(account => { - const accountName = account.name || "" - account.webProperties?.forEach(property => { - const propertyName = property.name || "" - const propertyId = property.id || "" - properties.push({ - name: propertyName, - id: propertyId, - group: accountName, - }) - }) - }) - setProperties(properties) - })() - }, [managementAPI]) - - return { properties } -} diff --git a/src/components/HitBuilder/index.spec.tsx b/src/components/HitBuilder/index.spec.tsx deleted file mode 100644 index ee88e0e0b..000000000 --- a/src/components/HitBuilder/index.spec.tsx +++ /dev/null @@ -1,264 +0,0 @@ -// Copyright 2020 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 * as React from "react" - -import * as renderer from "@testing-library/react" -import userEvent from "@testing-library/user-event" -import "@testing-library/jest-dom" - -import { withProviders } from "@/test-utils" -import HitBuilder from "./index" - -const getInputs = async ( - findByLabelText: (label: string) => Promise -) => { - const v = await findByLabelText("v") - const t = await findByLabelText("t") - const tid = await findByLabelText("tid") - const cid = (await findByLabelText("cid")) as HTMLInputElement - const hitPayload = (await findByLabelText("Hit payload")) as HTMLInputElement - - return { v, t, tid, cid, hitPayload } -} - -describe("HitBuilder", () => { - // test("can render page without error", () => { - // const { wrapped } = withProviders() - // renderer.render(wrapped) - // }) - - // TODO - Make tests for layout.spec.tsx that makes sure that all demos that - // should require auth do. - - describe("When authorized", () => { - describe("Initial parameter values are right", () => { - test("with no query parameters", async () => { - const { wrapped } = withProviders() - const { findByLabelText } = renderer.render(wrapped) - - const { hitPayload } = await getInputs(findByLabelText) - expect(hitPayload).toHaveValue("v=1&t=pageview") - }) - - test("with query parameters for a non-default t parameter", async () => { - const queryParams = "v=1&t=screenview&tid=UA-fake&cid=abc&an=def&cd=ghi" - - const { wrapped } = withProviders(, { - path: `/hit-builder?${queryParams}`, - }) - const { findByLabelText, findAllByLabelText } = renderer.render(wrapped) - - const { v, t, tid, cid, hitPayload } = await getInputs(findByLabelText) - expect(hitPayload).toHaveValue(queryParams) - - expect(v).toContainHTML("1") - expect(t).toHaveValue("screenview") - expect(tid).toHaveValue("UA-fake") - expect(cid).toHaveValue("abc") - - const parameterLabels = await findAllByLabelText("Parameter name") - expect(parameterLabels).toHaveLength(2) - - // an parameter - expect(parameterLabels[0]).toHaveValue("an") - const def = await findByLabelText("Value for an") - expect(def).toHaveValue("def") - - // cd parameter - expect(parameterLabels[1]).toHaveValue("cd") - const ghi = await findByLabelText("Value for cd") - expect(ghi).toHaveValue("ghi") - }) - }) - - test("adding a parameter gives its name label focus", async () => { - const { wrapped } = withProviders() - const { findAllByLabelText, findByText } = renderer.render(wrapped) - - const addParameter = await findByText("Add parameter") - - await renderer.act(async () => { - userEvent.click(addParameter) - }) - - // Check that new field is focused - const parameterLabels = await findAllByLabelText("Parameter name") - expect(parameterLabels).toHaveLength(1) - expect(parameterLabels[0]).toHaveFocus() - }) - - describe("updates the hit payload", () => { - test("when t parameter is changed", async () => { - const { wrapped } = withProviders() - const { findByLabelText } = renderer.render(wrapped) - - const t = await findByLabelText("t") - - await renderer.act(async () => { - await userEvent.type(t, "{selectall}{backspace}pageview", { - delay: 50, - }) - }) - - expect(t).toHaveValue("pageview") - }) - - test("when cid parameter is changed", async () => { - const { wrapped } = withProviders() - const { findByLabelText } = renderer.render(wrapped) - const { cid, hitPayload } = await getInputs(findByLabelText) - - await renderer.act(async () => { - userEvent.clear(cid) - await userEvent.type(cid, "cid123", { delay: 50 }) - }) - - expect(cid).toHaveValue("cid123") - expect(hitPayload.value).toContain("cid123") - }) - - test("when tid parameter is changed", async () => { - const { wrapped } = withProviders() - const { findByLabelText } = renderer.render(wrapped) - const { tid, hitPayload } = await getInputs(findByLabelText) - - await renderer.act(async () => { - userEvent.clear(tid) - await userEvent.type(tid, "tid123", { delay: 50 }) - }) - - expect(tid).toHaveValue("tid123") - expect(hitPayload.value).toContain("tid123") - }) - - test("clicking 'generate uuid' generates a... uuid???", async () => { - const { wrapped } = withProviders() - const { findByLabelText, findByTestId } = renderer.render(wrapped) - const { cid, hitPayload } = await getInputs(findByLabelText) - - await renderer.act(async () => { - const generateUuid = await findByTestId("generate-uuid") - userEvent.click(generateUuid) - }) - - expect(cid.value).not.toEqual("") - expect(hitPayload.value).toContain(cid.value) - }) - }) - - describe("when adding a parameter", () => { - test("updates hit payload when adding or changing parameter name & value", async () => { - const { wrapped } = withProviders() - const { findByLabelText, findByText } = renderer.render(wrapped) - const { hitPayload } = await getInputs(findByLabelText) - const addParameter = await findByText("Add parameter") - - await renderer.act(async () => { - userEvent.click(addParameter) - - const newParameterName = await findByLabelText("Parameter name") - await userEvent.type(newParameterName, "paramName", { delay: 50 }) - - const newParameterValue = await findByLabelText("Value for paramName") - await userEvent.type(newParameterValue, "paramValue", { delay: 50 }) - }) - - expect(hitPayload.value).toContain("paramName=paramValue") - - // Tests modifying parameter after adding it - const paramField = await findByLabelText("Parameter name") - - await renderer.act(async () => { - await userEvent.type(paramField, "{selectall}{backspace}newName", { - delay: 50, - }) - }) - expect(paramField).toHaveValue("newName") - expect(hitPayload.value).toContain("newName=paramValue") - - // Tests modifying param value after param name is changed - - const paramValue = await findByLabelText("Value for newName") - - await renderer.act(async () => { - await userEvent.type( - paramValue, - "{selectall}{backspace}paramValue2", - { delay: 50 } - ) - }) - expect(hitPayload.value).toContain("newName=paramValue2") - }) - - test("updates hit payload when removing parameter", async () => { - const { wrapped } = withProviders() - const { findByLabelText, findByText, findByTestId } = renderer.render( - wrapped - ) - const { hitPayload } = await getInputs(findByLabelText) - const addParameter = await findByText("Add parameter") - - await renderer.act(async () => { - userEvent.click(addParameter) - - const newParameterName = await findByLabelText("Parameter name") - await userEvent.type(newParameterName, "paramName", { delay: 50 }) - - const newParameterValue = await findByLabelText("Value for paramName") - await userEvent.type(newParameterValue, "paramValue", { delay: 50 }) - - const removeParameter = await findByTestId("remove-paramName") - userEvent.click(removeParameter) - }) - - expect(hitPayload.value).not.toContain("paramName=paramValue") - }) - }) - - describe("Validate hit", () => { - // TODO this should be cleaned up through types and better (global?) - // mocks in the future. - const fetchMock = jest.fn(async () => ({ - json: async () => ({ - parserMessage: [], - hitParsingResult: [{ valid: true, parserMessage: [], hit: "" }], - }), - })) - ;(global as any).fetch = fetchMock - - test("when valid updates the ui accordingly", async () => { - const queryParams = - "v=1&t=pageview&tid=UA-54516992-1&cid=555&dh=mydemo.com&dp=%2Fhome&dt=homepage" - - const { wrapped } = withProviders(, { - path: `/hit-builder?${queryParams}`, - }) - - const { findByText, findByLabelText } = renderer.render(wrapped) - - const { hitPayload } = await getInputs(findByLabelText) - expect(hitPayload).toHaveValue(queryParams) - - const validateHitButton = renderer.screen.getByText("Validate hit") - await renderer.act(async () => { - validateHitButton.click() - }) - - const result = await findByText("Hit is valid!") - expect(result).not.toEqual("") - }) - }) - }) -}) diff --git a/src/components/HitBuilder/index.tsx b/src/components/HitBuilder/index.tsx deleted file mode 100644 index fc939aec9..000000000 --- a/src/components/HitBuilder/index.tsx +++ /dev/null @@ -1,131 +0,0 @@ -// Copyright 2020 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 * as React from "react" - -import Typography from "@material-ui/core/Typography" - -import { Url } from "@/constants" -import ExternalLink from "@/components/ExternalLink" -import Parameters from "./Parameters" -import HitCard from "./HitCard" -import * as hitUtils from "./hit" -import * as hooks from "./hooks" - -const HitBuilder: React.FC = () => { - const { properties } = hooks.useProperties() - const [hitPayload, setHitPayload] = React.useState("") - - const { - updateParameterName, - updateParameterValue, - addParameter, - removeParameter, - parameters, - hasParameter, - setParametersFromString, - shouldFocus, - } = hooks.useParameters() - - const { - hitStatus, - validationMessages, - validateHit, - sendHit, - } = hooks.useValidationServer(parameters) - - // Update the hitPayload whenever the parameters change. - React.useEffect(() => { - setHitPayload(hitUtils.convertParamsToHit(parameters)) - }, [parameters]) - - return ( - <> - - This tools allows you to construct and validate{" "} - - Measurement Protocol - {" "} - hits using the{" "} - - Measurement Protocol Validation Server - - . - - - - To get started, use the controls below to construct a new hit or paste - an existing hit into the text box in the hit summary. - - - - The box below displays the full hit and its validation status. You can - update the hit in the text box and the parameter details below will be - automatically updated. - - - - - Hit parameter details - - The fields below are a breakdown of the individual parameters and values - for the hit in the text box above. When you update these values, the hit - above will be automatically updated. - - - - - References - - - Click the info link to the right of each parameter in the details - section to go directly to its documentation. For general references, - refer to the links below: - - - -
  • - - Parameter reference - -
  • -
  • - - Examples of common hits - -
  • -
    - - ) -} - -export default HitBuilder diff --git a/src/components/HitBuilder/types.ts b/src/components/HitBuilder/types.ts deleted file mode 100644 index 276a4d471..000000000 --- a/src/components/HitBuilder/types.ts +++ /dev/null @@ -1,144 +0,0 @@ -export const HIT_TYPES = [ - "pageview", - "screenview", - "event", - "transaction", - "item", - "social", - "exception", - "timing", -] - -export enum ActionType { - SetHitPayload = "SET_HIT_PAYLOAD", - SetHitStatus = "SET_HIT_STATUS", - SetAuthorized = "SET_AUTHORIZED", - AddParam = "ADD_PARAM", - RemoveParam = "REMOVE_PARAM", - EditParamName = "EDIT_PARAM_NAME", - EditParamValue = "EDIT_PARAM_VALUE", - ReplaceParams = "REPLACE_PARAMS", - SetUserProperties = "SET_USER_PROPERTIES", - SetValidationMessages = "SET_VALIDATION_MESSAGES", -} - -export interface SetHitStatus { - type: ActionType.SetHitStatus - status: HitStatus -} - -export interface SetAuthorized { - type: ActionType.SetAuthorized -} - -export interface AddParam { - type: ActionType.AddParam -} - -export interface RemoveParam { - type: ActionType.RemoveParam - id: number -} - -export interface EditParamName { - type: ActionType.EditParamName - name: string - id: number -} - -export interface EditParamValue { - type: ActionType.EditParamValue - value: string - id: number -} - -export interface ReplaceParams { - type: ActionType.ReplaceParams - params: Params -} - -export interface SetUserProperties { - type: ActionType.SetUserProperties - properties: Property[] -} - -export interface SetValidationMessages { - type: ActionType.SetValidationMessages - validationMessages: ValidationMessage[] -} - -export interface SetHitPayload { - type: ActionType.SetHitPayload - hitPayload: string -} - -export type HitAction = - | SetHitStatus - | SetAuthorized - | AddParam - | RemoveParam - | EditParamName - | EditParamValue - | ReplaceParams - | SetUserProperties - | SetValidationMessages - | SetHitPayload - -export enum HitStatus { - Unvalidated = "UNVALIDATED", - Validating = "VALIDATING", - Valid = "VALID", - Invalid = "INVALID", - Sent = "Sent", - Sending = "Sending", -} - -export enum RequiredParams { - V = "v", - T = "t", - T_Id = "tid", - C_Id = "cid", -} - -export type ParamV = ParamType -export type ParamT = ParamType -export type ParamTId = ParamType -export type ParamCId = ParamType -export type ParamOptional = ParamType - -export type Params = [ParamV, ParamT, ParamTId, ParamCId, ...ParamOptional[]] - -export type Param = - | ParamType - | ParamType - | ParamType - | ParamType - | ParamType - -interface ParamType { - id: number - name: T - value: string | string[] - required?: true - isOptional?: true -} - -export interface Property { - name: string - id: string - group: string -} -export interface ValidationMessage { - param: string - description: string - code: "VALUE_REQUIRED" -} - -export interface State { - hitPayload: string - hitStatus: HitStatus - isAuthorized: boolean - params: Params - properties: Property[] - validationMessages: ValidationMessage[] -} diff --git a/src/components/Home/index.tsx b/src/components/Home/index.tsx index d7e07fbac..ff37fc290 100644 --- a/src/components/Home/index.tsx +++ b/src/components/Home/index.tsx @@ -14,19 +14,30 @@ import * as React from "react" -import Typography from "@material-ui/core/Typography" -import { makeStyles } from "@material-ui/core/styles" +import { styled } from '@mui/material/styles'; + +import Typography from "@mui/material/Typography" import { StaticImage } from "gatsby-plugin-image" import { Url } from "@/constants" import ExternalLink from "@/components/ExternalLink" -const useStyles = makeStyles({ partnersImage: { maxWidth: "600px" } }) +const PREFIX = 'IndexPage'; + +const classes = { + partnersImage: `${PREFIX}-partnersImage` +}; + +const Root = styled('div')({ + [`& .${classes.partnersImage}`]: { + maxWidth: "600px" + } +}); const IndexPage: React.FC = () => { - const classes = useStyles() + return ( - <> + ( { Tools - Tools to showcase how Google Analytics can be extendend with custom + Tools to showcase how Google Analytics can be extended with custom solutions. @@ -115,8 +126,8 @@ const IndexPage: React.FC = () => { questions answered. - - ) + ) + ); } export default IndexPage diff --git a/src/components/Info.tsx b/src/components/Info.tsx index 1822487ca..d16e52374 100644 --- a/src/components/Info.tsx +++ b/src/components/Info.tsx @@ -1,15 +1,25 @@ import * as React from "react" -import { Paper, makeStyles } from "@material-ui/core" +import { styled } from '@mui/material/styles'; +import { Paper } from "@mui/material" + import classnames from "classnames" -import { Info as InfoIcon } from "@material-ui/icons" -import blue from "@material-ui/core/colors/lightBlue" +import { Info as InfoIcon } from "@mui/icons-material" +import blue from "@mui/material/colors/lightBlue" +import {PropsWithChildren} from 'react'; -interface InfoProps { - className?: string -} +const PREFIX = 'Info'; + +const classes = { + info: `${PREFIX}-info`, + infoIcon: `${PREFIX}-infoIcon` +}; -const useStyles = makeStyles(theme => ({ - info: { +const StyledPaper = styled(Paper)(( + { + theme + } +) => ({ + [`&.${classes.info}`]: { margin: theme.spacing(2, 0), padding: theme.spacing(1), display: "flex", @@ -19,20 +29,25 @@ const useStyles = makeStyles(theme => ({ backgroundColor: blue[100], // maxWidth: 930, }, - infoIcon: { + + [`& .${classes.infoIcon}`]: { margin: theme.spacing(0, 2), - }, -})) + } +})); + +interface InfoProps { + className?: string +} + +const Info: React.FC> = ({ children, className }) => { -const Info: React.FC = ({ children, className }) => { - const classes = useStyles() return ( - +
    {children}
    -
    - ) + + ); } export default Info diff --git a/src/components/InlineCode.tsx b/src/components/InlineCode.tsx index 25aed8956..cf2ac2f7e 100644 --- a/src/components/InlineCode.tsx +++ b/src/components/InlineCode.tsx @@ -1,6 +1,6 @@ import * as React from "react" -import { useTheme } from "@material-ui/core" -// import { makeStyles } from "@material-ui/core" +import { useTheme } from "@mui/material" +import {PropsWithChildren} from 'react'; // TODO I'm not sure why, but if I use this makeStyles, it somehow conflicts // somewhere and messes up formatting during SSR. Good luck to anybody that @@ -16,12 +16,13 @@ import { useTheme } from "@material-ui/core" // }, // })) -const InlineCode: React.FC<{ className?: string }> = ({ +type Props = { className?: string } + +const InlineCode: React.FC> = ({ children, className, }) => { const theme = useTheme() - // const classes = useStyles() return ( = ({ +const LabeledCheckbox: React.FC> = ({ checked, setChecked, onChange, diff --git a/src/components/Layout/BugReport.tsx b/src/components/Layout/BugReport.tsx index 684672471..f225d042a 100644 --- a/src/components/Layout/BugReport.tsx +++ b/src/components/Layout/BugReport.tsx @@ -1,9 +1,9 @@ import * as React from "react" import { navigate } from "gatsby" -import Tooltip from "@material-ui/core/Tooltip" -import IconButton from "@material-ui/core/IconButton" -import BugIcon from "@material-ui/icons/BugReport" +import Tooltip from "@mui/material/Tooltip" +import IconButton from "@mui/material/IconButton" +import BugIcon from "@mui/icons-material/BugReport" const BugReport: React.FC = () => { const onClick = React.useCallback(() => { diff --git a/src/components/Layout/GA4Toggle.tsx b/src/components/Layout/GA4Toggle.tsx index 98911adf4..55fac1a18 100644 --- a/src/components/Layout/GA4Toggle.tsx +++ b/src/components/Layout/GA4Toggle.tsx @@ -1,8 +1,8 @@ import * as React from "react" -import Grid from "@material-ui/core/Grid/Grid" -import Switch from "@material-ui/core/Switch" -import Tooltip from "@material-ui/core/Tooltip" +import Grid from "@mui/material/Grid/Grid" +import Switch from '@mui/material/Switch'; +import Tooltip from '@mui/material/Tooltip'; import { GAVersion } from "@/constants" diff --git a/src/components/Layout/Login.tsx b/src/components/Layout/Login.tsx index b69dbb9a8..98d19589a 100644 --- a/src/components/Layout/Login.tsx +++ b/src/components/Layout/Login.tsx @@ -1,8 +1,8 @@ import * as React from "react" -import PersonOutlineIcon from "@material-ui/icons/PersonOutline" -import PersonIcon from "@material-ui/icons/Person" -import Tooltip from "@material-ui/core/Tooltip" -import IconButton from "@material-ui/core/IconButton" +import PersonOutlineIcon from "@mui/icons-material/PersonOutline" +import PersonIcon from "@mui/icons-material/Person" +import Tooltip from "@mui/material/Tooltip" +import IconButton from "@mui/material/IconButton" import { UserStatus } from "./useLogin" interface LoginProps { diff --git a/src/components/Layout/index.tsx b/src/components/Layout/index.tsx index 6d3635285..3944a7d6e 100644 --- a/src/components/Layout/index.tsx +++ b/src/components/Layout/index.tsx @@ -12,10 +12,13 @@ // See the License for the specific language governing permissions and // limitations under the License. -import React, { useMemo } from "react" -import Button from "@material-ui/core/Button" +import React, {PropsWithChildren, useEffect, useMemo} from "react" +import {Theme} from '@mui/material/styles'; +import {styled} from '@mui/material/styles'; + +import Button from '@mui/material/Button'; import { Link } from "gatsby" -import { Home } from "@material-ui/icons" +import { Home } from "@mui/icons-material" import clsx from "classnames" import { Helmet } from "react-helmet" // TODO - Look into whether or not we can fix this. @@ -24,30 +27,33 @@ import { Helmet } from "react-helmet" // // eslint-disable-next-line import/no-webpack-loader-syntax import Logo from "-!svg-react-loader!../../images/ga-developer-logo.svg" -import AppBar from "@material-ui/core/AppBar" -import IconButton from "@material-ui/core/IconButton" -import Drawer from "@material-ui/core/Drawer" -import List from "@material-ui/core/List" -import ListItem from "@material-ui/core/ListItem" +import AppBar from "@mui/material/AppBar" +import IconButton from "@mui/material/IconButton" +import Drawer from "@mui/material/Drawer" +import List from "@mui/material/List" +import ListItem from "@mui/material/ListItem" import { navigate } from "@reach/router" -import MenuIcon from "@material-ui/icons/Menu" -import Typography from "@material-ui/core/Typography" +import MenuIcon from "@mui/icons-material/Menu" +import Typography from "@mui/material/Typography" import Login from "./Login" import { useGAVersion } from "../../hooks" import { GAVersion, Url } from "../../constants" import Spinner from "../Spinner" import { linkData } from "./links" -import useStyles from "./useStyles" import GA4Toggle from "./GA4Toggle" import BugReport from "./BugReport" -import useFormStyles from "@/hooks/useFormStyles" import Loadable from "../Loadable" import useLogin2, { UserStatus } from "./useLogin" import usePageView from "@/hooks/usePageView" import { ErrorBoundary } from "react-error-boundary" import ErrorFallback from "../ErrorFallback" + + +const notMobile = (theme: Theme) => theme.breakpoints.up("md") +const mobile = (theme: Theme) => theme.breakpoints.between(0, "sm") + interface LayoutProps { requireLogin?: true disableNav?: true @@ -67,31 +73,71 @@ interface TemplateProps { user?: gapi.auth2.GoogleUser } -const Template: React.FC = ({ - pathname, - description, - disableNav, - requireLogin, - title, - children, - inProgress, - notStarted, - successful, - failed, - userStatus, - login, - logout, - user, -}) => { +const PREFIX = 'Layout2'; + +const classes = { + footer: `${PREFIX}-footer`, + activeLink: `${PREFIX}-activeLink`, + toggle: `${PREFIX}-toggle`, + loadingIndicator: `${PREFIX}-loadingIndicator`, + root: `${PREFIX}-root`, + main: `${PREFIX}-main`, + contentWrapper: `${PREFIX}-contentWrapper`, + content: `${PREFIX}-content`, + header: `${PREFIX}-header`, + logoRow: `${PREFIX}-logoRow`, + logo: `${PREFIX}-logo`, + appBarNav: `${PREFIX}-appBarNav`, + mobileNav: `${PREFIX}-mobileNav`, + nav: `${PREFIX}-nav`, + noColor: `${PREFIX}-noColor`, + innerNav: `${PREFIX}-innerNav`, + navLinkBackgroundHover: `${PREFIX}-navLinkBackgroundHover`, + home: `${PREFIX}-home`, + subHeading: `${PREFIX}-subHeading`, + homeIcon: `${PREFIX}-homeIcon`, + mobileHeading: `${PREFIX}-mobileHeading`, + mobileMenu: `${PREFIX}-mobileMenu` +}; + + +const Template: React.FC> = ({ + pathname, + description, + disableNav, + requireLogin, + title, + children, + inProgress, + notStarted, + successful, + failed, + userStatus, + login, + logout, + user, + }) => { usePageView(title) const { gaVersion, setGAVersion } = useGAVersion(pathname) - const classes = useStyles({ disableNav }) - const formClasses = useFormStyles() + const [open, setOpen] = React.useState(false) + useEffect(() => { + //const timeout = setTimeout(() => { + // Redirect to the new domain while preserving the path. + if( window.location.hostname.indexOf('web.app') !== -1 ) { + const newHostname = window.location.hostname.replace('web.app', 'google'); + const newLocation = window.location.href.replace( window.location.hostname, newHostname ); + window.location.replace(newLocation); + } + //}, 1000); + + return; + }, []); + const links = useMemo(() => { return linkData.filter(linkData => - linkData.versions.find(version => version === gaVersion) + linkData.versions.find(version => version === gaVersion) ) }, [gaVersion]) @@ -102,216 +148,392 @@ const Template: React.FC = ({ }, []) return ( -
    - - - - {title} - - - setOpen(true)} - className={classes.mobileMenu} +
    + - - - GA Demos & Tools - - - - {successful && ( - - )} - setOpen(false)}> - - - + + + {title} + + + setOpen(true)} + className={classes.mobileMenu} + > + + + GA Demos & Tools + + + + {successful && ( + + )} + setOpen(false)}> + + - Home - - - {links.map(linkData => { - if (linkData.type === "heading") { + + Home + + + {links.map(linkData => { + if (linkData.type === "heading") { + return ( + + {linkData.text} + + ) + } return ( - - {linkData.text} - + { + setOpen(false) + navigate(linkData.href) + }} + > + {linkData.text} + ) - } - if (linkData.type === "ga4toggle") { + })} + + + + -
    -
    -
    - - - {!disableNav && successful && ( - - )} -
    - {title} -
    -
    - -
    - {requireLogin && (inProgress || notStarted) && ( - Checking if you're logged in )} - {requireLogin && - successful && - (userStatus === UserStatus.SignedIn ? ( - children - ) : ( -
    +
    + {title} + +
    + +
    + {requireLogin && (inProgress || notStarted) && ( + Checking if you're logged in + )} + {requireLogin && + successful && + (userStatus === UserStatus.SignedIn ? ( + children + ) : ( +
    + + You must be logged in with Google for this demo. + + +
    + ))} + {requireLogin && failed && ( - You must be logged in with Google for this demo. + Login status could not be determined. Please ensure cookies + are enabled. - -
    - ))} - {requireLogin && failed && ( - - Login status could not be determined. Please ensure cookies - are enabled. - - )} - {!requireLogin && children} -
    -
    -
    -
    -
    + )} + {!requireLogin && children} +
    + + + ) } -const Layout2: React.FC = props => { +const StyledTemplate = styled('div')(( + { + theme + } +) => ({ + [`& .${classes.footer}`]: { + padding: theme.spacing(2), + "&> :not(:first-child)": { + marginLeft: theme.spacing(1), + }, + }, + + [`& .${classes.activeLink}`]: { + fontWeight: "bold", + color: `${theme.palette.primary.main} !important`, + }, + + [`& .${classes.toggle}`]: { + display: "flex", + }, + + [`& .${classes.loadingIndicator}`]: { + display: "flex", + flexDirection: "column", + alignItems: "center", + }, + + [`& .${classes.root}`]: { + display: "flex", + minHeight: "100%", + [notMobile(theme)]: { + flexDirection: "row", + }, + [mobile(theme)]: { + flexDirection: "column", + }, + }, + + [`& .${classes.main}`]: { + display: "flex", + flexDirection: "column", + flexGrow: 1, + minHeight: "100%", + color: theme.palette.getContrastText(theme.palette.grey[200]), + backgroundColor: theme.palette.grey[200], + }, + + [`& .${classes.contentWrapper}`]: { + flexGrow: 1, + }, + + [`& .${classes.content}`]: { + flexGrow: 1, + padding: theme.spacing(2, 4, 0, 4), + maxWidth: theme.breakpoints.values.md, + [mobile(theme)]: { + maxWidth: "unset", + width: "100%", + padding: theme.spacing(2), + }, + }, + + [`& .${classes.header}`]: { + padding: theme.spacing(4, 4, 2, 4), + position: "relative", + maxWidth: theme.breakpoints.values.md, + [mobile(theme)]: { + maxWidth: "unset", + width: "100%", + padding: theme.spacing(2), + }, + }, + + [`& .${classes.logoRow}`]: { + [mobile(theme)]: { + display: "none", + }, + [notMobile(theme)]: { + display: "flex", + flexWrap: "wrap", + alignItems: "center", + }, + }, + + [`& .${classes.logo}`]: { + flexGrow: 1, + height: "50px", + }, + + [`& .${classes.appBarNav}`]: { + + [theme.breakpoints.up("md")]: + { + display: "none", + }, + flexDirection: "row", + alignItems: "center", + paddingLeft: theme.spacing(1), + }, + + [`& .${classes.mobileNav}`]: { + color: theme.palette.getContrastText(theme.palette.grey[800]), + backgroundColor: theme.palette.grey[800], + minHeight: "100%", + }, + + [`& .${classes.nav}`]: { + [mobile(theme)]: { + display: "none", + }, + minWidth: "260px", + borderRight: `1px solid ${theme.palette.grey[200]}`, + color: theme.palette.getContrastText(theme.palette.grey[800]), + backgroundColor: theme.palette.grey[800], + "& ol": { + margin: 0, + padding: 0, + paddingTop: theme.spacing(1), + listStyle: "none", + width: "100%", + "& li": { + width: "100%", + display: "flex", + "& a": { + color: "unset", + width: "100%", + textDecoration: "none", + }, + }, + }, + }, + + [`& .${classes.noColor}`]: { + color: "unset", + }, + + [`& .${classes.innerNav}`]: { + padding: theme.spacing(1), + paddingLeft: theme.spacing(4), + [mobile(theme)]: { + paddingLeft: theme.spacing(2), + paddingRight: theme.spacing(2), + }, + }, + + [`& .${classes.navLinkBackgroundHover}`]: { + "&:hover": { + backgroundColor: theme.palette.grey[100], + color: theme.palette.getContrastText(theme.palette.grey[100]), + }, + }, + + [`& .${classes.home}`]: { + margin: "unset", + color: "unset", + display: "flex", + alignItems: "center", + paddingLeft: theme.spacing(2), + [notMobile(theme)]: { + "&:hover": { + color: theme.palette.primary.main, + }, + }, + }, + + [`& .${classes.subHeading}`]: { + width: "100%", + borderTop: `1px solid ${theme.palette.grey[600]}`, + marginTop: theme.spacing(2), + paddingTop: theme.spacing(2), + marginBottom: theme.spacing(1), + paddingLeft: theme.spacing(4), + [mobile(theme)]: { + paddingLeft: theme.spacing(2), + }, + }, + + [`& .${classes.homeIcon}`]: { + marginLeft: theme.spacing(-0.5), + paddingRight: theme.spacing(1), + fontSize: "1.5em", + }, + + [`& .${classes.mobileHeading}`]: { + color: theme.palette.getContrastText(theme.palette.primary.main), + marginLeft: theme.spacing(1), + }, + + [`& .${classes.mobileMenu}`]: { + display: "flex", + justifyContent: "flex-start", + flexGrow: 1, + } + })); + +const Layout2: React.FC> = props => { const request = useLogin2() return (