react-native-windows 0.67.7 → 0.67.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/CHANGELOG.json +162 -0
  2. package/CHANGELOG.md +68 -8
  3. package/Chakra/ChakraHelpers.cpp +0 -1
  4. package/Directory.Build.props +4 -0
  5. package/Folly/Folly.vcxproj +4 -5
  6. package/Libraries/Network/RCTNetworkingWinShared.js +7 -0
  7. package/Microsoft.ReactNative/Base/CoreNativeModules.cpp +2 -3
  8. package/Microsoft.ReactNative/IReactContext.cpp +17 -0
  9. package/Microsoft.ReactNative/IReactContext.h +2 -0
  10. package/Microsoft.ReactNative/IReactContext.idl +27 -0
  11. package/Microsoft.ReactNative/Modules/CreateModules.cpp +3 -3
  12. package/Microsoft.ReactNative/packages.config +1 -1
  13. package/Microsoft.ReactNative.Cxx/JSI/NodeApiJsiRuntime.cpp +26 -16
  14. package/Microsoft.ReactNative.Cxx/JSI/NodeApiJsiRuntime.h +52 -0
  15. package/Microsoft.ReactNative.Cxx/NativeModules.h +2 -2
  16. package/Mso/src/dispatchQueue/threadPoolScheduler_win.cpp +96 -4
  17. package/PropertySheets/Generated/PackageVersion.g.props +2 -2
  18. package/PropertySheets/JSEngine.props +1 -1
  19. package/Scripts/OfficeReact.Win32.nuspec +1 -1
  20. package/Shared/BaseScriptStoreImpl.cpp +1 -1
  21. package/Shared/CppRuntimeOptions.h +50 -0
  22. package/Shared/CreateModules.h +20 -1
  23. package/Shared/InspectorPackagerConnection.cpp +7 -5
  24. package/Shared/InspectorPackagerConnection.h +2 -2
  25. package/Shared/JSI/ChakraApi.cpp +0 -1
  26. package/Shared/JSI/ChakraRuntime.cpp +0 -1
  27. package/Shared/JSI/NapiJsiV8RuntimeHolder.cpp +72 -2
  28. package/Shared/JSI/NapiJsiV8RuntimeHolder.h +3 -1
  29. package/Shared/Modules/BlobModule.cpp +376 -0
  30. package/Shared/Modules/BlobModule.h +153 -0
  31. package/Shared/Modules/CxxModuleUtilities.cpp +19 -0
  32. package/Shared/Modules/CxxModuleUtilities.h +23 -0
  33. package/Shared/Modules/FileReaderModule.cpp +156 -0
  34. package/Shared/Modules/FileReaderModule.h +54 -0
  35. package/Shared/Modules/HttpModule.cpp +201 -0
  36. package/Shared/Modules/HttpModule.h +60 -0
  37. package/Shared/Modules/IBlobPersistor.h +30 -0
  38. package/Shared/Modules/IHttpModuleProxy.h +30 -0
  39. package/Shared/Modules/IRequestBodyHandler.h +52 -0
  40. package/Shared/Modules/IResponseHandler.h +27 -0
  41. package/Shared/Modules/IUriHandler.h +37 -0
  42. package/Shared/Modules/IWebSocketModuleContentHandler.h +26 -0
  43. package/Shared/Modules/IWebSocketModuleProxy.h +22 -0
  44. package/Shared/Modules/NetworkingModule.cpp +1 -1
  45. package/Shared/Modules/WebSocketModule.cpp +97 -23
  46. package/Shared/Modules/WebSocketModule.h +35 -6
  47. package/Shared/Networking/IHttpResource.h +101 -0
  48. package/Shared/{IWebSocketResource.h → Networking/IWebSocketResource.h} +3 -3
  49. package/Shared/Networking/OriginPolicy.h +15 -0
  50. package/Shared/Networking/OriginPolicyHttpFilter.cpp +747 -0
  51. package/Shared/Networking/OriginPolicyHttpFilter.h +112 -0
  52. package/Shared/Networking/WinRTHttpResource.cpp +465 -0
  53. package/Shared/Networking/WinRTHttpResource.h +86 -0
  54. package/Shared/Networking/WinRTTypes.h +33 -0
  55. package/Shared/{WinRTWebSocketResource.cpp → Networking/WinRTWebSocketResource.cpp} +31 -22
  56. package/Shared/{WinRTWebSocketResource.h → Networking/WinRTWebSocketResource.h} +3 -3
  57. package/Shared/OInstance.cpp +41 -4
  58. package/Shared/OInstance.h +8 -4
  59. package/Shared/RuntimeOptions.cpp +96 -15
  60. package/Shared/RuntimeOptions.h +32 -8
  61. package/Shared/Shared.vcxitems +28 -5
  62. package/Shared/Shared.vcxitems.filters +93 -15
  63. package/Shared/Utils/WinRTConversions.cpp +22 -0
  64. package/Shared/Utils/WinRTConversions.h +15 -0
  65. package/fmt/fmt.vcxproj +4 -5
  66. package/package.json +1 -1
  67. package/Shared/IHttpResource.h +0 -34
