From 598a24f3a1984ba52ac143239c41c658fc611471 Mon Sep 17 00:00:00 2001 From: ikuleshov Date: Thu, 14 Dec 2023 00:22:39 -1000 Subject: [PATCH] Update all dependencies to the latest version (#1667) * Upgrade all dependencies to the latest version and migrate to MUI5. * address check-types issues --- .github/ISSUE_TEMPLATE/bug_report.md | 26 +- .github/ISSUE_TEMPLATE/feature_request.md | 7 +- .github/workflows/lint.yml | 2 +- .github/workflows/main.yml | 2 +- .github/workflows/tests.yml | 2 +- README.md | 3 +- data/images/blackT2.png | Bin 0 -> 3972 bytes data/images/brownT.png | Bin 0 -> 12700 bytes data/images/greyT.png | Bin 0 -> 11764 bytes data/images/pinkT.png | Bin 0 -> 18638 bytes data/images/yellowT.png | Bin 0 -> 23884 bytes data/products.json | 68 + font-preload-cache.json | 179 +- gatsby-browser.js | 15 - gatsby-browser.tsx | 9 + gatsby-config.js => gatsby-config.ts | 48 +- gatsby-node.js | 9 +- gatsby-ssr.tsx | 16 +- gatsby/wrapRootElement.js | 131 - gatsby/wrapRootElement.tsx | 165 + jest.config.js | 6 + lib/build/build.js | 57 +- lib/build/check-config.js | 571 +- lib/build/deploy-functions.js | 163 +- lib/build/develop.js | 37 +- lib/build/index.js | 230 +- lib/build/serve.js | 59 +- lib/build/stage.js | 96 +- lib/build/types.js | 73 +- lib/package.json | 17 +- lib/scripts/build.ts | 4 +- lib/scripts/check-config.ts | 8 +- lib/scripts/deploy-functions.ts | 8 +- lib/scripts/develop.ts | 8 +- lib/scripts/index.ts | 49 +- lib/scripts/serve.ts | 8 +- lib/scripts/stage.ts | 10 +- lib/tsconfig.json | 106 +- lib/yarn.lock | 4003 ++-- package.json | 120 +- src/components/AccountExplorer/ViewTable.tsx | 73 +- src/components/AccountExplorer/index.tsx | 62 +- src/components/Buttons.tsx | 18 +- .../CampaignURLBuilder/IOS/index.tsx | 377 - .../IOS/useGenerateURL.spec.ts | 496 - .../CampaignURLBuilder/IOS/useGenerateURL.ts | 116 - .../CampaignURLBuilder/IOS/useInputs.ts | 176 - .../CampaignURLBuilder/Play/index.tsx | 108 +- .../Web/GeneratedURL/WarningsFor.tsx | 43 +- .../Web/GeneratedURL/index.tsx | 76 +- .../CampaignURLBuilder/Web/index.tsx | 104 +- .../CampaignURLBuilder/Web/useInputs.ts | 4 +- .../CampaignURLBuilder/Web/useStyles.ts | 58 - src/components/CampaignURLBuilder/index.tsx | 4 +- src/components/CodeBlock.tsx | 38 +- src/components/CopyButton.tsx | 40 +- .../ColumnGroupList.tsx | 217 +- .../DimensionsMetricsExplorer/Explorer.tsx | 41 +- .../GroupInfoTemplate.tsx | 75 +- .../DimensionsMetricsExplorer/index.tsx | 2 +- src/components/ErrorFallback/index.tsx | 38 +- src/components/ExternalLink.tsx | 72 +- src/components/GA4Pickers/index.tsx | 71 +- src/components/GADate.tsx | 47 +- src/components/HitBuilder/HitCard.tsx | 225 +- src/components/HitBuilder/Parameters.tsx | 126 +- src/components/HitBuilder/hit.ts | 37 +- src/components/HitBuilder/hooks.ts | 4 +- src/components/HitBuilder/index.tsx | 6 +- src/components/HitBuilder/types.ts | 2 +- src/components/Home/index.tsx | 27 +- src/components/Info.tsx | 47 +- src/components/InlineCode.tsx | 9 +- src/components/LabeledCheckbox.tsx | 5 +- src/components/Layout/BugReport.tsx | 6 +- src/components/Layout/GA4Toggle.tsx | 6 +- src/components/Layout/Login.tsx | 8 +- src/components/Layout/index.tsx | 666 +- src/components/Layout/links.ts | 6 + src/components/Layout/useStyles.ts | 180 - src/components/LinkedTextField.tsx | 2 +- src/components/Loadable.tsx | 2 +- src/components/PrettyJson.tsx | 54 +- src/components/QueryExplorer/Report.tsx | 50 +- src/components/QueryExplorer/Sort.tsx | 133 +- src/components/QueryExplorer/TSVDownload.tsx | 31 +- src/components/QueryExplorer/index.tsx | 71 +- .../QueryExplorer/useDataAPIRequest.ts | 59 +- .../RequestComposer/CohortRequest/index.tsx | 40 +- .../HistogramRequest/index.tsx | 41 +- .../MetricExpression/index.tsx | 41 +- .../useMetricExpressionRequest.ts | 7 +- .../RequestComposer/PivotRequest/index.tsx | 41 +- .../RequestComposer/ReportsTable.tsx | 70 +- .../RequestComposer/RequestComposer.tsx | 201 +- src/components/RequestComposer/index.tsx | 34 +- src/components/ScrollToTop/index.tsx | 31 +- src/components/Select.tsx | 22 +- src/components/SelectMultiple.tsx | 22 +- src/components/SeparatedInput.tsx | 4 +- src/components/ShortenLink/index.tsx | 3 +- src/components/Spinner.tsx | 33 +- src/components/TabPanel.tsx | 5 +- src/components/TextBox.tsx | 2 +- src/components/UAPickers/index.tsx | 165 +- src/components/ViewSelector/index.tsx | 49 +- src/components/Warning.tsx | 46 +- src/components/WithHelpText.tsx | 119 +- .../DimensionsMetricsExplorer/Compatible.tsx | 50 +- .../ga4/DimensionsMetricsExplorer/Field.tsx | 85 +- .../ga4/DimensionsMetricsExplorer/index.tsx | 60 +- .../useCompatibility.tsx | 18 +- .../EnhancedEcommerce/add-to-cart.module.css | 18 + .../ga4/EnhancedEcommerce/add-to-cart.tsx | 42 + .../ga4/EnhancedEcommerce/cart-button.tsx | 12 +- .../ga4/EnhancedEcommerce/ga-console.tsx | 37 +- .../ga4/EnhancedEcommerce/navigation.tsx | 2 +- .../numeric-input.module.css | 100 + .../ga4/EnhancedEcommerce/numeric-input.tsx | 43 + .../EnhancedEcommerce/product-card.module.css | 31 + .../ga4/EnhancedEcommerce/product-card.tsx | 57 + .../product-listing.module.css | 7 + .../ga4/EnhancedEcommerce/product-listing.tsx | 39 + .../ga4/EnhancedEcommerce/store-context.tsx | 410 +- src/components/ga4/EventBuilder/Items.tsx | 40 +- src/components/ga4/EventBuilder/Parameter.tsx | 37 +- .../ga4/EventBuilder/Parameters.tsx | 39 +- .../ValidateEvent/handlers/formatCheckLib.ts | 59 +- .../ValidateEvent/handlers/responseUtil.ts | 10 +- .../ga4/EventBuilder/ValidateEvent/index.tsx | 94 +- .../ValidateEvent/schemas/baseContent.spec.ts | 2 - .../ValidateEvent/schemas/event.spec.ts | 2 +- .../schemas/eventTypes/eventBuilder.ts | 4 +- .../ValidateEvent/schemas/eventTypes/item.ts | 1 + .../ValidateEvent/schemas/schemaBuilder.ts | 14 +- .../schemas/userProperties.spec.ts | 1 + .../EventBuilder/ValidateEvent/usePayload.ts | 2 +- .../ValidateEvent/useValidateEvent.ts | 143 +- .../EventBuilder/ValidateEvent/validator.ts | 6 +- src/components/ga4/EventBuilder/index.tsx | 323 +- .../ga4/EventBuilder/useUserProperties.ts | 4 +- .../BasicReport/QueryExplorerLink.tsx | 3 +- .../ga4/QueryExplorer/BasicReport/index.tsx | 46 +- .../ga4/QueryExplorer/CohortSpec.tsx | 87 +- .../ga4/QueryExplorer/DateRanges.tsx | 99 +- .../ga4/QueryExplorer/Filter/Expression.tsx | 205 +- .../QueryExplorer/Filter/ExpressionList.tsx | 94 +- .../Filter/Filter/BetweenFilter.tsx | 2 +- .../Filter/Filter/NumericFilter.tsx | 2 +- .../Filter/Filter/StringFilter.tsx | 5 +- .../ga4/QueryExplorer/Filter/Filter/index.tsx | 160 +- .../ga4/QueryExplorer/Filter/index.tsx | 41 +- .../ga4/QueryExplorer/Filter/useFilter.ts | 8 + .../ga4/QueryExplorer/MetricAggregations.tsx | 32 +- src/components/ga4/QueryExplorer/OrderBys.tsx | 277 +- src/components/ga4/QueryExplorer/Response.tsx | 60 +- src/components/ga4/QueryExplorer/index.tsx | 13 +- src/components/ga4/StreamPicker/index.tsx | 220 +- .../StreamPicker/useAccountPropertyStream.ts | 88 - .../ga4/StreamPicker/useAccounts.ts | 2 +- src/components/ga4/StreamPicker/useStreams.ts | 192 - src/constants.ts | 2 +- src/hooks/useCached.spec.ts | 6 +- src/hooks/useCached.ts | 2 +- src/hooks/useFormStyles.ts | 105 +- src/pages/404.tsx | 68 +- src/pages/account-explorer.tsx | 8 +- src/pages/bitly-auth.tsx | 12 +- src/pages/campaign-url-builder/index.tsx | 8 +- src/pages/campaign-url-builder/ios.tsx | 8 +- src/pages/campaign-url-builder/play.tsx | 8 +- src/pages/dimensions-metrics-explorer.tsx | 8 +- src/pages/enhanced-ecommerce.tsx | 43 +- src/pages/ga4/campaign-url-builder/index.tsx | 8 +- src/pages/ga4/campaign-url-builder/play.tsx | 8 +- src/pages/ga4/dimensions-metrics-explorer.tsx | 8 +- .../ga4/enhanced-ecommerce/cart.module.css | 161 + src/pages/ga4/enhanced-ecommerce/cart.tsx | 129 + src/pages/ga4/enhanced-ecommerce/index.tsx | 66 + .../products/product-page.module.css | 179 + .../products/{ProductsJson.title}.tsx | 121 + src/pages/ga4/event-builder.tsx | 8 +- src/pages/ga4/index.tsx | 8 +- src/pages/ga4/query-explorer.tsx | 8 +- src/pages/hit-builder.tsx | 8 +- src/pages/index.tsx | 20 +- src/pages/query-explorer.tsx | 8 +- src/pages/request-composer/cohort.tsx | 8 +- src/pages/request-composer/index.tsx | 8 +- .../request-composer/metric-expression.tsx | 8 +- src/pages/request-composer/pivot.tsx | 8 +- src/pages/spreadsheet-add-on.tsx | 10 +- src/pages/tag-assistant.tsx | 10 +- src/test-utils/gapi.ts | 9 - src/test-utils/index.tsx | 6 +- src/types/ga4/StreamPicker.ts | 18 +- tsconfig.json | 132 +- yarn.lock | 18016 ---------------- 198 files changed, 8764 insertions(+), 25324 deletions(-) create mode 100644 data/images/blackT2.png create mode 100644 data/images/brownT.png create mode 100644 data/images/greyT.png create mode 100644 data/images/pinkT.png create mode 100644 data/images/yellowT.png create mode 100644 data/products.json delete mode 100644 gatsby-browser.js create mode 100644 gatsby-browser.tsx rename gatsby-config.js => gatsby-config.ts (59%) delete mode 100644 gatsby/wrapRootElement.js create mode 100644 gatsby/wrapRootElement.tsx delete mode 100644 src/components/CampaignURLBuilder/IOS/index.tsx delete mode 100644 src/components/CampaignURLBuilder/IOS/useGenerateURL.spec.ts delete mode 100644 src/components/CampaignURLBuilder/IOS/useGenerateURL.ts delete mode 100644 src/components/CampaignURLBuilder/IOS/useInputs.ts delete mode 100644 src/components/CampaignURLBuilder/Web/useStyles.ts delete mode 100644 src/components/Layout/useStyles.ts create mode 100644 src/components/ga4/EnhancedEcommerce/add-to-cart.module.css create mode 100644 src/components/ga4/EnhancedEcommerce/add-to-cart.tsx create mode 100644 src/components/ga4/EnhancedEcommerce/numeric-input.module.css create mode 100644 src/components/ga4/EnhancedEcommerce/numeric-input.tsx create mode 100644 src/components/ga4/EnhancedEcommerce/product-card.module.css create mode 100644 src/components/ga4/EnhancedEcommerce/product-card.tsx create mode 100644 src/components/ga4/EnhancedEcommerce/product-listing.module.css create mode 100644 src/components/ga4/EnhancedEcommerce/product-listing.tsx delete mode 100644 src/components/ga4/StreamPicker/useAccountPropertyStream.ts delete mode 100644 src/components/ga4/StreamPicker/useStreams.ts create mode 100644 src/pages/ga4/enhanced-ecommerce/cart.module.css create mode 100644 src/pages/ga4/enhanced-ecommerce/cart.tsx create mode 100644 src/pages/ga4/enhanced-ecommerce/index.tsx create mode 100644 src/pages/ga4/enhanced-ecommerce/products/product-page.module.css create mode 100644 src/pages/ga4/enhanced-ecommerce/products/{ProductsJson.title}.tsx delete mode 100644 yarn.lock 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 0000000000000000000000000000000000000000..679064039a9ae3ffded252e2a493e9dc19e70fde GIT binary patch literal 3972 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 UdBd_1J`NjCvs6a1k8|7q12+kYT>t<8 literal 0 HcmV?d00001 diff --git a/data/images/greyT.png b/data/images/greyT.png new file mode 100644 index 0000000000000000000000000000000000000000..235e52a700fcbb5d228d9049845a12306a480508 GIT binary patch literal 11764 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 E0LIW9-T(jq literal 0 HcmV?d00001 diff --git a/data/images/pinkT.png b/data/images/pinkT.png new file mode 100644 index 0000000000000000000000000000000000000000..8580f9c5034cb929d135b1145c2c7a545c455001 GIT binary patch literal 18638 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 Ib}Rq@0Ps&HwEzGB literal 0 HcmV?d00001 diff --git a/data/images/yellowT.png b/data/images/yellowT.png new file mode 100644 index 0000000000000000000000000000000000000000..6ddb26bbbf20a8746d85f5b132c46f8a02a77878 GIT binary patch literal 23884 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 G0000IC$xY7 literal 0 HcmV?d00001 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..340dbd360 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": "^5.3.4", + "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/ViewTable.tsx b/src/components/AccountExplorer/ViewTable.tsx index b1c581709..5021d976e 100644 --- a/src/components/AccountExplorer/ViewTable.tsx +++ b/src/components/AccountExplorer/ViewTable.tsx @@ -1,12 +1,12 @@ 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 { styled } from '@mui/material/styles'; +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 Typography from "@mui/material/Typography" import { CopyIconButton } from "@/components/CopyButton" import HighlightText from "./HighlightText" @@ -15,25 +15,43 @@ import { RequestStatus } from "@/types" import useFlattenedViews from "../ViewSelector/useFlattenedViews" import { AccountSummary, ProfileSummary, WebPropertySummary } from "@/types/ua" -const useStyles = makeStyles(theme => ({ - id: { +const PREFIX = 'ViewsTable'; + +const classes = { + id: `${PREFIX}-id`, + mark: `${PREFIX}-mark`, + link: `${PREFIX}-link`, + tableCell: `${PREFIX}-tableCell`, + copyIconButton: `${PREFIX}-copyIconButton` +}; + +const StyledTable = styled(Table)(( + { + theme + } +) => ({ + [`& .${classes.id}`]: { color: theme.palette.text.secondary, }, - mark: { + + [`& .${classes.mark}`]: { backgroundColor: theme.palette.success.light, }, - link: { + + [`& .${classes.link}`]: { color: theme.palette.info.main, }, - tableCell: { + + [`& .${classes.tableCell}`]: { display: "flex", justifyContent: "space-between", alignItems: "center", }, - copyIconButton: { + + [`& .${classes.copyIconButton}`]: { color: theme.palette.text.secondary, - }, -})) + } +})); interface ViewTableProps { flattenedViewsRequest: ReturnType @@ -53,7 +71,7 @@ const APVCell: React.FC = ({ copyToolTip, textToCopy, }) => { - const classes = useStyles() + return (
@@ -83,9 +101,9 @@ const textClamp = (text: string, maxWidth: number) => { const AccountCell: React.FC<{ account: AccountSummary | undefined - classes: ReturnType + search: string | undefined -}> = ({ account, classes, search }) => { +}> = ({ account, search }) => { if (account === undefined) { return null } @@ -113,9 +131,9 @@ const AccountCell: React.FC<{ const PropertyCell: React.FC<{ property: WebPropertySummary | undefined - classes: ReturnType + search: string | undefined -}> = ({ property, classes, search }) => { +}> = ({ property, search }) => { if (property === undefined) { return No UA properties for account. } @@ -146,9 +164,9 @@ const ViewCell: React.FC<{ account: AccountSummary | undefined property: WebPropertySummary | undefined view: ProfileSummary | undefined - classes: ReturnType + search: string | undefined -}> = ({ account, property, view, classes, search }) => { +}> = ({ account, property, view, search }) => { if (view === undefined) { return No UA views for account. } @@ -201,9 +219,9 @@ const ViewsTable: React.FC = ({ className, search, }) => { - const classes = useStyles() + return ( - = ({ > @@ -259,8 +274,8 @@ const ViewsTable: React.FC = ({ )} -
- ) + + ); } export default ViewsTable diff --git a/src/components/AccountExplorer/index.tsx b/src/components/AccountExplorer/index.tsx index e7bd22234..dcf7221de 100644 --- a/src/components/AccountExplorer/index.tsx +++ b/src/components/AccountExplorer/index.tsx @@ -13,10 +13,10 @@ // 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 { styled } from '@mui/material/styles'; +import TextField from "@mui/material/TextField" +import Typography from "@mui/material/Typography" +import Paper from "@mui/material/Paper" import { useDebounce } from "use-debounce" import ViewSelector from "@/components/ViewSelector" @@ -27,41 +27,65 @@ import useAccountPropertyView, { import { StorageKey } from "@/constants" import useFlattenedViews from "../ViewSelector/useFlattenedViews" -const useStyles = makeStyles(theme => ({ - viewSelector: { +const PREFIX = 'AccountExplorer'; + +const classes = { + viewSelector: `${PREFIX}-viewSelector`, + section: `${PREFIX}-section`, + paper: `${PREFIX}-paper`, + header: `${PREFIX}-header`, + heading: `${PREFIX}-heading`, + search: `${PREFIX}-search`, + searchInput: `${PREFIX}-searchInput`, + table: `${PREFIX}-table` +}; + +const Root = styled('div')(( + { + theme + } +) => ({ + [`& .${classes.viewSelector}`]: { marginBottom: theme.spacing(1), }, - section: { + + [`& .${classes.section}`]: { padding: theme.spacing(1), }, - paper: { + + [`& .${classes.paper}`]: { padding: theme.spacing(3), }, - header: { + + [`& .${classes.header}`]: { margin: theme.spacing(0, 1, 0), padding: theme.spacing(0, 1, 0), }, - heading: { + + [`& .${classes.heading}`]: { margin: theme.spacing(2), textAlign: "center", }, - search: { + + [`& .${classes.search}`]: { display: "flex", "flex-direction": "column", "align-items": "center", padding: theme.spacing(0, 1, 0), // Search title Title }, - searchInput: { + + [`& .${classes.searchInput}`]: { margin: theme.spacing(1), padding: theme.spacing(1, 1), width: "100%", "max-width": theme.breakpoints.values.sm, }, - table: { + + [`& .${classes.table}`]: { "margin-top": theme.spacing(6), - }, -})) + } +})); const containsQuery = ( searchQuery: string, @@ -85,7 +109,7 @@ enum QueryParam { } const AccountExplorer = () => { - const classes = useStyles() + const [searchQuery, setSearchQuery] = React.useState("") const [debouncedQuery] = useDebounce(searchQuery, 100, { trailing: true }) @@ -106,7 +130,7 @@ const AccountExplorer = () => { ) return ( - <> + ( Overview Use this tool to search or browse through your accounts, properties, and @@ -145,8 +169,8 @@ const AccountExplorer = () => {
- - ) + ) + ); } 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..6bada3586 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,7 +136,7 @@ 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 index b3607dc1d..480325761 100644 --- a/src/components/DimensionsMetricsExplorer/ColumnGroupList.tsx +++ b/src/components/DimensionsMetricsExplorer/ColumnGroupList.tsx @@ -14,36 +14,65 @@ 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 { styled } from '@mui/material/styles'; + +import Typography from "@mui/material/Typography" +import IconButton from "@mui/material/IconButton" +import Tooltip from "@mui/material/Tooltip" +import LinkIcon from "@mui/icons-material/Link" +import Button from "@mui/material/Button" +import RemoveCircle from "@mui/icons-material/RemoveCircle" +import AddCircle from "@mui/icons-material/AddCircle" +import Info from "@mui/icons-material/Info" +import {groupBy, map, sortBy} from "lodash" +import {Set} from "immutable" +import {navigate} from "gatsby" import classnames from "classnames" -import { CopyIconButton } from "@/components/CopyButton" +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" +import {CUBE_NAMES, CUBES_BY_COLUMN_NAME, CubesByColumnName} from "./cubes" +import {Column} from "@/types/ua" + +const PREFIX = 'ColumnGroupList'; + +const classes = { + accordionTitle: `${PREFIX}-accordionTitle`, + expandContract: `${PREFIX}-expandContract`, + column: `${PREFIX}-column`, + columnSubgroupTitle: `${PREFIX}-columnSubgroupTitle`, + columnSubgroup: `${PREFIX}-columnSubgroup`, + deprecatedColumn: `${PREFIX}-deprecatedColumn`, + checkbox: `${PREFIX}-checkbox`, + deprecatedCheckbox: `${PREFIX}-deprecatedCheckbox`, + columnDetails: `${PREFIX}-columnDetails`, + columnLabel: `${PREFIX}-columnLabel`, + columnButton: `${PREFIX}-columnButton`, + name: `${PREFIX}-name`, + id: `${PREFIX}-id`, + popover: `${PREFIX}-popover`, + paper: `${PREFIX}-paper`, + labelText: `${PREFIX}-labelText` +}; + +const Root = styled('div')(( + { + theme + } +) => ({ + [`& .${classes.accordionTitle}`]: { margin: 0 }, -const useStyles = makeStyles(theme => ({ - accordionTitle: { margin: 0 }, - expandContract: { + [`& .${classes.expandContract}`]: { margin: theme.spacing(1), }, - column: { + + [`& .${classes.column}`]: { display: "flex", alignItems: "baseline", padding: "unset", }, - columnSubgroupTitle: { + + [`& .${classes.columnSubgroupTitle}`]: { marginBottom: theme.spacing(1), marginTop: theme.spacing(0.5), marginLeft: theme.spacing(-1), @@ -55,39 +84,48 @@ const useStyles = makeStyles(theme => ({ }, display: "flex", }, - columnSubgroup: { + + [`& .${classes.columnSubgroup}`]: { marginLeft: theme.spacing(4), marginBottom: theme.spacing(1), }, - deprecatedColumn: { + + [`&.${classes.deprecatedColumn}`]: { textDecoration: "line-through", }, - checkbox: { + + [`& .${classes.checkbox}`]: { padding: "unset", paddingRight: theme.spacing(1), }, - deprecatedCheckbox: { + + [`& .${classes.deprecatedCheckbox}`]: { padding: "unset", paddingRight: theme.spacing(1), visibility: "hidden", }, - columnDetails: { + + [`& .${classes.columnDetails}`]: { display: "flex", flexDirection: "column", }, - columnLabel: { + + [`&.${classes.columnLabel}`]: { display: "flex", alignItems: "flex-start", flexWrap: "wrap", position: "relative", top: theme.spacing(-1), }, - columnButton: { + + [`& .${classes.columnButton}`]: { padding: "unset", paddingLeft: theme.spacing(1), }, - name: { marginRight: theme.spacing(1) }, - id: { + + [`& .${classes.name}`]: { marginRight: theme.spacing(1) }, + + [`& .${classes.id}`]: { "& > button": { // display: "none", padding: "unset", @@ -99,25 +137,28 @@ const useStyles = makeStyles(theme => ({ // }, // }, }, - popover: { + + [`& .${classes.popover}`]: { pointerEvents: "none", }, - paper: { + + [`& .${classes.paper}`]: { padding: theme.spacing(1), }, - labelText: { + + [`& .${classes.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/${ @@ -127,7 +168,7 @@ const ColumnLabel: React.FC = ({ column, isDeprecated }) => { ) return ( -
= ({ column, isDeprecated }) => {
- - ) + + ); } const SelectableColumn: React.FC<{ @@ -167,7 +208,7 @@ const SelectableColumn: React.FC<{ disabled: boolean setSelected: (selected: boolean) => void }> = ({ column, selected, disabled, setSelected }) => { - const classes = useStyles() + const isDeprecated = React.useMemo( () => column.attributes?.status !== "PUBLIC", [column.attributes] @@ -207,7 +248,7 @@ const ColumnSubgroup: React.FC<{ onlySegments, cubesByColumnName, }) => { - const classes = useStyles() + // Move deprecated columns to the bottom const sortedColumns = React.useMemo( () => @@ -281,7 +322,7 @@ const ColumnGroup: React.FC<{ selectedColumns, selectColumn, }) => { - const classes = useStyles() + if (!open) { return ( @@ -348,7 +389,7 @@ const ColumnGroupList: React.FC<{ columns: Column[] searchTerms: string[] }> = ({ allowDeprecated, onlySegments, columns, searchTerms }) => { - const classes = useStyles() + const filteredColumns = React.useMemo(() => { let filtered: Column[] = columns @@ -433,56 +474,58 @@ const ColumnGroupList: React.FC<{ selectedColumns .map( columnId => - CUBES_BY_COLUMN_NAME.get(columnId) || (Set() as Set) + CUBES_BY_COLUMN_NAME.get(columnId!) || (Set() as Set) ) - .reduce((cubes1, cubes2) => cubes1.intersect(cubes2), CUBE_NAMES), + .reduce((cubes1, cubes2) => cubes1!.intersect(cubes2!), CUBE_NAMES), [selectedColumns] ) - const showExpandAll = open.size < Object.keys(groupedColumns).length - const showCollapseAll = open.size > 0 + let showExpandAll = open.size < Object.keys(groupedColumns).length + let 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} - /> - ))} -
-
+ +
+
+ {showExpandAll ? ( + + ) : null} + {showCollapseAll ? ( + + ) : null} +
+
+ {map(groupedColumns, (columns, groupName) => ( + toggleGroupOpen(groupName)} + allowableCubes={allowableCubes} + cubesByColumnName={CUBES_BY_COLUMN_NAME} + selectedColumns={selectedColumns} + selectColumn={selectColumn} + /> + ))} +
+
+
) } diff --git a/src/components/DimensionsMetricsExplorer/Explorer.tsx b/src/components/DimensionsMetricsExplorer/Explorer.tsx index b0301b00f..a1e0fae86 100644 --- a/src/components/DimensionsMetricsExplorer/Explorer.tsx +++ b/src/components/DimensionsMetricsExplorer/Explorer.tsx @@ -14,10 +14,11 @@ 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 { styled } from '@mui/material/styles'; + +import TextField from "@mui/material/TextField" +import IconButton from "@mui/material/IconButton" +import Clear from "@mui/icons-material/Clear" import { useDebounce } from "use-debounce" import { StorageKey } from "@/constants" @@ -27,11 +28,22 @@ import { usePersistentBoolean, usePersistentString } from "../../hooks" import ColumnGroupList from "./ColumnGroupList" import useAnchorRedirects from "./useAnchorRedirects" import useColumns from "./useColumns" -import { Typography } from "@material-ui/core" +import { Typography } from "@mui/material" import PrettyJson from "../PrettyJson" -const useStyles = makeStyles(theme => ({ - search: { +const PREFIX = 'Explorer'; + +const classes = { + search: `${PREFIX}-search`, + searchInput: `${PREFIX}-searchInput` +}; + +const Root = styled('div')(( + { + theme + } +) => ({ + [`& .${classes.search}`]: { display: "flex", flexDirection: "column", "&> label": { @@ -40,10 +52,11 @@ const useStyles = makeStyles(theme => ({ marginBottom: theme.spacing(-1), }, }, - searchInput: { + + [`& .${classes.searchInput}`]: { maxWidth: theme.spacing(60), - }, -})) + } +})); const Search: React.FC<{ searchText: string | undefined @@ -60,7 +73,7 @@ const Search: React.FC<{ allowDeprecated, setAllowDeprecated, }) => { - const classes = useStyles() + return (
{ useAnchorRedirects(successful(columnsRequest)?.columns) return ( -
+ { />
)} - - ) + + ); } export default Explorer diff --git a/src/components/DimensionsMetricsExplorer/GroupInfoTemplate.tsx b/src/components/DimensionsMetricsExplorer/GroupInfoTemplate.tsx index 7324576de..aea25e365 100644 --- a/src/components/DimensionsMetricsExplorer/GroupInfoTemplate.tsx +++ b/src/components/DimensionsMetricsExplorer/GroupInfoTemplate.tsx @@ -14,11 +14,12 @@ 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 { styled } from '@mui/material/styles'; + +import Typography from "@mui/material/Typography" +import Chip from "@mui/material/Chip" +import ArrowBack from "@mui/icons-material/ArrowBack" +import LinkIcon from "@mui/icons-material/Link" import classnames from "classnames" import { Link } from "gatsby" import { sortBy } from "lodash" @@ -27,30 +28,34 @@ import Layout from "@/components/Layout" import { CopyIconButton } from "@/components/CopyButton" import { Column } from "./common-types" -type GroupInfoTemplateProps = { - pageContext: { - groupName: string - dimensions: Column[] - metrics: Column[] - } -} +const PREFIX = 'GroupInfoTemplate'; -type ColumnProps = { - column: Column -} +const classes = { + deprecatedText: `${PREFIX}-deprecatedText`, + returnLink: `${PREFIX}-returnLink`, + columnHeading: `${PREFIX}-columnHeading`, + chips: `${PREFIX}-chips`, + linkIcon: `${PREFIX}-linkIcon` +}; -const useStyles = makeStyles(theme => ({ - deprecatedText: { +const StyledLayout = styled(Layout)(( + { + theme + } +) => ({ + [`& .${classes.deprecatedText}`]: { textDecoration: "line-through", }, - returnLink: { + + [`& .${classes.returnLink}`]: { display: "flex", alignItems: "center", "& svg": { marginRight: theme.spacing(1), }, }, - columnHeading: { + + [`& .${classes.columnHeading}`]: { marginBottom: theme.spacing(1), display: "flex", alignItems: "baseline", @@ -58,24 +63,38 @@ const useStyles = makeStyles(theme => ({ marginLeft: theme.spacing(1), }, }, - chips: { + + [`& .${classes.chips}`]: { "& div": { marginRight: theme.spacing(1), }, marginBottom: theme.spacing(1), }, - linkIcon: { + + [`& .${classes.linkIcon}`]: { alignSelf: "center", marginLeft: theme.spacing(1), - }, -})) + } +})); + +type GroupInfoTemplateProps = { + pageContext: { + groupName: string + dimensions: Column[] + metrics: Column[] + } +} + +type ColumnProps = { + column: Column +} const ColumnInfo: React.FC = ({ column: { attributes }, column, }) => { // TODO make the uiName be linkAble - const classes = useStyles() + return (
@@ -124,9 +143,9 @@ const GroupInfoTemplate: React.FC< pageContext: { groupName, dimensions, metrics }, location: { pathname }, }) => { - const classes = useStyles() + return ( - ( ))} - - ) + + ); } export default GroupInfoTemplate diff --git a/src/components/DimensionsMetricsExplorer/index.tsx b/src/components/DimensionsMetricsExplorer/index.tsx index 3e9de689c..b2d74734a 100644 --- a/src/components/DimensionsMetricsExplorer/index.tsx +++ b/src/components/DimensionsMetricsExplorer/index.tsx @@ -14,7 +14,7 @@ import * as React from "react" -import Typography from "@material-ui/core/Typography" +import Typography from "@mui/material/Typography" import Explorer from "./Explorer" export const DimensionsMetricsExplorer = () => { 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 index 14af35508..c3ba719fc 100644 --- a/src/components/HitBuilder/HitCard.tsx +++ b/src/components/HitBuilder/HitCard.tsx @@ -14,44 +14,73 @@ 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 { styled } from '@mui/material/styles'; + +import Warning from "@mui/icons-material/Warning" +import ErrorIcon from "@mui/icons-material/Error" +import Button from "@mui/material/Button" +import TextField from "@mui/material/TextField" +import Check from "@mui/icons-material/Check" +import Send from "@mui/icons-material/Send" +import Cached from "@mui/icons-material/Cached" +import Paper from "@mui/material/Paper" +import Typography from "@mui/material/Typography" +import {orange, green, yellow, red} from "@mui/material/colors" import classnames from "classnames" import { PAB } from "@/components/Buttons" import CopyButton from "@/components/CopyButton" import { ParametersAPI, Validation } from "./hooks" -import { HitStatus } from "./types" +const PREFIX = 'HitCard'; + +enum HitStatus { + Unvalidated = "UNVALIDATED", + Validating = "VALIDATING", + Valid = "VALID", + Invalid = "INVALID", + Sent = "Sent", + Sending = "Sending", +} -const useStyles = makeStyles(theme => ({ - hitElement: { +const classes = { + hitElement: `${PREFIX}-hitElement`, + hitElementActions: `${PREFIX}-hitElementActions`, + addParameterButton: `${PREFIX}-addParameterButton`, + validationStatus: `${PREFIX}-validationStatus`, + httpInfo: `${PREFIX}-httpInfo`, + payload: `${PREFIX}-payload`, + hitStatusValidating: `${PREFIX}-hitStatus-${HitStatus.Validating}`, + hitStatusSending: `${PREFIX}-hitStatus-${HitStatus.Sending}`, + hitStatusInvalid: `${PREFIX}-hitStatus-${HitStatus.Invalid}`, + hitStatusSent: `${PREFIX}-hitStatus-${HitStatus.Sent}`, + hitStatusValid: `${PREFIX}-hitStatus-${HitStatus.Valid}`, + hitStatusUnvalidated: `${PREFIX}-hitStatus-${HitStatus.Unvalidated}` +}; + +const Root = styled('div')(( + { + theme + } +) => ({ + [`& .${classes.hitElement}`]: { padding: theme.spacing(2, 3), display: "flex", flexDirection: "column", }, - hitElementActions: { + + [`&.${classes.hitElementActions}`]: { marginTop: theme.spacing(2), display: "flex", "& > button": { marginRight: theme.spacing(1), }, }, - addParameterButton: { + + [`& .${classes.addParameterButton}`]: { marginLeft: theme.spacing(1), }, - validationStatus: { + + [`& .${classes.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. @@ -71,40 +100,42 @@ const useStyles = makeStyles(theme => ({ marginTop: theme.spacing(1), }, }, - [HitStatus.Validating]: { + + [`& .${classes.httpInfo}`]: { + margin: theme.spacing(1, 0, 2, 0), + "& > span": { + fontFamily: "'Source Code Pro', monospace", + }, + }, + + [`& .${classes.payload}`]: { + flexGrow: 1, + }, + [`& .${classes.hitStatusValidating}`]: { backgroundColor: orange[100], color: orange[900], }, - [HitStatus.Sending]: { + [`& .${classes.hitStatusSending}`]: { backgroundColor: orange[100], color: orange[900], }, - [HitStatus.Invalid]: { + [`& .${classes.hitStatusInvalid}`]: { backgroundColor: red[100], color: red[900], }, - [HitStatus.Sent]: { + [`& .${classes.hitStatusSent}`]: { backgroundColor: green[100], color: green[900], }, - [HitStatus.Valid]: { + [`& .${classes.hitStatusValid}`]: { backgroundColor: green[100], color: green[900], }, - [HitStatus.Unvalidated]: { + [`& .${classes.hitStatusUnvalidated}`]: { 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 @@ -127,7 +158,7 @@ const HitCard: React.FC = ({ hasParameter, setParametersFromString, }) => { - const classes = useStyles() + const [value, setValue] = React.useState(hitPayload) // Update the localState of then input when the hitPayload changes. @@ -143,38 +174,40 @@ const HitCard: React.FC = ({ [setParametersFromString] ) return ( - - -
    - - POST /collect HTTP/1.1 - -
    - - Host: www.google-analytics.com - -
    - - -
    + + + +
    + + POST /collect HTTP/1.1 + +
    + + Host: www.google-analytics.com + +
    + + +
    +
    ) } @@ -191,7 +224,7 @@ const ValidationStatus: React.FC = ({ addParameter, hasParameter, }) => { - const classes = useStyles() + let headerIcon: JSX.Element | null = null let hitHeading: JSX.Element | null = null @@ -284,7 +317,7 @@ const ValidationStatus: React.FC = ({ return ( {headerIcon} @@ -308,20 +341,22 @@ const HitActions: React.FC = ({ 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 - + + : } + onClick={sendHit} + className="Button Button--success Button-withIcon" + variant="contained" + > + Send to GA + + ) const sharableLinkToHit = @@ -332,7 +367,7 @@ const HitActions: React.FC = ({ "?" + hitPayload return ( -
    + {sendHitButton} = ({ text="Copy link to this hit" variant="contained" /> -
    - ) + + ); } default: { return ( -
    - - {hitStatus === HitStatus.Validating - ? "Validating..." - : "Validate hit"} - -
    + +
    + + {hitStatus === HitStatus.Validating + ? "Validating..." + : "Validate hit"} + +
    +
    ) } } diff --git a/src/components/HitBuilder/Parameters.tsx b/src/components/HitBuilder/Parameters.tsx index 1fecc7259..bb7e1a634 100644 --- a/src/components/HitBuilder/Parameters.tsx +++ b/src/components/HitBuilder/Parameters.tsx @@ -1,29 +1,44 @@ 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 { styled } from '@mui/material/styles'; -import { HIT_TYPES, Property } from "./types" -import { Validation, ParametersAPI } from "./hooks" +import {Delete, Refresh} from "@mui/icons-material" +import FormControl from "@mui/material/FormControl" +import InputLabel from "@mui/material/InputLabel" +import MenuItem from "@mui/material/MenuItem" +import Select from "@mui/material/Select" +import TextField from "@mui/material/TextField" +import Typography from "@mui/material/Typography" +import InputAdornment from "@mui/material/InputAdornment" +import Tooltip from "@mui/material/Tooltip" +import IconButton from "@mui/material/IconButton" +import Autocomplete from "@mui/material/Autocomplete" +import Add from "@mui/icons-material/Add" +import Button from "@mui/material/Button" +import {v4 as uuid} from "uuid" -const useStyles = makeStyles(theme => ({ - subdued: { +import {HIT_TYPES, Property} from "./types" +import {ParametersAPI, Validation} from "./hooks" + +const PREFIX = 'Parameters'; + +const classes = { + subdued: `${PREFIX}-subdued`, + propertyOption: `${PREFIX}-propertyOption`, + inputs: `${PREFIX}-inputs`, + addedParam: `${PREFIX}-addedParam` +}; + +const Root = styled('section')(( + { + theme + } +) => ({ + [`& .${classes.subdued}`]: { color: theme.palette.grey[500], }, - propertyOption: { + + [`& .${classes.propertyOption}`]: { display: "flex", width: "100%", flexDirection: "column", @@ -33,7 +48,8 @@ const useStyles = makeStyles(theme => ({ right: theme.spacing(2), }, }, - inputs: { + + [`&.${classes.inputs}`]: { maxWidth: "600px", display: "flex", flexDirection: "column", @@ -46,7 +62,8 @@ const useStyles = makeStyles(theme => ({ marginRight: theme.spacing(1), }, }, - addedParam: { + + [`& .${classes.addedParam}`]: { display: "flex", "& > div:first-child": { marginRight: theme.spacing(1), @@ -54,8 +71,8 @@ const useStyles = makeStyles(theme => ({ "& > div:nth-child(2)": { flexGrow: 1, }, - }, -})) + } +})); interface ParametersProps { updateParameterName: ParametersAPI["updateParameterName"] @@ -76,26 +93,26 @@ const Parameters: React.FC = ({ parameters, properties, }) => { - const classes = useStyles() + const newParam = React.useRef(null) const [v, t, tid, cid, ...otherParams] = parameters const setHitType = React.useCallback( - hitType => { + (hitType: string) => { updateParameterValue(t.id, hitType) }, [t.id, updateParameterValue] ) const setCid = React.useCallback( - newId => { + (newId: string) => { updateParameterValue(cid.id, newId) }, [cid.id, updateParameterValue] ) const setTid = React.useCallback( - newTid => { + (newTid: string) => { updateParameterValue(tid.id, newTid) }, [tid.id, updateParameterValue] @@ -109,7 +126,7 @@ const Parameters: React.FC = ({ }, [tid.value, localPropertyInput]) return ( -
    + v