Skip to content

Strongly typed value serialization and deserialization using IJSValueReader, JSValue, and IJSValueWriter #3760

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
3 commits merged into from
Dec 11, 2019

Conversation

vmoroz
Copy link
Member

@vmoroz vmoroz commented Dec 11, 2019

While we work on the new RNW native module and view managers implementation, we need an efficient way to send data through the ABI. The core of the data transfer implementation are the IJSValueReader and IJSValueWriter interfaces. These interfaces allow the most efficient serialized data transfer that reduces requirements for memory allocations. E.g if we would use boxing and transfer all values as IInspectable, then for any numeric values we would require to allocate a ref counted object that implements the IInspectable.

The IJSValueReader and IJSValueWriter interfaces were introduced earlier as a part of the new RNW native module infrastructure. We were missing good examples how to use and implement them.
While working on the examples, we realized that we need to do more than just set of samples. We had to re-define them and build additional infrastructure to simplify their usage.

Since reading complex objects from IJSValueReader can be a challenge in some complex cases we have introduced JSValue which is very similar to folly::dynamic, but immutable. While it is easier to use JSValue to read data, it requires more resources than IJSValueReader. But combining these two methods together, developers can address any complex situations.

In C# to implement reading custom value type from IJSValueReader developers should add ReadValue extension for IJSValueReader or JSValue types. They can use IJSValueReader.ReadValue() to call the ReadValue. This method will call either one of these custom extensions, or one of the predefined extensions. The predefined extensions are offered for simple standard types, enums, nullables, dictionaries, collections, tuples, variants (OneOf), JSValue, and simple structs. To write custom value type to IJSValueWriter, developers should add WriteValue extension for IJSValueWriter. We offer the ame set of predefined WriteValue extensions.

In C++ developers could do the same, but instead of creating extension methods, they should add ReadValue and WriteValue function overloads.

The new unit tests for C++ and C# that show how create such methods.

In this change we also have changed the way we register and invoke native modules to reflect the new value serialization. In C++ the REACT_* macros that used for native module member registration are changed to be simple static functions. It helps to eliminate the need to use an instance Boolean field per registered member, and we also do the registration 'on-demand' after the static initialization.

Microsoft Reviewers: Open in CodeFlow

…ialization using IJSValueReader, JSValue, and IJSValueWriter
@vmoroz vmoroz requested review from jonthysell, acoates-ms, ddalp and a team December 11, 2019 20:05
@vmoroz vmoroz requested a review from a team as a code owner December 11, 2019 20:05
@ghost ghost added the vnext label Dec 11, 2019
@NickGerleman
Copy link
Contributor

NickGerleman commented Dec 11, 2019

@vmoroz do you know what's going on here? Guessing this isn't all you?
image
#Resolved

@vmoroz
Copy link
Member Author

vmoroz commented Dec 11, 2019

@NickGerleman this change has a lot of new code including two new unit test projects. I do not know how GitHub counts images that are part of the new test project. It looks like that the majority of the new code is due to the Catch2 single header file unit test framework (~18K lines).


In reply to: 564710850 [](ancestors = 564710850)