package/CHANGELOG.json CHANGED
@@ -1,6 +1,168 @@
1
1
  {
2
2
  "name": "react-native-windows",
3
3
  "entries": [
4
+ {
5
+ "date": "Mon, 30 May 2022 15:09:33 GMT",
6
+ "tag": "react-native-windows_v0.67.10",
7
+ "version": "0.67.10",
8
+ "comments": {
9
+ "patch": [
10
+ {
11
+ "author": "acoates@microsoft.com",
12
+ "package": "react-native-windows",
13
+ "commit": "1d8934a3235695ce7ef5796976a2e5c0413d3ef8",
14
+ "comment": "Expose LoadingState on ReactContext"
15
+ },
16
+ {
17
+ "author": "vmorozov@microsoft.com",
18
+ "package": "react-native-windows",
19
+ "commit": "6d6015d5f24540e355160a5be62af1cc1a3903b0",
20
+ "comment": "Support PreparedScriptStore for V8 Node-API."
21
+ },
22
+ {
23
+ "author": "julio@rochsquadron.net",
24
+ "package": "react-native-windows",
25
+ "commit": "932c3b9e6732b83d60b608d3d44fed7f4cc6a6de",
26
+ "comment": "Implement Blob module (#9352)"
27
+ },
28
+ {
29
+ "author": "vmorozov@microsoft.com",
30
+ "package": "react-native-windows",
31
+ "commit": "13824a0805d2e9bd2eef44852029b193daf56664",
32
+ "comment": "Fix RuntimeOptions for RNW Desktop"
33
+ },
34
+ {
35
+ "author": "jthysell@microsoft.com",
36
+ "package": "react-native-windows",
37
+ "commit": "93498b92be5a6900b06b35b20c4e81ba18a10647",
38
+ "comment": "[0.67] Change CG registration for folly and fmt from `other` to `git`"
39
+ }
40
+ ]
41
+ }
42
+ },
43
+ {
44
+ "date": "Mon, 02 May 2022 15:10:57 GMT",
45
+ "tag": "react-native-windows_v0.67.9",
46
+ "version": "0.67.9",
47
+ "comments": {
48
+ "patch": [
49
+ {
50
+ "author": "53799235+ZihanChen-MSFT@users.noreply.github.com",
51
+ "package": "react-native-windows",
52
+ "commit": "not available",
53
+ "comment": "Fix clang-check errors in NativeModules.h"
54
+ },
55
+ {
56
+ "author": "vmorozov@microsoft.com",
57
+ "package": "react-native-windows",
58
+ "commit": "not available",
59
+ "comment": "Fix JSI for Node-API and update V8 to 0.65.11"
60
+ },
61
+ {
62
+ "author": "julio.rocha@microsoft.com",
63
+ "package": "react-native-windows",
64
+ "commit": "not available",
65
+ "comment": "Handle abrupt WebSocket connection interruption (#9829)"
66
+ }
67
+ ]
68
+ }
69
+ },
70
+ {
71
+ "date": "Mon, 02 May 2022 15:10:43 GMT",
72
+ "tag": "react-native-windows_v0.67.9",
73
+ "version": "0.67.9",
74
+ "comments": {
75
+ "patch": [
76
+ {
77
+ "author": "53799235+ZihanChen-MSFT@users.noreply.github.com",
78
+ "package": "react-native-windows",
79
+ "commit": "9458dad1646fa2a8a5afea7383133eeca144fb88",
80
+ "comment": "Fix clang-check errors in NativeModules.h"
81
+ },
82
+ {
83
+ "author": "vmorozov@microsoft.com",
84
+ "package": "react-native-windows",
85
+ "commit": "38c0547235927e51c08bd17b08b2f6be878fd0a5",
86
+ "comment": "Fix JSI for Node-API and update V8 to 0.65.11"
87
+ },
88
+ {
89
+ "author": "julio.rocha@microsoft.com",
90
+ "package": "react-native-windows",
91
+ "commit": "e3ef52d578991181c00a6487c902ce4c31cc702a",
92
+ "comment": "Handle abrupt WebSocket connection interruption (#9829)"
93
+ }
94
+ ]
95
+ }
96
+ },
97
+ {
98
+ "date": "Mon, 25 Apr 2022 15:11:36 GMT",
99
+ "tag": "react-native-windows_v0.67.8",
100
+ "version": "0.67.8",
101
+ "comments": {
102
+ "patch": [
103
+ {
104
+ "author": "vmorozov@microsoft.com",
105
+ "package": "react-native-windows",
106
+ "commit": "not available",
107
+ "comment": "Fix Sequential DispatchQueue deadlock on shutdown"
108
+ }
109
+ ]
110
+ }
111
+ },
112
+ {
113
+ "date": "Mon, 25 Apr 2022 15:11:22 GMT",
114
+ "tag": "react-native-windows_v0.67.8",
115
+ "version": "0.67.8",
116
+ "comments": {
117
+ "patch": [
118
+ {
119
+ "author": "vmorozov@microsoft.com",
120
+ "package": "react-native-windows",
121
+ "commit": "d317482299129e89a8bdf57a8ccefe6238e0a541",
122
+ "comment": "Fix Sequential DispatchQueue deadlock on shutdown"
123
+ }
124
+ ]
125
+ }
126
+ },
127
+ {
128
+ "date": "Mon, 04 Apr 2022 15:13:28 GMT",
129
+ "tag": "react-native-windows_v0.67.7",
130
+ "version": "0.67.7",
131
+ "comments": {
132
+ "patch": [
133
+ {
134
+ "author": "asklar@microsoft.com",
135
+ "package": "react-native-windows",
136
+ "commit": "not available",
137
+ "comment": "MustBeNoExceptVoidFunctor should depend on the template type parameter to avoid being evaluated too early (#9609)"
138
+ },
139
+ {
140
+ "author": "34109996+chiaramooney@users.noreply.github.com",
141
+ "package": "react-native-windows",
142
+ "commit": "not available",
143
+ "comment": "Promote 0.67 to legacy"
144
+ },
145
+ {
146
+ "author": "beachball",
147
+ "package": "react-native-windows",
148
+ "comment": "Bump @react-native-windows/cli to v0.67.2",
149
+ "commit": "4d4f19bef79e0fb2f6198b18c9e77d0da98a6938"
150
+ },
151
+ {
152
+ "author": "beachball",
153
+ "package": "react-native-windows",
154
+ "comment": "Bump @react-native-windows/virtualized-list to v0.67.1",
155
+ "commit": "4d4f19bef79e0fb2f6198b18c9e77d0da98a6938"
156
+ },
157
+ {
158
+ "author": "beachball",
159
+ "package": "react-native-windows",
160
+ "comment": "Bump @react-native-windows/codegen to v0.67.1",
161
+ "commit": "4d4f19bef79e0fb2f6198b18c9e77d0da98a6938"
162
+ }
163
+ ]
164
+ }
165
+ },
4
166
  {
5
167
  "date": "Mon, 04 Apr 2022 15:12:55 GMT",
6
168
  "tag": "react-native-windows_v0.67.7",
package/CHANGELOG.md CHANGED
@@ -1,21 +1,81 @@
1
1
  # Change Log - react-native-windows
2
2
 
3
- This log was last generated on Mon, 04 Apr 2022 15:12:55 GMT and should not be manually modified.
3
+ This log was last generated on Mon, 30 May 2022 15:09:33 GMT and should not be manually modified.
4
4
 
5
5
  <!-- Start content -->
6
6
 
7
- ## 0.67.7
7
+ ## 0.67.10
8
8
 
9
- Mon, 04 Apr 2022 15:12:55 GMT
9
+ Mon, 30 May 2022 15:09:33 GMT
10
10
 
11
11
  ### Patches
12
12
 
13
- - MustBeNoExceptVoidFunctor should depend on the template type parameter to avoid being evaluated too early (#9609) (asklar@microsoft.com)
14
- - Promote 0.67 to legacy (34109996+chiaramooney@users.noreply.github.com)
15
- - Bump @react-native-windows/cli to v0.67.2
16
- - Bump @react-native-windows/virtualized-list to v0.67.1
17
- - Bump @react-native-windows/codegen to v0.67.1
13
+ - Expose LoadingState on ReactContext (acoates@microsoft.com)
14
+ - Support PreparedScriptStore for V8 Node-API. (vmorozov@microsoft.com)
15
+ - Implement Blob module (#9352) (julio@rochsquadron.net)
16
+ - Fix RuntimeOptions for RNW Desktop (vmorozov@microsoft.com)
17
+ - [0.67] Change CG registration for folly and fmt from `other` to `git` (jthysell@microsoft.com)
18
18
 
19
+ ## 0.67.9
20
+
21
+ Mon, 02 May 2022 15:10:57 GMT
22
+
23
+ ### Patches
24
+
25
+ - Fix clang-check errors in NativeModules.h (53799235+ZihanChen-MSFT@users.noreply.github.com)
26
+ - Fix JSI for Node-API and update V8 to 0.65.11 (vmorozov@microsoft.com)
27
+ - Handle abrupt WebSocket connection interruption (#9829) (julio.rocha@microsoft.com)
28
+
29
+ ## 0.67.9
30
+
31
+ Mon, 02 May 2022 15:10:43 GMT
32
+
33
+ ### Patches
34
+
35
+ - Fix clang-check errors in NativeModules.h (53799235+ZihanChen-MSFT@users.noreply.github.com)
36
+ - Fix JSI for Node-API and update V8 to 0.65.11 (vmorozov@microsoft.com)
37
+ - Handle abrupt WebSocket connection interruption (#9829) (julio.rocha@microsoft.com)
38
+
39
+ ## 0.67.8
40
+
41
+ Mon, 25 Apr 2022 15:11:36 GMT
42
+
43
+ ### Patches
44
+
45
+ - Fix Sequential DispatchQueue deadlock on shutdown (vmorozov@microsoft.com)
46
+
47
+ ## 0.67.8
48
+
49
+ Mon, 25 Apr 2022 15:11:22 GMT
50
+
51
+ ### Patches
52
+
53
+ - Fix Sequential DispatchQueue deadlock on shutdown (vmorozov@microsoft.com)
54
+
55
+ ## 0.67.7
56
+
57
+ Mon, 04 Apr 2022 15:13:28 GMT
58
+
59
+ ### Patches
60
+
61
+ - MustBeNoExceptVoidFunctor should depend on the template type parameter to avoid being evaluated too early (#9609) (asklar@microsoft.com)
62
+ - Promote 0.67 to legacy (34109996+chiaramooney@users.noreply.github.com)
63
+ - Bump @react-native-windows/cli to v0.67.2
64
+ - Bump @react-native-windows/virtualized-list to v0.67.1
65
+ - Bump @react-native-windows/codegen to v0.67.1
66
+
67
+ ## 0.67.7
68
+
69
+ Mon, 04 Apr 2022 15:12:55 GMT
70
+
71
+ ### Patches
72
+
73
+ - MustBeNoExceptVoidFunctor should depend on the template type parameter to avoid being evaluated too early (#9609) (asklar@microsoft.com)
74
+ - Promote 0.67 to legacy (34109996+chiaramooney@users.noreply.github.com)
75
+ - Bump @react-native-windows/cli to v0.67.2
76
+ - Bump @react-native-windows/virtualized-list to v0.67.1
77
+ - Bump @react-native-windows/codegen to v0.67.1
78
+
19
79
  ## 0.67.6
20
80
 
21
81
  Tue, 29 Mar 2022 17:35:30 GMT
@@ -3,7 +3,6 @@
3
3
 
4
4
  #include "pch.h"
5
5
 
6
- #include <RuntimeOptions.h>
7
6
  #include "ChakraHelpers.h"
8
7
  #include "ChakraUtils.h"
9
8
  #include "ChakraValue.h"
@@ -18,8 +18,12 @@
18
18
  The PR (windows-vs-pr.yml) and CI (publish.yml() turn it back on.
19
19
  -->
20
20
  <EnableSourceLink Condition="'$(EnableSourceLink)' == ''">false</EnableSourceLink>
21
+ <!-- When bumping the Folly version, be sure to bump the git hash of that version's commit too. -->
21
22
  <FollyVersion>2021.06.28.00</FollyVersion>
23
+ <FollyCommitHash>f434460f8a98e85f3ddb75390ddd1cc330c8f658</FollyCommitHash>
24
+ <!-- When bumping the fmt version, be sure to bump the git hash of that version's commit too. -->
22
25
  <FmtVersion>7.1.3</FmtVersion>
26
+ <FmtCommitHash>7bdf0628b1276379886c7f6dda2cef2b3b374f0b</FmtCommitHash>
23
27
  </PropertyGroup>
24
28
 
25
29
  <PropertyGroup Label="Configuration">
@@ -299,11 +299,10 @@
299
299
  "Registrations": [
300
300
  {
301
301
  "Component": {
302
- "Type": "other",
303
- "Other": {
304
- "Name": "folly",
305
- "Version": "$(FollyVersion)",
306
- "DownloadUrl": "https://github.com/facebook/folly/archive/v$(FollyVersion).zip"
302
+ "Type": "git",
303
+ "Git": {
304
+ "RepositoryUrl": "https://github.com/facebook/folly",
305
+ "CommitHash": "$(FollyCommitHash)"
307
306
  }
308
307
  },
309
308
  "DevelopmentDependency": false
@@ -61,6 +61,11 @@ type RCTNetworkingEventDefinitions = $ReadOnly<{
61
61
  ],
62
62
  }>;
63
63
 
64
+ let _requestId = 1;
65
+ function generateRequestId(): number {
66
+ return _requestId++;
67
+ }
68
+
64
69
  const RCTNetworking = {
65
70
  addListener<K: $Keys<RCTNetworkingEventDefinitions>>(
66
71
  eventType: K,
@@ -82,11 +87,13 @@ const RCTNetworking = {
82
87
  callback: (requestId: number) => void,
83
88
  withCredentials: boolean,
84
89
  ) {
90
+ const requestId = generateRequestId();
85
91
  const body = convertRequestBody(data);
86
92
  RCTNetworkingNative.sendRequest(
87
93
  {
88
94
  method,
89
95
  url,
96
+ requestId,
90
97
  data: {...body, trackingName},
91
98
  headers,
92
99
  responseType,
@@ -13,7 +13,6 @@
13
13
  #include <Modules/ClipboardModule.h>
14
14
  #include <Modules/LinkingManagerModule.h>
15
15
  #include <Modules/NativeUIManager.h>
16
- #include <Modules/NetworkingModule.h>
17
16
  #include <Modules/PaperUIManagerModule.h>
18
17
  #include <Threading/MessageQueueThreadFactory.h>
19
18
 
@@ -50,8 +49,8 @@ std::vector<facebook::react::NativeModuleDescription> GetCoreModules(
50
49
  std::vector<facebook::react::NativeModuleDescription> modules;
51
50
 
52
51
  modules.emplace_back(
53
- Microsoft::React::NetworkingModule::Name,
54
- []() { return std::make_unique<Microsoft::React::NetworkingModule>(); },
52
+ "Networking",
53
+ [props = context->Properties()]() { return Microsoft::React::CreateHttpModule(props); },
55
54
  jsMessageQueue);
56
55
 
57
56
  modules.emplace_back(
@@ -96,6 +96,23 @@ Windows::Foundation::IInspectable ReactContext::JSRuntime() noexcept {
96
96
  return m_context->JsiRuntime();
97
97
  }
98
98
 
99
+ LoadingState ReactContext::LoadingState() noexcept {
100
+ switch (m_context->State()) {
101
+ case Mso::React::ReactInstanceState::Loading:
102
+ case Mso::React::ReactInstanceState::WaitingForDebugger:
103
+ return LoadingState::Loading;
104
+ case Mso::React::ReactInstanceState::Loaded:
105
+ return LoadingState::Loaded;
106
+ case Mso::React::ReactInstanceState::HasError:
107
+ return LoadingState::HasError;
108
+ case Mso::React::ReactInstanceState::Unloaded:
109
+ return LoadingState::Unloaded;
110
+ default:
111
+ assert(false);
112
+ return LoadingState::HasError;
113
+ };
114
+ }
115
+
99
116
  #ifndef CORE_ABI
100
117
  // Deprecated: Use XamlUIService directly.
101
118
  void ReactContext::DispatchEvent(
@@ -42,6 +42,8 @@ struct ReactContext : winrt::implements<ReactContext, IReactContext> {
42
42
  IReactDispatcher UIDispatcher() noexcept;
43
43
  IReactDispatcher JSDispatcher() noexcept;
44
44
  IInspectable JSRuntime() noexcept;
45
+ LoadingState LoadingState() noexcept;
46
+
45
47
  #ifndef CORE_ABI
46
48
  void DispatchEvent(
47
49
  xaml::FrameworkElement const &view,
@@ -13,6 +13,29 @@ import "IReactPropertyBag.idl";
13
13
 
14
14
  namespace Microsoft.ReactNative
15
15
  {
16
+
17
+ DOC_STRING(
18
+ "Used to represent the state of the React Native JavaScript instance")
19
+ enum LoadingState
20
+ {
21
+ DOC_STRING(
22
+ "The instance is loading the JavaScript bundle and initial instance setup. Calls to run JavaScript functions will be queued to run once the instance is fully loaded."
23
+ )
24
+ Loading = 0,
25
+ DOC_STRING(
26
+ "The instance is in a ready state. Calls to run JavaScript functions will be run as soon as they are posted to the JavaScript instance."
27
+ )
28
+ Loaded = 1,
29
+ DOC_STRING(
30
+ "The instance has hit an error. Calls to run JavaScript functions will not be run."
31
+ )
32
+ HasError = 2,
33
+ DOC_STRING(
34
+ "The instance has successfully unloaded. Calls to run JavaScript functions will not be run."
35
+ )
36
+ Unloaded = 3
37
+ };
38
+
16
39
  [webhosthidden]
17
40
  DOC_STRING("An immutable snapshot of the @ReactInstanceSettings used to create the current React instance.")
18
41
  interface IReactSettingsSnapshot
@@ -167,5 +190,9 @@ namespace Microsoft.ReactNative
167
190
  "The `paramsArgWriter` is a @JSValueArgWriter delegate that receives @IJSValueWriter to serialize "
168
191
  "the event parameters.")
169
192
  void EmitJSEvent(String eventEmitterName, String eventName, JSValueArgWriter paramsArgWriter);
193
+
194
+ DOC_STRING(
195
+ "Gets the state of the ReactNative instance.")
196
+ LoadingState LoadingState { get; };
170
197
  }
171
198
  } // namespace Microsoft.ReactNative
@@ -2,10 +2,10 @@
2
2
  // Licensed under the MIT License.
3
3
 
4
4
  #include <CreateModules.h>
5
+ #include <Networking/WinRTWebSocketResource.h>
5
6
  #include <QuirkSettings.h>
6
7
  #include <React.h>
7
8
  #include <ReactPropertyBag.h>
8
- #include <WinRTWebSocketResource.h>
9
9
 
10
10
  // React Native
11
11
  #include <cxxreact/CxxModule.h>
@@ -17,11 +17,11 @@ using winrt::Microsoft::ReactNative::ReactPropertyBag;
17
17
  using winrt::Microsoft::ReactNative::ReactPropertyId;
18
18
  using winrt::Microsoft::ReactNative::implementation::QuirkSettings;
19
19
 
20
- namespace Microsoft::React {
20
+ namespace Microsoft::React::Networking {
21
21
 
22
22
  std::shared_ptr<IWebSocketResource> IWebSocketResource::Make() {
23
23
  std::vector<winrt::Windows::Security::Cryptography::Certificates::ChainValidationResult> certExceptions;
24
24
  return std::make_shared<WinRTWebSocketResource>(std::move(certExceptions));
25
25
  }
26
26
 
27
- } // namespace Microsoft::React
27
+ } // namespace Microsoft::React::Networking
@@ -8,5 +8,5 @@
8
8
  <package id="Microsoft.Windows.CppWinRT" version="2.0.210312.4" targetFramework="native" />
9
9
  <package id="Microsoft.WinUI" version="3.0.0-preview4.210210.4" targetFramework="native" />
10
10
  <package id="ReactNative.Hermes.Windows" version="0.10.0-ms.1" targetFramework="native" />
11
- <!-- package id="ReactNative.V8Jsi.Windows.UWP" version="0.65.5" targetFramework="native" / -->
11
+ <!-- package id="ReactNative.V8Jsi.Windows.UWP" version="0.65.15" targetFramework="native" / -->
12
12
  </packages>
@@ -190,7 +190,7 @@ struct NapiJsiRuntime : facebook::jsi::Runtime {
190
190
  facebook::jsi::Function createFunctionFromHostFunction(
191
191
  const facebook::jsi::PropNameID &name,
192
192
  unsigned int paramCount,
193
- facebook::jsi::HostFunctionType type) override;
193
+ facebook::jsi::HostFunctionType func) override;
194
194
  facebook::jsi::Value call(
195
195
  const facebook::jsi::Function &func,
196
196
  const facebook::jsi::Value &jsThis,
@@ -440,6 +440,7 @@ struct NapiJsiRuntime : facebook::jsi::Runtime {
440
440
 
441
441
  private: // Shared NAPI call helpers
442
442
  napi_value RunScript(napi_value script, const char *sourceUrl);
443
+ napi_value RunScriptBuffer(const std::shared_ptr<const facebook::jsi::Buffer> &buffer, const char *sourceUrl);
443
444
  std::vector<uint8_t> SerializeScript(napi_value script, const char *sourceUrl);
444
445
  napi_value RunSerializedScript(span<const uint8_t> serialized, napi_value source, const char *sourceUrl);
445
446
  napi_ext_ref CreateReference(napi_value value) const;
@@ -475,7 +476,7 @@ struct NapiJsiRuntime : facebook::jsi::Runtime {
475
476
  void SetProperty(napi_value object, napi_value propertyId, napi_value value, napi_property_attributes attrs) const;
476
477
  napi_value CreateArray(size_t length) const;
477
478
  void SetElement(napi_value array, uint32_t index, napi_value value) const;
478
- static napi_value JsiHostFunctionCallback(napi_env env, napi_callback_info info) noexcept;
479
+ static napi_value __cdecl JsiHostFunctionCallback(napi_env env, napi_callback_info info) noexcept;
479
480
  napi_value CreateExternalFunction(napi_value name, int32_t paramCount, napi_callback callback, void *callbackData);
480
481
  napi_value CreateExternalObject(void *data, napi_finalize finalizeCallback) const;
481
482
  template <typename T>
@@ -620,9 +621,7 @@ NapiJsiRuntime::NapiJsiRuntime(napi_env env) noexcept : m_env{env} {
620
621
 
621
622
  Value NapiJsiRuntime::evaluateJavaScript(const shared_ptr<const Buffer> &buffer, const string &sourceUrl) {
622
623
  EnvScope envScope{m_env};
623
- napi_value script = CreateStringUtf8(buffer->data(), buffer->size());
624
- napi_value result = RunScript(script, sourceUrl.c_str());
625
-
624
+ napi_value result = RunScriptBuffer(buffer, sourceUrl.c_str());
626
625
  return ToJsiValue(result);
627
626
  }
628
627
 
@@ -1406,6 +1405,21 @@ napi_value NapiJsiRuntime::RunScript(napi_value script, const char *sourceUrl) {
1406
1405
  return result;
1407
1406
  }
1408
1407
 
1408
+ napi_value NapiJsiRuntime::RunScriptBuffer(
1409
+ const std::shared_ptr<const facebook::jsi::Buffer> &buffer,
1410
+ const char *sourceUrl) {
1411
+ napi_ext_buffer napiBuffer{};
1412
+ napiBuffer.buffer_object = NativeObjectWrapper<std::shared_ptr<const facebook::jsi::Buffer>>::Wrap(
1413
+ std::shared_ptr<const facebook::jsi::Buffer>{buffer});
1414
+ napiBuffer.data = buffer->data();
1415
+ napiBuffer.byte_size = buffer->size();
1416
+
1417
+ napi_value result{};
1418
+ CHECK_NAPI(napi_ext_run_script_buffer(m_env, &napiBuffer, sourceUrl, &result));
1419
+
1420
+ return result;
1421
+ }
1422
+
1409
1423
  // Serializes script with the sourceUrl origin.
1410
1424
  vector<uint8_t> NapiJsiRuntime::SerializeScript(napi_value script, const char *sourceUrl) {
1411
1425
  vector<uint8_t> result;
@@ -1702,7 +1716,7 @@ void NapiJsiRuntime::SetElement(napi_value array, uint32_t index, napi_value val
1702
1716
  }
1703
1717
 
1704
1718
  // The NAPI external function callback used for the JSI host function implementation.
1705
- /*static*/ napi_value NapiJsiRuntime::JsiHostFunctionCallback(napi_env env, napi_callback_info info) noexcept {
1719
+ /*static*/ napi_value __cdecl NapiJsiRuntime::JsiHostFunctionCallback(napi_env env, napi_callback_info info) noexcept {
1706
1720
  HostFunctionWrapper *hostFuncWrapper{};
1707
1721
  size_t argc{};
1708
1722
  CHECK_NAPI_ELSE_CRASH(
@@ -1750,15 +1764,11 @@ napi_value NapiJsiRuntime::CreateExternalObject(void *data, napi_finalize finali
1750
1764
  // Wraps up std::unique_ptr as an external object.
1751
1765
  template <typename T>
1752
1766
  napi_value NapiJsiRuntime::CreateExternalObject(unique_ptr<T> &&data) const {
1753
- napi_value object =
1754
- CreateExternalObject(data.get(), [](napi_env /*env*/, void *dataToDestroy, void * /*finalizerHint*/) {
1755
- // We wrap dataToDestroy in a unique_ptr to avoid calling delete explicitly.
1756
- if (std::is_array<T>::value) {
1757
- delete[] static_cast<T *>(dataToDestroy);
1758
- } else {
1759
- delete static_cast<T *>(dataToDestroy);
1760
- }
1761
- });
1767
+ napi_finalize finalize = [](napi_env /*env*/, void *dataToDestroy, void * /*finalizerHint*/) {
1768
+ // We wrap dataToDestroy in a unique_ptr to avoid calling delete explicitly.
1769
+ unique_ptr<T> dataDeleter{static_cast<T *>(dataToDestroy)};
1770
+ };
1771
+ napi_value object = CreateExternalObject(data.get(), finalize);
1762
1772
 
1763
1773
  // We only call data.release() after the CreateExternalObject succeeds.
1764
1774
  // Otherwise, when CreateExternalObject fails and an exception is thrown,
@@ -1807,7 +1817,7 @@ napi_value NapiJsiRuntime::GetHostObjectProxyHandler() {
1807
1817
  // Sets Proxy trap method as a pointer to NapiJsiRuntime instance method.
1808
1818
  template <napi_value (NapiJsiRuntime::*trapMethod)(span<napi_value>), size_t argCount>
1809
1819
  void NapiJsiRuntime::SetProxyTrap(napi_value handler, napi_value propertyName) {
1810
- auto proxyTrap = [](napi_env env, napi_callback_info info) noexcept {
1820
+ napi_callback proxyTrap = [](napi_env env, napi_callback_info info) noexcept {
1811
1821
  NapiJsiRuntime *runtime{};
1812
1822
  napi_value args[argCount]{};
1813
1823
  size_t actualArgCount{argCount};
@@ -2,6 +2,8 @@
2
2
  // Licensed under the MIT License.
3
3
 
4
4
  #pragma once
5
+ #ifndef MICROSOFT_REACTNATIVE_JSI_NODEAPIJSIRUNTIME
6
+ #define MICROSOFT_REACTNATIVE_JSI_NODEAPIJSIRUNTIME
5
7
 
6
8
  // JSI
7
9
  #include <js_native_ext_api.h>
@@ -18,4 +20,54 @@ namespace Microsoft::JSI {
18
20
  ///
19
21
  std::unique_ptr<facebook::jsi::Runtime> __cdecl MakeNodeApiJsiRuntime(napi_env env) noexcept;
20
22
 
23
+ template <typename T>
24
+ struct NativeObjectWrapper;
25
+
26
+ template <typename T>
27
+ struct NativeObjectWrapper<std::unique_ptr<T>> {
28
+ static napi_ext_native_data Wrap(std::unique_ptr<T> &&obj) noexcept {
29
+ napi_ext_native_data nativeData{};
30
+ nativeData.data = obj.release();
31
+ nativeData.finalize_cb = [](napi_env /*env*/, void *data, void * /*finalizeHint*/) {
32
+ std::unique_ptr<T> obj{reinterpret_cast<T *>(data)};
33
+ };
34
+ return nativeData;
35
+ }
36
+
37
+ static T *Unwrap(napi_ext_native_data &nativeData) noexcept {
38
+ return reinterpret_cast<T *>(nativeData.data);
39
+ }
40
+ };
41
+
42
+ template <typename T>
43
+ struct NativeObjectWrapper<std::shared_ptr<T>> {
44
+ static napi_ext_native_data Wrap(std::shared_ptr<T> &&obj) noexcept {
45
+ static_assert(
46
+ sizeof(SharedPtrHolder) == sizeof(std::shared_ptr<T>), "std::shared_ptr expected to have size of two pointers");
47
+ SharedPtrHolder ptrHolder;
48
+ new (std::addressof(ptrHolder)) std::shared_ptr(std::move(obj));
49
+ napi_ext_native_data nativeData{};
50
+ nativeData.data = ptrHolder.ptr1;
51
+ nativeData.finalize_hint = ptrHolder.ptr2;
52
+ nativeData.finalize_cb = [](napi_env /*env*/, void *data, void *finalizeHint) {
53
+ SharedPtrHolder ptrHolder{data, finalizeHint};
54
+ std::shared_ptr<T> obj(std::move(*reinterpret_cast<std::shared_ptr<T> *>(std::addressof(ptrHolder))));
55
+ };
56
+ return nativeData;
57
+ }
58
+
59
+ static std::shared_ptr<T> Unwrap(napi_ext_native_data &nativeData) noexcept {
60
+ SharedPtrHolder ptrHolder{nativeData.data, nativeData.finalize_hint};
61
+ return *reinterpret_cast<std::shared_ptr<T> *>(std::addressof(ptrHolder));
62
+ }
63
+
64
+ private:
65
+ struct SharedPtrHolder {
66
+ void *ptr1;
67
+ void *ptr2;
68
+ };
69
+ };
70
+
21
71
  } // namespace Microsoft::JSI
72
+
73
+ #endif // MICROSOFT_REACTNATIVE_JSI_NODEAPIJSIRUNTIME
@@ -1091,7 +1091,7 @@ template <class TModule, int I, class TMethodSpec>
1091
1091
  struct ReactMethodVerifier {
1092
1092
  static constexpr bool Verify() noexcept {
1093
1093
  ReactMethodVerifier verifier{};
1094
- ReactMemberInfoIterator<TModule>{}.GetMemberInfo<I>(verifier);
1094
+ ReactMemberInfoIterator<TModule>{}.template GetMemberInfo<I>(verifier);
1095
1095
  return verifier.m_result;
1096
1096
  }
1097
1097
 
@@ -1109,7 +1109,7 @@ template <class TModule, int I, class TMethodSpec>
1109
1109
  struct ReactSyncMethodVerifier {
1110
1110
  static constexpr bool Verify() noexcept {
1111
1111
  ReactSyncMethodVerifier verifier{};
1112
- ReactMemberInfoIterator<TModule>{}.GetMemberInfo<I>(verifier);
1112
+ ReactMemberInfoIterator<TModule>{}.template GetMemberInfo<I>(verifier);
1113
1113
  return verifier.m_result;
1114
1114
  }
1115
1115