From db98c8bc1f26eb4bea923b9f63dec981bec360d2 Mon Sep 17 00:00:00 2001 From: Brittany Feenstra Date: Mon, 4 Apr 2022 10:34:19 -0700 Subject: [PATCH 01/15] Accessibility: Resolve issue with duplicate aria-label in reused color component (#11126) * color input is shared across style panel and floating menu, pass in an optional containerLabelBase to distinguish between which variant is in use and avoid duplication * make necessary fixture updates --- .../src/components/floatingMenu/elements/shared/color.js | 2 ++ packages/story-editor/src/components/form/color/color.js | 9 +++++++-- .../src/karma/fixture/containers/designMenu.js | 4 ++-- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/packages/story-editor/src/components/floatingMenu/elements/shared/color.js b/packages/story-editor/src/components/floatingMenu/elements/shared/color.js index 3650f8d77ca0..940da8213c36 100644 --- a/packages/story-editor/src/components/floatingMenu/elements/shared/color.js +++ b/packages/story-editor/src/components/floatingMenu/elements/shared/color.js @@ -18,6 +18,7 @@ * External dependencies */ import { PLACEMENT } from '@googleforcreators/design-system'; +import { __ } from '@googleforcreators/i18n'; import PropTypes from 'prop-types'; /** @@ -52,6 +53,7 @@ function FloatingColor(props) { allowsSavedColors allowsSavedColorDeletion={false} pickerHasEyedropper={!hasEyedropper} + containerLabelBase={__('Color input (floating menu)', 'web-stories')} {...props} /> ); diff --git a/packages/story-editor/src/components/form/color/color.js b/packages/story-editor/src/components/form/color/color.js index d608b96876a8..864b9acaeb56 100644 --- a/packages/story-editor/src/components/form/color/color.js +++ b/packages/story-editor/src/components/form/color/color.js @@ -88,6 +88,8 @@ const EyeDropperButton = styled(Button).attrs({ ${focusStyle}; `; +const DEFAULT_CONTAINER_LABEL_BASE = __('Color input', 'web-stories'); + const Color = forwardRef(function Color( { onChange, @@ -96,6 +98,7 @@ const Color = forwardRef(function Color( allowsSavedColors = false, value = null, label = null, + containerLabelBase = DEFAULT_CONTAINER_LABEL_BASE, changedStyle = null, hasEyedropper = false, pickerHasEyedropper = true, @@ -115,8 +118,9 @@ const Color = forwardRef(function Color( ); const containerLabel = sprintf( - /* translators: %s: color input label name. */ - __('Color input: %s', 'web-stories'), + /* translators: 1: the input section in the editor. 2: color input label name. */ + __('%1$s: %2$s', 'web-stories'), + containerLabelBase, label ); @@ -211,6 +215,7 @@ Color.propTypes = { allowsGradient: PropTypes.bool, allowsOpacity: PropTypes.bool, allowsSavedColors: PropTypes.bool, + containerLabelBase: PropTypes.string, onChange: PropTypes.func.isRequired, label: PropTypes.string.isRequired, changedStyle: PropTypes.string, diff --git a/packages/story-editor/src/karma/fixture/containers/designMenu.js b/packages/story-editor/src/karma/fixture/containers/designMenu.js index a37532750255..8bf17de63e85 100644 --- a/packages/story-editor/src/karma/fixture/containers/designMenu.js +++ b/packages/story-editor/src/karma/fixture/containers/designMenu.js @@ -50,7 +50,7 @@ export class DesignMenu extends Container { get borderColor() { const region = this.queryByRole('region', { - name: /Color input: Border color/, + name: 'Color input (floating menu): Border color', }); if (!region) { return null; @@ -87,7 +87,7 @@ export class DesignMenu extends Container { get fontColor() { const region = this.queryByRole('region', { - name: /Color input: Text color/, + name: 'Color input (floating menu): Text color', }); if (!region) { return null; From 378322a54284c3bf41b96b8b636985514b49fccc Mon Sep 17 00:00:00 2001 From: Google for Creators Bot <94923726+googleforcreators-bot@users.noreply.github.com> Date: Mon, 4 Apr 2022 20:56:26 +0200 Subject: [PATCH 02/15] Migrate templates and text sets (#11165) --- includes/data/stories/demo.json | 2 +- packages/templates/src/raw/12-hours-in-barcelona/template.json | 2 +- packages/templates/src/raw/a-day-in-the-life/template.json | 2 +- packages/templates/src/raw/ace-hotel-kyoto-review/template.json | 2 +- packages/templates/src/raw/album-releases/template.json | 2 +- packages/templates/src/raw/all-about-cars/template.json | 2 +- packages/templates/src/raw/almodos-films/template.json | 2 +- packages/templates/src/raw/an-artists-legacy/template.json | 2 +- packages/templates/src/raw/art-books-gift-guide/template.json | 2 +- packages/templates/src/raw/baking-bread-guide/template.json | 2 +- packages/templates/src/raw/beauty-quiz/template.json | 2 +- packages/templates/src/raw/belly-fat-workout/template.json | 2 +- .../templates/src/raw/buying-art-on-the-internet/template.json | 2 +- packages/templates/src/raw/celebrity-life-story/template.json | 2 +- packages/templates/src/raw/celebrity-q-and-a/template.json | 2 +- packages/templates/src/raw/diy-home-office/template.json | 2 +- packages/templates/src/raw/doers-get-more-done/template.json | 2 +- .../templates/src/raw/elegant-travel-itinerary/template.json | 2 +- packages/templates/src/raw/experience-thailand/template.json | 2 +- packages/templates/src/raw/fashion-inspiration/template.json | 2 +- packages/templates/src/raw/fashion-on-the-go/template.json | 2 +- packages/templates/src/raw/fitness-apps-ranked/template.json | 2 +- packages/templates/src/raw/food-and-stuff/template.json | 2 +- packages/templates/src/raw/fresh-and-bright/template.json | 2 +- .../templates/src/raw/google-music-studio-tour/template.json | 2 +- .../templates/src/raw/hawaii-travel-packing-list/template.json | 2 +- packages/templates/src/raw/honeymooning-in-italy/template.json | 2 +- packages/templates/src/raw/house-hunting/template.json | 2 +- .../templates/src/raw/how-contact-tracing-works/template.json | 2 +- .../src/raw/how-video-calls-saved-the-day/template.json | 2 +- packages/templates/src/raw/indoor-garden-oasis/template.json | 2 +- packages/templates/src/raw/kitchen-makeover/template.json | 2 +- packages/templates/src/raw/kitchen-stories/template.json | 2 +- packages/templates/src/raw/laptop-buying-guide/template.json | 2 +- packages/templates/src/raw/los-angeles-city-guide/template.json | 2 +- packages/templates/src/raw/magazine-article/template.json | 2 +- packages/templates/src/raw/modernist-travel-guide/template.json | 2 +- .../templates/src/raw/new-york-party-round-up/template.json | 2 +- packages/templates/src/raw/no-days-off/template.json | 2 +- packages/templates/src/raw/one-day-city-itinerary/template.json | 2 +- packages/templates/src/raw/pizzas-in-nyc/template.json | 2 +- packages/templates/src/raw/plant-based-dyes/template.json | 2 +- packages/templates/src/raw/pride-month-watchlist/template.json | 2 +- packages/templates/src/raw/rock-music-festival/template.json | 2 +- packages/templates/src/raw/sangria-artichoke/template.json | 2 +- packages/templates/src/raw/self-care-guide/template.json | 2 +- packages/templates/src/raw/series-best-of/template.json | 2 +- packages/templates/src/raw/simple-tech-tutorial/template.json | 2 +- packages/templates/src/raw/skin-care-at-home/template.json | 2 +- packages/templates/src/raw/sleep/template.json | 2 +- packages/templates/src/raw/sports-quiz/template.json | 2 +- packages/templates/src/raw/street-style-on-the-go/template.json | 2 +- packages/templates/src/raw/summer-adventure-guide/template.json | 2 +- .../templates/src/raw/summer-fashion-collection/template.json | 2 +- packages/templates/src/raw/sustainability-tips/template.json | 2 +- packages/templates/src/raw/technology-advice/template.json | 2 +- .../src/raw/tips-for-throwing-an-outdoor-luau/template.json | 2 +- packages/templates/src/raw/tv-show-recap/template.json | 2 +- packages/templates/src/raw/ultimate-comparison/template.json | 2 +- .../templates/src/raw/vintage-chairs-buying-guide/template.json | 2 +- packages/templates/src/raw/ways-to-eat-avocado/template.json | 2 +- packages/templates/src/raw/weekly-entertainment/template.json | 2 +- packages/text-sets/src/raw/contact.json | 2 +- packages/text-sets/src/raw/cover.json | 2 +- packages/text-sets/src/raw/editorial.json | 2 +- packages/text-sets/src/raw/list.json | 2 +- packages/text-sets/src/raw/quote.json | 2 +- packages/text-sets/src/raw/section_header.json | 2 +- packages/text-sets/src/raw/step.json | 2 +- packages/text-sets/src/raw/table.json | 2 +- 70 files changed, 70 insertions(+), 70 deletions(-) diff --git a/includes/data/stories/demo.json b/includes/data/stories/demo.json index ed26e0edff0a..f0711f45d747 100644 --- a/includes/data/stories/demo.json +++ b/includes/data/stories/demo.json @@ -1,5 +1,5 @@ { - "version": 40, + "version": 41, "pages": [ { "elements": [ diff --git a/packages/templates/src/raw/12-hours-in-barcelona/template.json b/packages/templates/src/raw/12-hours-in-barcelona/template.json index 57ac80469c1f..f0bbe1a53cf4 100644 --- a/packages/templates/src/raw/12-hours-in-barcelona/template.json +++ b/packages/templates/src/raw/12-hours-in-barcelona/template.json @@ -1,5 +1,5 @@ { - "version": 40, + "version": 41, "pages": [ { "elements": [ diff --git a/packages/templates/src/raw/a-day-in-the-life/template.json b/packages/templates/src/raw/a-day-in-the-life/template.json index 94520be041c5..3c5c61d4cfd8 100644 --- a/packages/templates/src/raw/a-day-in-the-life/template.json +++ b/packages/templates/src/raw/a-day-in-the-life/template.json @@ -1,5 +1,5 @@ { - "version": 40, + "version": 41, "pages": [ { "elements": [ diff --git a/packages/templates/src/raw/ace-hotel-kyoto-review/template.json b/packages/templates/src/raw/ace-hotel-kyoto-review/template.json index 4bb4fe709a64..a10a265b5112 100644 --- a/packages/templates/src/raw/ace-hotel-kyoto-review/template.json +++ b/packages/templates/src/raw/ace-hotel-kyoto-review/template.json @@ -1,5 +1,5 @@ { - "version": 40, + "version": 41, "pages": [ { "elements": [ diff --git a/packages/templates/src/raw/album-releases/template.json b/packages/templates/src/raw/album-releases/template.json index d95f03063697..79ea71109083 100644 --- a/packages/templates/src/raw/album-releases/template.json +++ b/packages/templates/src/raw/album-releases/template.json @@ -1,5 +1,5 @@ { - "version": 40, + "version": 41, "pages": [ { "elements": [ diff --git a/packages/templates/src/raw/all-about-cars/template.json b/packages/templates/src/raw/all-about-cars/template.json index 155a9ca064d7..fcc343bc4be3 100644 --- a/packages/templates/src/raw/all-about-cars/template.json +++ b/packages/templates/src/raw/all-about-cars/template.json @@ -1,5 +1,5 @@ { - "version": 40, + "version": 41, "pages": [ { "elements": [ diff --git a/packages/templates/src/raw/almodos-films/template.json b/packages/templates/src/raw/almodos-films/template.json index 782559fd0220..5972883cd4de 100644 --- a/packages/templates/src/raw/almodos-films/template.json +++ b/packages/templates/src/raw/almodos-films/template.json @@ -1,5 +1,5 @@ { - "version": 40, + "version": 41, "pages": [ { "elements": [ diff --git a/packages/templates/src/raw/an-artists-legacy/template.json b/packages/templates/src/raw/an-artists-legacy/template.json index 046c08b6d43b..ec26b4105959 100644 --- a/packages/templates/src/raw/an-artists-legacy/template.json +++ b/packages/templates/src/raw/an-artists-legacy/template.json @@ -1,5 +1,5 @@ { - "version": 40, + "version": 41, "pages": [ { "elements": [ diff --git a/packages/templates/src/raw/art-books-gift-guide/template.json b/packages/templates/src/raw/art-books-gift-guide/template.json index 8395eb837f5d..4e7cf9ea671d 100644 --- a/packages/templates/src/raw/art-books-gift-guide/template.json +++ b/packages/templates/src/raw/art-books-gift-guide/template.json @@ -1,5 +1,5 @@ { - "version": 40, + "version": 41, "pages": [ { "elements": [ diff --git a/packages/templates/src/raw/baking-bread-guide/template.json b/packages/templates/src/raw/baking-bread-guide/template.json index 6d71e65f7c66..7086b1f2f462 100644 --- a/packages/templates/src/raw/baking-bread-guide/template.json +++ b/packages/templates/src/raw/baking-bread-guide/template.json @@ -1,5 +1,5 @@ { - "version": 40, + "version": 41, "pages": [ { "elements": [ diff --git a/packages/templates/src/raw/beauty-quiz/template.json b/packages/templates/src/raw/beauty-quiz/template.json index f9bd7ed5ae86..07f4506f0547 100644 --- a/packages/templates/src/raw/beauty-quiz/template.json +++ b/packages/templates/src/raw/beauty-quiz/template.json @@ -1,5 +1,5 @@ { - "version": 40, + "version": 41, "pages": [ { "elements": [ diff --git a/packages/templates/src/raw/belly-fat-workout/template.json b/packages/templates/src/raw/belly-fat-workout/template.json index b6f8453d4d99..5c007f81a343 100644 --- a/packages/templates/src/raw/belly-fat-workout/template.json +++ b/packages/templates/src/raw/belly-fat-workout/template.json @@ -1,5 +1,5 @@ { - "version": 40, + "version": 41, "pages": [ { "elements": [ diff --git a/packages/templates/src/raw/buying-art-on-the-internet/template.json b/packages/templates/src/raw/buying-art-on-the-internet/template.json index 5420845b522c..3fd101ee8d2a 100644 --- a/packages/templates/src/raw/buying-art-on-the-internet/template.json +++ b/packages/templates/src/raw/buying-art-on-the-internet/template.json @@ -1,5 +1,5 @@ { - "version": 40, + "version": 41, "pages": [ { "elements": [ diff --git a/packages/templates/src/raw/celebrity-life-story/template.json b/packages/templates/src/raw/celebrity-life-story/template.json index e12d12c05ab6..347e8b92a8cd 100644 --- a/packages/templates/src/raw/celebrity-life-story/template.json +++ b/packages/templates/src/raw/celebrity-life-story/template.json @@ -1,5 +1,5 @@ { - "version": 40, + "version": 41, "pages": [ { "elements": [ diff --git a/packages/templates/src/raw/celebrity-q-and-a/template.json b/packages/templates/src/raw/celebrity-q-and-a/template.json index d13309d0f094..0f5dac083ef8 100644 --- a/packages/templates/src/raw/celebrity-q-and-a/template.json +++ b/packages/templates/src/raw/celebrity-q-and-a/template.json @@ -1,5 +1,5 @@ { - "version": 40, + "version": 41, "pages": [ { "elements": [ diff --git a/packages/templates/src/raw/diy-home-office/template.json b/packages/templates/src/raw/diy-home-office/template.json index 4393f1506cf9..e0557a838e83 100644 --- a/packages/templates/src/raw/diy-home-office/template.json +++ b/packages/templates/src/raw/diy-home-office/template.json @@ -1,5 +1,5 @@ { - "version": 40, + "version": 41, "pages": [ { "elements": [ diff --git a/packages/templates/src/raw/doers-get-more-done/template.json b/packages/templates/src/raw/doers-get-more-done/template.json index 164669007724..683a810131a8 100644 --- a/packages/templates/src/raw/doers-get-more-done/template.json +++ b/packages/templates/src/raw/doers-get-more-done/template.json @@ -1,5 +1,5 @@ { - "version": 40, + "version": 41, "pages": [ { "elements": [ diff --git a/packages/templates/src/raw/elegant-travel-itinerary/template.json b/packages/templates/src/raw/elegant-travel-itinerary/template.json index 8efc7a03ae2a..c4aed8480bf5 100644 --- a/packages/templates/src/raw/elegant-travel-itinerary/template.json +++ b/packages/templates/src/raw/elegant-travel-itinerary/template.json @@ -1,5 +1,5 @@ { - "version": 40, + "version": 41, "pages": [ { "elements": [ diff --git a/packages/templates/src/raw/experience-thailand/template.json b/packages/templates/src/raw/experience-thailand/template.json index 45371178d560..eb8b8326067e 100644 --- a/packages/templates/src/raw/experience-thailand/template.json +++ b/packages/templates/src/raw/experience-thailand/template.json @@ -1,5 +1,5 @@ { - "version": 40, + "version": 41, "pages": [ { "elements": [ diff --git a/packages/templates/src/raw/fashion-inspiration/template.json b/packages/templates/src/raw/fashion-inspiration/template.json index b05dba915b10..9f44bfac46b5 100644 --- a/packages/templates/src/raw/fashion-inspiration/template.json +++ b/packages/templates/src/raw/fashion-inspiration/template.json @@ -1,5 +1,5 @@ { - "version": 40, + "version": 41, "pages": [ { "elements": [ diff --git a/packages/templates/src/raw/fashion-on-the-go/template.json b/packages/templates/src/raw/fashion-on-the-go/template.json index a6d84f517f76..741b7c09e229 100644 --- a/packages/templates/src/raw/fashion-on-the-go/template.json +++ b/packages/templates/src/raw/fashion-on-the-go/template.json @@ -1,5 +1,5 @@ { - "version": 40, + "version": 41, "pages": [ { "elements": [ diff --git a/packages/templates/src/raw/fitness-apps-ranked/template.json b/packages/templates/src/raw/fitness-apps-ranked/template.json index 82b765f5c91a..8bb2a2752818 100644 --- a/packages/templates/src/raw/fitness-apps-ranked/template.json +++ b/packages/templates/src/raw/fitness-apps-ranked/template.json @@ -1,5 +1,5 @@ { - "version": 40, + "version": 41, "pages": [ { "elements": [ diff --git a/packages/templates/src/raw/food-and-stuff/template.json b/packages/templates/src/raw/food-and-stuff/template.json index d7779a495ad7..e4f74943995e 100644 --- a/packages/templates/src/raw/food-and-stuff/template.json +++ b/packages/templates/src/raw/food-and-stuff/template.json @@ -1,5 +1,5 @@ { - "version": 40, + "version": 41, "pages": [ { "elements": [ diff --git a/packages/templates/src/raw/fresh-and-bright/template.json b/packages/templates/src/raw/fresh-and-bright/template.json index 1d2201c3a8f9..9fae9ec2b1b8 100644 --- a/packages/templates/src/raw/fresh-and-bright/template.json +++ b/packages/templates/src/raw/fresh-and-bright/template.json @@ -1,5 +1,5 @@ { - "version": 40, + "version": 41, "pages": [ { "elements": [ diff --git a/packages/templates/src/raw/google-music-studio-tour/template.json b/packages/templates/src/raw/google-music-studio-tour/template.json index a3f3b7adb509..42beaa675af8 100644 --- a/packages/templates/src/raw/google-music-studio-tour/template.json +++ b/packages/templates/src/raw/google-music-studio-tour/template.json @@ -1,5 +1,5 @@ { - "version": 40, + "version": 41, "pages": [ { "elements": [ diff --git a/packages/templates/src/raw/hawaii-travel-packing-list/template.json b/packages/templates/src/raw/hawaii-travel-packing-list/template.json index 58495fed6a06..d8e46c260eb0 100644 --- a/packages/templates/src/raw/hawaii-travel-packing-list/template.json +++ b/packages/templates/src/raw/hawaii-travel-packing-list/template.json @@ -1,5 +1,5 @@ { - "version": 40, + "version": 41, "pages": [ { "elements": [ diff --git a/packages/templates/src/raw/honeymooning-in-italy/template.json b/packages/templates/src/raw/honeymooning-in-italy/template.json index 70650f91ae7d..61286a13b31a 100644 --- a/packages/templates/src/raw/honeymooning-in-italy/template.json +++ b/packages/templates/src/raw/honeymooning-in-italy/template.json @@ -1,5 +1,5 @@ { - "version": 40, + "version": 41, "pages": [ { "elements": [ diff --git a/packages/templates/src/raw/house-hunting/template.json b/packages/templates/src/raw/house-hunting/template.json index 550a37e04fb2..03aaeaf11489 100644 --- a/packages/templates/src/raw/house-hunting/template.json +++ b/packages/templates/src/raw/house-hunting/template.json @@ -1,5 +1,5 @@ { - "version": 40, + "version": 41, "pages": [ { "elements": [ diff --git a/packages/templates/src/raw/how-contact-tracing-works/template.json b/packages/templates/src/raw/how-contact-tracing-works/template.json index 50d097109db0..47211dced7df 100644 --- a/packages/templates/src/raw/how-contact-tracing-works/template.json +++ b/packages/templates/src/raw/how-contact-tracing-works/template.json @@ -1,5 +1,5 @@ { - "version": 40, + "version": 41, "pages": [ { "elements": [ diff --git a/packages/templates/src/raw/how-video-calls-saved-the-day/template.json b/packages/templates/src/raw/how-video-calls-saved-the-day/template.json index 6713000f83f0..c4c05faca83b 100644 --- a/packages/templates/src/raw/how-video-calls-saved-the-day/template.json +++ b/packages/templates/src/raw/how-video-calls-saved-the-day/template.json @@ -1,5 +1,5 @@ { - "version": 40, + "version": 41, "pages": [ { "elements": [ diff --git a/packages/templates/src/raw/indoor-garden-oasis/template.json b/packages/templates/src/raw/indoor-garden-oasis/template.json index 4116779e766b..9c6c89451aa6 100644 --- a/packages/templates/src/raw/indoor-garden-oasis/template.json +++ b/packages/templates/src/raw/indoor-garden-oasis/template.json @@ -1,5 +1,5 @@ { - "version": 40, + "version": 41, "pages": [ { "elements": [ diff --git a/packages/templates/src/raw/kitchen-makeover/template.json b/packages/templates/src/raw/kitchen-makeover/template.json index cb158bf42d21..f1bf7699679d 100644 --- a/packages/templates/src/raw/kitchen-makeover/template.json +++ b/packages/templates/src/raw/kitchen-makeover/template.json @@ -1,5 +1,5 @@ { - "version": 40, + "version": 41, "pages": [ { "elements": [ diff --git a/packages/templates/src/raw/kitchen-stories/template.json b/packages/templates/src/raw/kitchen-stories/template.json index acac3d33fc57..0309de62ffb0 100644 --- a/packages/templates/src/raw/kitchen-stories/template.json +++ b/packages/templates/src/raw/kitchen-stories/template.json @@ -1,5 +1,5 @@ { - "version": 40, + "version": 41, "pages": [ { "elements": [ diff --git a/packages/templates/src/raw/laptop-buying-guide/template.json b/packages/templates/src/raw/laptop-buying-guide/template.json index 54ec9963ad2e..f8645685ed99 100644 --- a/packages/templates/src/raw/laptop-buying-guide/template.json +++ b/packages/templates/src/raw/laptop-buying-guide/template.json @@ -1,5 +1,5 @@ { - "version": 40, + "version": 41, "pages": [ { "elements": [ diff --git a/packages/templates/src/raw/los-angeles-city-guide/template.json b/packages/templates/src/raw/los-angeles-city-guide/template.json index 6b0f9aba467e..ef3ab97002ef 100644 --- a/packages/templates/src/raw/los-angeles-city-guide/template.json +++ b/packages/templates/src/raw/los-angeles-city-guide/template.json @@ -1,5 +1,5 @@ { - "version": 40, + "version": 41, "pages": [ { "elements": [ diff --git a/packages/templates/src/raw/magazine-article/template.json b/packages/templates/src/raw/magazine-article/template.json index 940a02d39ea5..c441e1a7298a 100644 --- a/packages/templates/src/raw/magazine-article/template.json +++ b/packages/templates/src/raw/magazine-article/template.json @@ -1,5 +1,5 @@ { - "version": 40, + "version": 41, "pages": [ { "elements": [ diff --git a/packages/templates/src/raw/modernist-travel-guide/template.json b/packages/templates/src/raw/modernist-travel-guide/template.json index 0abea1b4544d..16f0dd37e53c 100644 --- a/packages/templates/src/raw/modernist-travel-guide/template.json +++ b/packages/templates/src/raw/modernist-travel-guide/template.json @@ -1,5 +1,5 @@ { - "version": 40, + "version": 41, "pages": [ { "elements": [ diff --git a/packages/templates/src/raw/new-york-party-round-up/template.json b/packages/templates/src/raw/new-york-party-round-up/template.json index 2f7f5939fe1c..53b172a7c836 100644 --- a/packages/templates/src/raw/new-york-party-round-up/template.json +++ b/packages/templates/src/raw/new-york-party-round-up/template.json @@ -1,5 +1,5 @@ { - "version": 40, + "version": 41, "pages": [ { "elements": [ diff --git a/packages/templates/src/raw/no-days-off/template.json b/packages/templates/src/raw/no-days-off/template.json index e55b30ec09db..7e2245f66c91 100644 --- a/packages/templates/src/raw/no-days-off/template.json +++ b/packages/templates/src/raw/no-days-off/template.json @@ -1,5 +1,5 @@ { - "version": 40, + "version": 41, "pages": [ { "elements": [ diff --git a/packages/templates/src/raw/one-day-city-itinerary/template.json b/packages/templates/src/raw/one-day-city-itinerary/template.json index bb6548d428ae..323c9e3d40df 100644 --- a/packages/templates/src/raw/one-day-city-itinerary/template.json +++ b/packages/templates/src/raw/one-day-city-itinerary/template.json @@ -1,5 +1,5 @@ { - "version": 40, + "version": 41, "pages": [ { "elements": [ diff --git a/packages/templates/src/raw/pizzas-in-nyc/template.json b/packages/templates/src/raw/pizzas-in-nyc/template.json index 7b53815dc8f8..9414532b0cdc 100644 --- a/packages/templates/src/raw/pizzas-in-nyc/template.json +++ b/packages/templates/src/raw/pizzas-in-nyc/template.json @@ -1,5 +1,5 @@ { - "version": 40, + "version": 41, "pages": [ { "elements": [ diff --git a/packages/templates/src/raw/plant-based-dyes/template.json b/packages/templates/src/raw/plant-based-dyes/template.json index 7370141b5d52..a86fe90a517f 100644 --- a/packages/templates/src/raw/plant-based-dyes/template.json +++ b/packages/templates/src/raw/plant-based-dyes/template.json @@ -1,5 +1,5 @@ { - "version": 40, + "version": 41, "pages": [ { "elements": [ diff --git a/packages/templates/src/raw/pride-month-watchlist/template.json b/packages/templates/src/raw/pride-month-watchlist/template.json index 2eca1be8a2df..915b0968b86a 100644 --- a/packages/templates/src/raw/pride-month-watchlist/template.json +++ b/packages/templates/src/raw/pride-month-watchlist/template.json @@ -1,5 +1,5 @@ { - "version": 40, + "version": 41, "pages": [ { "elements": [ diff --git a/packages/templates/src/raw/rock-music-festival/template.json b/packages/templates/src/raw/rock-music-festival/template.json index 4016c29985ec..271e45b43157 100644 --- a/packages/templates/src/raw/rock-music-festival/template.json +++ b/packages/templates/src/raw/rock-music-festival/template.json @@ -1,5 +1,5 @@ { - "version": 40, + "version": 41, "pages": [ { "elements": [ diff --git a/packages/templates/src/raw/sangria-artichoke/template.json b/packages/templates/src/raw/sangria-artichoke/template.json index 5e77cd0bcf8d..03c3fc555c9f 100644 --- a/packages/templates/src/raw/sangria-artichoke/template.json +++ b/packages/templates/src/raw/sangria-artichoke/template.json @@ -1,5 +1,5 @@ { - "version": 40, + "version": 41, "pages": [ { "elements": [ diff --git a/packages/templates/src/raw/self-care-guide/template.json b/packages/templates/src/raw/self-care-guide/template.json index 97eca90a5627..8368355ef54a 100644 --- a/packages/templates/src/raw/self-care-guide/template.json +++ b/packages/templates/src/raw/self-care-guide/template.json @@ -1,5 +1,5 @@ { - "version": 40, + "version": 41, "pages": [ { "elements": [ diff --git a/packages/templates/src/raw/series-best-of/template.json b/packages/templates/src/raw/series-best-of/template.json index 424db3e6f1a7..404f1a968941 100644 --- a/packages/templates/src/raw/series-best-of/template.json +++ b/packages/templates/src/raw/series-best-of/template.json @@ -1,5 +1,5 @@ { - "version": 40, + "version": 41, "pages": [ { "elements": [ diff --git a/packages/templates/src/raw/simple-tech-tutorial/template.json b/packages/templates/src/raw/simple-tech-tutorial/template.json index 62aeb482bc07..f1fc3a73afb5 100644 --- a/packages/templates/src/raw/simple-tech-tutorial/template.json +++ b/packages/templates/src/raw/simple-tech-tutorial/template.json @@ -1,5 +1,5 @@ { - "version": 40, + "version": 41, "pages": [ { "elements": [ diff --git a/packages/templates/src/raw/skin-care-at-home/template.json b/packages/templates/src/raw/skin-care-at-home/template.json index c69bfaf62487..711cc327d37b 100644 --- a/packages/templates/src/raw/skin-care-at-home/template.json +++ b/packages/templates/src/raw/skin-care-at-home/template.json @@ -1,5 +1,5 @@ { - "version": 40, + "version": 41, "pages": [ { "elements": [ diff --git a/packages/templates/src/raw/sleep/template.json b/packages/templates/src/raw/sleep/template.json index 2e0035b6252e..c0594fcb83c3 100644 --- a/packages/templates/src/raw/sleep/template.json +++ b/packages/templates/src/raw/sleep/template.json @@ -1,5 +1,5 @@ { - "version": 40, + "version": 41, "pages": [ { "elements": [ diff --git a/packages/templates/src/raw/sports-quiz/template.json b/packages/templates/src/raw/sports-quiz/template.json index 2acb5fb0ec67..7fa533b43a42 100644 --- a/packages/templates/src/raw/sports-quiz/template.json +++ b/packages/templates/src/raw/sports-quiz/template.json @@ -1,5 +1,5 @@ { - "version": 40, + "version": 41, "pages": [ { "elements": [ diff --git a/packages/templates/src/raw/street-style-on-the-go/template.json b/packages/templates/src/raw/street-style-on-the-go/template.json index 87419ebe496c..1e19cefa6d01 100644 --- a/packages/templates/src/raw/street-style-on-the-go/template.json +++ b/packages/templates/src/raw/street-style-on-the-go/template.json @@ -1,5 +1,5 @@ { - "version": 40, + "version": 41, "pages": [ { "elements": [ diff --git a/packages/templates/src/raw/summer-adventure-guide/template.json b/packages/templates/src/raw/summer-adventure-guide/template.json index d332b426c7f3..ff8b2985520f 100644 --- a/packages/templates/src/raw/summer-adventure-guide/template.json +++ b/packages/templates/src/raw/summer-adventure-guide/template.json @@ -1,5 +1,5 @@ { - "version": 40, + "version": 41, "pages": [ { "elements": [ diff --git a/packages/templates/src/raw/summer-fashion-collection/template.json b/packages/templates/src/raw/summer-fashion-collection/template.json index b2dbefa3f187..4d03443fc7c1 100644 --- a/packages/templates/src/raw/summer-fashion-collection/template.json +++ b/packages/templates/src/raw/summer-fashion-collection/template.json @@ -1,5 +1,5 @@ { - "version": 40, + "version": 41, "pages": [ { "elements": [ diff --git a/packages/templates/src/raw/sustainability-tips/template.json b/packages/templates/src/raw/sustainability-tips/template.json index f6689d496c18..0f2df8d25f54 100644 --- a/packages/templates/src/raw/sustainability-tips/template.json +++ b/packages/templates/src/raw/sustainability-tips/template.json @@ -1,5 +1,5 @@ { - "version": 40, + "version": 41, "pages": [ { "elements": [ diff --git a/packages/templates/src/raw/technology-advice/template.json b/packages/templates/src/raw/technology-advice/template.json index 958f41ebec6d..ee99e3e8bfe0 100644 --- a/packages/templates/src/raw/technology-advice/template.json +++ b/packages/templates/src/raw/technology-advice/template.json @@ -1,5 +1,5 @@ { - "version": 40, + "version": 41, "pages": [ { "elements": [ diff --git a/packages/templates/src/raw/tips-for-throwing-an-outdoor-luau/template.json b/packages/templates/src/raw/tips-for-throwing-an-outdoor-luau/template.json index aa7964d47355..69db02d89b1d 100644 --- a/packages/templates/src/raw/tips-for-throwing-an-outdoor-luau/template.json +++ b/packages/templates/src/raw/tips-for-throwing-an-outdoor-luau/template.json @@ -1,5 +1,5 @@ { - "version": 40, + "version": 41, "pages": [ { "elements": [ diff --git a/packages/templates/src/raw/tv-show-recap/template.json b/packages/templates/src/raw/tv-show-recap/template.json index 514f65f6851b..e562886d13ef 100644 --- a/packages/templates/src/raw/tv-show-recap/template.json +++ b/packages/templates/src/raw/tv-show-recap/template.json @@ -1,5 +1,5 @@ { - "version": 40, + "version": 41, "pages": [ { "elements": [ diff --git a/packages/templates/src/raw/ultimate-comparison/template.json b/packages/templates/src/raw/ultimate-comparison/template.json index f921aafa0652..e569425bf068 100644 --- a/packages/templates/src/raw/ultimate-comparison/template.json +++ b/packages/templates/src/raw/ultimate-comparison/template.json @@ -1,5 +1,5 @@ { - "version": 40, + "version": 41, "pages": [ { "elements": [ diff --git a/packages/templates/src/raw/vintage-chairs-buying-guide/template.json b/packages/templates/src/raw/vintage-chairs-buying-guide/template.json index f1f1681e52cc..e1d545817f7b 100644 --- a/packages/templates/src/raw/vintage-chairs-buying-guide/template.json +++ b/packages/templates/src/raw/vintage-chairs-buying-guide/template.json @@ -1,5 +1,5 @@ { - "version": 40, + "version": 41, "pages": [ { "elements": [ diff --git a/packages/templates/src/raw/ways-to-eat-avocado/template.json b/packages/templates/src/raw/ways-to-eat-avocado/template.json index 0df314b4633d..e6ef56817fe0 100644 --- a/packages/templates/src/raw/ways-to-eat-avocado/template.json +++ b/packages/templates/src/raw/ways-to-eat-avocado/template.json @@ -1,5 +1,5 @@ { - "version": 40, + "version": 41, "pages": [ { "elements": [ diff --git a/packages/templates/src/raw/weekly-entertainment/template.json b/packages/templates/src/raw/weekly-entertainment/template.json index 8b4213eb0708..2fa3416b0b56 100644 --- a/packages/templates/src/raw/weekly-entertainment/template.json +++ b/packages/templates/src/raw/weekly-entertainment/template.json @@ -1,5 +1,5 @@ { - "version": 40, + "version": 41, "pages": [ { "elements": [ diff --git a/packages/text-sets/src/raw/contact.json b/packages/text-sets/src/raw/contact.json index 7aa2dfa1289c..dfc421702ba1 100644 --- a/packages/text-sets/src/raw/contact.json +++ b/packages/text-sets/src/raw/contact.json @@ -1,5 +1,5 @@ { - "version": 40, + "version": 41, "pages": [ { "elements": [ diff --git a/packages/text-sets/src/raw/cover.json b/packages/text-sets/src/raw/cover.json index 29e29d625893..f94ca8b9348b 100644 --- a/packages/text-sets/src/raw/cover.json +++ b/packages/text-sets/src/raw/cover.json @@ -1,5 +1,5 @@ { - "version": 40, + "version": 41, "pages": [ { "elements": [ diff --git a/packages/text-sets/src/raw/editorial.json b/packages/text-sets/src/raw/editorial.json index a7c1fd2c00bf..01ef2ecf9fda 100644 --- a/packages/text-sets/src/raw/editorial.json +++ b/packages/text-sets/src/raw/editorial.json @@ -1,5 +1,5 @@ { - "version": 40, + "version": 41, "pages": [ { "elements": [ diff --git a/packages/text-sets/src/raw/list.json b/packages/text-sets/src/raw/list.json index 04c412a80f5f..95524e3639b5 100644 --- a/packages/text-sets/src/raw/list.json +++ b/packages/text-sets/src/raw/list.json @@ -1,5 +1,5 @@ { - "version": 40, + "version": 41, "pages": [ { "elements": [ diff --git a/packages/text-sets/src/raw/quote.json b/packages/text-sets/src/raw/quote.json index 5e1c10a1471a..79d7883c0744 100644 --- a/packages/text-sets/src/raw/quote.json +++ b/packages/text-sets/src/raw/quote.json @@ -1,5 +1,5 @@ { - "version": 40, + "version": 41, "pages": [ { "elements": [ diff --git a/packages/text-sets/src/raw/section_header.json b/packages/text-sets/src/raw/section_header.json index 9b95cdee5fc9..9af6b2a205a7 100644 --- a/packages/text-sets/src/raw/section_header.json +++ b/packages/text-sets/src/raw/section_header.json @@ -1,5 +1,5 @@ { - "version": 40, + "version": 41, "pages": [ { "elements": [ diff --git a/packages/text-sets/src/raw/step.json b/packages/text-sets/src/raw/step.json index 30169c82a215..6f408721e6b6 100644 --- a/packages/text-sets/src/raw/step.json +++ b/packages/text-sets/src/raw/step.json @@ -1,5 +1,5 @@ { - "version": 40, + "version": 41, "pages": [ { "elements": [ diff --git a/packages/text-sets/src/raw/table.json b/packages/text-sets/src/raw/table.json index 0073bc7580ae..2409ad487f9d 100644 --- a/packages/text-sets/src/raw/table.json +++ b/packages/text-sets/src/raw/table.json @@ -1,5 +1,5 @@ { - "version": 40, + "version": 41, "pages": [ { "elements": [ From 88b14bb62514acd72e5d7fc30819799d2dc3af4f Mon Sep 17 00:00:00 2001 From: Morten Barklund Date: Mon, 4 Apr 2022 16:15:41 -0400 Subject: [PATCH 03/15] Editor: Removed superfluous data load (#11160) --- .../src/components/videoTrim/useVideoTrimMode.js | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/packages/story-editor/src/components/videoTrim/useVideoTrimMode.js b/packages/story-editor/src/components/videoTrim/useVideoTrimMode.js index b8e61013b786..ef250d22f966 100644 --- a/packages/story-editor/src/components/videoTrim/useVideoTrimMode.js +++ b/packages/story-editor/src/components/videoTrim/useVideoTrimMode.js @@ -17,12 +17,7 @@ /** * External dependencies */ -import { - useCallback, - useMemo, - useState, - useEffect, -} from '@googleforcreators/react'; +import { useCallback, useMemo, useState } from '@googleforcreators/react'; import { trackEvent } from '@googleforcreators/tracking'; import { getMsFromHMS } from '@googleforcreators/media'; @@ -94,12 +89,6 @@ function useVideoTrimMode() { } }, [getMediaById, selectedElement]); - useEffect(() => { - if (selectedElement?.resource?.trimData) { - getVideoData(); - } - }, [selectedElement, getVideoData]); - const toggleTrimMode = useCallback(() => { if (isEditing) { clearEditing(); From 1a94673cf9561f4e39dce6d2cf5459680e108564 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Apr 2022 23:14:54 +0200 Subject: [PATCH 04/15] Bump slevomat/coding-standard from 7.0.20 to 7.1 (#11171) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- composer.lock | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/composer.lock b/composer.lock index 7c745353947d..5401df9dc03c 100644 --- a/composer.lock +++ b/composer.lock @@ -2107,16 +2107,16 @@ }, { "name": "phpstan/phpdoc-parser", - "version": "1.4.0", + "version": "1.4.2", "source": { "type": "git", "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "aa111aa1fecbc436f01e5439d88906bd3b612027" + "reference": "4cb3021a4e10ffe3d5f94a4c34cf4b3f6de2fa3d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/aa111aa1fecbc436f01e5439d88906bd3b612027", - "reference": "aa111aa1fecbc436f01e5439d88906bd3b612027", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/4cb3021a4e10ffe3d5f94a4c34cf4b3f6de2fa3d", + "reference": "4cb3021a4e10ffe3d5f94a4c34cf4b3f6de2fa3d", "shasum": "" }, "require": { @@ -2145,9 +2145,9 @@ "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/1.4.0" + "source": "https://github.com/phpstan/phpdoc-parser/tree/1.4.2" }, - "time": "2022-03-28T10:52:48+00:00" + "time": "2022-03-30T13:33:37+00:00" }, { "name": "phpstan/phpstan", @@ -3949,30 +3949,30 @@ }, { "name": "slevomat/coding-standard", - "version": "7.0.20", + "version": "7.1", "source": { "type": "git", "url": "https://github.com/slevomat/coding-standard.git", - "reference": "cbfadfe34c2c29473bf1e891306b3950b3b4350b" + "reference": "b521bd358b5f7a7d69e9637fd139e036d8adeb6f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/slevomat/coding-standard/zipball/cbfadfe34c2c29473bf1e891306b3950b3b4350b", - "reference": "cbfadfe34c2c29473bf1e891306b3950b3b4350b", + "url": "https://api.github.com/repos/slevomat/coding-standard/zipball/b521bd358b5f7a7d69e9637fd139e036d8adeb6f", + "reference": "b521bd358b5f7a7d69e9637fd139e036d8adeb6f", "shasum": "" }, "require": { "dealerdirect/phpcodesniffer-composer-installer": "^0.6.2 || ^0.7", - "php": "^7.1 || ^8.0", - "phpstan/phpdoc-parser": "^1.0.0", + "php": "^7.2 || ^8.0", + "phpstan/phpdoc-parser": "^1.4.1", "squizlabs/php_codesniffer": "^3.6.2" }, "require-dev": { "phing/phing": "2.17.2", "php-parallel-lint/php-parallel-lint": "1.3.2", - "phpstan/phpstan": "1.4.10|1.5.0", + "phpstan/phpstan": "1.4.10|1.5.2", "phpstan/phpstan-deprecation-rules": "1.0.0", - "phpstan/phpstan-phpunit": "1.0.0", + "phpstan/phpstan-phpunit": "1.0.0|1.1.0", "phpstan/phpstan-strict-rules": "1.1.0", "phpunit/phpunit": "7.5.20|8.5.21|9.5.19" }, @@ -3994,7 +3994,7 @@ "description": "Slevomat Coding Standard for PHP_CodeSniffer complements Consistence Coding Standard by providing sniffs with additional checks.", "support": { "issues": "https://github.com/slevomat/coding-standard/issues", - "source": "https://github.com/slevomat/coding-standard/tree/7.0.20" + "source": "https://github.com/slevomat/coding-standard/tree/7.1" }, "funding": [ { @@ -4006,7 +4006,7 @@ "type": "tidelift" } ], - "time": "2022-03-25T09:43:20+00:00" + "time": "2022-03-29T12:44:16+00:00" }, { "name": "sniccowp/php-scoper-wordpress-excludes", From 335a84bfc2af7e3598878c06aa83e2e26574650b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Apr 2022 23:15:15 +0200 Subject: [PATCH 05/15] Bump mcaskill/composer-exclude-files from 2.0.0 to 2.1.0 (#11172) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- composer.lock | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/composer.lock b/composer.lock index 5401df9dc03c..7151cbf54dcb 100644 --- a/composer.lock +++ b/composer.lock @@ -404,16 +404,16 @@ }, { "name": "mcaskill/composer-exclude-files", - "version": "v2.0.0", + "version": "v2.1.0", "source": { "type": "git", "url": "https://github.com/mcaskill/composer-plugin-exclude-files.git", - "reference": "2bf916ab1ec9959b3a58ba3652bad6ffedf0e10e" + "reference": "0d481db018d5849e87f87cc3145a2cbf0135e428" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mcaskill/composer-plugin-exclude-files/zipball/2bf916ab1ec9959b3a58ba3652bad6ffedf0e10e", - "reference": "2bf916ab1ec9959b3a58ba3652bad6ffedf0e10e", + "url": "https://api.github.com/repos/mcaskill/composer-plugin-exclude-files/zipball/0d481db018d5849e87f87cc3145a2cbf0135e428", + "reference": "0d481db018d5849e87f87cc3145a2cbf0135e428", "shasum": "" }, "require": { @@ -422,12 +422,12 @@ }, "require-dev": { "composer/composer": "^1.0 || ^2.0", - "symfony/phpunit-bridge": "^4.2 || ^5.0" + "symfony/phpunit-bridge": "^4.2 || ^5.0 || ^6.0" }, "type": "composer-plugin", "extra": { "branch-alias": { - "dev-master": "2.x-dev" + "dev-main": "2.x-dev" }, "class": "McAskill\\Composer\\ExcludeFilePlugin" }, @@ -449,9 +449,9 @@ "description": "Exclude files from autoload_files.php", "support": { "issues": "https://github.com/mcaskill/composer-plugin-exclude-files/issues", - "source": "https://github.com/mcaskill/composer-plugin-exclude-files/tree/v2.0.0" + "source": "https://github.com/mcaskill/composer-plugin-exclude-files/tree/v2.1.0" }, - "time": "2020-09-25T22:01:23+00:00" + "time": "2022-04-01T04:35:29+00:00" }, { "name": "sabberworm/php-css-parser", From 55a8816c1f9c6c2eb0e4b2e1d5eb6bcbfc28a94b Mon Sep 17 00:00:00 2001 From: Pascal Birchler Date: Mon, 4 Apr 2022 23:20:52 +0200 Subject: [PATCH 06/15] Support Fast Refresh (#10779) Co-authored-by: samwhale Co-authored-by: Sayed Taqui --- package-lock.json | 1555 +++++++++++++++++- package.json | 5 + packages/story-editor/src/utils/copyPaste.js | 3 - webpack.config.cjs | 23 +- 4 files changed, 1556 insertions(+), 30 deletions(-) diff --git a/package-lock.json b/package-lock.json index 42c7305f975d..66118c7602c5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -123,6 +123,7 @@ "puppeteer": "^13.5.0", "react": "^17.0.2", "react-dom": "^17.0.2", + "react-refresh": "^0.11.0", "react-test-renderer": "^17.0.2", "rollup": "^2.70.1", "rollup-plugin-copy": "^3.4.0", @@ -146,6 +147,7 @@ "webpack": "^5.70.0", "webpack-bundle-analyzer": "^4.5.0", "webpack-cli": "^4.9.2", + "webpack-dev-server": "^4.7.4", "webpackbar": "^5.0.2", "worker-loader": "^3.0.8", "workspaces-run": "^1.0.1" @@ -13428,6 +13430,25 @@ "@babel/types": "^7.3.0" } }, + "node_modules/@types/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "dev": true, + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/bonjour": { + "version": "3.5.10", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", + "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/cacheable-request": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz", @@ -13460,6 +13481,25 @@ "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.11.tgz", "integrity": "sha512-SRXjM+tfsSlA9VuG8hGO2nft2p8zjXCK1VcC6N4NXbBbYbSia9kzCChYQajIjzIqOOOuh5Ock6MmV2oux4jDZQ==" }, + "node_modules/@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect-history-api-fallback": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", + "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", + "dev": true, + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, "node_modules/@types/cookie": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", @@ -13496,6 +13536,29 @@ "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", "dev": true }, + "node_modules/@types/express": { + "version": "4.17.13", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", + "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", + "dev": true, + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.18", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.17.28", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz", + "integrity": "sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" + } + }, "node_modules/@types/fs-extra": { "version": "8.1.2", "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-8.1.2.tgz", @@ -13544,6 +13607,15 @@ "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==", "dev": true }, + "node_modules/@types/http-proxy": { + "version": "1.17.8", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.8.tgz", + "integrity": "sha512-5kPLG5BKpWYkw/LVOGWpiq3nEVqxiN32rTgI53Sk12/xHFQ2rG3ehI9IO+O3W2QoKeyB92dJkoka8SUm6BX1pA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/is-function": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@types/is-function/-/is-function-1.0.0.tgz", @@ -13616,6 +13688,12 @@ "@types/unist": "*" } }, + "node_modules/@types/mime": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", + "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", + "dev": true + }, "node_modules/@types/minimatch": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", @@ -13699,6 +13777,12 @@ "integrity": "sha512-/JHkVHtx/REVG0VVToGRGH2+23hsYLHdyG+GrvoUGlGAd0ErauXDyvHtRI/7H7mzLm+tBCKA7pfcpkQ1lf58iQ==", "dev": true }, + "node_modules/@types/range-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", + "dev": true + }, "node_modules/@types/react": { "version": "17.0.38", "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.38.tgz", @@ -13758,11 +13842,45 @@ "@types/node": "*" } }, + "node_modules/@types/retry": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.1.tgz", + "integrity": "sha512-xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g==", + "dev": true + }, "node_modules/@types/scheduler": { "version": "0.16.2", "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" }, + "node_modules/@types/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", + "dev": true, + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.13.10", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", + "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", + "dev": true, + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/sockjs": { + "version": "0.3.33", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", + "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/source-list-map": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz", @@ -13862,6 +13980,15 @@ "node": ">=0.10.0" } }, + "node_modules/@types/ws": { + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.2.3.tgz", + "integrity": "sha512-ahRJZquUYCdOZf/rCsWg88S0/+cb9wazUBHv6HZEe3XdYaBe2zr/slM8J28X07Hn88Pnm4ezo7N8/ofnOgrPVQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/yargs": { "version": "15.0.13", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.13.tgz", @@ -15993,9 +16120,9 @@ } }, "node_modules/anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -17242,6 +17369,12 @@ "node": "^4.5.0 || >= 5.9" } }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "dev": true + }, "node_modules/batch-processor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/batch-processor/-/batch-processor-1.0.0.tgz", @@ -17387,6 +17520,26 @@ "resolved": "https://registry.npmjs.org/body-scroll-lock/-/body-scroll-lock-3.1.5.tgz", "integrity": "sha512-Yi1Xaml0EvNA0OYWxXiYNqY24AfWkbA6w5vxE7GWxtKfzIbZM+Qw+aSmkgsbWzbHiy/RCSkUZBplVxTA+E4jJg==" }, + "node_modules/bonjour": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", + "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "dev": true, + "dependencies": { + "array-flatten": "^2.1.0", + "deep-equal": "^1.0.1", + "dns-equal": "^1.0.0", + "dns-txt": "^2.0.2", + "multicast-dns": "^6.0.1", + "multicast-dns-service-types": "^1.1.0" + } + }, + "node_modules/bonjour/node_modules/array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", + "dev": true + }, "node_modules/boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", @@ -17750,6 +17903,12 @@ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" }, + "node_modules/buffer-indexof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", + "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", + "dev": true + }, "node_modules/buffer-xor": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", @@ -18205,23 +18364,29 @@ } }, "node_modules/chokidar": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", - "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], "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" }, "engines": { "node": ">= 8.10.0" }, "optionalDependencies": { - "fsevents": "~2.3.1" + "fsevents": "~2.3.2" } }, "node_modules/chownr": { @@ -18886,6 +19051,15 @@ "node": ">= 0.10.0" } }, + "node_modules/connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, "node_modules/connect/node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -20214,6 +20388,23 @@ "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=" }, + "node_modules/deep-equal": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "dev": true, + "dependencies": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", @@ -20242,6 +20433,18 @@ "node": ">=0.10.0" } }, + "node_modules/default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "dev": true, + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">= 10" + } + }, "node_modules/defer-to-connect": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", @@ -20251,6 +20454,15 @@ "node": ">=10" } }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/define-properties": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", @@ -20386,6 +20598,12 @@ "node": ">=8" } }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true + }, "node_modules/detect-port": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.3.0.tgz", @@ -20487,6 +20705,31 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", + "dev": true + }, + "node_modules/dns-packet": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz", + "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==", + "dev": true, + "dependencies": { + "ip": "^1.1.0", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/dns-txt": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", + "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "dev": true, + "dependencies": { + "buffer-indexof": "^1.0.0" + } + }, "node_modules/doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -23313,6 +23556,18 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/fb-watchman": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", @@ -24920,6 +25175,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true + }, "node_modules/handlebars": { "version": "4.7.7", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", @@ -25363,6 +25624,18 @@ "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", "dev": true }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, "node_modules/hpq": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/hpq/-/hpq-1.3.0.tgz", @@ -25500,6 +25773,12 @@ "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", "dev": true }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", + "dev": true + }, "node_modules/http-errors": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", @@ -25515,6 +25794,12 @@ "node": ">= 0.6" } }, + "node_modules/http-parser-js": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.5.tgz", + "integrity": "sha512-x+JVEkO2PoM8qqpbPbOL3cqHPwerep7OwzK7Ay+sMQjKzaKCqWvjoXm5tqMP9tXWWTnTzAjIhXg+J99XYuPhPA==", + "dev": true + }, "node_modules/http-proxy": { "version": "1.18.1", "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", @@ -25541,6 +25826,42 @@ "node": ">= 6" } }, + "node_modules/http-proxy-middleware": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.3.tgz", + "integrity": "sha512-1bloEwnrHMnCoO/Gcwbz7eSVvW50KPES01PecpagI+YLNLci4AcuKJrujW4Mc3sBLpFxMSlsLNHS5Nl/lvrTPA==", + "dev": true, + "dependencies": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } + } + }, + "node_modules/http-proxy-middleware/node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/http-signature": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", @@ -33314,6 +33635,25 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, + "node_modules/multicast-dns": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", + "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", + "dev": true, + "dependencies": { + "dns-packet": "^1.3.1", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/multicast-dns-service-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", + "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", + "dev": true + }, "node_modules/mute-stream": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", @@ -33448,6 +33788,15 @@ "node": "4.x || >=6.0.0" } }, + "node_modules/node-forge": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.2.1.tgz", + "integrity": "sha512-Fcvtbb+zBcZXbTTVwqGA5W+MKBj56UjVRevvchv5XrcyXbmNdesfZL37nlcWOfpgHhgmxApw3tQbTr4CqNmX4w==", + "dev": true, + "engines": { + "node": ">= 6.13.0" + } + }, "node_modules/node-gyp": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-7.1.2.tgz", @@ -34405,6 +34754,12 @@ "integrity": "sha512-eJJDYkhJFFbBBAxeh8xW+weHlkI28n2ZdQV/J/DNfWfSKlGEf2xcfAbZTv3riEXHAhL9SVOTs2pRmXiSTf78xg==", "dev": true }, + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, "node_modules/omggif": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/omggif/-/omggif-1.0.10.tgz", @@ -34697,6 +35052,28 @@ "node": ">=8" } }, + "node_modules/p-retry": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.1.tgz", + "integrity": "sha512-e2xXGNhZOZ0lfgR9kL34iGlU8N/KO0xZnQxVEwdeOvpqNDQfdnxIYizvWtK8RglUa3bGqI8g0R/BdfzLMxRkiA==", + "dev": true, + "dependencies": { + "@types/retry": "^0.12.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-retry/node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, "node_modules/p-timeout": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", @@ -35239,6 +35616,38 @@ "tslib": "^2.1.0" } }, + "node_modules/portfinder": { + "version": "1.0.28", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", + "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", + "dev": true, + "dependencies": { + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.5" + }, + "engines": { + "node": ">= 0.12.0" + } + }, + "node_modules/portfinder/node_modules/async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "dev": true, + "dependencies": { + "lodash": "^4.17.14" + } + }, + "node_modules/portfinder/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, "node_modules/posix-character-classes": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", @@ -37415,9 +37824,9 @@ "dev": true }, "node_modules/readdirp": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", - "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dependencies": { "picomatch": "^2.2.1" }, @@ -38932,6 +39341,24 @@ "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", "integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=" }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", + "dev": true + }, + "node_modules/selfsigned": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.0.0.tgz", + "integrity": "sha512-cUdFiCbKoa1mZ6osuJs2uDHrs0k0oprsKveFiiaBKCNq3SYyb5gs2HxhQyDNLCmL51ZZThqi4YNDpCK6GOP1iQ==", + "dev": true, + "dependencies": { + "node-forge": "^1.2.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", @@ -39105,6 +39532,66 @@ "node": ">= 0.6" } }, + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "dev": true, + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, "node_modules/serve-static": { "version": "1.14.2", "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz", @@ -39695,6 +40182,17 @@ "node": ">=10.0.0" } }, + "node_modules/sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "dev": true, + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, "node_modules/socks": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.1.tgz", @@ -39915,6 +40413,50 @@ "spdx-ranges": "^2.0.0" } }, + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "node_modules/spdy-transport/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/specificity": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/specificity/-/specificity-0.4.1.tgz", @@ -41380,6 +41922,12 @@ "xtend": "~4.0.1" } }, + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true + }, "node_modules/timers-browserify": { "version": "2.0.12", "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", @@ -42897,6 +43445,15 @@ "node": ">=0.10.0" } }, + "node_modules/wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, "node_modules/web-animations-js": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/web-animations-js/-/web-animations-js-2.3.2.tgz", @@ -43215,6 +43772,251 @@ "webpack": "^4.0.0 || ^5.0.0" } }, + "node_modules/webpack-dev-server": { + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.7.4.tgz", + "integrity": "sha512-nfdsb02Zi2qzkNmgtZjkrMOcXnYZ6FLKcQwpxT7MvmHKc+oTtDsBju8j+NMyAygZ9GW1jMEUpy3itHtqgEhe1A==", + "dev": true, + "dependencies": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.2.2", + "ansi-html-community": "^0.0.8", + "bonjour": "^3.5.0", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^1.6.0", + "default-gateway": "^6.0.3", + "del": "^6.0.0", + "express": "^4.17.1", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.0", + "ipaddr.js": "^2.0.1", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "portfinder": "^1.0.28", + "schema-utils": "^4.0.0", + "selfsigned": "^2.0.0", + "serve-index": "^1.9.1", + "sockjs": "^0.3.21", + "spdy": "^4.0.2", + "strip-ansi": "^7.0.0", + "webpack-dev-middleware": "^5.3.1", + "ws": "^8.4.2" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 12.13.0" + }, + "peerDependencies": { + "webpack": "^4.37.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/ajv": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.10.0.tgz", + "integrity": "sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/webpack-dev-server/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/webpack-dev-server/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/webpack-dev-server/node_modules/colorette": { + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", + "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", + "dev": true + }, + "node_modules/webpack-dev-server/node_modules/del": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz", + "integrity": "sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==", + "dev": true, + "dependencies": { + "globby": "^11.0.1", + "graceful-fs": "^4.2.4", + "is-glob": "^4.0.1", + "is-path-cwd": "^2.2.0", + "is-path-inside": "^3.0.2", + "p-map": "^4.0.0", + "rimraf": "^3.0.2", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/webpack-dev-server/node_modules/ipaddr.js": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", + "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/webpack-dev-server/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/webpack-dev-server/node_modules/open": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", + "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", + "dev": true, + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/webpack-dev-server/node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/webpack-dev-server/node_modules/schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/webpack-dev-server/node_modules/strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/webpack-dev-server/node_modules/webpack-dev-middleware": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.1.tgz", + "integrity": "sha512-81EujCKkyles2wphtdrnPg/QqegC/AtqNH//mQkBYSMqwFVCQrxM6ktB2O/SPlZy7LqeEfTbV3cZARGQz6umhg==", + "dev": true, + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^3.4.1", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/webpack-dev-server/node_modules/ws": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", + "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, "node_modules/webpack-hot-middleware": { "version": "2.25.1", "resolved": "https://registry.npmjs.org/webpack-hot-middleware/-/webpack-hot-middleware-2.25.1.tgz", @@ -43460,6 +44262,29 @@ "node": ">=8" } }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/whatwg-encoding": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", @@ -55298,6 +56123,25 @@ "@babel/types": "^7.3.0" } }, + "@types/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "dev": true, + "requires": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "@types/bonjour": { + "version": "3.5.10", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", + "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, "@types/cacheable-request": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz", @@ -55330,6 +56174,25 @@ "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.11.tgz", "integrity": "sha512-SRXjM+tfsSlA9VuG8hGO2nft2p8zjXCK1VcC6N4NXbBbYbSia9kzCChYQajIjzIqOOOuh5Ock6MmV2oux4jDZQ==" }, + "@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/connect-history-api-fallback": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", + "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", + "dev": true, + "requires": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, "@types/cookie": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", @@ -55366,6 +56229,29 @@ "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", "dev": true }, + "@types/express": { + "version": "4.17.13", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", + "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", + "dev": true, + "requires": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.18", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "@types/express-serve-static-core": { + "version": "4.17.28", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz", + "integrity": "sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" + } + }, "@types/fs-extra": { "version": "8.1.2", "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-8.1.2.tgz", @@ -55414,6 +56300,15 @@ "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==", "dev": true }, + "@types/http-proxy": { + "version": "1.17.8", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.8.tgz", + "integrity": "sha512-5kPLG5BKpWYkw/LVOGWpiq3nEVqxiN32rTgI53Sk12/xHFQ2rG3ehI9IO+O3W2QoKeyB92dJkoka8SUm6BX1pA==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, "@types/is-function": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@types/is-function/-/is-function-1.0.0.tgz", @@ -55486,6 +56381,12 @@ "@types/unist": "*" } }, + "@types/mime": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", + "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", + "dev": true + }, "@types/minimatch": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", @@ -55569,6 +56470,12 @@ "integrity": "sha512-/JHkVHtx/REVG0VVToGRGH2+23hsYLHdyG+GrvoUGlGAd0ErauXDyvHtRI/7H7mzLm+tBCKA7pfcpkQ1lf58iQ==", "dev": true }, + "@types/range-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", + "dev": true + }, "@types/react": { "version": "17.0.38", "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.38.tgz", @@ -55630,11 +56537,45 @@ "@types/node": "*" } }, + "@types/retry": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.1.tgz", + "integrity": "sha512-xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g==", + "dev": true + }, "@types/scheduler": { "version": "0.16.2", "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" }, + "@types/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", + "dev": true, + "requires": { + "@types/express": "*" + } + }, + "@types/serve-static": { + "version": "1.13.10", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", + "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", + "dev": true, + "requires": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "@types/sockjs": { + "version": "0.3.33", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", + "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, "@types/source-list-map": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz", @@ -55731,6 +56672,15 @@ } } }, + "@types/ws": { + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.2.3.tgz", + "integrity": "sha512-ahRJZquUYCdOZf/rCsWg88S0/+cb9wazUBHv6HZEe3XdYaBe2zr/slM8J28X07Hn88Pnm4ezo7N8/ofnOgrPVQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, "@types/yargs": { "version": "15.0.13", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.13.tgz", @@ -57511,9 +58461,9 @@ } }, "anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", "requires": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -58496,6 +59446,12 @@ "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==" }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "dev": true + }, "batch-processor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/batch-processor/-/batch-processor-1.0.0.tgz", @@ -58620,6 +59576,28 @@ "resolved": "https://registry.npmjs.org/body-scroll-lock/-/body-scroll-lock-3.1.5.tgz", "integrity": "sha512-Yi1Xaml0EvNA0OYWxXiYNqY24AfWkbA6w5vxE7GWxtKfzIbZM+Qw+aSmkgsbWzbHiy/RCSkUZBplVxTA+E4jJg==" }, + "bonjour": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", + "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "dev": true, + "requires": { + "array-flatten": "^2.1.0", + "deep-equal": "^1.0.1", + "dns-equal": "^1.0.0", + "dns-txt": "^2.0.2", + "multicast-dns": "^6.0.1", + "multicast-dns-service-types": "^1.1.0" + }, + "dependencies": { + "array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", + "dev": true + } + } + }, "boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", @@ -58897,6 +59875,12 @@ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" }, + "buffer-indexof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", + "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", + "dev": true + }, "buffer-xor": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", @@ -59230,18 +60214,18 @@ } }, "chokidar": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", - "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "requires": { - "anymatch": "~3.1.1", + "anymatch": "~3.1.2", "braces": "~3.0.2", - "fsevents": "~2.3.1", - "glob-parent": "~5.1.0", + "fsevents": "~2.3.2", + "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" } }, "chownr": { @@ -59798,6 +60782,12 @@ } } }, + "connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "dev": true + }, "consola": { "version": "2.15.3", "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", @@ -60814,6 +61804,20 @@ "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=" }, + "deep-equal": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "dev": true, + "requires": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + } + }, "deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", @@ -60836,12 +61840,27 @@ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==" }, + "default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "dev": true, + "requires": { + "execa": "^5.0.0" + } + }, "defer-to-connect": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", "dev": true }, + "define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true + }, "define-properties": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", @@ -60951,6 +61970,12 @@ "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==" }, + "detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true + }, "detect-port": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.3.0.tgz", @@ -61033,6 +62058,31 @@ "resolved": "https://registry.npmjs.org/direction/-/direction-1.0.4.tgz", "integrity": "sha512-GYqKi1aH7PJXxdhTeZBFrg8vUBeKXi+cNprXsC1kpJcbcVnV9wBsrOu1cQEdG0WeQwlfHiy3XvnKfIrJ2R0NzQ==" }, + "dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", + "dev": true + }, + "dns-packet": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz", + "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==", + "dev": true, + "requires": { + "ip": "^1.1.0", + "safe-buffer": "^5.0.1" + } + }, + "dns-txt": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", + "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "dev": true, + "requires": { + "buffer-indexof": "^1.0.0" + } + }, "doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -63198,6 +64248,15 @@ "format": "^0.2.0" } }, + "faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + }, "fb-watchman": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", @@ -64481,6 +65540,12 @@ "duplexer": "^0.1.2" } }, + "handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true + }, "handlebars": { "version": "4.7.7", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", @@ -64820,6 +65885,18 @@ "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", "dev": true }, + "hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, "hpq": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/hpq/-/hpq-1.3.0.tgz", @@ -64922,6 +65999,12 @@ "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", "dev": true }, + "http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", + "dev": true + }, "http-errors": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", @@ -64934,6 +66017,12 @@ "toidentifier": "1.0.1" } }, + "http-parser-js": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.5.tgz", + "integrity": "sha512-x+JVEkO2PoM8qqpbPbOL3cqHPwerep7OwzK7Ay+sMQjKzaKCqWvjoXm5tqMP9tXWWTnTzAjIhXg+J99XYuPhPA==", + "dev": true + }, "http-proxy": { "version": "1.18.1", "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", @@ -64954,6 +66043,27 @@ "debug": "4" } }, + "http-proxy-middleware": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.3.tgz", + "integrity": "sha512-1bloEwnrHMnCoO/Gcwbz7eSVvW50KPES01PecpagI+YLNLci4AcuKJrujW4Mc3sBLpFxMSlsLNHS5Nl/lvrTPA==", + "dev": true, + "requires": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "dependencies": { + "is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true + } + } + }, "http-signature": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", @@ -70845,6 +71955,22 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, + "multicast-dns": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", + "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", + "dev": true, + "requires": { + "dns-packet": "^1.3.1", + "thunky": "^1.0.2" + } + }, + "multicast-dns-service-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", + "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", + "dev": true + }, "mute-stream": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", @@ -70958,6 +72084,12 @@ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" }, + "node-forge": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.2.1.tgz", + "integrity": "sha512-Fcvtbb+zBcZXbTTVwqGA5W+MKBj56UjVRevvchv5XrcyXbmNdesfZL37nlcWOfpgHhgmxApw3tQbTr4CqNmX4w==", + "dev": true + }, "node-gyp": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-7.1.2.tgz", @@ -71699,6 +72831,12 @@ "integrity": "sha512-eJJDYkhJFFbBBAxeh8xW+weHlkI28n2ZdQV/J/DNfWfSKlGEf2xcfAbZTv3riEXHAhL9SVOTs2pRmXiSTf78xg==", "dev": true }, + "obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, "omggif": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/omggif/-/omggif-1.0.10.tgz", @@ -71913,6 +73051,24 @@ "aggregate-error": "^3.0.0" } }, + "p-retry": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.1.tgz", + "integrity": "sha512-e2xXGNhZOZ0lfgR9kL34iGlU8N/KO0xZnQxVEwdeOvpqNDQfdnxIYizvWtK8RglUa3bGqI8g0R/BdfzLMxRkiA==", + "dev": true, + "requires": { + "@types/retry": "^0.12.0", + "retry": "^0.13.1" + }, + "dependencies": { + "retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "dev": true + } + } + }, "p-timeout": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", @@ -72332,6 +73488,37 @@ "tslib": "^2.1.0" } }, + "portfinder": { + "version": "1.0.28", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", + "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", + "dev": true, + "requires": { + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.5" + }, + "dependencies": { + "async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "dev": true, + "requires": { + "lodash": "^4.17.14" + } + }, + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, "posix-character-classes": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", @@ -73924,9 +75111,9 @@ } }, "readdirp": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", - "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "requires": { "picomatch": "^2.2.1" } @@ -75121,6 +76308,21 @@ "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", "integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=" }, + "select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", + "dev": true + }, + "selfsigned": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.0.0.tgz", + "integrity": "sha512-cUdFiCbKoa1mZ6osuJs2uDHrs0k0oprsKveFiiaBKCNq3SYyb5gs2HxhQyDNLCmL51ZZThqi4YNDpCK6GOP1iQ==", + "dev": true, + "requires": { + "node-forge": "^1.2.0" + } + }, "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", @@ -75272,6 +76474,62 @@ } } }, + "serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + } + } + }, "serve-static": { "version": "1.14.2", "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz", @@ -75748,6 +77006,17 @@ "debug": "~4.3.1" } }, + "sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "dev": true, + "requires": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, "socks": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.1.tgz", @@ -75936,6 +77205,46 @@ "spdx-ranges": "^2.0.0" } }, + "spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + } + }, + "spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, "specificity": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/specificity/-/specificity-0.4.1.tgz", @@ -77068,6 +78377,12 @@ "xtend": "~4.0.1" } }, + "thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true + }, "timers-browserify": { "version": "2.0.12", "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", @@ -78217,6 +79532,15 @@ } } }, + "wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "requires": { + "minimalistic-assert": "^1.0.0" + } + }, "web-animations-js": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/web-animations-js/-/web-animations-js-2.3.2.tgz", @@ -78474,6 +79798,168 @@ "webpack-log": "^2.0.0" } }, + "webpack-dev-server": { + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.7.4.tgz", + "integrity": "sha512-nfdsb02Zi2qzkNmgtZjkrMOcXnYZ6FLKcQwpxT7MvmHKc+oTtDsBju8j+NMyAygZ9GW1jMEUpy3itHtqgEhe1A==", + "dev": true, + "requires": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.2.2", + "ansi-html-community": "^0.0.8", + "bonjour": "^3.5.0", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^1.6.0", + "default-gateway": "^6.0.3", + "del": "^6.0.0", + "express": "^4.17.1", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.0", + "ipaddr.js": "^2.0.1", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "portfinder": "^1.0.28", + "schema-utils": "^4.0.0", + "selfsigned": "^2.0.0", + "serve-index": "^1.9.1", + "sockjs": "^0.3.21", + "spdy": "^4.0.2", + "strip-ansi": "^7.0.0", + "webpack-dev-middleware": "^5.3.1", + "ws": "^8.4.2" + }, + "dependencies": { + "ajv": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.10.0.tgz", + "integrity": "sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true + }, + "colorette": { + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", + "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", + "dev": true + }, + "del": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz", + "integrity": "sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==", + "dev": true, + "requires": { + "globby": "^11.0.1", + "graceful-fs": "^4.2.4", + "is-glob": "^4.0.1", + "is-path-cwd": "^2.2.0", + "is-path-inside": "^3.0.2", + "p-map": "^4.0.0", + "rimraf": "^3.0.2", + "slash": "^3.0.0" + } + }, + "ipaddr.js": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", + "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==", + "dev": true + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "open": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", + "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", + "dev": true, + "requires": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + } + }, + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + } + }, + "strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } + }, + "webpack-dev-middleware": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.1.tgz", + "integrity": "sha512-81EujCKkyles2wphtdrnPg/QqegC/AtqNH//mQkBYSMqwFVCQrxM6ktB2O/SPlZy7LqeEfTbV3cZARGQz6umhg==", + "dev": true, + "requires": { + "colorette": "^2.0.10", + "memfs": "^3.4.1", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + } + }, + "ws": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", + "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", + "dev": true, + "requires": {} + } + } + }, "webpack-hot-middleware": { "version": "2.25.1", "resolved": "https://registry.npmjs.org/webpack-hot-middleware/-/webpack-hot-middleware-2.25.1.tgz", @@ -78621,6 +80107,23 @@ } } }, + "websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "requires": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + } + }, + "websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true + }, "whatwg-encoding": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", diff --git a/package.json b/package.json index 9c44d7cd1d0b..b6c9389b4d6a 100644 --- a/package.json +++ b/package.json @@ -147,6 +147,7 @@ "puppeteer": "^13.5.0", "react": "^17.0.2", "react-dom": "^17.0.2", + "react-refresh": "^0.11.0", "react-test-renderer": "^17.0.2", "rollup": "^2.70.1", "rollup-plugin-copy": "^3.4.0", @@ -170,6 +171,7 @@ "webpack": "^5.70.0", "webpack-bundle-analyzer": "^4.5.0", "webpack-cli": "^4.9.2", + "webpack-dev-server": "^4.7.4", "webpackbar": "^5.0.2", "worker-loader": "^3.0.8", "workspaces-run": "^1.0.1" @@ -182,6 +184,9 @@ "predev": "rm -rf assets/css/* assets/js/*", "dev": "webpack --config webpack.config.cjs --watch", "postdev": "rm -rf assets/js/web-stories-list-styles* assets/js/web-stories-theme-style*", + "preserve": "rm -rf assets/css/* assets/js/*", + "serve": "webpack serve --config webpack.config.cjs", + "postserve": "rm -rf assets/js/web-stories-list-styles* assets/js/web-stories-theme-style*", "env:start": "./bin/local-env/start.sh", "env:stop": "./bin/local-env/stop.sh", "env:reset-site": "./bin/local-env/install-wordpress.sh --reset-site", diff --git a/packages/story-editor/src/utils/copyPaste.js b/packages/story-editor/src/utils/copyPaste.js index 8436bb387d79..e217bd7e25c1 100644 --- a/packages/story-editor/src/utils/copyPaste.js +++ b/packages/story-editor/src/utils/copyPaste.js @@ -21,7 +21,6 @@ import { renderToStaticMarkup } from '@googleforcreators/react'; import { getDefinitionForType, duplicateElement, - getOffsetCoordinates, } from '@googleforcreators/elements'; const DOUBLE_DASH_ESCAPE = '_DOUBLEDASH_'; @@ -146,5 +145,3 @@ export function addElementsToClipboard(page, elements, animations, evt) { `${htmlContent}` ); } - -export { getOffsetCoordinates as getPastedCoordinates }; diff --git a/webpack.config.cjs b/webpack.config.cjs index 5511da9f89a9..5b424301eac7 100644 --- a/webpack.config.cjs +++ b/webpack.config.cjs @@ -27,6 +27,7 @@ const TerserPlugin = require('terser-webpack-plugin'); const WebpackBar = require('webpackbar'); const { BundleAnalyzerPlugin } = require('webpack-bundle-analyzer'); const HtmlWebpackPlugin = require('html-webpack-plugin'); +const ReactRefreshWebpackPlugin = require('@pmmmwh/react-refresh-webpack-plugin'); /** * WordPress dependencies @@ -45,6 +46,10 @@ function requestToExternal(request) { return false; } + if (request.includes('react-refresh/runtime')) { + return false; + } + return undefined; } @@ -104,6 +109,9 @@ const sharedConfig = { // by default. Use the environment variable option // to enable more persistent caching. cacheDirectory: process.env.BABEL_CACHE_DIRECTORY || true, + plugins: [ + !isProduction && require.resolve('react-refresh/babel'), + ].filter(Boolean), }, }, ], @@ -304,6 +312,17 @@ const templateParameters = (compilation, assets, assetTags, options) => ({ const editorAndDashboard = { ...sharedConfig, + devServer: !isProduction + ? { + devMiddleware: { + writeToDisk: true, + }, + hot: true, + allowedHosts: 'all', + host: 'localhost', + port: 'auto', + } + : undefined, entry: { [EDITOR_CHUNK]: './packages/wp-story-editor/src/index.js', [DASHBOARD_CHUNK]: './packages/wp-dashboard/src/index.js', @@ -312,6 +331,8 @@ const editorAndDashboard = { ...sharedConfig.plugins.filter( (plugin) => !(plugin instanceof DependencyExtractionWebpackPlugin) ), + // React Fast Refresh. + !isProduction && new ReactRefreshWebpackPlugin(), new DependencyExtractionWebpackPlugin({ requestToExternal, }), @@ -334,7 +355,7 @@ const editorAndDashboard = { templateContent, templateParameters, }), - ], + ].filter(Boolean), optimization: { ...sharedConfig.optimization, splitChunks: { From 1dff07683b99fa67eb32279fd2e3cb4489aca618 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Apr 2022 23:45:12 +0200 Subject: [PATCH 07/15] Bump eslint from 8.10.0 to 8.12.0 (#11173) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 65 +++++++++++++++++++++++++++++------------------ package.json | 2 +- 2 files changed, 41 insertions(+), 26 deletions(-) diff --git a/package-lock.json b/package-lock.json index 66118c7602c5..d602837058af 100644 --- a/package-lock.json +++ b/package-lock.json @@ -73,7 +73,7 @@ "css-loader": "^6.2.0", "css-minimizer-webpack-plugin": "^3.0.2", "cssnano": "^5.1.0", - "eslint": "^8.10.0", + "eslint": "^8.12.0", "eslint-config-prettier": "^8.5.0", "eslint-plugin-eslint-comments": "^3.2.0", "eslint-plugin-header": "^3.1.0", @@ -2688,16 +2688,16 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.0.tgz", - "integrity": "sha512-igm9SjJHNEJRiUnecP/1R5T3wKLEJ7pL6e2P+GUSfCd0dGjPYYZve08uzw8L2J8foVHFz+NGu12JxRcU2gGo6w==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.1.tgz", + "integrity": "sha512-bxvbYnBPN1Gibwyp6NrpnFzA3YtRL3BBAyEAFVIpNTm2Rn4Vy87GA5M4aSn3InRrlsbX5N0GW7XIx+U4SAEKdQ==", "dev": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", "espree": "^9.3.1", "globals": "^13.9.0", - "ignore": "^4.0.6", + "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", "minimatch": "^3.0.4", @@ -2714,9 +2714,9 @@ "dev": true }, "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.12.1", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.1.tgz", - "integrity": "sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==", + "version": "13.13.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.13.0.tgz", + "integrity": "sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -2728,6 +2728,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@eslint/eslintrc/node_modules/ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, "node_modules/@eslint/eslintrc/node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -21505,12 +21514,12 @@ } }, "node_modules/eslint": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.10.0.tgz", - "integrity": "sha512-tcI1D9lfVec+R4LE1mNDnzoJ/f71Kl/9Cv4nG47jOueCMBrCCKYXr4AUVS7go6mWYGFD4+EoN6+eXSrEbRzXVw==", + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.12.0.tgz", + "integrity": "sha512-it1oBL9alZg1S8UycLm5YDMAkIhtH6FtAzuZs6YvoGVldWjbS08BkAdb/ymP9LlAyq8koANu32U7Ib/w+UNh8Q==", "dev": true, "dependencies": { - "@eslint/eslintrc": "^1.2.0", + "@eslint/eslintrc": "^1.2.1", "@humanwhocodes/config-array": "^0.9.2", "ajv": "^6.10.0", "chalk": "^4.0.0", @@ -45617,7 +45626,7 @@ "colorthief": "^2.3.2", "draft-js": "^0.11.7", "draft-js-export-html": "^1.4.1", - "draft-js-import-element": "https://github.com/swissspidy/draft-js-import-element", + "draft-js-import-element": "git+ssh://git@github.com/swissspidy/draft-js-import-element.git#d477c24df373487a2018f9e9ed08fb4bdda18e3f", "draft-js-import-html": "^1.4.1", "draftjs-filters": "^2.5.0", "flagged": "^2.0.1", @@ -47695,16 +47704,16 @@ } }, "@eslint/eslintrc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.0.tgz", - "integrity": "sha512-igm9SjJHNEJRiUnecP/1R5T3wKLEJ7pL6e2P+GUSfCd0dGjPYYZve08uzw8L2J8foVHFz+NGu12JxRcU2gGo6w==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.1.tgz", + "integrity": "sha512-bxvbYnBPN1Gibwyp6NrpnFzA3YtRL3BBAyEAFVIpNTm2Rn4Vy87GA5M4aSn3InRrlsbX5N0GW7XIx+U4SAEKdQ==", "dev": true, "requires": { "ajv": "^6.12.4", "debug": "^4.3.2", "espree": "^9.3.1", "globals": "^13.9.0", - "ignore": "^4.0.6", + "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", "minimatch": "^3.0.4", @@ -47718,14 +47727,20 @@ "dev": true }, "globals": { - "version": "13.12.1", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.1.tgz", - "integrity": "sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==", + "version": "13.13.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.13.0.tgz", + "integrity": "sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A==", "dev": true, "requires": { "type-fest": "^0.20.2" } }, + "ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true + }, "js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -48053,7 +48068,7 @@ "colorthief": "^2.3.2", "draft-js": "^0.11.7", "draft-js-export-html": "^1.4.1", - "draft-js-import-element": "https://github.com/swissspidy/draft-js-import-element", + "draft-js-import-element": "git+ssh://git@github.com/swissspidy/draft-js-import-element.git#d477c24df373487a2018f9e9ed08fb4bdda18e3f", "draft-js-import-html": "^1.4.1", "draftjs-filters": "^2.5.0", "flagged": "^2.0.1", @@ -62706,12 +62721,12 @@ } }, "eslint": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.10.0.tgz", - "integrity": "sha512-tcI1D9lfVec+R4LE1mNDnzoJ/f71Kl/9Cv4nG47jOueCMBrCCKYXr4AUVS7go6mWYGFD4+EoN6+eXSrEbRzXVw==", + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.12.0.tgz", + "integrity": "sha512-it1oBL9alZg1S8UycLm5YDMAkIhtH6FtAzuZs6YvoGVldWjbS08BkAdb/ymP9LlAyq8koANu32U7Ib/w+UNh8Q==", "dev": true, "requires": { - "@eslint/eslintrc": "^1.2.0", + "@eslint/eslintrc": "^1.2.1", "@humanwhocodes/config-array": "^0.9.2", "ajv": "^6.10.0", "chalk": "^4.0.0", diff --git a/package.json b/package.json index b6c9389b4d6a..b4de9ef91cbd 100644 --- a/package.json +++ b/package.json @@ -97,7 +97,7 @@ "css-loader": "^6.2.0", "css-minimizer-webpack-plugin": "^3.0.2", "cssnano": "^5.1.0", - "eslint": "^8.10.0", + "eslint": "^8.12.0", "eslint-config-prettier": "^8.5.0", "eslint-plugin-eslint-comments": "^3.2.0", "eslint-plugin-header": "^3.1.0", From bf924042bb051af7727869017b1d1e932b86ea8a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Apr 2022 23:45:32 +0200 Subject: [PATCH 08/15] Bump flagged from 2.0.1 to 2.0.3 (#11174) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 40 ++++++++++++------------- packages/activation-notice/package.json | 2 +- packages/animation/package.json | 2 +- packages/dashboard/package.json | 2 +- packages/output/package.json | 2 +- packages/story-editor/package.json | 2 +- packages/wp-dashboard/package.json | 2 +- packages/wp-story-editor/package.json | 2 +- 8 files changed, 27 insertions(+), 27 deletions(-) diff --git a/package-lock.json b/package-lock.json index d602837058af..fed0edfa51cc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23999,9 +23999,9 @@ } }, "node_modules/flagged": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flagged/-/flagged-2.0.1.tgz", - "integrity": "sha512-cKkJdbHruBbi4CAufayqDs1X6PYMKE+MZmG/3mYBPZw1M0dY+tA14tDTkg5+TISQwZ7tTIzwubFZNv4lm7XENw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/flagged/-/flagged-2.0.3.tgz", + "integrity": "sha512-s+1Ep0wt0Uo/9mvf8JwUOEH5zcK31yU/L8WAW3RB0A7nvIanIjtvz588cWh2PTdshs/soNGhX1uHyxpoAlkQqA==", "peerDependencies": { "react": ">=16" } @@ -44931,7 +44931,7 @@ "@googleforcreators/tracking": "*", "@wordpress/element": "^4.0.0", "@wordpress/i18n": "^4.3.0", - "flagged": "^2.0.1", + "flagged": "^2.0.3", "polished": "^4.1.4", "prop-types": "^15.8.1", "styled-components": "^5.3.3", @@ -44955,7 +44955,7 @@ "@googleforcreators/media": "*", "@googleforcreators/react": "*", "@googleforcreators/units": "*", - "flagged": "^2.0.1", + "flagged": "^2.0.3", "prop-types": "^15.8.1", "styled-components": "^5.3.3", "uuid": "^8.3.2", @@ -45015,7 +45015,7 @@ "@googleforcreators/templates": "*", "@googleforcreators/tracking": "*", "@googleforcreators/units": "*", - "flagged": "^2.0.1", + "flagged": "^2.0.3", "history": "^5.3.0", "prop-types": "^15.8.1", "query-string": "^7.1.1", @@ -45452,7 +45452,7 @@ "@googleforcreators/element-library": "*", "@googleforcreators/test-utils": "*", "@testing-library/react": "^12.1.2", - "flagged": "^2.0.1" + "flagged": "^2.0.3" }, "engines": { "node": ">= 12 || >= 14 || >= 16", @@ -45629,7 +45629,7 @@ "draft-js-import-element": "git+ssh://git@github.com/swissspidy/draft-js-import-element.git#d477c24df373487a2018f9e9ed08fb4bdda18e3f", "draft-js-import-html": "^1.4.1", "draftjs-filters": "^2.5.0", - "flagged": "^2.0.1", + "flagged": "^2.0.3", "history": "^5.3.0", "html-to-image": "1.9.0", "polished": "^4.1.4", @@ -45815,7 +45815,7 @@ "@web-stories-wp/wp-utils": "*", "@wordpress/api-fetch": "^6.0.1", "@wordpress/dom-ready": "^3.3.1", - "flagged": "^2.0.1", + "flagged": "^2.0.3", "opentype.js": "^1.3.4", "prop-types": "^15.8.1", "styled-components": "^5.3.3", @@ -45851,7 +45851,7 @@ "@web-stories-wp/wp-utils": "*", "@wordpress/api-fetch": "^6.0.1", "@wordpress/dom-ready": "^3.3.1", - "flagged": "^2.0.1", + "flagged": "^2.0.3", "polished": "^4.1.4", "react-calendar": "^3.7.0", "styled-components": "^5.3.3" @@ -47784,7 +47784,7 @@ "@googleforcreators/units": "*", "@testing-library/react": "^12.1.4", "@testing-library/react-hooks": "^7.0.2", - "flagged": "^2.0.1", + "flagged": "^2.0.3", "prop-types": "^15.8.1", "styled-components": "^5.3.3", "uuid": "^8.3.2", @@ -47810,7 +47810,7 @@ "@testing-library/react": "^12.1.4", "@testing-library/react-hooks": "^7.0.2", "@testing-library/user-event": "^13.5.0", - "flagged": "^2.0.1", + "flagged": "^2.0.3", "history": "^5.3.0", "jest": "^27.5.1", "prop-types": "^15.8.1", @@ -47979,7 +47979,7 @@ "@googleforcreators/units": "*", "@googleforcreators/url": "*", "@testing-library/react": "^12.1.2", - "flagged": "^2.0.1", + "flagged": "^2.0.3", "prop-types": "^15.8.0" } }, @@ -48071,7 +48071,7 @@ "draft-js-import-element": "git+ssh://git@github.com/swissspidy/draft-js-import-element.git#d477c24df373487a2018f9e9ed08fb4bdda18e3f", "draft-js-import-html": "^1.4.1", "draftjs-filters": "^2.5.0", - "flagged": "^2.0.1", + "flagged": "^2.0.3", "history": "^5.3.0", "html-to-image": "1.9.0", "jest": "^27.5.1", @@ -56884,7 +56884,7 @@ "@testing-library/react": "^12.1.4", "@wordpress/element": "^4.0.0", "@wordpress/i18n": "^4.3.0", - "flagged": "^2.0.1", + "flagged": "^2.0.3", "polished": "^4.1.4", "prop-types": "^15.8.1", "styled-components": "^5.3.3", @@ -57061,7 +57061,7 @@ "@web-stories-wp/wp-utils": "*", "@wordpress/api-fetch": "^6.0.1", "@wordpress/dom-ready": "^3.3.1", - "flagged": "^2.0.1", + "flagged": "^2.0.3", "opentype.js": "^1.3.4", "prop-types": "^15.8.1", "styled-components": "^5.3.3", @@ -57089,7 +57089,7 @@ "@web-stories-wp/wp-utils": "*", "@wordpress/api-fetch": "^6.0.1", "@wordpress/dom-ready": "^3.3.1", - "flagged": "^2.0.1", + "flagged": "^2.0.3", "mockdate": "^3.0.5", "polished": "^4.1.4", "prop-types": "^15.8.1", @@ -64612,9 +64612,9 @@ } }, "flagged": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flagged/-/flagged-2.0.1.tgz", - "integrity": "sha512-cKkJdbHruBbi4CAufayqDs1X6PYMKE+MZmG/3mYBPZw1M0dY+tA14tDTkg5+TISQwZ7tTIzwubFZNv4lm7XENw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/flagged/-/flagged-2.0.3.tgz", + "integrity": "sha512-s+1Ep0wt0Uo/9mvf8JwUOEH5zcK31yU/L8WAW3RB0A7nvIanIjtvz588cWh2PTdshs/soNGhX1uHyxpoAlkQqA==", "requires": {} }, "flat-cache": { diff --git a/packages/activation-notice/package.json b/packages/activation-notice/package.json index cb59355b1b33..29782cc160f3 100644 --- a/packages/activation-notice/package.json +++ b/packages/activation-notice/package.json @@ -29,7 +29,7 @@ "@googleforcreators/tracking": "*", "@wordpress/element": "^4.0.0", "@wordpress/i18n": "^4.3.0", - "flagged": "^2.0.1", + "flagged": "^2.0.3", "polished": "^4.1.4", "prop-types": "^15.8.1", "styled-components": "^5.3.3", diff --git a/packages/animation/package.json b/packages/animation/package.json index 0d300815ee7e..da6bac67b0d3 100644 --- a/packages/animation/package.json +++ b/packages/animation/package.json @@ -42,7 +42,7 @@ "@googleforcreators/media": "*", "@googleforcreators/react": "*", "@googleforcreators/units": "*", - "flagged": "^2.0.1", + "flagged": "^2.0.3", "prop-types": "^15.8.1", "styled-components": "^5.3.3", "uuid": "^8.3.2", diff --git a/packages/dashboard/package.json b/packages/dashboard/package.json index 41fa8d201046..55a84a7de79d 100644 --- a/packages/dashboard/package.json +++ b/packages/dashboard/package.json @@ -47,7 +47,7 @@ "@googleforcreators/templates": "*", "@googleforcreators/tracking": "*", "@googleforcreators/units": "*", - "flagged": "^2.0.1", + "flagged": "^2.0.3", "history": "^5.3.0", "prop-types": "^15.8.1", "query-string": "^7.1.1", diff --git a/packages/output/package.json b/packages/output/package.json index 121dc25642f6..31ef5912eab4 100644 --- a/packages/output/package.json +++ b/packages/output/package.json @@ -54,6 +54,6 @@ "@googleforcreators/element-library": "*", "@googleforcreators/test-utils": "*", "@testing-library/react": "^12.1.2", - "flagged": "^2.0.1" + "flagged": "^2.0.3" } } diff --git a/packages/story-editor/package.json b/packages/story-editor/package.json index 4ba679a55e7a..7fcdbed202ac 100644 --- a/packages/story-editor/package.json +++ b/packages/story-editor/package.json @@ -71,7 +71,7 @@ "draft-js-import-element": "https://github.com/swissspidy/draft-js-import-element", "draft-js-import-html": "^1.4.1", "draftjs-filters": "^2.5.0", - "flagged": "^2.0.1", + "flagged": "^2.0.3", "history": "^5.3.0", "html-to-image": "1.9.0", "polished": "^4.1.4", diff --git a/packages/wp-dashboard/package.json b/packages/wp-dashboard/package.json index 983922d91f25..34635494bcf4 100644 --- a/packages/wp-dashboard/package.json +++ b/packages/wp-dashboard/package.json @@ -43,7 +43,7 @@ "@web-stories-wp/wp-utils": "*", "@wordpress/api-fetch": "^6.0.1", "@wordpress/dom-ready": "^3.3.1", - "flagged": "^2.0.1", + "flagged": "^2.0.3", "opentype.js": "^1.3.4", "prop-types": "^15.8.1", "styled-components": "^5.3.3", diff --git a/packages/wp-story-editor/package.json b/packages/wp-story-editor/package.json index ea1cb6283918..2283d784fd04 100644 --- a/packages/wp-story-editor/package.json +++ b/packages/wp-story-editor/package.json @@ -42,7 +42,7 @@ "@web-stories-wp/wp-utils": "*", "@wordpress/api-fetch": "^6.0.1", "@wordpress/dom-ready": "^3.3.1", - "flagged": "^2.0.1", + "flagged": "^2.0.3", "polished": "^4.1.4", "react-calendar": "^3.7.0", "styled-components": "^5.3.3" From 6a06ee92199fcc9278759365fd94a3d2062cc94b Mon Sep 17 00:00:00 2001 From: Jonny Harris Date: Tue, 5 Apr 2022 12:09:27 +0100 Subject: [PATCH 09/15] CORS Check: Only show dialog once (#11145) Co-authored-by: Pascal Birchler --- .../design-system/src/utils/localStore.js | 1 + .../src/components/corsCheck/corsCheck.js | 16 ++++++++++-- .../components/corsCheck/test/corsCheck.js | 26 ++++++++++++++++++- 3 files changed, 40 insertions(+), 3 deletions(-) diff --git a/packages/design-system/src/utils/localStore.js b/packages/design-system/src/utils/localStore.js index 964fba131942..386abe050b4f 100644 --- a/packages/design-system/src/utils/localStore.js +++ b/packages/design-system/src/utils/localStore.js @@ -33,6 +33,7 @@ export const LOCAL_STORAGE_PREFIX = { DEFAULT_VIEW_PAGE_TEMPLATE_LAYOUT: 'web_stories_default_template_view', BACKGROUND_IS_SET_DIALOG_DISMISSED: 'web_stories_background_is_set_dialog_dismissed', + CORS_CHECK_DIALOG_DISMISSED: 'web_stories_cors_check_dialog_dismissed', }; function getItemByKey(key) { diff --git a/packages/wp-story-editor/src/components/corsCheck/corsCheck.js b/packages/wp-story-editor/src/components/corsCheck/corsCheck.js index f41e5dd32457..92aafccd4ff7 100644 --- a/packages/wp-story-editor/src/components/corsCheck/corsCheck.js +++ b/packages/wp-story-editor/src/components/corsCheck/corsCheck.js @@ -18,6 +18,10 @@ */ import { useEffect, useCallback, useState } from '@googleforcreators/react'; import { useAPI } from '@googleforcreators/story-editor'; +import { + LOCAL_STORAGE_PREFIX, + localStore, +} from '@googleforcreators/design-system'; import { trackError } from '@googleforcreators/tracking'; import { useFeature } from 'flagged'; @@ -26,16 +30,24 @@ import { useFeature } from 'flagged'; */ import CorsCheckFailed from './corsCheckFailed'; +const storageKey = LOCAL_STORAGE_PREFIX.CORS_CHECK_DIALOG_DISMISSED; + function CorsCheck() { const [showDialog, setShowDialog] = useState(false); - const closeDialog = useCallback(() => setShowDialog(false), []); const { actions: { getMediaForCorsCheck }, } = useAPI(); const enableCORSCheck = useFeature('enableCORSCheck'); + + const closeDialog = useCallback(() => { + setShowDialog(false); + localStore.setItemByKey(storageKey, true); + }, []); + + const isDialogDismissed = Boolean(localStore.getItemByKey(storageKey)); useEffect(() => { (async () => { - if (!enableCORSCheck) { + if (!enableCORSCheck || isDialogDismissed) { return; } let mediaItems; diff --git a/packages/wp-story-editor/src/components/corsCheck/test/corsCheck.js b/packages/wp-story-editor/src/components/corsCheck/test/corsCheck.js index 6a64427a31c9..6863b9bd578d 100644 --- a/packages/wp-story-editor/src/components/corsCheck/test/corsCheck.js +++ b/packages/wp-story-editor/src/components/corsCheck/test/corsCheck.js @@ -19,9 +19,14 @@ import { fireEvent, screen, + waitFor, waitForElementToBeRemoved, } from '@testing-library/react'; -import { setAppElement } from '@googleforcreators/design-system'; +import { + LOCAL_STORAGE_PREFIX, + localStore, + setAppElement, +} from '@googleforcreators/design-system'; import { APIContext } from '@googleforcreators/story-editor'; import { FlagsProvider } from 'flagged'; import { renderWithTheme } from '@googleforcreators/test-utils'; @@ -33,6 +38,15 @@ import CorsCheck from '../corsCheck.js'; const getMediaForCorsCheck = jest.fn(); +jest.mock('@googleforcreators/design-system', () => ({ + __esModule: true, + ...jest.requireActual('@googleforcreators/design-system'), + localStore: { + setItemByKey: jest.fn(), + getItemByKey: jest.fn(() => false), + }, +})); + function setup() { const apiData = { actions: { @@ -123,6 +137,9 @@ describe('corsCheck', () => { fetchSpy.mockRejectedValue(() => new Error('request failed')); setup(); + expect(localStore.getItemByKey).toHaveBeenCalledWith( + LOCAL_STORAGE_PREFIX.CORS_CHECK_DIALOG_DISMISSED + ); const dialog = await screen.findByRole('dialog'); expect(dialog).toBeInTheDocument(); @@ -132,5 +149,12 @@ describe('corsCheck', () => { fireEvent.click(dismiss); await waitForElementToBeRemoved(dialog); + + await waitFor(() => + expect(localStore.setItemByKey).toHaveBeenCalledWith( + LOCAL_STORAGE_PREFIX.CORS_CHECK_DIALOG_DISMISSED, + true + ) + ); }); }); From 256639d8367d95e165e38ca5e733ae0d847ff1f4 Mon Sep 17 00:00:00 2001 From: Jonny Harris Date: Tue, 5 Apr 2022 12:13:53 +0100 Subject: [PATCH 10/15] Media: Initial implementation for captions hotlinking (#11122) Co-authored-by: Pascal Birchler --- includes/Experiments.php | 11 + includes/REST_API/Hotlinking_Controller.php | 21 +- .../src/plugins/web-stories-hotlink.php | 55 +++++ .../src/specs/editor/backgroundAudio.js | 62 ++++++ packages/element-library/src/video/display.js | 11 +- packages/element-library/src/video/trim.js | 20 +- packages/media/src/types.js | 1 + .../src/components/audioPlayer/index.js | 39 ++-- .../panes/media/local/hotlink/useInsert.js | 21 +- .../panes/media/local/hotlink/utils.js | 24 ++ .../panels/design/captions/captions.js | 7 +- .../shared/backgroundAudioPanelContent.js | 3 +- .../panels/shared/captionsPanelContent.js | 84 +++++-- .../components/panels/shared/hotlinkModal.js | 205 ++++++++++++++++++ .../tests/REST_API/Hotlinking_Controller.php | 19 ++ 15 files changed, 520 insertions(+), 63 deletions(-) create mode 100644 packages/e2e-tests/src/plugins/web-stories-hotlink.php create mode 100644 packages/story-editor/src/components/panels/shared/hotlinkModal.js diff --git a/includes/Experiments.php b/includes/Experiments.php index ffc13585350c..9d6e3e548c42 100644 --- a/includes/Experiments.php +++ b/includes/Experiments.php @@ -358,6 +358,17 @@ public function get_experiments(): array { 'description' => __( 'Enable recording from webcam/microphone', 'web-stories' ), 'group' => 'editor', ], + /** + * Author: @spacedmonkey + * Issue: #11081 + * Creation date: 2022-03-30 + */ + [ + 'name' => 'captionHotlinking', + 'label' => __( 'Caption hotlinking', 'web-stories' ), + 'description' => __( 'Enable hotlinking of captions', 'web-stories' ), + 'group' => 'editor', + ], ]; } diff --git a/includes/REST_API/Hotlinking_Controller.php b/includes/REST_API/Hotlinking_Controller.php index c5cff58b07a1..85edf6dc4f7d 100644 --- a/includes/REST_API/Hotlinking_Controller.php +++ b/includes/REST_API/Hotlinking_Controller.php @@ -26,6 +26,7 @@ namespace Google\Web_Stories\REST_API; +use Google\Web_Stories\Experiments; use Google\Web_Stories\Infrastructure\HasRequirements; use Google\Web_Stories\Media\Types; use Google\Web_Stories\Story_Post_Type; @@ -62,6 +63,13 @@ class Hotlinking_Controller extends REST_Controller implements HasRequirements { */ private $types; + /** + * Experiments instance. + * + * @var Experiments Experiments instance. + */ + private $experiments; + /** * File pointer resource. * @@ -74,14 +82,16 @@ class Hotlinking_Controller extends REST_Controller implements HasRequirements { * * @param Story_Post_Type $story_post_type Story_Post_Type instance. * @param Types $types Types instance. + * @param Experiments $experiments Experiments instance. * @return void */ - public function __construct( Story_Post_Type $story_post_type, Types $types ) { + public function __construct( Story_Post_Type $story_post_type, Types $types, Experiments $experiments ) { $this->story_post_type = $story_post_type; $this->types = $types; - $this->namespace = 'web-stories/v1'; - $this->rest_base = 'hotlink'; + $this->namespace = 'web-stories/v1'; + $this->rest_base = 'hotlink'; + $this->experiments = $experiments; } /** @@ -582,8 +592,9 @@ protected function get_allowed_mime_types(): array { $mime_type = $this->types->get_allowed_mime_types(); // TODO: Update once audio elements are supported. $mime_type['audio'] = []; - // TODO(#10515): Add support hotlinking vtt files. - unset( $mime_type['caption'] ); + if ( ! $this->experiments->is_experiment_enabled( 'captionHotlinking' ) ) { + unset( $mime_type['caption'] ); + } // Do not support hotlinking SVGs for security reasons. unset( $mime_type['vector'] ); diff --git a/packages/e2e-tests/src/plugins/web-stories-hotlink.php b/packages/e2e-tests/src/plugins/web-stories-hotlink.php new file mode 100644 index 000000000000..e7ed808ff8d4 --- /dev/null +++ b/packages/e2e-tests/src/plugins/web-stories-hotlink.php @@ -0,0 +1,55 @@ + 'vtt', + 'file_name' => 'test.vtt', + 'file_size' => '2000', + 'mime_type' => 'text/vtt', + 'type' => 'caption', + ]; + + return wp_json_encode( $data ); +} + +add_filter( $filter, __NAMESPACE__ . '\filter_transient', 20 ); diff --git a/packages/e2e-tests/src/specs/editor/backgroundAudio.js b/packages/e2e-tests/src/specs/editor/backgroundAudio.js index b3aec31666d6..f4ee7f22ea1c 100644 --- a/packages/e2e-tests/src/specs/editor/backgroundAudio.js +++ b/packages/e2e-tests/src/specs/editor/backgroundAudio.js @@ -22,8 +22,12 @@ import { uploadFile, deleteMedia, takeSnapshot, + withExperimentalFeatures, + withPlugin, } from '@web-stories-wp/e2e-test-utils'; +const VTT_URL = `${process.env.WP_BASE_URL}/wp-content/e2e-assets/test.vtt`; + describe('Background Audio', () => { let uploadedFiles; @@ -155,5 +159,63 @@ describe('Background Audio', () => { await expect(page).toMatch('test.vtt'); }); + + describe('Hotlink captions', () => { + withExperimentalFeatures(['captionHotlinking']); + withPlugin('e2e-tests-hotlink-hotwire'); + + it('should allow adding background audio with captions', async () => { + await createNewStory(); + + // Select the current page by clicking bg change quick action (because of empty state). + await expect(page).toClick('button', { + text: 'Change background color', + }); + + await expect(page).toMatch('Page Background Audio'); + + await expect(page).toClick('button', { text: 'Upload an audio file' }); + + await page.waitForSelector('.media-modal', { + visible: true, + }); + + await expect(page).toClick('.media-modal #menu-item-upload', { + text: 'Upload files', + visible: true, + }); + + const fileName = await uploadFile('audio.mp3'); + uploadedFiles.push(fileName); + + await expect(page).toClick('button', { text: 'Select audio file' }); + + await page.waitForSelector('.media-modal', { + visible: false, + }); + + await expect(page).toMatch(fileName); + + await expect(page).toMatchElement('button[aria-label="Play"]'); + + await expect(page).toClick('button', { text: 'Link to file' }); + + const dialogSelector = '.ReactModal__Content'; + + await page.waitForSelector(dialogSelector); + + const dialog = await expect(page).toMatchElement(dialogSelector); + + await page.keyboard.type(VTT_URL); + + await expect(dialog).toClick('button', { text: 'Insert' }); + + await expect(page).not.toMatchElement(dialogSelector); + + await expect(page).not.toMatchElement('button', { + text: 'Link to file', + }); + }); + }); }); }); diff --git a/packages/element-library/src/video/display.js b/packages/element-library/src/video/display.js index 696158081c3c..75413a52c89d 100644 --- a/packages/element-library/src/video/display.js +++ b/packages/element-library/src/video/display.js @@ -57,7 +57,7 @@ function VideoDisplay({ id, poster, resource, - tracks, + tracks = [], isBackground, scale, focalX, @@ -89,6 +89,13 @@ function VideoDisplay({ const muted = Boolean(resource?.isMuted); const url = getProxiedUrl(resource, resource?.src); + const tracksFormatted = tracks.map((track) => { + const src = getProxiedUrl(track, track?.track); + return { + ...track, + track: src, + }; + }); return ( {url && } {/*Hides the track from the user. Displaying happens in MediaCaptionsLayer instead.*/} - + )} diff --git a/packages/element-library/src/video/trim.js b/packages/element-library/src/video/trim.js index 707ae75cb0eb..255e7993b808 100644 --- a/packages/element-library/src/video/trim.js +++ b/packages/element-library/src/video/trim.js @@ -59,7 +59,15 @@ const Spinner = styled.div` align-items: center; `; -function VideoTrim({ box, element, isRTL, topOffset, resource, setVideoNode }) { +function VideoTrim({ + box, + element, + isRTL, + topOffset, + resource, + setVideoNode, + getProxiedUrl, +}) { const { width, height } = box; const { poster, tracks, isBackground, scale, flip, focalX, focalY } = element; const wrapperRef = useRef(); @@ -110,6 +118,13 @@ function VideoTrim({ box, element, isRTL, topOffset, resource, setVideoNode }) { videoProps.transformFlip = getTransformFlip(flip); videoProps.crossOrigin = 'anonymous'; + const tracksFormatted = tracks.map((track) => { + const src = getProxiedUrl(track, track?.track); + return { + ...track, + track: src, + }; + }); return ( <> @@ -133,7 +148,7 @@ function VideoTrim({ box, element, isRTL, topOffset, resource, setVideoNode }) { {resource.src && ( )} - + @@ -158,6 +173,7 @@ VideoTrim.propTypes = { topOffset: PropTypes.number, resource: PropTypes.object, setVideoNode: PropTypes.func, + getProxiedUrl: PropTypes.func, }; export default VideoTrim; diff --git a/packages/media/src/types.js b/packages/media/src/types.js index b3758e0e5d5e..6a92f2c61254 100644 --- a/packages/media/src/types.js +++ b/packages/media/src/types.js @@ -58,6 +58,7 @@ ResourcePropTypes.trackResource = PropTypes.shape({ kind: PropTypes.string, srclang: PropTypes.string, label: PropTypes.string, + needsProxy: PropTypes.bool, }); ResourcePropTypes.videoResource = PropTypes.shape({ diff --git a/packages/story-editor/src/components/audioPlayer/index.js b/packages/story-editor/src/components/audioPlayer/index.js index cddb2c57f42f..0b607b507b49 100644 --- a/packages/story-editor/src/components/audioPlayer/index.js +++ b/packages/story-editor/src/components/audioPlayer/index.js @@ -42,6 +42,7 @@ import { ResourcePropTypes } from '@googleforcreators/media'; */ import { Z_INDEX_STORY_DETAILS } from '../../constants/zIndex'; import Tooltip from '../tooltip'; +import useCORSProxy from '../../utils/useCORSProxy'; const StyledButton = styled(Button)` ${({ theme }) => @@ -82,6 +83,8 @@ function AudioPlayer({ title, src, mimeType, tracks = [], audioId, loop }) { const playerRef = useRef(); + const { getProxiedUrl } = useCORSProxy(); + const handlePlayPause = useCallback(() => { const player = playerRef.current; @@ -124,24 +127,34 @@ function AudioPlayer({ title, src, mimeType, tracks = [], audioId, loop }) { ? __('Pause', 'web-stories') : __('Play', 'web-stories'); + const tracksFormatted = tracks.map((track) => { + const trackSrc = getProxiedUrl(track, track?.track); + return { + ...track, + track: trackSrc, + }; + }); + return ( {/* eslint-disable-next-line jsx-a11y/media-has-caption, styled-components-a11y/media-has-caption -- No captions wanted/needed here. */}
{title}
({ diff --git a/packages/story-editor/src/components/library/panes/media/local/hotlink/utils.js b/packages/story-editor/src/components/library/panes/media/local/hotlink/utils.js index 11a4c7eef457..debb87747329 100644 --- a/packages/story-editor/src/components/library/panes/media/local/hotlink/utils.js +++ b/packages/story-editor/src/components/library/panes/media/local/hotlink/utils.js @@ -14,6 +14,11 @@ * limitations under the License. */ +/** + * External dependencies + */ +import { __, sprintf } from '@googleforcreators/i18n'; + /** * Determine whether a URL is valid and acceptable for hotlinking. * @@ -30,3 +35,22 @@ export function isValidUrlForHotlinking(url) { return false; } } + +export function getErrorMessage(code, description) { + switch (code) { + case 'rest_invalid_param': + case 'rest_invalid_url': + return __('Invalid link.', 'web-stories'); + case 'rest_invalid_ext': + return sprintf( + /* translators: %s is the description with allowed file extensions. */ + __('Invalid link. %s', 'web-stories'), + description + ); + default: + return __( + 'Media failed to load. Please ensure the link is valid and the site allows linking from external sites.', + 'web-stories' + ); + } +} diff --git a/packages/story-editor/src/components/panels/design/captions/captions.js b/packages/story-editor/src/components/panels/design/captions/captions.js index 1215debc6cd2..3d51f8c779f4 100644 --- a/packages/story-editor/src/components/panels/design/captions/captions.js +++ b/packages/story-editor/src/components/panels/design/captions/captions.js @@ -33,6 +33,7 @@ import { /** * Internal dependencies */ +import { useFeature } from 'flagged'; import { usePresubmitHandler } from '../../../form'; import { SimplePanel } from '../../panel'; import { getCommonValue } from '../../shared'; @@ -62,6 +63,7 @@ export const MIN_MAX = { function CaptionsPanel({ selectedElements, pushUpdate }) { const tracks = getCommonValue(selectedElements, 'tracks', []); const isIndeterminate = tracks === MULTIPLE_VALUE; + const enableCaptionHotlinking = useFeature('captionHotlinking'); const { capabilities: { hasUploadMediaAction }, @@ -93,7 +95,7 @@ function CaptionsPanel({ selectedElements, pushUpdate }) { ); const handleChangeTrack = useCallback( - ({ src = '', id }) => { + ({ src = '', id, needsProxy = false }) => { const newTracks = { track: src, trackId: id, @@ -102,6 +104,7 @@ function CaptionsPanel({ selectedElements, pushUpdate }) { kind: 'captions', srclang: '', label: '', + needsProxy, }; pushUpdate({ tracks: [...tracks, newTracks] }, true); @@ -136,7 +139,7 @@ function CaptionsPanel({ selectedElements, pushUpdate }) { [resetHighlight, highlight?.focus, highlight?.showEffect] ); - if (!hasUploadMediaAction && !tracks.length) { + if (!hasUploadMediaAction && !enableCaptionHotlinking && !tracks.length) { return null; } diff --git a/packages/story-editor/src/components/panels/shared/backgroundAudioPanelContent.js b/packages/story-editor/src/components/panels/shared/backgroundAudioPanelContent.js index 7043da57b896..fdd085c69248 100644 --- a/packages/story-editor/src/components/panels/shared/backgroundAudioPanelContent.js +++ b/packages/story-editor/src/components/panels/shared/backgroundAudioPanelContent.js @@ -139,7 +139,7 @@ function BackgroundAudioPanelContent({ ); const handleChangeTrack = useCallback( - ({ src = '', id }) => { + ({ src = '', id, needsProxy = false }) => { const newTracks = { track: src, trackId: id, @@ -148,6 +148,7 @@ function BackgroundAudioPanelContent({ kind: 'captions', srclang: '', label: '', + needsProxy, }; updateTracks([...tracks, newTracks]); }, diff --git a/packages/story-editor/src/components/panels/shared/captionsPanelContent.js b/packages/story-editor/src/components/panels/shared/captionsPanelContent.js index 526df9be1049..c21934b49de9 100644 --- a/packages/story-editor/src/components/panels/shared/captionsPanelContent.js +++ b/packages/story-editor/src/components/panels/shared/captionsPanelContent.js @@ -29,7 +29,12 @@ import { themeHelpers, } from '@googleforcreators/design-system'; import { __ } from '@googleforcreators/i18n'; -import { ResourcePropTypes } from '@googleforcreators/media'; +import { useState, useMemo } from '@googleforcreators/react'; +import { + getExtensionsFromMimeType, + ResourcePropTypes, +} from '@googleforcreators/media'; +import { useFeature } from 'flagged'; /** * Internal dependencies @@ -39,6 +44,7 @@ import Tooltip from '../../tooltip'; import { useConfig } from '../../../app/config'; import { MULTIPLE_DISPLAY_VALUE } from '../../../constants'; import { focusStyle } from './styles'; +import HotlinkModal from './hotlinkModal'; const InputRow = styled.div` display: flex; @@ -46,6 +52,10 @@ const InputRow = styled.div` margin-right: 8px; `; +const ButtonRow = styled(Row)` + gap: 12px; +`; + const StyledFileInput = styled(Input)( ({ $isIndeterminate, theme }) => css` ${focusStyle}; @@ -66,6 +76,10 @@ const StyledButton = styled(Button)` )}; `; +const HotlinkButton = styled(Button)` + padding: 12px 8px; +`; + function CaptionsPanelContent({ isIndeterminate = false, tracks = [], @@ -80,14 +94,27 @@ function CaptionsPanelContent({ capabilities: { hasUploadMediaAction }, MediaUpload, } = useConfig(); + const [isOpen, setIsOpen] = useState(false); + + const enableCaptionHotlinking = useFeature('captionHotlinking'); - if ( - (!hasUploadMediaAction && !tracks?.length) || - !allowedCaptionMimeTypes?.length - ) { + const allowedFileTypes = useMemo( + () => + allowedCaptionMimeTypes + .map((type) => getExtensionsFromMimeType(type)) + .flat(), + [allowedCaptionMimeTypes] + ); + + if (!allowedCaptionMimeTypes?.length) { return null; } + const onSelect = (track) => { + handleChangeTrack(track); + setIsOpen(false); + }; + return ( <> {isIndeterminate && ( @@ -125,19 +152,40 @@ function CaptionsPanelContent({ ))} {!tracks.length && !isIndeterminate && ( - - - + + {hasUploadMediaAction && ( + + )} + {enableCaptionHotlinking && ( + <> + setIsOpen(true)} + > + {__('Link to file', 'web-stories')} + + setIsOpen(false)} + allowedFileTypes={allowedFileTypes} + /> + + )} + )} ); diff --git a/packages/story-editor/src/components/panels/shared/hotlinkModal.js b/packages/story-editor/src/components/panels/shared/hotlinkModal.js new file mode 100644 index 000000000000..a24b0315733f --- /dev/null +++ b/packages/story-editor/src/components/panels/shared/hotlinkModal.js @@ -0,0 +1,205 @@ +/* + * Copyright 2022 Google LLC + * + * 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 + * + * https://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. + */ + +/** + * External dependencies + */ +import { __, sprintf, translateToExclusiveList } from '@googleforcreators/i18n'; +import { Input } from '@googleforcreators/design-system'; +import PropTypes from 'prop-types'; +import styled from 'styled-components'; +import { + useCallback, + useRef, + useState, + useLayoutEffect, +} from '@googleforcreators/react'; +import { trackError, trackEvent } from '@googleforcreators/tracking'; +import { withProtocol } from '@googleforcreators/url'; +/** + * Internal dependencies + */ +import Dialog from '../../dialog'; +import { + isValidUrlForHotlinking, + getErrorMessage, +} from '../../library/panes/media/local/hotlink/utils'; +import { useAPI } from '../../../app/api'; +import useCORSProxy from '../../../utils/useCORSProxy'; + +const InputWrapper = styled.form` + margin: 16px 4px; + width: 470px; + height: 100px; +`; + +function HotlinkModal({ + isOpen, + onClose, + onSelect, + allowedFileTypes = [], + title, +}) { + const [isInserting, setIsInserting] = useState(false); + const [link, setLink] = useState(''); + const [errorMsg, setErrorMsg] = useState(false); + const inputRef = useRef(null); + + const { + actions: { getHotlinkInfo }, + } = useAPI(); + + const { checkResourceAccess } = useCORSProxy(); + + const isDisabled = errorMsg || !link || isInserting; + const primaryText = isInserting + ? __('Inserting…', 'web-stories') + : __('Insert', 'web-stories'); + + let description = __('No file types are currently supported.', 'web-stories'); + if (allowedFileTypes.length) { + description = sprintf( + /* translators: %s is a list of allowed file extensions. */ + __('You can insert %s.', 'web-stories'), + translateToExclusiveList(allowedFileTypes) + ); + } + + useLayoutEffect(() => { + // Wait one tick to ensure the input has been loaded. + const timeout = setTimeout(() => { + if (isOpen && inputRef.current) { + inputRef.current.focus(); + } + }); + return () => clearTimeout(timeout); + }, [isOpen, inputRef]); + + const onBlur = useCallback(() => { + if (link?.length > 0) { + const newLink = withProtocol(link); + setLink(newLink); + if (!isValidUrlForHotlinking(newLink)) { + setErrorMsg(__('Invalid link.', 'web-stories')); + } + } + }, [link]); + + const onChange = useCallback( + (value) => { + // Always set the error to null when changing. + if (errorMsg) { + setErrorMsg(null); + } + setLink(value); + }, + [setLink, errorMsg] + ); + + const onInsert = useCallback(async () => { + if (!link) { + return; + } + + if (!isValidUrlForHotlinking(link)) { + setErrorMsg(__('Invalid link.', 'web-stories')); + return; + } + + setIsInserting(true); + + try { + const hotlinkInfo = await getHotlinkInfo(link); + const shouldProxy = await checkResourceAccess(link); + + // After getting link metadata and before actual insertion + // is a great opportunity to measure usage in a reasonably accurate way. + trackEvent('hotlink_file', { + event_label: link, + file_size: hotlinkInfo.fileSize, + file_type: hotlinkInfo.mimeType, + needs_proxy: shouldProxy, + }); + + onSelect({ src: link, needsProxy: shouldProxy }); + } catch (err) { + trackError('hotlink_file', err?.message); + + setErrorMsg(getErrorMessage(err.code, description)); + } finally { + setIsInserting(false); + } + }, [ + description, + onSelect, + link, + getHotlinkInfo, + setErrorMsg, + checkResourceAccess, + ]); + + const onSubmit = useCallback( + (evt) => { + evt.preventDefault(); + + if (!isDisabled) { + onInsert(); + } + }, + [isDisabled, onInsert] + ); + + return ( + { + onClose(); + setLink(''); + setErrorMsg(false); + setIsInserting(false); + }} + isOpen={isOpen} + title={title} + onPrimary={() => onInsert()} + primaryText={primaryText} + secondaryText={__('Cancel', 'web-stories')} + primaryRest={{ disabled: isDisabled }} + > + + onChange(value)} + value={link} + hint={errorMsg?.length ? errorMsg : description} + hasError={Boolean(errorMsg?.length)} + onBlur={onBlur} + label={__('URL', 'web-stories')} + type="url" + required + /> + + + ); +} + +HotlinkModal.propTypes = { + onClose: PropTypes.func.isRequired, + isOpen: PropTypes.bool.isRequired, + onSelect: PropTypes.func.isRequired, + allowedFileTypes: PropTypes.array, + title: PropTypes.string, +}; + +export default HotlinkModal; diff --git a/tests/phpunit/integration/tests/REST_API/Hotlinking_Controller.php b/tests/phpunit/integration/tests/REST_API/Hotlinking_Controller.php index 5336b3da83c4..a75708cd87b4 100644 --- a/tests/phpunit/integration/tests/REST_API/Hotlinking_Controller.php +++ b/tests/phpunit/integration/tests/REST_API/Hotlinking_Controller.php @@ -380,4 +380,23 @@ public function test_parse_url_svg(): void { $this->assertErrorResponse( 'rest_invalid_ext', $response, 400 ); } + /** + * @covers ::get_allowed_mime_types + */ + public function test_get_allowed_mime_types(): void { + $story_post_type = $this->injector->make( \Google\Web_Stories\Story_Post_Type::class ); + $types = $this->injector->make( \Google\Web_Stories\Media\Types::class ); + $experiments = $this->createMock( \Google\Web_Stories\Experiments::class ); + $experiments->method( 'is_experiment_enabled' ) + ->willReturn( true ); + $controller = new \Google\Web_Stories\REST_API\Hotlinking_Controller( $story_post_type, $types, $experiments ); + $mime_types = $this->call_private_method( $controller, 'get_allowed_mime_types' ); + $this->assertArrayHasKey( 'audio', $mime_types ); + $this->assertArrayHasKey( 'video', $mime_types ); + $this->assertArrayHasKey( 'caption', $mime_types ); + $this->assertArrayHasKey( 'video', $mime_types ); + $this->assertSame( 'text/vtt', $mime_types['caption'][0] ); + + } + } From 26291c8c18c2156c18241372dc70744fc6ba1bc9 Mon Sep 17 00:00:00 2001 From: Jonny Harris Date: Tue, 5 Apr 2022 13:14:59 +0100 Subject: [PATCH 11/15] Media Hotlinking: Improve parsing of `Content-Type` header (#11146) Co-authored-by: Pascal Birchler --- includes/REST_API/Hotlinking_Controller.php | 11 +++- .../tests/REST_API/Hotlinking_Controller.php | 51 +++++++++++++++---- 2 files changed, 51 insertions(+), 11 deletions(-) diff --git a/includes/REST_API/Hotlinking_Controller.php b/includes/REST_API/Hotlinking_Controller.php index 85edf6dc4f7d..f61245d7821f 100644 --- a/includes/REST_API/Hotlinking_Controller.php +++ b/includes/REST_API/Hotlinking_Controller.php @@ -37,9 +37,11 @@ use WP_REST_Server; /** - * API endpoint to allow pinging url media assets. + * Hotlinking_Controller class. * - * Class Hotlinking_Controller + * API endpoint for pinging and hotlinking media URLs. + * + * @SuppressWarnings(PHPMD.ExcessiveClassComplexity) */ class Hotlinking_Controller extends REST_Controller implements HasRequirements { public const PROXY_HEADERS_ALLOWLIST = [ @@ -162,6 +164,7 @@ public function register_routes(): void { * Parses a URL to return some metadata for inserting external media. * * @SuppressWarnings(PHPMD.NPathComplexity) + * @SuppressWarnings(PHPMD.ExcessiveMethodLength) * * @since 1.11.0 * @@ -220,6 +223,10 @@ public function parse_url( $request ) { $headers = wp_remote_retrieve_headers( $response ); $mime_type = $headers['content-type']; + if ( $mime_type && false !== strpos( $mime_type, ';' ) ) { + $pieces = explode( ';', $mime_type ); + $mime_type = array_shift( $pieces ); + } $file_size = (int) $headers['content-length']; /** diff --git a/tests/phpunit/integration/tests/REST_API/Hotlinking_Controller.php b/tests/phpunit/integration/tests/REST_API/Hotlinking_Controller.php index a75708cd87b4..007dc992c356 100644 --- a/tests/phpunit/integration/tests/REST_API/Hotlinking_Controller.php +++ b/tests/phpunit/integration/tests/REST_API/Hotlinking_Controller.php @@ -31,13 +31,14 @@ class Hotlinking_Controller extends DependencyInjectedRestTestCase { protected static $subscriber; protected static $editor; - public const URL_INVALID = 'https://https://invalid.commmm'; - public const URL_404 = 'https://example.com/404/test.jpg'; - public const URL_500 = 'https://example.com/500/test.jpg'; - public const URL_SVG = 'https://example.com/test.svg'; - public const URL_VALID = 'http://example.com/test.jpg'; - public const URL_DOMAIN = 'http://google.com'; - public const URL_PATH = '/test.jpg'; + public const URL_INVALID = 'https://https://invalid.commmm'; + public const URL_404 = 'https://example.com/404/test.jpg'; + public const URL_500 = 'https://example.com/500/test.jpg'; + public const URL_SVG = 'https://example.com/test.svg'; + public const URL_VALID = 'http://example.com/test.jpg'; + public const URL_DOMAIN = 'http://google.com'; + public const URL_WITH_CHARSET = 'https://example.com/test.png'; + public const URL_PATH = '/test.jpg'; public const REST_URL = '/web-stories/v1/hotlink/validate'; @@ -119,6 +120,16 @@ public function mock_http_request( $preempt, $r, $url ) { ]; } + if ( self::URL_WITH_CHARSET === $url ) { + return [ + 'headers' => [ + 'content-type' => 'image/png; charset=utf-8', + 'content-length' => 1000, + ], + 'response' => [ 'code' => 200 ], + ]; + } + if ( self::URL_404 === $url ) { return [ 'headers' => [ @@ -380,6 +391,30 @@ public function test_parse_url_svg(): void { $this->assertErrorResponse( 'rest_invalid_ext', $response, 400 ); } + /** + * @covers ::parse_url + * @covers ::parse_url_permissions_check + */ + public function test_parse_url_with_charset_in_content_type_header(): void { + $this->controller->register(); + + wp_set_current_user( self::$editor ); + $request = new WP_REST_Request( WP_REST_Server::READABLE, self::REST_URL ); + $request->set_param( 'url', self::URL_WITH_CHARSET ); + $response = rest_get_server()->dispatch( $request ); + $data = $response->get_data(); + $this->assertEqualSets( + [ + 'ext' => 'png', + 'file_name' => 'test.png', + 'file_size' => 1000, + 'mime_type' => 'image/png', + 'type' => 'image', + ], + $data + ); + } + /** * @covers ::get_allowed_mime_types */ @@ -396,7 +431,5 @@ public function test_get_allowed_mime_types(): void { $this->assertArrayHasKey( 'caption', $mime_types ); $this->assertArrayHasKey( 'video', $mime_types ); $this->assertSame( 'text/vtt', $mime_types['caption'][0] ); - } - } From 4ca4774bac8afdc616ddefbca253aaeb0ff4a927 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 5 Apr 2022 15:02:17 +0200 Subject: [PATCH 12/15] Bump @ampproject/toolbox-optimizer from 2.8.7 to 2.8.10 (#11182) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 18 +++++++++--------- package.json | 2 +- packages/jest-amp/package.json | 2 +- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/package-lock.json b/package-lock.json index fed0edfa51cc..b8eb8e0bcb60 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,7 +8,7 @@ "hasInstallScript": true, "license": "Apache-2.0", "devDependencies": { - "@ampproject/toolbox-optimizer": "^2.8.7", + "@ampproject/toolbox-optimizer": "^2.8.10", "@babel/core": "^7.17.5", "@babel/eslint-parser": "^7.17.0", "@babel/eslint-plugin": "^7.17.7", @@ -183,9 +183,9 @@ } }, "node_modules/@ampproject/toolbox-optimizer": { - "version": "2.8.7", - "resolved": "https://registry.npmjs.org/@ampproject/toolbox-optimizer/-/toolbox-optimizer-2.8.7.tgz", - "integrity": "sha512-t8C2sQHgzuGB+ixot1fBw5mXVDUKzDTSHFu5eC4vGJbY/bKNrJ058QuV72o6/4pSq8/T/o0EoYWQQqHlC1Ylvg==", + "version": "2.8.10", + "resolved": "https://registry.npmjs.org/@ampproject/toolbox-optimizer/-/toolbox-optimizer-2.8.10.tgz", + "integrity": "sha512-GuXkLHmGJ3pko6aozHa3msxxahiUJM163eG8LEji/MTfNGf0QJCWSQ46a+yHG3tBzYtLexVHWU7A8QMfRbxWGw==", "dependencies": { "@ampproject/toolbox-core": "2.8.0", "@ampproject/toolbox-runtime-version": "2.8.0", @@ -45245,7 +45245,7 @@ "name": "@web-stories-wp/jest-amp", "license": "Apache-2.0", "dependencies": { - "@ampproject/toolbox-optimizer": "^2.8.7", + "@ampproject/toolbox-optimizer": "^2.8.10", "@googleforcreators/react": "*", "amphtml-validator": "1.0.35", "prop-types": "^15.8.1" @@ -45896,9 +45896,9 @@ } }, "@ampproject/toolbox-optimizer": { - "version": "2.8.7", - "resolved": "https://registry.npmjs.org/@ampproject/toolbox-optimizer/-/toolbox-optimizer-2.8.7.tgz", - "integrity": "sha512-t8C2sQHgzuGB+ixot1fBw5mXVDUKzDTSHFu5eC4vGJbY/bKNrJ058QuV72o6/4pSq8/T/o0EoYWQQqHlC1Ylvg==", + "version": "2.8.10", + "resolved": "https://registry.npmjs.org/@ampproject/toolbox-optimizer/-/toolbox-optimizer-2.8.10.tgz", + "integrity": "sha512-GuXkLHmGJ3pko6aozHa3msxxahiUJM163eG8LEji/MTfNGf0QJCWSQ46a+yHG3tBzYtLexVHWU7A8QMfRbxWGw==", "requires": { "@ampproject/toolbox-core": "2.8.0", "@ampproject/toolbox-runtime-version": "2.8.0", @@ -56949,7 +56949,7 @@ "@web-stories-wp/jest-amp": { "version": "file:packages/jest-amp", "requires": { - "@ampproject/toolbox-optimizer": "^2.8.7", + "@ampproject/toolbox-optimizer": "^2.8.10", "@googleforcreators/react": "*", "amphtml-validator": "1.0.35", "prop-types": "^15.8.1" diff --git a/package.json b/package.json index b4de9ef91cbd..ba93819a5d8c 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ ] }, "devDependencies": { - "@ampproject/toolbox-optimizer": "^2.8.7", + "@ampproject/toolbox-optimizer": "^2.8.10", "@babel/core": "^7.17.5", "@babel/eslint-parser": "^7.17.0", "@babel/eslint-plugin": "^7.17.7", diff --git a/packages/jest-amp/package.json b/packages/jest-amp/package.json index d9d57df85e57..4da934af10fb 100644 --- a/packages/jest-amp/package.json +++ b/packages/jest-amp/package.json @@ -26,7 +26,7 @@ }, "main": "./src/index.js", "dependencies": { - "@ampproject/toolbox-optimizer": "^2.8.7", + "@ampproject/toolbox-optimizer": "^2.8.10", "@googleforcreators/react": "*", "amphtml-validator": "1.0.35", "prop-types": "^15.8.1" From b54b6ecc190865f2cb0057b7129fc1c42172d5a7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 5 Apr 2022 15:02:35 +0200 Subject: [PATCH 13/15] Bump @testing-library/jest-dom from 5.16.2 to 5.16.3 (#11177) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 18 +++++++++--------- package.json | 2 +- packages/story-editor/package.json | 2 +- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/package-lock.json b/package-lock.json index b8eb8e0bcb60..9fd8fb90396f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -48,7 +48,7 @@ "@svgr/rollup": "^6.2.0", "@svgr/webpack": "^6.2.0", "@testing-library/dom": "^8.11.3", - "@testing-library/jest-dom": "^5.16.2", + "@testing-library/jest-dom": "^5.16.3", "@testing-library/react": "^12.1.4", "@testing-library/react-hooks": "^7.0.2", "@testing-library/user-event": "^13.5.0", @@ -13213,9 +13213,9 @@ } }, "node_modules/@testing-library/jest-dom": { - "version": "5.16.2", - "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.16.2.tgz", - "integrity": "sha512-6ewxs1MXWwsBFZXIk4nKKskWANelkdUehchEOokHsN8X7c2eKXGw+77aRV63UU8f/DTSVUPLaGxdrj4lN7D/ug==", + "version": "5.16.3", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.16.3.tgz", + "integrity": "sha512-u5DfKj4wfSt6akfndfu1eG06jsdyA/IUrlX2n3pyq5UXgXMhXY+NJb8eNK/7pqPWAhCKsCGWDdDO0zKMKAYkEA==", "dev": true, "dependencies": { "@babel/runtime": "^7.9.2", @@ -45650,7 +45650,7 @@ "@googleforcreators/test-utils": "*", "@storybook/addon-essentials": "^6.4.13", "@testing-library/dom": "^8.11.3", - "@testing-library/jest-dom": "^5.16.2", + "@testing-library/jest-dom": "^5.16.3", "@testing-library/react": "^12.1.4", "@testing-library/react-hooks": "^7.0.2", "@testing-library/user-event": "^13.5.0", @@ -48057,7 +48057,7 @@ "@googleforcreators/url": "*", "@storybook/addon-essentials": "^6.4.13", "@testing-library/dom": "^8.11.3", - "@testing-library/jest-dom": "^5.16.2", + "@testing-library/jest-dom": "^5.16.3", "@testing-library/react": "^12.1.4", "@testing-library/react-hooks": "^7.0.2", "@testing-library/user-event": "^13.5.0", @@ -55972,9 +55972,9 @@ } }, "@testing-library/jest-dom": { - "version": "5.16.2", - "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.16.2.tgz", - "integrity": "sha512-6ewxs1MXWwsBFZXIk4nKKskWANelkdUehchEOokHsN8X7c2eKXGw+77aRV63UU8f/DTSVUPLaGxdrj4lN7D/ug==", + "version": "5.16.3", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.16.3.tgz", + "integrity": "sha512-u5DfKj4wfSt6akfndfu1eG06jsdyA/IUrlX2n3pyq5UXgXMhXY+NJb8eNK/7pqPWAhCKsCGWDdDO0zKMKAYkEA==", "dev": true, "requires": { "@babel/runtime": "^7.9.2", diff --git a/package.json b/package.json index ba93819a5d8c..a6993ffdce69 100644 --- a/package.json +++ b/package.json @@ -72,7 +72,7 @@ "@svgr/rollup": "^6.2.0", "@svgr/webpack": "^6.2.0", "@testing-library/dom": "^8.11.3", - "@testing-library/jest-dom": "^5.16.2", + "@testing-library/jest-dom": "^5.16.3", "@testing-library/react": "^12.1.4", "@testing-library/react-hooks": "^7.0.2", "@testing-library/user-event": "^13.5.0", diff --git a/packages/story-editor/package.json b/packages/story-editor/package.json index 7fcdbed202ac..09729c8e4d58 100644 --- a/packages/story-editor/package.json +++ b/packages/story-editor/package.json @@ -92,7 +92,7 @@ "@googleforcreators/test-utils": "*", "@storybook/addon-essentials": "^6.4.13", "@testing-library/dom": "^8.11.3", - "@testing-library/jest-dom": "^5.16.2", + "@testing-library/jest-dom": "^5.16.3", "@testing-library/react": "^12.1.4", "@testing-library/react-hooks": "^7.0.2", "@testing-library/user-event": "^13.5.0", From 14c81ce300922c3ed5a1d8b3ddfcd43fb6826ac8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 5 Apr 2022 15:29:32 +0200 Subject: [PATCH 14/15] Bump szepeviktor/phpstan-wordpress from 1.0.3 to 1.0.5 (#11188) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Pascal Birchler --- composer.lock | 50 +++++++++++----------- includes/AMP/Traits/Sanitization_Utils.php | 2 +- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/composer.lock b/composer.lock index 7151cbf54dcb..fb4620d37156 100644 --- a/composer.lock +++ b/composer.lock @@ -2151,16 +2151,16 @@ }, { "name": "phpstan/phpstan", - "version": "1.5.0", + "version": "1.5.4", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "2be8dd6dfa09ab1a21c49956ff591979cd5ab29e" + "reference": "bbf68cae24f6dc023c607ea0f87da55dd9d55c2b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/2be8dd6dfa09ab1a21c49956ff591979cd5ab29e", - "reference": "2be8dd6dfa09ab1a21c49956ff591979cd5ab29e", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/bbf68cae24f6dc023c607ea0f87da55dd9d55c2b", + "reference": "bbf68cae24f6dc023c607ea0f87da55dd9d55c2b", "shasum": "" }, "require": { @@ -2186,7 +2186,7 @@ "description": "PHPStan - PHP Static Analysis Tool", "support": { "issues": "https://github.com/phpstan/phpstan/issues", - "source": "https://github.com/phpstan/phpstan/tree/1.5.0" + "source": "https://github.com/phpstan/phpstan/tree/1.5.4" }, "funding": [ { @@ -2206,7 +2206,7 @@ "type": "tidelift" } ], - "time": "2022-03-24T18:18:00+00:00" + "time": "2022-04-03T12:39:00+00:00" }, { "name": "phpunit/php-code-coverage", @@ -4281,16 +4281,16 @@ }, { "name": "symfony/deprecation-contracts", - "version": "v2.5.0", + "version": "v2.5.1", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "6f981ee24cf69ee7ce9736146d1c57c2780598a8" + "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/6f981ee24cf69ee7ce9736146d1c57c2780598a8", - "reference": "6f981ee24cf69ee7ce9736146d1c57c2780598a8", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e8b495ea28c1d97b5e0c121748d6f9b53d075c66", + "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66", "shasum": "" }, "require": { @@ -4328,7 +4328,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.0" + "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.1" }, "funding": [ { @@ -4344,7 +4344,7 @@ "type": "tidelift" } ], - "time": "2021-07-12T14:48:14+00:00" + "time": "2022-01-02T09:53:40+00:00" }, { "name": "symfony/filesystem", @@ -4735,22 +4735,22 @@ }, { "name": "symfony/service-contracts", - "version": "v2.5.0", + "version": "v2.5.1", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc" + "reference": "24d9dc654b83e91aa59f9d167b131bc3b5bea24c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc", - "reference": "1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/24d9dc654b83e91aa59f9d167b131bc3b5bea24c", + "reference": "24d9dc654b83e91aa59f9d167b131bc3b5bea24c", "shasum": "" }, "require": { "php": ">=7.2.5", "psr/container": "^1.1", - "symfony/deprecation-contracts": "^2.1" + "symfony/deprecation-contracts": "^2.1|^3" }, "conflict": { "ext-psr": "<1.1|>=2" @@ -4798,7 +4798,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v2.5.0" + "source": "https://github.com/symfony/service-contracts/tree/v2.5.1" }, "funding": [ { @@ -4814,20 +4814,20 @@ "type": "tidelift" } ], - "time": "2021-11-04T16:48:04+00:00" + "time": "2022-03-13T20:07:29+00:00" }, { "name": "szepeviktor/phpstan-wordpress", - "version": "v1.0.3", + "version": "v1.0.5", "source": { "type": "git", "url": "https://github.com/szepeviktor/phpstan-wordpress.git", - "reference": "265d06b4673572fa379567d2b99df7794c0ab27a" + "reference": "d4dbd21fc057702be14d221e9ecb6e5697e39fed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/szepeviktor/phpstan-wordpress/zipball/265d06b4673572fa379567d2b99df7794c0ab27a", - "reference": "265d06b4673572fa379567d2b99df7794c0ab27a", + "url": "https://api.github.com/repos/szepeviktor/phpstan-wordpress/zipball/d4dbd21fc057702be14d221e9ecb6e5697e39fed", + "reference": "d4dbd21fc057702be14d221e9ecb6e5697e39fed", "shasum": "" }, "require": { @@ -4871,7 +4871,7 @@ ], "support": { "issues": "https://github.com/szepeviktor/phpstan-wordpress/issues", - "source": "https://github.com/szepeviktor/phpstan-wordpress/tree/v1.0.3" + "source": "https://github.com/szepeviktor/phpstan-wordpress/tree/v1.0.5" }, "funding": [ { @@ -4879,7 +4879,7 @@ "type": "custom" } ], - "time": "2022-03-05T07:34:50+00:00" + "time": "2022-04-05T03:13:59+00:00" }, { "name": "theseer/tokenizer", diff --git a/includes/AMP/Traits/Sanitization_Utils.php b/includes/AMP/Traits/Sanitization_Utils.php index 6e45c4f34909..c48322a62e83 100644 --- a/includes/AMP/Traits/Sanitization_Utils.php +++ b/includes/AMP/Traits/Sanitization_Utils.php @@ -245,7 +245,7 @@ private function change_tag_name( DOMElement $node, string $tag_name ): void { * * @var DOMAttr $attr Attribute. */ - $new_node->setAttribute( $attr->nodeName, $attr->nodeValue ); + $new_node->setAttribute( $attr->nodeName, $attr->nodeValue ?? '' ); } } From c8d961cdd47ff231f2f3240487ea9dc84a4e7762 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 5 Apr 2022 15:30:19 +0200 Subject: [PATCH 15/15] Bump @testing-library/dom from 8.11.3 to 8.13.0 (#11189) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 18 +++++++++--------- package.json | 2 +- packages/story-editor/package.json | 2 +- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9fd8fb90396f..cfb2b467be89 100644 --- a/package-lock.json +++ b/package-lock.json @@ -47,7 +47,7 @@ "@stylelint/postcss-css-in-js": "^0.37.2", "@svgr/rollup": "^6.2.0", "@svgr/webpack": "^6.2.0", - "@testing-library/dom": "^8.11.3", + "@testing-library/dom": "^8.13.0", "@testing-library/jest-dom": "^5.16.3", "@testing-library/react": "^12.1.4", "@testing-library/react-hooks": "^7.0.2", @@ -13063,9 +13063,9 @@ "integrity": "sha512-T0ORaQrH6kNFGzTg285RVPK+NCYZxOoA+r0QfKgHqK+yk5RuYPSKDa18XCLtycCNq+VWKpfyDpzGUGhYgCV+kw==" }, "node_modules/@testing-library/dom": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.11.3.tgz", - "integrity": "sha512-9LId28I+lx70wUiZjLvi1DB/WT2zGOxUh46glrSNMaWVx849kKAluezVzZrXJfTKKoQTmEOutLes/bHg4Bj3aA==", + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.13.0.tgz", + "integrity": "sha512-9VHgfIatKNXQNaZTtLnalIy0jNZzY35a4S3oi08YAt9Hv1VsfZ/DfA45lM8D/UhtHBGJ4/lGwp0PZkVndRkoOQ==", "dev": true, "dependencies": { "@babel/code-frame": "^7.10.4", @@ -45649,7 +45649,7 @@ "@googleforcreators/karma-fixture": "*", "@googleforcreators/test-utils": "*", "@storybook/addon-essentials": "^6.4.13", - "@testing-library/dom": "^8.11.3", + "@testing-library/dom": "^8.13.0", "@testing-library/jest-dom": "^5.16.3", "@testing-library/react": "^12.1.4", "@testing-library/react-hooks": "^7.0.2", @@ -48056,7 +48056,7 @@ "@googleforcreators/units": "*", "@googleforcreators/url": "*", "@storybook/addon-essentials": "^6.4.13", - "@testing-library/dom": "^8.11.3", + "@testing-library/dom": "^8.13.0", "@testing-library/jest-dom": "^5.16.3", "@testing-library/react": "^12.1.4", "@testing-library/react-hooks": "^7.0.2", @@ -55857,9 +55857,9 @@ "integrity": "sha512-T0ORaQrH6kNFGzTg285RVPK+NCYZxOoA+r0QfKgHqK+yk5RuYPSKDa18XCLtycCNq+VWKpfyDpzGUGhYgCV+kw==" }, "@testing-library/dom": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.11.3.tgz", - "integrity": "sha512-9LId28I+lx70wUiZjLvi1DB/WT2zGOxUh46glrSNMaWVx849kKAluezVzZrXJfTKKoQTmEOutLes/bHg4Bj3aA==", + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.13.0.tgz", + "integrity": "sha512-9VHgfIatKNXQNaZTtLnalIy0jNZzY35a4S3oi08YAt9Hv1VsfZ/DfA45lM8D/UhtHBGJ4/lGwp0PZkVndRkoOQ==", "dev": true, "requires": { "@babel/code-frame": "^7.10.4", diff --git a/package.json b/package.json index a6993ffdce69..8522aeab5bf9 100644 --- a/package.json +++ b/package.json @@ -71,7 +71,7 @@ "@stylelint/postcss-css-in-js": "^0.37.2", "@svgr/rollup": "^6.2.0", "@svgr/webpack": "^6.2.0", - "@testing-library/dom": "^8.11.3", + "@testing-library/dom": "^8.13.0", "@testing-library/jest-dom": "^5.16.3", "@testing-library/react": "^12.1.4", "@testing-library/react-hooks": "^7.0.2", diff --git a/packages/story-editor/package.json b/packages/story-editor/package.json index 09729c8e4d58..3b5ba4288a6d 100644 --- a/packages/story-editor/package.json +++ b/packages/story-editor/package.json @@ -91,7 +91,7 @@ "@googleforcreators/karma-fixture": "*", "@googleforcreators/test-utils": "*", "@storybook/addon-essentials": "^6.4.13", - "@testing-library/dom": "^8.11.3", + "@testing-library/dom": "^8.13.0", "@testing-library/jest-dom": "^5.16.3", "@testing-library/react": "^12.1.4", "@testing-library/react-hooks": "^7.0.2",