@@ -38,7 +38,7 @@ FrameworkElement CircleViewManagerCPP::CreateView() noexcept {

// IViewManagerWithChildren

void CircleViewManagerCPP::AddView(FrameworkElement const &parent, UIElement const &child, int64_t index) noexcept {
void CircleViewManagerCPP::AddView(FrameworkElement const &parent, UIElement const &child, int64_t /*index*/) noexcept {
Copy link
Contributor

@NickGerleman NickGerleman Dec 11, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Did you add this change as part of this PR? If so, could we separate the unrelated changes out? If not I think your branch might be in a weird state. #Resolved

Copy link
Member Author

@vmoroz vmoroz Dec 11, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have eliminated a warning caused by the unused variable. My branch is in a good state. #Resolved

Type secondToLastParameterType = parameters.Length > 1 ? parameters[parameters.Length - 2].ParameterType : null;
Func<ReactMethodImpl> createMethod;

bool isPromise(Type type)
Copy link
Contributor

@NickGerleman NickGerleman Dec 11, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

isPromise [](start = 11, length = 9)

Would this be cleaner as a private method on the class instead of a method inside of a method? #Resolved

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe. I can revisit it later.


In reply to: 356823803 [](ancestors = 356823803)

// Input variables to read from inputReader
ParameterExpression[] inputVariables = new ParameterExpression[parameters.Length - 1];
for (int i = 0; i < inputVariables.Length; ++i)
else if (isPromise(lastParameterType))
Copy link
Contributor

@NickGerleman NickGerleman Dec 11, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lastParameterType [](start = 25, length = 17)

Having a promise as an explicit parameter feels a bit weird to me. How difficult would it be to be able to use stock c# functions returning something like Task<ReactResult<T>>? That would have the benefit of forcing methods to return something. #Resolved

Copy link
Member Author

@vmoroz vmoroz Dec 11, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good idea! We can consider adding it in future. We use similar approach in our Reka implementation by returning Mso::Future. Though, I find the creation and managing the return result a little bit more complex in that case. While Task enforces developers to return something, please note that developers write this method themselves and returning Task instead of receiving IReactPromise would also require them to create it and set instead of just setting values. Plus the whole business of scheduling task on another thread by default can also end up to be a non-trivial task. #Resolved

} \
} while (false)

#define VerifyElseCrashSz(condition, message) \
Copy link
Contributor

@NickGerleman NickGerleman Dec 11, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sz [](start = 23, length = 2)

Not a fan of adding something with Hungrian notation to RNW, even if it matches what we have in devmain. #Resolved

Copy link
Member Author

@vmoroz vmoroz Dec 11, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Any proposal for a different name? #Resolved

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

VerifyElseCrashMessage?

We also might have something in Folly that does this that might be worth reusing.


In reply to: 356831337 [](ancestors = 356831337)

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would be nice to grab it from Open Source Mso :)


In reply to: 356901187 [](ancestors = 356901187,356831337)

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, but I just needed something to crash conditionally for now.


In reply to: 356912397 [](ancestors = 356912397,356901187,356831337)

@NickGerleman
Copy link
Contributor

NickGerleman commented Dec 11, 2019

  • Generated: 2019-11-15 15:01:56.628356

Doesn't RNW vnext already use Google Test? Why are we adding another UT framework? #Resolved


Refers to: vnext/Microsoft.ReactNative.Cxx.UnitTests/catch.hpp:3 in d7599a1. [](commit_id = d7599a1, deletion_comment = False)

@@ -38,6 +38,12 @@ var getCallback = function(prefix) {
};
};

