diff --git a/.gitignore b/.gitignore index 0d9fcf493..d5fd0888c 100644 --- a/.gitignore +++ b/.gitignore @@ -15,3 +15,4 @@ report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json xcuserdata/ yarn-error.log* .vs/ +msbuild.binlog diff --git a/example/react-native.config.js b/example/react-native.config.js index d305c9aff..69684ba4a 100644 --- a/example/react-native.config.js +++ b/example/react-native.config.js @@ -1,18 +1,17 @@ if (process.argv.includes("--config=metro.config.macos.js")) { - module.exports = { - reactNativePath: "node_modules/react-native-macos", - }; -} -else if (process.argv.includes("--config=metro.config.windows.js")) { - module.exports = { - reactNativePath: "node_modules/react-native-windows", - }; + module.exports = { + reactNativePath: "node_modules/react-native-macos", + }; +} else if (process.argv.includes("--config=metro.config.windows.js")) { + module.exports = { + reactNativePath: "node_modules/react-native-windows", + }; } else { - module.exports = { - project: { - ios: { - project: "ios/ReactTestApp-Dummy.xcodeproj", - }, - }, - }; + module.exports = { + project: { + ios: { + project: "ios/ReactTestApp-Dummy.xcodeproj", + }, + }, + }; } diff --git a/msbuild.binlog b/msbuild.binlog deleted file mode 100644 index 05fe04409..000000000 Binary files a/msbuild.binlog and /dev/null differ diff --git a/package.json b/package.json index 68bd87d83..1383abab0 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,7 @@ "react": "~16.8.6 || ~16.9.0 || ~16.11.0 || ~16.13.1", "react-native": "^0.60.6 || ^0.61.5 || ^0.62.2 || ^0.63 || 1000.0.0", "react-native-macos": "^0.60 || ^0.61.39", - "react-native-windows": "^0.62.1" + "react-native-windows": "^0.62.2" }, "devDependencies": { "eslint": "^7.4.0", @@ -52,7 +52,7 @@ "prettier": "2.0.5", "react": "16.11.0", "react-native": "0.62.2", - "react-native-windows": "0.62.1", + "react-native-windows": "0.62.2", "semantic-release": "^17.0.0" }, "release": { diff --git a/windows/ReactTestApp/App.cpp b/windows/ReactTestApp/App.cpp index c744f1fdf..561c494bf 100644 --- a/windows/ReactTestApp/App.cpp +++ b/windows/ReactTestApp/App.cpp @@ -11,8 +11,8 @@ using namespace Windows::Foundation; using namespace Windows::UI::Xaml; using namespace Windows::UI::Xaml::Controls; using namespace Windows::UI::Xaml::Navigation; -using namespace ReactTestApp; -using namespace ReactTestApp::implementation; +using namespace winrt::ReactTestApp; +using namespace winrt::ReactTestApp::implementation; /// /// Initializes the singleton application object. This is the first line of authored code diff --git a/windows/ReactTestApp/MainPage.cpp b/windows/ReactTestApp/MainPage.cpp index 86843bfdd..fbba82aff 100644 --- a/windows/ReactTestApp/MainPage.cpp +++ b/windows/ReactTestApp/MainPage.cpp @@ -5,9 +5,7 @@ #include "ComponentViewModel.h" #include "MainPage.g.cpp" #include "Manifest.h" -#include "filesystem" -using namespace winrt::Microsoft::ReactNative; using namespace winrt::Windows::UI::Xaml::Controls; namespace winrt::ReactTestApp::implementation @@ -15,12 +13,7 @@ namespace winrt::ReactTestApp::implementation MainPage::MainPage() { InitializeComponent(); - SetComponents(); - InitReact(); - } - void MainPage::SetComponents() - { auto menuItems = MenuFlyout().Items(); std::optional<::ReactTestApp::Manifest> manifest = ::ReactTestApp::GetManifest(); if (!manifest.has_value()) { @@ -29,12 +22,12 @@ namespace winrt::ReactTestApp::implementation newMenuItem.IsEnabled(false); menuItems.Append(newMenuItem); } else { - for (auto &&c : manifest.value().components) { + auto &components = manifest.value().components; + for (auto &&c : components) { hstring componentDisplayName = to_hstring(c.displayName.value_or(c.appKey)); - hstring componentName = to_hstring(c.appKey); + hstring appKey = to_hstring(c.appKey); ReactTestApp::ComponentViewModel newComponent = - winrt::make(componentName, componentDisplayName); - m_components.push_back(newComponent); + winrt::make(appKey, componentDisplayName); MenuFlyoutItem newMenuItem; newMenuItem.CommandParameter(newComponent); @@ -42,52 +35,28 @@ namespace winrt::ReactTestApp::implementation newMenuItem.Click({this, &MainPage::SetReactComponentName}); menuItems.Append(newMenuItem); } - } - } - - void MainPage::InitReact() - { - // TODO fallback to JS bundle - LoadJSBundleFrom(JSBundleSource::Embedded); - // If only one component is present load it automatically - if (m_components.size() == 1) { - ReactRootView().ComponentName(m_components.at(0).AppKey()); - } - - ReactRootView().ReactNativeHost(m_reactNativeHost); - } - - void MainPage::LoadJSBundleFrom(JSBundleSource source) - { - m_reactNativeHost.InstanceSettings().UseLiveReload(source == JSBundleSource::DevServer); - m_reactNativeHost.InstanceSettings().UseWebDebugger(source == JSBundleSource::DevServer); - m_reactNativeHost.InstanceSettings().UseFastRefresh(source == JSBundleSource::DevServer); + // If only one component is present load it automatically + if (components.size() == 1) { + ReactRootView().ComponentName(to_hstring(components.at(0).appKey)); + } + // TODO fallback to JS bundle + reactInstance_.LoadJSBundleFrom(::ReactTestApp::JSBundleSource::Embedded); - switch (source) { - case JSBundleSource::DevServer: - m_reactNativeHost.InstanceSettings().JavaScriptMainModuleName(L"index"); - m_reactNativeHost.InstanceSettings().JavaScriptBundleFile(L""); - break; - case JSBundleSource::Embedded: - hstring bundleFileName = to_hstring(GetBundleName()); - m_reactNativeHost.InstanceSettings().JavaScriptBundleFile(bundleFileName); - break; + ReactRootView().ReactNativeHost(reactInstance_.ReactHost()); } - - m_reactNativeHost.ReloadInstance(); } void MainPage::LoadFromJSBundle(Windows::Foundation::IInspectable const &, Windows::UI::Xaml::RoutedEventArgs) { - LoadJSBundleFrom(JSBundleSource::Embedded); + reactInstance_.LoadJSBundleFrom(::ReactTestApp::JSBundleSource::Embedded); } void MainPage::LoadFromDevServer(Windows::Foundation::IInspectable const &, Windows::UI::Xaml::RoutedEventArgs) { - LoadJSBundleFrom(JSBundleSource::DevServer); + reactInstance_.LoadJSBundleFrom(::ReactTestApp::JSBundleSource::DevServer); } void MainPage::SetReactComponentName(Windows::Foundation::IInspectable const &sender, @@ -96,24 +65,4 @@ namespace winrt::ReactTestApp::implementation auto s = sender.as().CommandParameter(); ReactRootView().ComponentName(s.as()->AppKey()); } - - std::string MainPage::GetBundleName() - { - std::vector entryFileNames = {"index.windows", - "main.windows", - "index.native", - "main.native", - "index" - "main"}; - - for (std::string &&n : entryFileNames) { - std::string path = "Bundle\\" + n + ".bundle"; - if (std::filesystem::exists(path)) { - return n; - } - } - - return ""; //TODO handle bundle not present - } - } // namespace winrt::ReactTestApp::implementation diff --git a/windows/ReactTestApp/MainPage.h b/windows/ReactTestApp/MainPage.h index 0c4053d92..b2a5d4bb5 100644 --- a/windows/ReactTestApp/MainPage.h +++ b/windows/ReactTestApp/MainPage.h @@ -1,33 +1,23 @@ #pragma once #include "MainPage.g.h" +#include "ReactInstance.h" namespace winrt::ReactTestApp::implementation { - enum class JSBundleSource { - DevServer, - Embedded, - }; - struct MainPage : MainPageT { public: MainPage(); - void LoadFromJSBundle(Windows::Foundation::IInspectable const &, Windows::UI::Xaml::RoutedEventArgs); void LoadFromDevServer(Windows::Foundation::IInspectable const &, Windows::UI::Xaml::RoutedEventArgs); private: - winrt::Microsoft::ReactNative::ReactNativeHost m_reactNativeHost; - std::vector m_components; + ::ReactTestApp::ReactInstance reactInstance_; - void LoadJSBundleFrom(JSBundleSource source); - void SetComponents(); - void InitReact(); void SetReactComponentName(Windows::Foundation::IInspectable const &, Windows::UI::Xaml::RoutedEventArgs e); - std::string GetBundleName(); }; } // namespace winrt::ReactTestApp::implementation diff --git a/windows/ReactTestApp/ReactInstance.cpp b/windows/ReactTestApp/ReactInstance.cpp new file mode 100644 index 000000000..34c9032ce --- /dev/null +++ b/windows/ReactTestApp/ReactInstance.cpp @@ -0,0 +1,53 @@ +#include "pch.h" + +#include "ReactInstance.h" + +#include + +namespace ReactTestApp +{ + void ReactInstance::LoadJSBundleFrom(JSBundleSource source) + { + auto instanceSettings = reactNativeHost_.InstanceSettings(); + instanceSettings.UseLiveReload(source == JSBundleSource::DevServer); + instanceSettings.UseWebDebugger(source == JSBundleSource::DevServer); + instanceSettings.UseFastRefresh(source == JSBundleSource::DevServer); + + switch (source) { + case JSBundleSource::DevServer: + instanceSettings.JavaScriptMainModuleName(L"index"); + instanceSettings.JavaScriptBundleFile(L""); + break; + case JSBundleSource::Embedded: + winrt::hstring bundleFileName = winrt::to_hstring(GetBundleName()); + instanceSettings.JavaScriptBundleFile(bundleFileName); + break; + } + + reactNativeHost_.ReloadInstance(); + } + + winrt::Microsoft::ReactNative::ReactNativeHost &ReactInstance::ReactHost() + { + return reactNativeHost_; + } + + std::string GetBundleName() + { + std::vector entryFileNames = {"index.windows", + "main.windows", + "index.native", + "main.native", + "index" + "main"}; + + for (std::string &&n : entryFileNames) { + std::string path = "Bundle\\" + n + ".bundle"; + if (std::filesystem::exists(path)) { + return n; + } + } + + return ""; // TODO handle bundle not present + } +} // namespace ReactTestApp diff --git a/windows/ReactTestApp/ReactInstance.h b/windows/ReactTestApp/ReactInstance.h new file mode 100644 index 000000000..d45e61fdb --- /dev/null +++ b/windows/ReactTestApp/ReactInstance.h @@ -0,0 +1,23 @@ +#pragma once +#include + +namespace ReactTestApp +{ + enum class JSBundleSource { + DevServer, + Embedded, + }; + + class ReactInstance + { + public: + winrt::Microsoft::ReactNative::ReactNativeHost &ReactHost(); + void LoadJSBundleFrom(JSBundleSource source); + + private: + winrt::Microsoft::ReactNative::ReactNativeHost reactNativeHost_; + }; + + std::string GetBundleName(); + +} // namespace ReactTestApp diff --git a/windows/ReactTestApp/ReactTestApp.vcxproj b/windows/ReactTestApp/ReactTestApp.vcxproj index 9d3e9842d..912138687 100644 --- a/windows/ReactTestApp/ReactTestApp.vcxproj +++ b/windows/ReactTestApp/ReactTestApp.vcxproj @@ -1,205 +1,207 @@ - - - true - true - true - true - {b44cead7-fbff-4a17-95ea-ff5434bbd79d} - ReactTestApp - ReactTestApp - en-US - 15.0 - true - Windows Store - 10.0 - 10.0.18362.0 - 10.0.17763.0 + + + true + true + true + true + {b44cead7-fbff-4a17-95ea-ff5434bbd79d} + ReactTestApp + ReactTestApp + en-US + 15.0 + true + Windows Store + 10.0 + 10.0.18362.0 + 10.0.17763.0 + + + + + Debug + ARM + + + Debug + ARM64 + + + Debug + Win32 + + + Debug + x64 + + + Release + ARM + + + Release + ARM64 + + + Release + Win32 + + + Release + x64 + + + + Application + v140 + v141 + v142 + Unicode + ..\..\example\dist + $(BundleContentRoot)\**\* + + + true + true + + + false + true + false + + + + + + + + + + + + + + + + + Use + pch.h + $(IntDir)pch.pch + Level4 + %(AdditionalOptions) /bigobj + + /DWINRT_NO_MAKE_DETECTION %(AdditionalOptions) + + + WIN32_LEAN_AND_MEAN;WINRT_LEAN_AND_MEAN;%(PreprocessorDefinitions) + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + true + true + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + true + true + + + + + + + + App.xaml + + + MainPage.xaml + + + + + + Designer + + + Designer + + + + + Designer + + + + + + + + + + + + + + + + Create + + + App.xaml + + + MainPage.xaml + + + + + + + + App.xaml + + + MainPage.xaml + + + + + + + + + + + $([MSBuild]::MakeRelative($(ProjectDir),'Bundle\%(RecursiveDir)%(Filename)%(Extension)')) + true + + + + + {f7d32bd0-2749-483e-9a0d-1635ef7e3136} + false + + + + + + + + + + This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - - Debug - ARM - - - Debug - ARM64 - - - Debug - Win32 - - - Debug - x64 - - - Release - ARM - - - Release - ARM64 - - - Release - Win32 - - - Release - x64 - - - - Application - v140 - v141 - v142 - Unicode - ..\..\example\dist - $(BundleContentRoot)\**\* - - - true - true - - - false - true - false - - - - - - - - - - - - - - - - - Use - pch.h - $(IntDir)pch.pch - Level4 - %(AdditionalOptions) /bigobj - - /DWINRT_NO_MAKE_DETECTION %(AdditionalOptions) - - - WIN32_LEAN_AND_MEAN;WINRT_LEAN_AND_MEAN;%(PreprocessorDefinitions) - - - - - _DEBUG;%(PreprocessorDefinitions) - true - true - true - true - - - - - NDEBUG;%(PreprocessorDefinitions) - true - true - true - true - - - - - - - - App.xaml - - - MainPage.xaml - - - - - Designer - - - Designer - - - - - Designer - - - - - - - - - - - - - - - - Create - - - App.xaml - - - MainPage.xaml - - - - - - - App.xaml - - - MainPage.xaml - - - - - - - - - - - $([MSBuild]::MakeRelative($(ProjectDir),'Bundle\%(RecursiveDir)%(Filename)%(Extension)')) - true - - - - - {f7d32bd0-2749-483e-9a0d-1635ef7e3136} - false - - - - - - - - - - This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - - - + + + + diff --git a/windows/ReactTestApp/ReactTestApp.vcxproj.filters b/windows/ReactTestApp/ReactTestApp.vcxproj.filters index 6afec648d..e073f63ee 100644 --- a/windows/ReactTestApp/ReactTestApp.vcxproj.filters +++ b/windows/ReactTestApp/ReactTestApp.vcxproj.filters @@ -1,65 +1,68 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - Assets - - - Assets - - - Assets - - - Assets - - - Assets - - - Assets - - - Assets - - - Assets - - - - - - - - {e48dc53e-40b1-40cb-970a-f89935452892} - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Assets + + + Assets + + + Assets + + + Assets + + + Assets + + + Assets + + + Assets + + + Assets + + + + + + + + {e48dc53e-40b1-40cb-970a-f89935452892} + + + + + + + diff --git a/yarn.lock b/yarn.lock index de37b230b..91f33a077 100644 --- a/yarn.lock +++ b/yarn.lock @@ -638,6 +638,13 @@ dependencies: regenerator-runtime "^0.13.4" +"@babel/runtime@^7.8.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.10.5.tgz#303d8bd440ecd5a491eae6117fd3367698674c5c" + integrity sha512-otddXKhdNn7d0ptoFRHtMLa8LqDxLYwTjB4nYgM1yy5N6gU/MUf8zqyyLltCH3yAVitBzmwK4us+DD0l/MauAg== + dependencies: + regenerator-runtime "^0.13.4" + "@babel/template@^7.0.0", "@babel/template@^7.10.4", "@babel/template@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.4.tgz#3251996c4200ebc71d1a8fc405fba940f36ba278" @@ -2088,7 +2095,7 @@ cli-cursor@^3.1.0: dependencies: restore-cursor "^3.1.0" -cli-spinners@^2.0.0: +cli-spinners@^2.0.0, cli-spinners@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.3.0.tgz#0632239a4b5aa4c958610142c34bb7a651fc8df5" integrity sha512-Xs2Hf2nzrvJMFKimOR7YR0QwZ8fc0u98kdtwN1eNAZzNQgH3vK2pXzff6GJtKh7S5hoJ87ECiAiZFS2fb5Ii2w== @@ -2849,6 +2856,11 @@ envinfo@^7.1.0: resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.5.0.tgz#91410bb6db262fb4f1409bd506e9ff57e91023f4" integrity sha512-jDgnJaF/Btomk+m3PZDTTCb5XIIIX3zYItnCRfF73zVgvinLoRomuhi75Y4su0PtQxWz4v66XnLLckyvyJTOIQ== +envinfo@^7.5.0: + version "7.5.1" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.5.1.tgz#93c26897225a00457c75e734d354ea9106a72236" + integrity sha512-hQBkDf2iO4Nv0CNHpCuSBeaSrveU6nThVxFGTrq/eDlV716UQk09zChaJae4mZRsos1x4YLY2TaH3LHUae3ZmQ== + err-code@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/err-code/-/err-code-1.1.2.tgz#06e0116d3028f6aef4806849eb0ea6a748ae6960" @@ -3693,7 +3705,7 @@ glob-parent@^5.0.0, glob-parent@^5.1.0: dependencies: is-glob "^4.0.1" -glob@^7.1.1, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: +glob@^7.0.0, glob@^7.1.1, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: version "7.1.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== @@ -4163,7 +4175,7 @@ internal-slot@^1.0.2: has "^1.0.3" side-channel "^1.0.2" -interpret@^1.2.0: +interpret@^1.0.0, interpret@^1.2.0: version "1.4.0" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== @@ -5325,7 +5337,7 @@ mem@^1.1.0: dependencies: mimic-fn "^1.0.0" -mem@^4.0.0: +mem@^4.0.0, mem@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w== @@ -7022,6 +7034,25 @@ react-is@^16.12.0, react-is@^16.8.1, react-is@^16.8.4: resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== +react-native-windows@0.62.2: + version "0.62.2" + resolved "https://registry.yarnpkg.com/react-native-windows/-/react-native-windows-0.62.2.tgz#eae6d9e55116d69c8d8316ec6e52505c760ba1bd" + integrity sha512-ZsPxhJrzkBjzLmt9xzAwos1iTykAsyIij2P6radH2eZJmMYJ2sqQwRAsNcjk9OKNM0zj3T4lyCN3879gRZ6yMg== + dependencies: + "@babel/runtime" "^7.8.4" + cli-spinners "^2.2.0" + create-react-class "^15.6.3" + envinfo "^7.5.0" + fbjs "^1.0.0" + glob "^7.1.1" + ora "^3.4.0" + prop-types "^15.7.2" + regenerator-runtime "^0.13.2" + shelljs "^0.7.8" + username "^5.1.0" + uuid "^3.3.2" + xml-parser "^1.2.1" + react-native@0.62.2: version "0.62.2" resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.62.2.tgz#d831e11a3178705449142df19a70ac2ca16bad10" @@ -7745,6 +7776,15 @@ shell-quote@^1.6.1: resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg== +shelljs@^0.7.8: + version "0.7.8" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.8.tgz#decbcf874b0d1e5fb72e14b164a9683048e9acb3" + integrity sha1-3svPh0sNHl+3LhSxZKloMEjprLM= + dependencies: + glob "^7.0.0" + interpret "^1.0.0" + rechoir "^0.6.2" + side-channel@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.2.tgz#df5d1abadb4e4bf4af1cd8852bf132d2f7876947" @@ -8710,6 +8750,14 @@ user-home@^1.1.1: resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190" integrity sha1-K1viOjK2Onyd640PKNSFcko98ZA= +username@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/username/-/username-5.1.0.tgz#a7f9325adce2d0166448cdd55d4985b1360f2508" + integrity sha512-PCKbdWw85JsYMvmCv5GH3kXmM66rCd9m1hBEDutPNv94b/pqCMT4NtcKyeWYvLFiE8b+ha1Jdl8XAaUdPn5QTg== + dependencies: + execa "^1.0.0" + mem "^4.3.0" + util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" @@ -8941,6 +8989,13 @@ xdg-basedir@^3.0.0: resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" integrity sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ= +xml-parser@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/xml-parser/-/xml-parser-1.2.1.tgz#c31f4c34f2975db82ad013222120592736156fcd" + integrity sha1-wx9MNPKXXbgq0BMiISBZJzYVb80= + dependencies: + debug "^2.2.0" + xmlbuilder@^9.0.7: version "9.0.7" resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d"