diff --git a/CHANGELOG.md b/CHANGELOG.md index be39b9ee..e38983e1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,20 @@ # Changelog +## [0.30.0] + +### Changed + +- Update Bitmovin's native Android SDK version to `3.90.0` +- Update Bitmovin's native iOS SDK version to `3.77.0` + +### Added + +- `WebUiConfig.variant` to set the UI variant that should be used by the Bitmovin Web UI + +### Fixed + +- Spatial navigation in the Web UI does not work properly + ## [0.29.0] - 2024-09-09 ### Added diff --git a/RNBitmovinPlayer.podspec b/RNBitmovinPlayer.podspec index b52ede8e..e95c6c06 100644 --- a/RNBitmovinPlayer.podspec +++ b/RNBitmovinPlayer.podspec @@ -20,7 +20,7 @@ Pod::Spec.new do |s| s.swift_version = "5.10" s.dependency "React-Core" - s.dependency "BitmovinPlayer", "3.71.0" + s.dependency "BitmovinPlayer", "3.77.0" s.ios.dependency "GoogleAds-IMA-iOS-SDK", "3.23.0" s.tvos.dependency "GoogleAds-IMA-tvOS-SDK", "4.13.0" end diff --git a/android/build.gradle b/android/build.gradle index 55fe458f..46980e61 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -105,5 +105,5 @@ dependencies { // Bitmovin implementation 'com.google.ads.interactivemedia.v3:interactivemedia:3.33.0' implementation 'com.google.android.gms:play-services-ads-identifier:18.0.1' - implementation 'com.bitmovin.player:player:3.82.0+jason' + implementation 'com.bitmovin.player:player:3.90.0+jason' } diff --git a/android/src/main/java/com/bitmovin/player/reactnative/converter/JsonConverter.kt b/android/src/main/java/com/bitmovin/player/reactnative/converter/JsonConverter.kt index bb83e8ca..cd6bec77 100644 --- a/android/src/main/java/com/bitmovin/player/reactnative/converter/JsonConverter.kt +++ b/android/src/main/java/com/bitmovin/player/reactnative/converter/JsonConverter.kt @@ -752,18 +752,33 @@ fun ReadableMap.toPictureInPictureConfig(): PictureInPictureConfig = PictureInPi isEnabled = getBooleanOrNull("isEnabled") ?: false, ) -/** - * Converts the [json] to a `RNUiConfig` object. - */ -fun toPlayerViewConfig(json: ReadableMap) = PlayerViewConfig( - uiConfig = UiConfig.WebUi( - playbackSpeedSelectionEnabled = json.getMap("uiConfig") - ?.getBooleanOrNull("playbackSpeedSelectionEnabled") - ?: true, - ), - hideFirstFrame = json.getBooleanOrNull("hideFirstFrame") ?: false, +fun ReadableMap.toPlayerViewConfig(): PlayerViewConfig = PlayerViewConfig( + uiConfig = getMap("uiConfig")?.toUiConfig() ?: UiConfig.WebUi(), + hideFirstFrame = getBooleanOrNull("hideFirstFrame") ?: false, ) +private fun ReadableMap.toUiConfig(): UiConfig { + val variant = toVariant() ?: UiConfig.WebUi.Variant.SmallScreenUi + val focusUiOnInitialization = getBooleanOrNull("focusUiOnInitialization") + val defaultFocusUiOnInitialization = variant == UiConfig.WebUi.Variant.TvUi + + return UiConfig.WebUi( + playbackSpeedSelectionEnabled = getBooleanOrNull("playbackSpeedSelectionEnabled") ?: true, + variant = variant, + focusUiOnInitialization = focusUiOnInitialization ?: defaultFocusUiOnInitialization, + ) +} + +private fun ReadableMap.toVariant(): UiConfig.WebUi.Variant? { + val uiManagerFactoryFunction = getMap("variant")?.getString("uiManagerFactoryFunction") ?: return null + + return when (uiManagerFactoryFunction) { + "bitmovin.playerui.UIFactory.buildDefaultSmallScreenUI" -> UiConfig.WebUi.Variant.SmallScreenUi + "bitmovin.playerui.UIFactory.buildDefaultTvUI" -> UiConfig.WebUi.Variant.TvUi + else -> UiConfig.WebUi.Variant.Custom(uiManagerFactoryFunction) + } +} + private fun ReadableMap.toUserInterfaceTypeFromPlayerConfig(): UserInterfaceType? = when (getMap("styleConfig")?.getString("userInterfaceType")) { "Subtitle" -> UserInterfaceType.Subtitle @@ -775,7 +790,7 @@ private fun ReadableMap.toUserInterfaceTypeFromPlayerConfig(): UserInterfaceType * Converts the [this@toRNPlayerViewConfigWrapper] to a `RNPlayerViewConfig` object. */ fun ReadableMap.toRNPlayerViewConfigWrapper() = RNPlayerViewConfigWrapper( - playerViewConfig = toPlayerViewConfig(this), + playerViewConfig = toPlayerViewConfig(), pictureInPictureConfig = getMap("pictureInPictureConfig")?.toPictureInPictureConfig(), ) diff --git a/example/ios/Podfile.lock b/example/ios/Podfile.lock index 95c0b7ba..07ca8539 100644 --- a/example/ios/Podfile.lock +++ b/example/ios/Podfile.lock @@ -1,12 +1,12 @@ PODS: - - BitmovinAnalyticsCollector/BitmovinPlayer (3.8.0): + - BitmovinAnalyticsCollector/BitmovinPlayer (3.9.0): - BitmovinAnalyticsCollector/Core - BitmovinPlayerCore (~> 3.48) - - BitmovinAnalyticsCollector/Core (3.8.0) - - BitmovinPlayer (3.71.0): + - BitmovinAnalyticsCollector/Core (3.9.0) + - BitmovinPlayer (3.77.0): - BitmovinAnalyticsCollector/BitmovinPlayer (~> 3.0) - - BitmovinPlayerCore (= 3.71.0) - - BitmovinPlayerCore (3.71.0) + - BitmovinPlayerCore (= 3.77.0) + - BitmovinPlayerCore (3.77.0) - boost (1.83.0) - DoubleConversion (1.1.6) - FBLazyVector (0.73.4-0) @@ -1048,8 +1048,8 @@ PODS: - React-jsi (= 0.73.4-0) - React-logger (= 0.73.4-0) - React-perflogger (= 0.73.4-0) - - RNBitmovinPlayer (0.29.0): - - BitmovinPlayer (= 3.71.0) + - RNBitmovinPlayer (0.30.0): + - BitmovinPlayer (= 3.77.0) - GoogleAds-IMA-iOS-SDK (= 3.23.0) - GoogleAds-IMA-tvOS-SDK (= 4.13.0) - React-Core @@ -1123,12 +1123,12 @@ DEPENDENCIES: SPEC REPOS: https://github.com/bitmovin/cocoapod-specs.git: - - BitmovinAnalyticsCollector - - BitmovinPlayer - BitmovinPlayerCore https://github.com/react-native-tvos/react-native-tvos-podspecs.git: - libevent trunk: + - BitmovinAnalyticsCollector + - BitmovinPlayer - google-cast-sdk - GoogleAds-IMA-iOS-SDK - GoogleAds-IMA-tvOS-SDK @@ -1245,9 +1245,9 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native/ReactCommon/yoga" SPEC CHECKSUMS: - BitmovinAnalyticsCollector: 1390e34dd1af4a0b9fe09e290510de648eec4c09 - BitmovinPlayer: fa8d008541dfc63e974187a4f88dafcc8c62e927 - BitmovinPlayerCore: 40e6e74a437e12adbaae10cbd59dc47454edf507 + BitmovinAnalyticsCollector: d08e0b13bcc32973370e0d71f2faa739561bac0a + BitmovinPlayer: 65866e13f7a8246ccbc7378607d6ca789f0f459e + BitmovinPlayerCore: 7151c7836f0e0c906a17c897576d3bd892b51b4a boost: 88202336c3ba1e7a264a83c0c888784b0f360c28 DoubleConversion: 74cb0ce4de271b23e772567504735c87134edf0a FBLazyVector: 33a271a7e8de0bd321e47356d8bc3b2d5fb9ddba @@ -1302,7 +1302,7 @@ SPEC CHECKSUMS: React-runtimescheduler: 20b2202e3396589a71069d12ae9f328949c7c7b8 React-utils: 0307d396f233e47a167b5aaf045b0e4e1dc19d74 ReactCommon: 17891ca337bfa5a7263649b09f27a8c664537bf2 - RNBitmovinPlayer: f7ddd96ad231988fe728edef4d2bd0a8f99a5769 + RNBitmovinPlayer: 5df76edfd71a5887aa20210108bdf9ac7227048b RNCPicker: b18aaf30df596e9b1738e7c1f9ee55402a229dca RNScreens: b582cb834dc4133307562e930e8fa914b8c04ef2 SocketRocket: f32cd54efbe0f095c4d7594881e52619cfe80b17 diff --git a/example/package.json b/example/package.json index 6373c883..2bb68c46 100644 --- a/example/package.json +++ b/example/package.json @@ -9,8 +9,8 @@ "ios": "react-native run-ios", "start": "react-native start", "pods": "yarn pods-install || yarn pods-update", - "pods-install": "NO_FLIPPER=1 yarn pod-install", - "pods-update": "cd ios && NO_FLIPPER=1 pod update --silent" + "pods-install": "[ \"$(uname)\" != Darwin ] || NO_FLIPPER=1 yarn pod-install", + "pods-update": "[ \"$(uname)\" != Darwin ] || cd ios && NO_FLIPPER=1 pod update --silent" }, "dependencies": { "@react-native-picker/picker": "2.6.1", diff --git a/example/src/screens/BasicPlayback.tsx b/example/src/screens/BasicPlayback.tsx index 027bad63..8f47cedf 100644 --- a/example/src/screens/BasicPlayback.tsx +++ b/example/src/screens/BasicPlayback.tsx @@ -6,6 +6,9 @@ import { usePlayer, PlayerView, SourceType, + TvUi, + SmallScreenUi, + PlayerViewConfig, } from 'bitmovin-player-react-native'; import { useTVGestures } from '../hooks'; @@ -22,6 +25,12 @@ export default function BasicPlayback() { }, }); + const config: PlayerViewConfig = { + uiConfig: { + variant: Platform.isTV ? new TvUi() : new SmallScreenUi(), + }, + }; + useFocusEffect( useCallback(() => { player.load({ @@ -56,6 +65,7 @@ export default function BasicPlayback() { 3.48) - - BitmovinAnalyticsCollector/Core (3.8.0) - - BitmovinPlayer (3.71.0): + - BitmovinAnalyticsCollector/Core (3.9.0) + - BitmovinPlayer (3.77.0): - BitmovinAnalyticsCollector/BitmovinPlayer (~> 3.0) - - BitmovinPlayerCore (= 3.71.0) - - BitmovinPlayerCore (3.71.0) + - BitmovinPlayerCore (= 3.77.0) + - BitmovinPlayerCore (3.77.0) - boost (1.83.0) - DoubleConversion (1.1.6) - FBLazyVector (0.73.4-0) @@ -1040,8 +1040,8 @@ PODS: - React-jsi (= 0.73.4-0) - React-logger (= 0.73.4-0) - React-perflogger (= 0.73.4-0) - - RNBitmovinPlayer (0.29.0): - - BitmovinPlayer (= 3.71.0) + - RNBitmovinPlayer (0.30.0): + - BitmovinPlayer (= 3.77.0) - GoogleAds-IMA-iOS-SDK (= 3.23.0) - GoogleAds-IMA-tvOS-SDK (= 4.13.0) - React-Core @@ -1104,12 +1104,12 @@ DEPENDENCIES: SPEC REPOS: https://github.com/bitmovin/cocoapod-specs.git: - - BitmovinAnalyticsCollector - - BitmovinPlayer - BitmovinPlayerCore https://github.com/react-native-tvos/react-native-tvos-podspecs.git: - libevent trunk: + - BitmovinAnalyticsCollector + - BitmovinPlayer - GoogleAds-IMA-iOS-SDK - SocketRocket @@ -1215,9 +1215,9 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native/ReactCommon/yoga" SPEC CHECKSUMS: - BitmovinAnalyticsCollector: 1390e34dd1af4a0b9fe09e290510de648eec4c09 - BitmovinPlayer: fa8d008541dfc63e974187a4f88dafcc8c62e927 - BitmovinPlayerCore: 40e6e74a437e12adbaae10cbd59dc47454edf507 + BitmovinAnalyticsCollector: d08e0b13bcc32973370e0d71f2faa739561bac0a + BitmovinPlayer: 65866e13f7a8246ccbc7378607d6ca789f0f459e + BitmovinPlayerCore: 7151c7836f0e0c906a17c897576d3bd892b51b4a boost: 88202336c3ba1e7a264a83c0c888784b0f360c28 DoubleConversion: 74cb0ce4de271b23e772567504735c87134edf0a FBLazyVector: 33a271a7e8de0bd321e47356d8bc3b2d5fb9ddba @@ -1267,7 +1267,7 @@ SPEC CHECKSUMS: React-runtimescheduler: 20b2202e3396589a71069d12ae9f328949c7c7b8 React-utils: 0307d396f233e47a167b5aaf045b0e4e1dc19d74 ReactCommon: 17891ca337bfa5a7263649b09f27a8c664537bf2 - RNBitmovinPlayer: f7ddd96ad231988fe728edef4d2bd0a8f99a5769 + RNBitmovinPlayer: 5df76edfd71a5887aa20210108bdf9ac7227048b SocketRocket: f32cd54efbe0f095c4d7594881e52619cfe80b17 Yoga: ab50eb8f7fcf1b36aad1801b5687b66b2c0aa000 diff --git a/integration_test/yarn.lock b/integration_test/yarn.lock index b6391b36..b8d1f068 100644 --- a/integration_test/yarn.lock +++ b/integration_test/yarn.lock @@ -2354,6 +2354,11 @@ encodeurl@~1.0.2: resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== +encodeurl@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-2.0.0.tgz#7b8ea898077d7e409d3ac45474ea38eaf0857a58" + integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg== + envinfo@^7.10.0: version "7.13.0" resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.13.0.tgz#81fbb81e5da35d74e814941aeab7c325a606fb31" @@ -2461,9 +2466,9 @@ fast-xml-parser@4.4.1: strnum "^1.0.5" fast-xml-parser@^4.0.12, fast-xml-parser@^4.2.4: - version "4.4.0" - resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.4.0.tgz#341cc98de71e9ba9e651a67f41f1752d1441a501" - integrity sha512-kLY3jFlwIYwBNDojclKsNAC12sfD6NwW74QB2CoNGPvtVxjliYehVunB3HYyNi+n4Tt1dAcgwYvmKF/Z18flqg== + version "4.5.0" + resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.5.0.tgz#2882b7d01a6825dfdf909638f2de0256351def37" + integrity sha512-/PlTQCI96+fZMAOLMZK4CWG1ItCbfZ/0jx7UIJFChPNrx7tcEgerUgWbeieCM9MfHInUDyK8DWYZ+YrywDJuTg== dependencies: strnum "^1.0.5" @@ -3399,9 +3404,9 @@ metro@0.80.9, metro@^0.80.3: yargs "^17.6.2" micromatch@^4.0.2, micromatch@^4.0.4: - version "4.0.7" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.7.tgz#33e8190d9fe474a9895525f5618eee136d46c2e5" - integrity sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q== + version "4.0.8" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" + integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== dependencies: braces "^3.0.3" picomatch "^2.3.1" @@ -4116,10 +4121,10 @@ semver@^7.5.2, semver@^7.5.3: resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.2.tgz#1e3b34759f896e8f14d6134732ce798aeb0c6e13" integrity sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w== -send@0.18.0: - version "0.18.0" - resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" - integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== +send@0.19.0: + version "0.19.0" + resolved "https://registry.yarnpkg.com/send/-/send-0.19.0.tgz#bbc5a388c8ea6c048967049dbeac0e4a3f09d7f8" + integrity sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw== dependencies: debug "2.6.9" depd "2.0.0" @@ -4141,14 +4146,14 @@ serialize-error@^2.1.0: integrity sha512-ghgmKt5o4Tly5yEG/UJp8qTd0AN7Xalw4XBtDEKP655B699qMEtra1WlXeE6WIvdEG481JvRxULKsInq/iNysw== serve-static@^1.13.1: - version "1.15.0" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" - integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== + version "1.16.2" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.16.2.tgz#b6a5343da47f6bdd2673848bf45754941e803296" + integrity sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw== dependencies: - encodeurl "~1.0.2" + encodeurl "~2.0.0" escape-html "~1.0.3" parseurl "~1.3.3" - send "0.18.0" + send "0.19.0" set-blocking@^2.0.0: version "2.0.0" diff --git a/ios/RCTConvert+BitmovinPlayer.swift b/ios/RCTConvert+BitmovinPlayer.swift index e425f07b..ef80c629 100644 --- a/ios/RCTConvert+BitmovinPlayer.swift +++ b/ios/RCTConvert+BitmovinPlayer.swift @@ -1239,9 +1239,13 @@ extension RCTConvert { guard let json = json as? [String: Any?] else { return nil } + let variant = json["variant"] as? [String: Any?] + let uiManagerFactoryFunction = variant?["uiManagerFactoryFunction"] as? String + let defaultUiManagerFactoryFunction = "bitmovin.playerui.UIFactory.buildDefaultSmallScreenUI" return RNUiConfig( - playbackSpeedSelectionEnabled: json["playbackSpeedSelectionEnabled"] as? Bool ?? true + playbackSpeedSelectionEnabled: json["playbackSpeedSelectionEnabled"] as? Bool ?? true, + uiManagerFactoryFunction: uiManagerFactoryFunction ?? defaultUiManagerFactoryFunction ) } @@ -1369,6 +1373,7 @@ internal struct RNPlayerViewConfig { */ internal struct RNUiConfig { let playbackSpeedSelectionEnabled: Bool + let uiManagerFactoryFunction: String } /** diff --git a/ios/RNPlayerViewManager.swift b/ios/RNPlayerViewManager.swift index d6a381be..96390e3f 100644 --- a/ios/RNPlayerViewManager.swift +++ b/ios/RNPlayerViewManager.swift @@ -74,6 +74,7 @@ public class RNPlayerViewManager: RCTViewManager { if let uiConfig = playerViewConfig?.uiConfig { bitmovinUserInterfaceConfig .playbackSpeedSelectionEnabled = uiConfig.playbackSpeedSelectionEnabled + bitmovinUserInterfaceConfig.uiManagerFactoryFunction = uiConfig.uiManagerFactoryFunction } if let hideFirstFrame = playerViewConfig?.hideFirstFrame { bitmovinUserInterfaceConfig.hideFirstFrame = hideFirstFrame diff --git a/package.json b/package.json index f05c6549..ae3f9c51 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "bitmovin-player-react-native", - "version": "0.29.0", + "version": "0.30.0", "description": "Official React Native bindings for Bitmovin's mobile Player SDKs.", "main": "lib/index.js", "module": "lib/index.mjs", diff --git a/src/components/PlayerView/playerViewConfig.ts b/src/components/PlayerView/playerViewConfig.ts index d61df77d..33e474df 100644 --- a/src/components/PlayerView/playerViewConfig.ts +++ b/src/components/PlayerView/playerViewConfig.ts @@ -43,4 +43,57 @@ export interface WebUiConfig extends UiConfig { * Default is `true`. */ playbackSpeedSelectionEnabled?: boolean; + /** + * The UI variant to use for the Bitmovin Player Web UI. + * + * Default is {@link SmallScreenUi} + */ + variant?: Variant; + /** + * Whether the WebView should be focused on initialization. + * + * By default this is enabled only for the TV UI variant, as it's needed there to + * initiate spatial navigation using the remote control. + * + * @platform Android + */ + focusUiOnInitialization?: boolean; +} + +export abstract class Variant { + /** + * Specifies the function name that will be used to initialize the `UIManager` + * for the Bitmovin Player Web UI. + * + * The function is called on the `window` object with the `Player` as the first argument and + * the `UIConfig` as the second argument. + * + * Example: + * When you added a new function or want to use a different function of our `UIFactory`, + * you can specify the full qualifier name including namespaces. + * e.g. `bitmovin.playerui.UIFactory.buildDefaultSmallScreenUI` for the SmallScreenUi. + * @see UIFactory https://github.com/bitmovin/bitmovin-player-ui/blob/develop/src/ts/uifactory.ts#L60 + * + * Notes: + * - It's not necessary to use our `UIFactory`. Any static function can be specified. + */ + constructor(public readonly uiManagerFactoryFunction: string) {} +} + +export class SmallScreenUi extends Variant { + constructor() { + super('bitmovin.playerui.UIFactory.buildDefaultSmallScreenUI'); + } +} + +export class TvUi extends Variant { + constructor() { + super('bitmovin.playerui.UIFactory.buildDefaultTvUI'); + } +} + +export class CustomUi extends Variant { + constructor(uiManagerFactoryFunction: string) { + super(uiManagerFactoryFunction); + } } diff --git a/yarn.lock b/yarn.lock index c0d9a90c..9a3ca8db 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3467,6 +3467,11 @@ encodeurl@~1.0.2: resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== +encodeurl@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-2.0.0.tgz#7b8ea898077d7e409d3ac45474ea38eaf0857a58" + integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg== + envinfo@^7.10.0: version "7.13.0" resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.13.0.tgz#81fbb81e5da35d74e814941aeab7c325a606fb31" @@ -6156,9 +6161,9 @@ metro@0.80.9, metro@^0.80.3: yargs "^17.6.2" micromatch@^4.0.4, micromatch@^4.0.5: - version "4.0.7" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.7.tgz#33e8190d9fe474a9895525f5618eee136d46c2e5" - integrity sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q== + version "4.0.8" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" + integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== dependencies: braces "^3.0.3" picomatch "^2.3.1" @@ -7105,9 +7110,9 @@ rimraf@~2.6.2: glob "^7.1.3" rollup@^3.2.5: - version "3.29.4" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.29.4.tgz#4d70c0f9834146df8705bfb69a9a19c9e1109981" - integrity sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw== + version "3.29.5" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.29.5.tgz#8a2e477a758b520fb78daf04bca4c522c1da8a54" + integrity sha512-GVsDdsbJzzy4S/v3dqWPJ7EfvZJfCHiDqe80IyrF59LYuP+e6U1LJoUqeuqRbwAWoMNoXivMNeNAOf5E22VA1w== optionalDependencies: fsevents "~2.3.2" @@ -7176,10 +7181,10 @@ semver@^7.3.7, semver@^7.5.2, semver@^7.5.3, semver@^7.5.4: resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.2.tgz#1e3b34759f896e8f14d6134732ce798aeb0c6e13" integrity sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w== -send@0.18.0: - version "0.18.0" - resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" - integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== +send@0.19.0: + version "0.19.0" + resolved "https://registry.yarnpkg.com/send/-/send-0.19.0.tgz#bbc5a388c8ea6c048967049dbeac0e4a3f09d7f8" + integrity sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw== dependencies: debug "2.6.9" depd "2.0.0" @@ -7201,14 +7206,14 @@ serialize-error@^2.1.0: integrity sha512-ghgmKt5o4Tly5yEG/UJp8qTd0AN7Xalw4XBtDEKP655B699qMEtra1WlXeE6WIvdEG481JvRxULKsInq/iNysw== serve-static@^1.13.1: - version "1.15.0" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" - integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== + version "1.16.2" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.16.2.tgz#b6a5343da47f6bdd2673848bf45754941e803296" + integrity sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw== dependencies: - encodeurl "~1.0.2" + encodeurl "~2.0.0" escape-html "~1.0.3" parseurl "~1.3.3" - send "0.18.0" + send "0.19.0" set-blocking@^2.0.0: version "2.0.0"