var getErrorCallback = function(prefix) {
return function(error) {
log(prefix + (error || {}).message);
Copy link
Contributor

@NickGerleman NickGerleman Dec 11, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

|| {} [](start = 24, length = 5)

What is the motivation for this change? #Resolved

Copy link
Member Author

@vmoroz vmoroz Dec 11, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The error object has a member 'message' the ||{} technique is used to ensure that we do not crash should the error be null. #Resolved

#include "ReactError.h"
#include "winrt/Microsoft.ReactNative.Bridge.h"

namespace winrt::Microsoft::ReactNative::Bridge {
Copy link
Contributor

@NickGerleman NickGerleman Dec 11, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

winrt [](start = 10, length = 5)

Do we use this namespace for things outside of cppwinrt? I immediately thought this type was part of that based on namespace when I saw it's first usage, #Resolved

Copy link
Member Author

@vmoroz vmoroz Dec 11, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I want to address the whole issue about namespaces as a separate PR. At this point it was just easier to keep the same namespace to avoid long names. #Pending

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could you add a Github issue for this to RNW with the "JSHost" tag?


In reply to: 356845271 [](ancestors = 356845271)


namespace winrt::Microsoft::ReactNative::Bridge {

struct ReactError {
Copy link
Contributor

@NickGerleman NickGerleman Dec 11, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ReactError [](start = 7, length = 10)

Could we document the fields here? E.g. I wouldn't be sure looking at this as to what "Code" or "UserInfo" represents. #Pending

@vmoroz
Copy link
Member Author

vmoroz commented Dec 11, 2019

  • Generated: 2019-11-15 15:01:56.628356

It was the only framework that was recommended to be used to test C++/WinRT code. We can remove/replace it if we find that Google Test or Microsoft test can be used for it too. My main focus in this PR was to implement serialization/deserialization and all my attempts to use other unit test frameworks were not successful yet.


In reply to: 564728425 [](ancestors = 564728425)


Refers to: vnext/Microsoft.ReactNative.Cxx.UnitTests/catch.hpp:3 in d7599a1. [](commit_id = d7599a1, deletion_comment = False)

@acoates-ms acoates-ms added the AutoMerge Causes a PR to be automatically merged once all requirements are passed (label drives bot activity) label Dec 11, 2019
@ghost
Copy link

ghost commented Dec 11, 2019

Hello @acoates-ms!

Because this pull request has the AutoMerge label, I will be glad to assist with helping to merge this pull request once all check-in policies pass.

p.s. you can customize the way I help with merging this pull request, such as holding this pull request until a specific person approves. Simply @mention me (@msftbot) and give me an instruction to get started! Learn more here. #Resolved

@ghost ghost merged commit cf6e39d into microsoft:master Dec 11, 2019
@NickGerleman
Copy link
Contributor

  • Generated: 2019-11-15 15:01:56.628356

I would be interested in hearing more here. What were the incompatibilities you were concerned about?


In reply to: 564767446 [](ancestors = 564767446,564728425)


Refers to: vnext/Microsoft.ReactNative.Cxx.UnitTests/catch.hpp:3 in d7599a1. [](commit_id = d7599a1, deletion_comment = False)


JSValueType Type() const noexcept;
bool IsNull() const noexcept;
const JSValueObject &Object() const noexcept;
Copy link

@NikoAri NikoAri Dec 12, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

&Object() [](start = 22, length = 9)

This looks strange, but I guess it's required by formatting? #Resolved

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same for the custom dtor stuff we need to do


In reply to: 356910886 [](ancestors = 356910886)

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, this is the formatting adopted by RNW project.
@NickGerleman, how is it related to the custom dtor?


In reply to: 356917132 [](ancestors = 356917132,356910886)

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Whoops, I added that to the wrong thread, That was meant to be on the std::variant comment


In reply to: 356918726 [](ancestors = 356918726,356917132,356910886)

@NikoAri
Copy link

NikoAri commented Dec 12, 2019

Why are we adding all empty png files for different scales???
Square150x150Logo.scale-200.png etc #Resolved

[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("Microsoft.ReactNative.Managed.UnitTests")]
[assembly: AssemblyCopyright("Copyright © 2019")]
Copy link

@NikoAri NikoAri Dec 12, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[](start = 41, length = 2)

(nit) remove extra space #Pending

[assembly: AssemblyCulture("")]
[assembly: AssemblyMetadata("TargetPlatform","UAP")]

// [assembly: AssemblyVersion("1.0.*")]
Copy link

@NikoAri NikoAri Dec 12, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

AssemblyVersion [](start = 14, length = 15)

remove? #Resolved

[assembly: AssemblyProduct("Microsoft.ReactNative.Managed.UnitTests")]
[assembly: AssemblyCopyright("Copyright © 2019")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
Copy link

@NikoAri NikoAri Dec 12, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

emblyCulture("")] [](start = 14, length = 17)

Can we just remove all empty fields? #Pending

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is an auto-generated file. I did not pay much attention to it. I will revisit and clean it up at some point.


In reply to: 356912075 [](ancestors = 356912075)

@vmoroz
Copy link
Member Author

vmoroz commented Dec 12, 2019

  • Generated: 2019-11-15 15:01:56.628356

Yes, we can discuss it offline. The starting point is that there is no C++/WinRT unit test project and we have to do something custom. I tried to bring MSTest to a C++/WinRT blank application and after a few hours I could not make it work. Let me know if you know about better alternative.


In reply to: 564788592 [](ancestors = 564788592,564767446,564728425)


Refers to: vnext/Microsoft.ReactNative.Cxx.UnitTests/catch.hpp:3 in d7599a1. [](commit_id = d7599a1, deletion_comment = False)

@vmoroz
Copy link
Member Author

vmoroz commented Dec 12, 2019

This is part of UWP projects that have UI. These are all generated files and are need for sample/test projects to run.


In reply to: 564800474 [](ancestors = 564800474)

case folly::dynamic::Type::STRING:
return JSValueType::String;
default:
return JSValueType::Null;
Copy link
Contributor

@NickGerleman NickGerleman Dec 12, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

JSValueType::Null; [](start = 13, length = 18)

why this vs VEC? #Pending

std::string m_string;
bool m_bool;
int64_t m_int64;
double m_double;
Copy link
Contributor

@NickGerleman NickGerleman Dec 12, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Seems like we kind of just reimplemented std::variant. Using variant might make some other things easier, e.g. I'm pretty sure the default move constructor would work instead of switching on type like we do right now. #Resolved

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It is more compact than use of std::variant. I do not see issues with implementing move constructor. The std::variant must have done it too, and we would not have any saving on code size. The std::variant seems to me as an overkill for the case when we can just use union.


In reply to: 356916675 [](ancestors = 356916675)

// Standalone inline functions implementation
//===========================================================================

void swap(JSValue &left, JSValue &right) noexcept {
Copy link
Contributor

@NickGerleman NickGerleman Dec 12, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

swap [](start = 5, length = 4)

Does std::swap not do the right thing? #Pending

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good point! It is the same as std::swap. I will remove it.


In reply to: 356917388 [](ancestors = 356917388)

namespace winrt::Microsoft::ReactNative::Bridge {

// Writes to a tree of JSValue objects.
struct JSValueTreeWriter : implements<JSValueTreeWriter, IJSValueWriter> {
Copy link
Contributor

@NickGerleman NickGerleman Dec 12, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a bit general, but what are the main benefits we see of this compared to using Dynamic and DynamicConverter? Without context, it feels like there's some overlap. #Resolved

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

folly::dynamic is not ABI safe. We cannot use it in the API. But developers want to have something like folly-dynamic is some cases. The JSValue is an immutable class to fulfill that need. We could use the folly::dynamic, but I want the native modules code that is outside of ABI boundary to not have any dependencies on any big third-party libraries. The Microsoft.ReactNative.Cxx is a small shared code library that we require to depend on.


In reply to: 356918350 [](ancestors = 356918350)

// Licensed under the MIT License.

#pragma once
#ifndef MICROSOFT_REACTNATIVE_JSVALUETREEWRITER
Copy link
Contributor

@NickGerleman NickGerleman Dec 12, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

MICROSOFT_REACTNATIVE_JSVALUETREEWRITER [](start = 8, length = 39)

Why do we need a header guard if we have #pragma once? #Resolved

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pragma once only protects from multiple use of code if it came from the same file. If the same file came from different source locations due to symlinking or because it was copied, then it will not protect. It is generally safer to provide the guard macros in all shared header files.
The gurad does not replace "pragma once" because the pragma enables compiler not even open the file second time.


In reply to: 356918446 [](ancestors = 356918446)

struct BoxedValue : implements<BoxedValue<T>, IBoxedValue> {
BoxedValue() noexcept {}

int64_t GetPtr() noexcept {
Copy link
Contributor

@NickGerleman NickGerleman Dec 12, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

int64_t [](start = 2, length = 7)

Is there a way to specify in IDL to use ptr width types (e.g. intptr_t). Using int64_t for pointers can get annoying if you ever need to do assignment on x86 since the compiler will worry about truncation. #Resolved

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agee. But, no, the new IDL 3.0 does not allow use of pointers or integers of pointer size. https://docs.microsoft.com/en-us/uwp/midl-3/intro
It is very similar to C# in that sense.


In reply to: 356920177 [](ancestors = 356920177)

// Licensed under the MIT License.

#pragma once
#ifndef MICROSOFT_REACTNATIVE_REACTMEMBERINFO
Copy link
Contributor

@NickGerleman NickGerleman Dec 12, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Mentioned this on another instance of this, but do we need the header guard? #Resolved

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Seeing this in a few more files as well


In reply to: 356920831 [](ancestors = 356920831)

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

See my answer in other place.


In reply to: 356921647 [](ancestors = 356921647,356920831)


namespace winrt::Microsoft::ReactNative::Bridge {

static const char *ErrorDefaultCode = "EUNSPECIFIED";
Copy link
Contributor

@NickGerleman NickGerleman Dec 12, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ErrorDefaultCode [](start = 19, length = 16)

nit: To me these seem more readbable with words reordered. E.g. DefaultErrorCode #Pending

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I will think about it.


In reply to: 356921223 [](ancestors = 356921223)


namespace winrt::Microsoft::ReactNative::Bridge {

static bool IsSimpleWhitespace(wchar_t c) noexcept {
Copy link
Contributor

@NickGerleman NickGerleman Dec 12, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

IsSimpleWhitespace [](start = 12, length = 18)

This seems really similar to std::isspace
#Resolved

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It maybe similar, but not the same. We must follow here the JSON specification. It states that it must be only these four characters: https://www.json.org/json-en.html


In reply to: 356922292 [](ancestors = 356922292)

namespace winrt::Microsoft::ReactNative::Bridge {

//===========================================================================
// JsonJSValueReader implementation
Copy link
Contributor

@NickGerleman NickGerleman Dec 12, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

JsonJSValueReader [](start = 3, length = 17)

Would this ever be useful outside of UT code? Wondering if we should share it outside the UT directory. #Pending

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, someone already asked for it too. I will move it out to the Microsoft.ReactNative.Cxx in a future PR.


In reply to: 356922710 [](ancestors = 356922710)

@NickGerleman
Copy link
Contributor

NickGerleman commented Dec 13, 2019

I noticed that this seems to add a new directory structure to the project, both in terms of directory naming and organization. Is there a plan to move other future code to this structure? E.g. wondering why this wasn't done in something like ReactWindowsCore. #Resolved

@vmoroz
Copy link
Member Author

vmoroz commented Dec 13, 2019

No, there is no new directory structure. At this point we are working on top of the Micah's prototype who created Microsoft.ReactNative project. At this point we just want to be consistent with what he started, but we already discussed renaming it to either React.Windows or ReactNative.Windows. Though, the question is how we can publish it as a NuGet package because Microsoft only owns the Microsoft top namespace and not the React or ReactNative namespace. We hope it will be fine to have ReactNative.Windows assemply while the NuGet packages has name that starts with Microsoft.


In reply to: 565261256 [](ancestors = 565261256)

ghost pushed a commit that referenced this pull request Jan 9, 2020
* GetFacebookReactInstance

* def

* ...

* Add __cdecl explicitly

* Update ReactUWP.vcxproj

* Update E2ETest to use ReactApplication (#3715)

* Update E2ETest to use ReactApplication

* Minor update

* Remove generating pch.pch

* Change files

* Shrink pch file size for Microsfot.ReactNative

* Revert "Remove generating pch.pch"

This reverts commit 39286c8.

* fix build

* Update Timeout

* applying package updates ***NO_CI***

* Update ParityStatus.md (#3555)

Documentation update based on #2852 completion

* Bump @microsoft/api-extractor from 7.6.1 to 7.7.0 (#3717)

Bumps [@microsoft/api-extractor](https://github.com/microsoft/rushstack) from 7.6.1 to 7.7.0.
- [Release notes](https://github.com/microsoft/rushstack/releases)
- [Commits](https://github.com/microsoft/rushstack/compare/@microsoft/api-extractor_v7.6.1...@microsoft/api-extractor_v7.7.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

* Bump @microsoft/api-documenter from 7.6.1 to 7.7.2 (#3724)

Bumps [@microsoft/api-documenter](https://github.com/microsoft/rushstack) from 7.6.1 to 7.7.2.
- [Release notes](https://github.com/microsoft/rushstack/releases)
- [Commits](https://github.com/microsoft/rushstack/compare/@microsoft/api-documenter_v7.6.1...@microsoft/api-documenter_v7.7.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

* Aligning Microsoft.Windows.CppWinRT Versions (#3733)

* Re-aligned SampleAppCPP project to match the others, #3728
* Updated all projects to 2.0.190730.2

* applying package updates ***NO_CI***

* Bump @types/react-native from 0.60.22 to 0.60.24 (#3740)

Bumps [@types/react-native](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react-native) from 0.60.22 to 0.60.24.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react-native)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

* Bump @types/node from 10.17.6 to 10.17.7 (#3741)

Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 10.17.6 to 10.17.7.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

* Update CONTRIBUTING.md

update instructions on how to install submodules in the case where you started out working on vnext then switched to current.

* Use ReactNative.V8JSI.Windows.0.1.6 and ReactNative.Hermes.Windows.0.1.6 (#3729)

* unify hermes and v8jsi version

* Change files

* use HERMES_Package and V8_Package

* remove them from reactuwp project

* applying package updates ***NO_CI***

* Reduce build time on pipeline (#3734)

* reduce build time

* changes

* fix pipeline failure

* use Add-AppxPackage

* E2E test still use windows-2019 image

* force install vs dependencies on vs2019 image for E2E test

* parameters.forceVSDependencies

* add ../../.ado/variables/vs2017.yml

* Revert "add ../../.ado/variables/vs2017.yml"

This reverts commit b829251.

* revert and force

* Fix pipeline error

* Add react-native-win32 package (#3762)

* Add react-native-win32 package

* Publish packages using access public

* applying package updates ***NO_CI***

* Miscellaneous fixes in ETW tracing and Systrace (#3745)

* Miscellaneous fixes in ETW tracing and Systrace

* Miscellaneous fixes in ETW tracing and Systrace - Adding missing files

* Submitting the ETW schema resouce dll and the register script

* Change files

* applying package updates ***NO_CI***

* Strongly typed value serialization and deserialization using IJSValueReader, JSValue, and IJSValueWriter (#3760)

* Merged implementation of strongly typed value serialization and deserialization using IJSValueReader, JSValue, and IJSValueWriter

* Change files

* Updated CLI template for C++ native modules

* applying package updates ***NO_CI***

* Update to react-native@0.60.0-microsoft.31 (#3769)

* Update to react-native@0.60.0-microsoft.31

* Change files

* Change files

* applying package updates ***NO_CI***

* Fix toggle debugger setting issue with ReactApplication (#3767)

* Fix toggle debugger setting issue with ReactApplication

* applying package updates ***NO_CI***

* Delete .pch after build on pipeline (#3771)

* delete pch after build

* applying package updates ***NO_CI***

* Redirect build directory to C: on vs2017-win2016 build machine (#3768)

* init

* rollback language to default

* use False

* Fix by comment and enable SampleApp on pipeline

* update

* disable msbuild SampleApp

* Apply suggestions from code review

* applying package updates ***NO_CI***

* ignore Bundle folder in sampleapps (#3778)

* Add tree dump utility to E2E test framework and fix Image border issue (#3754)

Add TreeDump utility to E2E test framework and image border fix with TreeDump tests.

* applying package updates ***NO_CI***

* Update yarn.lock

* Change files

* Added new unit test projects to ReactWindows-Universal solution. (#3775)

* Added new unit test projects to ReactWindows-Universal solution.

* Made C# code compatible with C# 7.0

* Fixed some build breaks found by CI

* Trying to fix the Microsoft.ReactNative.Cxx.UnitTests build in CI loop

* Fixed Microsoft.ReactNative.Cxx.UnitTests project build break in CI and removed AMD64.

* Removed C# unit tests project

* applying package updates ***NO_CI***

* Update document for removing ReleaseBundle and DebugBundle (#3702)

* Update doc to removing DebugBundle and ReleaseBundle

* Change files

* applying package updates ***NO_CI***

* CLI reads name from app.json if it doesn't exist in package.json (#3781)

* read name from app.json

* Change files

* applying package updates ***NO_CI***

* Change CLI to add prompt if no --template parameter is supplied (#3784)

* merge

* add prompt

* Change files

* applying package updates ***NO_CI***

* Conditionally use BitmapImage (#3712)

* Use BitmapImage for cover, contain, and stretch resizeModes

* Fix comments

* timing issues

* wip

* Move 'center' resizeMode to BitmapImage

* code cleanup

* ReactImage->Source() refactor

* Clean up for PR

* Change files

* PR feedback

* only create ImageBrush and BitmapImage is needed

* Remove memory stream cache + flicker workaround

* don't cache availablesize + formatting

* SizeChanged event handler

* Fix dynamic resizeMode switch edge case

* Fix merge conflict + add inline data to image playground

* fix playground buildci

* applying package updates ***NO_CI***

* Bump rnpm-plugin-windows from 0.3.8 to 0.4.0 (#3800)

Bumps [rnpm-plugin-windows](https://github.com/ReactWindows/react-native-windows) from 0.3.8 to 0.4.0.
- [Release notes](https://github.com/ReactWindows/react-native-windows/releases)
- [Commits](rnpm-plugin-windows_v0.3.8...rnpm-plugin-windows_v0.4.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

* Bump pretty-format from 24.8.0 to 24.9.0 (#3764)

Bumps [pretty-format](https://github.com/facebook/jest/tree/HEAD/packages/pretty-format) from 24.8.0 to 24.9.0.
- [Release notes](https://github.com/facebook/jest/releases)
- [Changelog](https://github.com/facebook/jest/blob/master/CHANGELOG.md)
- [Commits](https://github.com/facebook/jest/commits/v24.9.0/packages/pretty-format)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

* Bump stacktrace-parser from 0.1.6 to 0.1.8 (#3765)

Bumps [stacktrace-parser](https://github.com/errwischt/stacktrace-parser) from 0.1.6 to 0.1.8.
- [Release notes](https://github.com/errwischt/stacktrace-parser/releases)
- [Commits](https://github.com/errwischt/stacktrace-parser/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

* Bump @types/react-native from 0.60.24 to 0.60.25 (#3757)

Bumps [@types/react-native](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react-native) from 0.60.24 to 0.60.25.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react-native)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

* Port windowsbrush code into react-native-windows (#3789)

* merge

* move windowsBrush stuff over from fork

* added RNTester page

* Change files

* CR comments

* applying package updates ***NO_CI***

* Make sure that C# and C++ SampleApp projects identifiers have proper CS and Cpp suffixes to avoid name collisions. (#3802)

* Removed Bridge sub-namespace in favor of Microsoft.ReactNative (#3804)

* Removed Bridge sub-namespace in favor of Microsoft.ReactNative

* Change files

* Fixed E2ETest build break

* applying package updates ***NO_CI***

* fixing case issues (#3806)

* Bump @react-native-community/cli from 2.9.0 to 2.10.0 (#3663)

Bumps [@react-native-community/cli](https://github.com/react-native-community/react-native-cli) from 2.9.0 to 2.10.0.
- [Release notes](https://github.com/react-native-community/react-native-cli/releases)
- [Commits](react-native-community/cli@v2.9.0...v2.10.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

* reduce build flavors for RNWUniversalPR  (#3773)

* reduce build flavours

* reenable DesktopPR

* \\

* Update .ado/windows-vs-pr.yml

* Bunch of style properties fixes and TreeDump utility updates (#3793)

* Support CornerRadius for TextInput

* Fix cornerRadius issue for TextInput and some updates to TreeDump, plus new test for control style.

* applying package updates ***NO_CI***

* Get flow clean, and turn on flow-check during build (#3730)

* Get flow check working

* Get flow clean, and turn on flow check during build

* Change files

* fix

* Move RNTester files to matching location from RN\rntester

* PR feedback

* fix

* applying package updates ***NO_CI***

* SourceCode module should provide scriptURL when running livereload without webdebugger (#3803)

* Minor fixups after initial rn-win32 checkin

* Provide source uri in SourceCode module when using livereload

* Provide source uri in SourceCode module when using livereload

* Change files

* build fix

* fix build

* fix build

* applying package updates ***NO_CI***

* Remove remaining need for fork of RN for win32 JS (#3811)

* Remove remaining need for fork of RN for win32 JS

* Change files

* Build fix

* Change files

* applying package updates ***NO_CI***

* Export ability to query names of loaded native modules (master branch) (#3813)

* Export ability to query native module names

This is needed for testability (intenral CR using it out now). It's not ideal to add more exports, but we will always have to have some between instance interfaces.

* Change files

* Fix x86 mangeled name

* applying package updates ***NO_CI***

* Changed Microsoft.ReactNative to be independent from ReactUWP (#3809)

* Changed Microsoft.ReactNative to be independent from ReactUWP

* Removed ReactUWP project from the ReactUWPTestApp to reduce compiled code size.

* Removed commented code from pch.h

* Moved WindowsBrushExample.windows.tsx to fix RNTester bundle building

* Updated TreeDumps to fix test cases.

* An attempt to fix E2ETest

* Changed ViewPanel naemspace in the E2ETest tree dumps

* Changed namespace for ViewPanel in other E2ETest tree dumps

* applying package updates ***NO_CI***

* Allow UAP SDK to be in other folder other than ProgramFiles (#3815)

* check UAP in SDK10 installation folder

* applying package updates ***NO_CI***

* Add InjectBundleContent target (#3821)

* add InjectBundleContent target

* Change files

* format

* applying package updates ***NO_CI***

* Bump @types/react-native from 0.60.25 to 0.60.28 (#3831)

Bumps [@types/react-native](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react-native) from 0.60.25 to 0.60.28.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react-native)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

* [Security] Bump handlebars from 4.1.2 to 4.5.3 (#3818)

Bumps [handlebars](https://github.com/wycats/handlebars.js) from 4.1.2 to 4.5.3. **This update includes a security fix.**
- [Release notes](https://github.com/wycats/handlebars.js/releases)
- [Changelog](https://github.com/wycats/handlebars.js/blob/master/release-notes.md)
- [Commits](handlebars-lang/handlebars.js@v4.1.2...v4.5.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

* Call StartAnimation on m_scaleCombined for ScaleX / ScaleY animations (#3829)

* Call StartAnimatiom on m_scaleCombined for ScaleX / ScaleY animations

There was a copy-paste error previously that started m_translationCombined instead.

* Change files

* applying package updates ***NO_CI***

* Remove remaining need for fork of RN for win32 JS (#3834)

* Remove remaining need for fork of RN for win32 JS

* Change files

* Build fix

* Change files

* Enable flow type checking in win32

* Fix build

* applying package updates ***NO_CI***

* Rename GetFacebookReactInstance

* Fix code review comment

* Update TurboModuleUtils.cpp

* Fix lint errors

Co-authored-by: Di Da <dida@microsoft.com>
Co-authored-by: rnbot <53619745+rnbot@users.noreply.github.com>
Co-authored-by: Harini Kannan <harinik@microsoft.com>
Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
Co-authored-by: Jon Thysell <thysell@gmail.com>
Co-authored-by: kmelmon <33470154+kmelmon@users.noreply.github.com>
Co-authored-by: Canhua Li <canli@microsoft.com>
Co-authored-by: Andrew Coates <30809111+acoates-ms@users.noreply.github.com>
Co-authored-by: Anandraj <mganandraj@outlook.com>
Co-authored-by: Vladimir Morozov <vmoroz@users.noreply.github.com>
Co-authored-by: Marlene Cota <marlenecota@gmail.com>
Co-authored-by: Mike Kaufman <mike-kaufman@users.noreply.github.com>
Co-authored-by: Nick Gerleman <nick@nickgerleman.com>
Co-authored-by: Tom Shea <tom@shea.at>
This pull request was closed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
AutoMerge Causes a PR to be automatically merged once all requirements are passed (label drives bot activity)
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants