Kai Guo пре 4 година
родитељ
комит
fd96d92be0
No account linked to committer's email address

+ 1
- 0
README.md Прегледај датотеку

@@ -21,6 +21,7 @@ _This project is maintained for free by these people using both their free time
21 21
 - [x] iOS
22 22
 - [x] Android
23 23
 - [x] macOS
24
+- [x] Windows
24 25
 
25 26
 _Note: Expo support for React Native WebView started with [Expo SDK v33.0.0](https://blog.expo.io/expo-sdk-v33-0-0-is-now-available-52d1c99dfe4c)._
26 27
 

+ 29
- 0
docs/Getting-Started.md Прегледај датотеку

@@ -57,6 +57,35 @@ Cocoapod and autolinking is not yet support for react-native macOS but is coming
57 57
 
58 58
 The method is nearly identical to the [manual linking method for iOS](https://facebook.github.io/react-native/docs/linking-libraries-ios#manual-linking) except that you will include the `node_modules/react-native-webview/macos/RNCWebView.xcodeproj` project in your main project and link the `RNCWebView-macOS.a` library. 
59 59
 
60
+### Windows:
61
+
62
+Autolinking is not yet supported for ReactNativeWindows. Make following additions to the given files manually:
63
+
64
+#### **windows/myapp.sln**
65
+
66
+Add the `ReactNativeWebView` project to your solution.
67
+
68
+1. Open the solution in Visual Studio 2019
69
+2. Right-click Solution icon in Solution Explorer > Add > Existing Project
70
+   Select `node_modules\react-native-webview\windows\ReactNativeWebView\ReactNativeWebView.vcxproj`
71
+
72
+#### **windows/myapp/myapp.vcxproj**
73
+
74
+Add a reference to `ReactNativeWebView` to your main application project. From Visual Studio 2019:
75
+
76
+1. Right-click main application project > Add > Reference...
77
+  Check `ReactNativeWebView` from Solution Projects.
78
+
79
+2. Modify files below to add the video package providers to your main application project
80
+
81
+#### **pch.h**
82
+
83
+Add `#include "winrt/ReactNativeWebView.h"`.
84
+
85
+#### **app.cpp**
86
+
87
+Add `PackageProviders().Append(winrt::ReactNativeWebView::ReactPackageProvider());` before `InitializeComponent();`.
88
+
60 89
 ## 3. Import the webview into your component
61 90
 
62 91
 ```js

+ 3
- 2
package.json Прегледај датотеку

@@ -1,6 +1,6 @@
1 1
 {
2 2
   "name": "react-native-webview",
3
-  "description": "React Native WebView component for iOS, Android, and macOS",
3
+  "description": "React Native WebView component for iOS, Android, macOS, and Windows",
4 4
   "main": "index.js",
5 5
   "typings": "index.d.ts",
6 6
   "author": "Jamon Holmgren <jamon@infinite.red>",
@@ -28,7 +28,8 @@
28 28
   },
29 29
   "peerDependencies": {
30 30
     "react": "^16.9",
31
-    "react-native": ">=0.60 <0.62"
31
+    "react-native": ">=0.60 <0.62",
32
+    "react-native-windows": "^0.60.0-vnext.133"
32 33
   },
33 34
   "dependencies": {
34 35
     "escape-string-regexp": "2.0.0",

+ 250
- 0
src/WebView.windows.tsx Прегледај датотеку

@@ -0,0 +1,250 @@
1
+/**
2
+ * Copyright (c) Facebook, Inc. and its affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ * Portions copyright for react-native-windows:
8
+ *
9
+ * Copyright (c) Microsoft Corporation. All rights reserved.
10
+ * Licensed under the MIT License.
11
+ */
12
+
13
+import React from 'react';
14
+import {
15
+  UIManager as NotTypedUIManager,
16
+  View,
17
+  requireNativeComponent,
18
+  StyleSheet,
19
+  Image,
20
+  ImageSourcePropType,
21
+  findNodeHandle,
22
+} from 'react-native';
23
+import {
24
+  createOnShouldStartLoadWithRequest,
25
+} from './WebViewShared';
26
+import {
27
+  NativeWebViewWindows,
28
+  WebViewSharedProps,
29
+  WebViewProgressEvent,
30
+  WebViewNavigationEvent,
31
+  WebViewErrorEvent,
32
+  WebViewHttpErrorEvent,
33
+  WebViewMessageEvent,
34
+  RNCWebViewUIManagerWindows,
35
+  State,
36
+} from './WebViewTypes';
37
+
38
+const UIManager = NotTypedUIManager as RNCWebViewUIManagerWindows;
39
+const { resolveAssetSource } = Image;
40
+const RCTWebView: typeof NativeWebViewWindows = requireNativeComponent(
41
+  'RCTWebView',
42
+);
43
+
44
+const styles = StyleSheet.create({
45
+  container: {
46
+    flex: 1,
47
+  },
48
+  hidden: {
49
+    height: 0,
50
+    flex: 0, // disable 'flex:1' when hiding a View
51
+  },
52
+  loadingView: {
53
+    flex: 1,
54
+    justifyContent: 'center',
55
+    alignItems: 'center',
56
+  },
57
+  loadingProgressBar: {
58
+    height: 20,
59
+  },
60
+});
61
+
62
+export default class WebView extends React.Component<WebViewSharedProps, State> {
63
+
64
+  static defaultProps = {
65
+    javaScriptEnabled: true,
66
+  };
67
+
68
+  state: State = {
69
+    viewState: this.props.startInLoadingState ? 'LOADING' : 'IDLE',
70
+    lastErrorEvent: null,
71
+  }
72
+
73
+  webViewRef = React.createRef<NativeWebViewWindows>();
74
+
75
+  render = () => {
76
+    const {
77
+      nativeConfig = {},
78
+      onMessage,
79
+      onShouldStartLoadWithRequest: onShouldStartLoadWithRequestProp,
80
+      originWhitelist,
81
+      renderError,
82
+      renderLoading,
83
+      style,
84
+      containerStyle,
85
+      ...otherProps
86
+    } = this.props;
87
+
88
+    let otherView = null;
89
+
90
+    if (this.state.viewState === 'LOADING') {
91
+      otherView = this.props.renderLoading && this.props.renderLoading();
92
+    } else if (this.state.viewState === 'ERROR') {
93
+      const errorEvent = this.state.lastErrorEvent;
94
+      otherView = this.props.renderError
95
+        && this.props.renderError(
96
+          errorEvent.domain,
97
+          errorEvent.code,
98
+          errorEvent.description,
99
+        );
100
+    } else if (this.state.viewState !== 'IDLE') {
101
+      console.error('RCTWebView invalid state encountered: ', this.state.viewState);
102
+    }
103
+
104
+    const webViewStyles = [styles.container, this.props.style];
105
+    if (
106
+      this.state.viewState === 'LOADING'
107
+      || this.state.viewState === 'ERROR'
108
+    ) {
109
+      // if we're in either LOADING or ERROR states, don't show the webView
110
+      webViewStyles.push(styles.hidden);
111
+    }
112
+
113
+    const onShouldStartLoadWithRequest = createOnShouldStartLoadWithRequest(
114
+      ()=>{},
115
+      // casting cause it's in the default props
116
+      originWhitelist as readonly string[],
117
+      onShouldStartLoadWithRequestProp,
118
+    );
119
+
120
+    const NativeWebView
121
+    = (nativeConfig.component as typeof NativeWebViewWindows | undefined)
122
+    || RCTWebView;
123
+
124
+    const webView = (
125
+      <NativeWebView
126
+        ref={this.webViewRef}
127
+        key="webViewKey"
128
+        {...otherProps}
129
+        messagingEnabled={typeof onMessage === 'function'}
130
+        onLoadingError={this.onLoadingError}
131
+        onLoadingFinish={this.onLoadingFinish}
132
+        onLoadingProgress={this.onLoadingProgress}
133
+        onLoadingStart={this.onLoadingStart}
134
+        onHttpError={this.onHttpError}
135
+        onMessage={this.onMessage}
136
+        onScroll={this.props.onScroll}
137
+        onShouldStartLoadWithRequest={onShouldStartLoadWithRequest}
138
+        source={resolveAssetSource(this.props.source as ImageSourcePropType)}
139
+        style={webViewStyles}
140
+        {...nativeConfig.props}
141
+      />
142
+    );
143
+
144
+    return (
145
+      <View style={styles.container}>
146
+        {webView}
147
+        {otherView}
148
+      </View>
149
+    );
150
+  }
151
+
152
+  goForward = () => {
153
+    UIManager.dispatchViewManagerCommand(
154
+      this.getWebViewHandle(),
155
+      UIManager.getViewManagerConfig('RCTWebView').Commands.goForward,
156
+      undefined,
157
+    );
158
+  }
159
+
160
+  goBack = () => {
161
+    UIManager.dispatchViewManagerCommand(
162
+      this.getWebViewHandle(),
163
+      UIManager.getViewManagerConfig('RCTWebView').Commands.goBack,
164
+      undefined,
165
+    );
166
+  }
167
+
168
+  reload = () => {
169
+    UIManager.dispatchViewManagerCommand(
170
+      this.getWebViewHandle(),
171
+      UIManager.getViewManagerConfig('RCTWebView').Commands.reload,
172
+      undefined,
173
+    );
174
+  }
175
+
176
+  /**
177
+   * We return an event with a bunch of fields including:
178
+   *  url, title, loading, canGoBack, canGoForward
179
+   */
180
+  updateNavigationState = (event: WebViewNavigationEvent) => {
181
+    if (this.props.onNavigationStateChange) {
182
+      this.props.onNavigationStateChange(event.nativeEvent);
183
+    }
184
+  }
185
+
186
+  getWebViewHandle = () => {
187
+    // eslint-disable-next-line react/no-string-refs
188
+    return findNodeHandle(this.webViewRef.current);
189
+  }
190
+
191
+  onLoadingStart = (event: WebViewNavigationEvent) => {
192
+    const { onLoadStart } = this.props;
193
+    if(onLoadStart) {
194
+      onLoadStart(event);
195
+    }
196
+    this.updateNavigationState(event);
197
+  }
198
+
199
+  onLoadingProgress = (event: WebViewProgressEvent) => {
200
+    const { onLoadProgress } = this.props;
201
+    if (onLoadProgress) {
202
+      onLoadProgress(event);
203
+    }
204
+  };
205
+
206
+  onLoadingError = (event: WebViewErrorEvent) => {
207
+    event.persist(); // persist this event because we need to store it
208
+    const {onError, onLoadEnd} = this.props;
209
+    if(onError) {
210
+      onError(event);
211
+    }
212
+    if(onLoadEnd) {
213
+      onLoadEnd(event);
214
+    }
215
+    console.error('Encountered an error loading page', event.nativeEvent);
216
+    this.setState({
217
+      lastErrorEvent: event.nativeEvent,
218
+      viewState: 'ERROR',
219
+    });
220
+  }
221
+
222
+  onLoadingFinish =(event: WebViewNavigationEvent) => {
223
+    const {onLoad, onLoadEnd} = this.props;
224
+    if(onLoad) {
225
+      onLoad(event);
226
+    }
227
+    if(onLoadEnd) {
228
+      onLoadEnd(event);
229
+    }
230
+    this.setState({
231
+      viewState: 'IDLE',
232
+    });
233
+    this.updateNavigationState(event);
234
+  }
235
+
236
+  onMessage = (event: WebViewMessageEvent) => {
237
+    const { onMessage } = this.props;
238
+    if (onMessage) {
239
+      onMessage(event);
240
+    }
241
+  };
242
+
243
+  onHttpError = (event: WebViewHttpErrorEvent) => {
244
+    const { onHttpError } = this.props;
245
+    if (onHttpError) {
246
+      onHttpError(event);
247
+    }
248
+  }
249
+
250
+}

+ 13
- 0
src/WebViewTypes.ts Прегледај датотеку

@@ -29,6 +29,7 @@ interface RNCWebViewUIManager<Commands extends string> extends UIManagerStatic {
29 29
 export type RNCWebViewUIManagerAndroid = RNCWebViewUIManager<WebViewCommands | AndroidWebViewCommands>
30 30
 export type RNCWebViewUIManagerIOS = RNCWebViewUIManager<WebViewCommands>
31 31
 export type RNCWebViewUIManagerMacOS = RNCWebViewUIManager<WebViewCommands>
32
+export type RNCWebViewUIManagerWindows = RNCWebViewUIManager<WebViewCommands>
32 33
 
33 34
 
34 35
 type WebViewState = 'IDLE' | 'LOADING' | 'ERROR';
@@ -73,6 +74,14 @@ declare const NativeWebViewAndroidBase: Constructor<NativeMethodsMixin> &
73 74
   typeof NativeWebViewAndroidComponent;
74 75
 export class NativeWebViewAndroid extends NativeWebViewAndroidBase {}
75 76
 
77
+// eslint-disable-next-line react/prefer-stateless-function
78
+declare class NativeWebViewWindowsComponent extends Component<
79
+  WindowsNativeWebViewProps
80
+> {}
81
+declare const NativeWebViewWindowsBase: Constructor<NativeMethodsMixin> &
82
+  typeof NativeWebViewWindowsComponent;
83
+export class NativeWebViewWindows extends NativeWebViewWindowsBase {}
84
+
76 85
 export interface ContentInsetProp {
77 86
   top?: number;
78 87
   left?: number;
@@ -309,6 +318,10 @@ export interface MacOSNativeWebViewProps extends CommonNativeWebViewProps {
309 318
   onContentProcessDidTerminate?: (event: WebViewTerminatedEvent) => void;
310 319
 }
311 320
 
321
+export interface WindowsNativeWebViewProps extends CommonNativeWebViewProps {
322
+  testID?: string
323
+}
324
+
312 325
 export interface IOSWebViewProps extends WebViewSharedProps {
313 326
   /**
314 327
    * Does not store any data within the lifetime of the WebView.

+ 353
- 0
windows/.gitignore Прегледај датотеку

@@ -0,0 +1,353 @@
1
+## Ignore Visual Studio temporary files, build results, and
2
+## files generated by popular Visual Studio add-ons.
3
+##
4
+## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
5
+
6
+# User-specific files
7
+*.rsuser
8
+*.suo
9
+*.user
10
+*.userosscache
11
+*.sln.docstates
12
+
13
+# User-specific files (MonoDevelop/Xamarin Studio)
14
+*.userprefs
15
+
16
+# Mono auto generated files
17
+mono_crash.*
18
+
19
+# Build results
20
+[Dd]ebug/
21
+[Dd]ebugPublic/
22
+[Rr]elease/
23
+[Rr]eleases/
24
+x64/
25
+x86/
26
+[Aa][Rr][Mm]/
27
+[Aa][Rr][Mm]64/
28
+bld/
29
+[Bb]in/
30
+[Oo]bj/
31
+[Ll]og/
32
+[Ll]ogs/
33
+
34
+# Visual Studio 2015/2017 cache/options directory
35
+.vs/
36
+# Uncomment if you have tasks that create the project's static files in wwwroot
37
+#wwwroot/
38
+
39
+# Visual Studio 2017 auto generated files
40
+Generated\ Files/
41
+
42
+# MSTest test Results
43
+[Tt]est[Rr]esult*/
44
+[Bb]uild[Ll]og.*
45
+
46
+# NUnit
47
+*.VisualState.xml
48
+TestResult.xml
49
+nunit-*.xml
50
+
51
+# Build Results of an ATL Project
52
+[Dd]ebugPS/
53
+[Rr]eleasePS/
54
+dlldata.c
55
+
56
+# Benchmark Results
57
+BenchmarkDotNet.Artifacts/
58
+
59
+# .NET Core
60
+project.lock.json
61
+project.fragment.lock.json
62
+artifacts/
63
+
64
+# StyleCop
65
+StyleCopReport.xml
66
+
67
+# Files built by Visual Studio
68
+*_i.c
69
+*_p.c
70
+*_h.h
71
+*.ilk
72
+*.meta
73
+*.obj
74
+*.iobj
75
+*.pch
76
+*.pdb
77
+*.ipdb
78
+*.pgc
79
+*.pgd
80
+*.rsp
81
+*.sbr
82
+*.tlb
83
+*.tli
84
+*.tlh
85
+*.tmp
86
+*.tmp_proj
87
+*_wpftmp.csproj
88
+*.log
89
+*.vspscc
90
+*.vssscc
91
+.builds
92
+*.pidb
93
+*.svclog
94
+*.scc
95
+
96
+# Chutzpah Test files
97
+_Chutzpah*
98
+
99
+# Visual C++ cache files
100
+ipch/
101
+*.aps
102
+*.ncb
103
+*.opendb
104
+*.opensdf
105
+*.sdf
106
+*.cachefile
107
+*.VC.db
108
+*.VC.VC.opendb
109
+
110
+# Visual Studio profiler
111
+*.psess
112
+*.vsp
113
+*.vspx
114
+*.sap
115
+
116
+# Visual Studio Trace Files
117
+*.e2e
118
+
119
+# TFS 2012 Local Workspace
120
+$tf/
121
+
122
+# Guidance Automation Toolkit
123
+*.gpState
124
+
125
+# ReSharper is a .NET coding add-in
126
+_ReSharper*/
127
+*.[Rr]e[Ss]harper
128
+*.DotSettings.user
129
+
130
+# TeamCity is a build add-in
131
+_TeamCity*
132
+
133
+# DotCover is a Code Coverage Tool
134
+*.dotCover
135
+
136
+# AxoCover is a Code Coverage Tool
137
+.axoCover/*
138
+!.axoCover/settings.json
139
+
140
+# Coverlet is a free, cross platform Code Coverage Tool
141
+coverage*[.json, .xml, .info]
142
+
143
+# Visual Studio code coverage results
144
+*.coverage
145
+*.coveragexml
146
+
147
+# NCrunch
148
+_NCrunch_*
149
+.*crunch*.local.xml
150
+nCrunchTemp_*
151
+
152
+# MightyMoose
153
+*.mm.*
154
+AutoTest.Net/
155
+
156
+# Web workbench (sass)
157
+.sass-cache/
158
+
159
+# Installshield output folder
160
+[Ee]xpress/
161
+
162
+# DocProject is a documentation generator add-in
163
+DocProject/buildhelp/
164
+DocProject/Help/*.HxT
165
+DocProject/Help/*.HxC
166
+DocProject/Help/*.hhc
167
+DocProject/Help/*.hhk
168
+DocProject/Help/*.hhp
169
+DocProject/Help/Html2
170
+DocProject/Help/html
171
+
172
+# Click-Once directory
173
+publish/
174
+
175
+# Publish Web Output
176
+*.[Pp]ublish.xml
177
+*.azurePubxml
178
+# Note: Comment the next line if you want to checkin your web deploy settings,
179
+# but database connection strings (with potential passwords) will be unencrypted
180
+*.pubxml
181
+*.publishproj
182
+
183
+# Microsoft Azure Web App publish settings. Comment the next line if you want to
184
+# checkin your Azure Web App publish settings, but sensitive information contained
185
+# in these scripts will be unencrypted
186
+PublishScripts/
187
+
188
+# NuGet Packages
189
+*.nupkg
190
+# NuGet Symbol Packages
191
+*.snupkg
192
+# The packages folder can be ignored because of Package Restore
193
+**/[Pp]ackages/*
194
+# except build/, which is used as an MSBuild target.
195
+!**/[Pp]ackages/build/
196
+# Uncomment if necessary however generally it will be regenerated when needed
197
+#!**/[Pp]ackages/repositories.config
198
+# NuGet v3's project.json files produces more ignorable files
199
+*.nuget.props
200
+*.nuget.targets
201
+
202
+# Microsoft Azure Build Output
203
+csx/
204
+*.build.csdef
205
+
206
+# Microsoft Azure Emulator
207
+ecf/
208
+rcf/
209
+
210
+# Windows Store app package directories and files
211
+AppPackages/
212
+BundleArtifacts/
213
+Package.StoreAssociation.xml
214
+_pkginfo.txt
215
+*.appx
216
+*.appxbundle
217
+*.appxupload
218
+
219
+# Visual Studio cache files
220
+# files ending in .cache can be ignored
221
+*.[Cc]ache
222
+# but keep track of directories ending in .cache
223
+!?*.[Cc]ache/
224
+
225
+# Others
226
+ClientBin/
227
+~$*
228
+*~
229
+*.dbmdl
230
+*.dbproj.schemaview
231
+*.jfm
232
+*.pfx
233
+*.publishsettings
234
+orleans.codegen.cs
235
+
236
+# Including strong name files can present a security risk
237
+# (https://github.com/github/gitignore/pull/2483#issue-259490424)
238
+#*.snk
239
+
240
+# Since there are multiple workflows, uncomment next line to ignore bower_components
241
+# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
242
+#bower_components/
243
+
244
+# RIA/Silverlight projects
245
+Generated_Code/
246
+
247
+# Backup & report files from converting an old project file
248
+# to a newer Visual Studio version. Backup files are not needed,
249
+# because we have git ;-)
250
+_UpgradeReport_Files/
251
+Backup*/
252
+UpgradeLog*.XML
253
+UpgradeLog*.htm
254
+ServiceFabricBackup/
255
+*.rptproj.bak
256
+
257
+# SQL Server files
258
+*.mdf
259
+*.ldf
260
+*.ndf
261
+
262
+# Business Intelligence projects
263
+*.rdl.data
264
+*.bim.layout
265
+*.bim_*.settings
266
+*.rptproj.rsuser
267
+*- [Bb]ackup.rdl
268
+*- [Bb]ackup ([0-9]).rdl
269
+*- [Bb]ackup ([0-9][0-9]).rdl
270
+
271
+# Microsoft Fakes
272
+FakesAssemblies/
273
+
274
+# GhostDoc plugin setting file
275
+*.GhostDoc.xml
276
+
277
+# Node.js Tools for Visual Studio
278
+.ntvs_analysis.dat
279
+node_modules/
280
+
281
+# Visual Studio 6 build log
282
+*.plg
283
+
284
+# Visual Studio 6 workspace options file
285
+*.opt
286
+
287
+# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
288
+*.vbw
289
+
290
+# Visual Studio LightSwitch build output
291
+**/*.HTMLClient/GeneratedArtifacts
292
+**/*.DesktopClient/GeneratedArtifacts
293
+**/*.DesktopClient/ModelManifest.xml
294
+**/*.Server/GeneratedArtifacts
295
+**/*.Server/ModelManifest.xml
296
+_Pvt_Extensions
297
+
298
+# Paket dependency manager
299
+.paket/paket.exe
300
+paket-files/
301
+
302
+# FAKE - F# Make
303
+.fake/
304
+
305
+# CodeRush personal settings
306
+.cr/personal
307
+
308
+# Python Tools for Visual Studio (PTVS)
309
+__pycache__/
310
+*.pyc
311
+
312
+# Cake - Uncomment if you are using it
313
+# tools/**
314
+# !tools/packages.config
315
+
316
+# Tabs Studio
317
+*.tss
318
+
319
+# Telerik's JustMock configuration file
320
+*.jmconfig
321
+
322
+# BizTalk build output
323
+*.btp.cs
324
+*.btm.cs
325
+*.odx.cs
326
+*.xsd.cs
327
+
328
+# OpenCover UI analysis results
329
+OpenCover/
330
+
331
+# Azure Stream Analytics local run output
332
+ASALocalRun/
333
+
334
+# MSBuild Binary and Structured Log
335
+*.binlog
336
+
337
+# NVidia Nsight GPU debugger configuration file
338
+*.nvuser
339
+
340
+# MFractors (Xamarin productivity tool) working folder
341
+.mfractor/
342
+
343
+# Local History for Visual Studio
344
+.localhistory/
345
+
346
+# BeatPulse healthcheck temp database
347
+healthchecksdb
348
+
349
+# Backup folder for Package Reference Convert tool in Visual Studio 2017
350
+MigrationBackup/
351
+
352
+# Ionide (cross platform F# VS Code tools) working folder
353
+.ionide/

+ 203
- 0
windows/ReactNativeWebView.sln Прегледај датотеку

@@ -0,0 +1,203 @@
1
+
2
+Microsoft Visual Studio Solution File, Format Version 12.00
3
+# Visual Studio Version 16
4
+VisualStudioVersion = 16.0.29609.76
5
+MinimumVisualStudioVersion = 10.0.40219.1
6
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ReactNativeWebView", "ReactNativeWebView\ReactNativeWebView.vcxproj", "{729D9AF8-CD9E-4427-9F6C-FB757E287729}"
7
+EndProject
8
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ReactNative", "ReactNative", "{6030669C-4F4D-4889-B38E-0299826D8C01}"
9
+EndProject
10
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Chakra", "..\node_modules\react-native-windows\Chakra\Chakra.vcxitems", "{C38970C0-5FBF-4D69-90D8-CBAC225AE895}"
11
+EndProject
12
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Common", "..\node_modules\react-native-windows\Common\Common.vcxproj", "{FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}"
13
+EndProject
14
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Folly", "..\node_modules\react-native-windows\Folly\Folly.vcxproj", "{A990658C-CE31-4BCC-976F-0FC6B1AF693D}"
15
+EndProject
16
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "JSI.Shared", "..\node_modules\react-native-windows\JSI\Shared\JSI.Shared.vcxitems", "{0CC28589-39E4-4288-B162-97B959F8B843}"
17
+EndProject
18
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "JSI.Universal", "..\node_modules\react-native-windows\JSI\Universal\JSI.Universal.vcxproj", "{A62D504A-16B8-41D2-9F19-E2E86019E5E4}"
19
+EndProject
20
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Microsoft.ReactNative", "..\node_modules\react-native-windows\Microsoft.ReactNative\Microsoft.ReactNative.vcxproj", "{F7D32BD0-2749-483E-9A0D-1635EF7E3136}"
21
+EndProject
22
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Microsoft.ReactNative.Cxx", "..\node_modules\react-native-windows\Microsoft.ReactNative.Cxx\Microsoft.ReactNative.Cxx.vcxitems", "{DA8B35B3-DA00-4B02-BDE6-6A397B3FD46B}"
23
+EndProject
24
+Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Microsoft.ReactNative.SharedManaged", "..\node_modules\react-native-windows\Microsoft.ReactNative.SharedManaged\Microsoft.ReactNative.SharedManaged.shproj", "{67A1076F-7790-4203-86EA-4402CCB5E782}"
25
+EndProject
26
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ReactCommon", "..\node_modules\react-native-windows\ReactCommon\ReactCommon.vcxproj", "{A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}"
27
+EndProject
28
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ReactUWP", "..\node_modules\react-native-windows\ReactUWP\ReactUWP.vcxproj", "{2D5D43D9-CFFC-4C40-B4CD-02EFB4E2742B}"
29
+EndProject
30
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ReactWindowsCore", "..\node_modules\react-native-windows\ReactWindowsCore\ReactWindowsCore.vcxproj", "{11C084A3-A57C-4296-A679-CAC17B603144}"
31
+EndProject
32
+Global
33
+	GlobalSection(SharedMSBuildProjectFiles) = preSolution
34
+		..\node_modules\react-native-windows\JSI\Shared\JSI.Shared.vcxitems*{0cc28589-39e4-4288-b162-97b959f8b843}*SharedItemsImports = 9
35
+		..\node_modules\react-native-windows\Chakra\Chakra.vcxitems*{2d5d43d9-cffc-4c40-b4cd-02efb4e2742b}*SharedItemsImports = 4
36
+		..\node_modules\react-native-windows\Shared\Shared.vcxitems*{2d5d43d9-cffc-4c40-b4cd-02efb4e2742b}*SharedItemsImports = 4
37
+		..\node_modules\react-native-windows\Microsoft.ReactNative.SharedManaged\Microsoft.ReactNative.SharedManaged.projitems*{67a1076f-7790-4203-86ea-4402ccb5e782}*SharedItemsImports = 13
38
+		..\node_modules\react-native-windows\Microsoft.ReactNative.Cxx\Microsoft.ReactNative.Cxx.vcxitems*{729d9af8-cd9e-4427-9f6c-fb757e287729}*SharedItemsImports = 4
39
+		..\node_modules\react-native-windows\JSI\Shared\JSI.Shared.vcxitems*{a62d504a-16b8-41d2-9f19-e2e86019e5e4}*SharedItemsImports = 4
40
+		..\node_modules\react-native-windows\Chakra\Chakra.vcxitems*{c38970c0-5fbf-4d69-90d8-cbac225ae895}*SharedItemsImports = 9
41
+		..\node_modules\react-native-windows\Microsoft.ReactNative.Cxx\Microsoft.ReactNative.Cxx.vcxitems*{da8b35b3-da00-4b02-bde6-6a397b3fd46b}*SharedItemsImports = 9
42
+		..\node_modules\react-native-windows\Chakra\Chakra.vcxitems*{f7d32bd0-2749-483e-9a0d-1635ef7e3136}*SharedItemsImports = 4
43
+		..\node_modules\react-native-windows\JSI\Shared\JSI.Shared.vcxitems*{f7d32bd0-2749-483e-9a0d-1635ef7e3136}*SharedItemsImports = 4
44
+		..\node_modules\react-native-windows\Shared\Shared.vcxitems*{f7d32bd0-2749-483e-9a0d-1635ef7e3136}*SharedItemsImports = 4
45
+	EndGlobalSection
46
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
47
+		Debug|ARM = Debug|ARM
48
+		Debug|ARM64 = Debug|ARM64
49
+		Debug|x64 = Debug|x64
50
+		Debug|x86 = Debug|x86
51
+		Release|ARM = Release|ARM
52
+		Release|ARM64 = Release|ARM64
53
+		Release|x64 = Release|x64
54
+		Release|x86 = Release|x86
55
+	EndGlobalSection
56
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
57
+		{729D9AF8-CD9E-4427-9F6C-FB757E287729}.Debug|ARM.ActiveCfg = Debug|ARM
58
+		{729D9AF8-CD9E-4427-9F6C-FB757E287729}.Debug|ARM.Build.0 = Debug|ARM
59
+		{729D9AF8-CD9E-4427-9F6C-FB757E287729}.Debug|ARM64.ActiveCfg = Debug|Win32
60
+		{729D9AF8-CD9E-4427-9F6C-FB757E287729}.Debug|x64.ActiveCfg = Debug|x64
61
+		{729D9AF8-CD9E-4427-9F6C-FB757E287729}.Debug|x64.Build.0 = Debug|x64
62
+		{729D9AF8-CD9E-4427-9F6C-FB757E287729}.Debug|x86.ActiveCfg = Debug|Win32
63
+		{729D9AF8-CD9E-4427-9F6C-FB757E287729}.Debug|x86.Build.0 = Debug|Win32
64
+		{729D9AF8-CD9E-4427-9F6C-FB757E287729}.Release|ARM.ActiveCfg = Release|ARM
65
+		{729D9AF8-CD9E-4427-9F6C-FB757E287729}.Release|ARM.Build.0 = Release|ARM
66
+		{729D9AF8-CD9E-4427-9F6C-FB757E287729}.Release|ARM64.ActiveCfg = Release|Win32
67
+		{729D9AF8-CD9E-4427-9F6C-FB757E287729}.Release|x64.ActiveCfg = Release|x64
68
+		{729D9AF8-CD9E-4427-9F6C-FB757E287729}.Release|x64.Build.0 = Release|x64
69
+		{729D9AF8-CD9E-4427-9F6C-FB757E287729}.Release|x86.ActiveCfg = Release|Win32
70
+		{729D9AF8-CD9E-4427-9F6C-FB757E287729}.Release|x86.Build.0 = Release|Win32
71
+		{FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Debug|ARM.ActiveCfg = Debug|ARM
72
+		{FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Debug|ARM.Build.0 = Debug|ARM
73
+		{FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Debug|ARM64.ActiveCfg = Debug|ARM64
74
+		{FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Debug|ARM64.Build.0 = Debug|ARM64
75
+		{FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Debug|x64.ActiveCfg = Debug|x64
76
+		{FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Debug|x64.Build.0 = Debug|x64
77
+		{FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Debug|x86.ActiveCfg = Debug|Win32
78
+		{FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Debug|x86.Build.0 = Debug|Win32
79
+		{FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Release|ARM.ActiveCfg = Release|ARM
80
+		{FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Release|ARM.Build.0 = Release|ARM
81
+		{FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Release|ARM64.ActiveCfg = Release|ARM64
82
+		{FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Release|ARM64.Build.0 = Release|ARM64
83
+		{FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Release|x64.ActiveCfg = Release|x64
84
+		{FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Release|x64.Build.0 = Release|x64
85
+		{FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Release|x86.ActiveCfg = Release|Win32
86
+		{FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Release|x86.Build.0 = Release|Win32
87
+		{A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Debug|ARM.ActiveCfg = Debug|ARM
88
+		{A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Debug|ARM.Build.0 = Debug|ARM
89
+		{A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Debug|ARM64.ActiveCfg = Debug|ARM64
90
+		{A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Debug|ARM64.Build.0 = Debug|ARM64
91
+		{A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Debug|x64.ActiveCfg = Debug|x64
92
+		{A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Debug|x64.Build.0 = Debug|x64
93
+		{A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Debug|x86.ActiveCfg = Debug|Win32
94
+		{A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Debug|x86.Build.0 = Debug|Win32
95
+		{A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Release|ARM.ActiveCfg = Release|ARM
96
+		{A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Release|ARM.Build.0 = Release|ARM
97
+		{A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Release|ARM64.ActiveCfg = Release|ARM64
98
+		{A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Release|ARM64.Build.0 = Release|ARM64
99
+		{A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Release|x64.ActiveCfg = Release|x64
100
+		{A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Release|x64.Build.0 = Release|x64
101
+		{A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Release|x86.ActiveCfg = Release|Win32
102
+		{A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Release|x86.Build.0 = Release|Win32
103
+		{A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Debug|ARM.ActiveCfg = Debug|ARM
104
+		{A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Debug|ARM.Build.0 = Debug|ARM
105
+		{A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Debug|ARM64.ActiveCfg = Debug|ARM64
106
+		{A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Debug|ARM64.Build.0 = Debug|ARM64
107
+		{A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Debug|x64.ActiveCfg = Debug|x64
108
+		{A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Debug|x64.Build.0 = Debug|x64
109
+		{A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Debug|x86.ActiveCfg = Debug|Win32
110
+		{A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Debug|x86.Build.0 = Debug|Win32
111
+		{A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Release|ARM.ActiveCfg = Release|ARM
112
+		{A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Release|ARM.Build.0 = Release|ARM
113
+		{A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Release|ARM64.ActiveCfg = Release|ARM64
114
+		{A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Release|ARM64.Build.0 = Release|ARM64
115
+		{A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Release|x64.ActiveCfg = Release|x64
116
+		{A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Release|x64.Build.0 = Release|x64
117
+		{A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Release|x86.ActiveCfg = Release|Win32
118
+		{A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Release|x86.Build.0 = Release|Win32
119
+		{F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Debug|ARM.ActiveCfg = Debug|ARM
120
+		{F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Debug|ARM.Build.0 = Debug|ARM
121
+		{F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Debug|ARM64.ActiveCfg = Debug|ARM64
122
+		{F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Debug|ARM64.Build.0 = Debug|ARM64
123
+		{F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Debug|x64.ActiveCfg = Debug|x64
124
+		{F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Debug|x64.Build.0 = Debug|x64
125
+		{F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Debug|x86.ActiveCfg = Debug|Win32
126
+		{F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Debug|x86.Build.0 = Debug|Win32
127
+		{F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Release|ARM.ActiveCfg = Release|ARM
128
+		{F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Release|ARM.Build.0 = Release|ARM
129
+		{F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Release|ARM64.ActiveCfg = Release|ARM64
130
+		{F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Release|ARM64.Build.0 = Release|ARM64
131
+		{F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Release|x64.ActiveCfg = Release|x64
132
+		{F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Release|x64.Build.0 = Release|x64
133
+		{F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Release|x86.ActiveCfg = Release|Win32
134
+		{F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Release|x86.Build.0 = Release|Win32
135
+		{A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Debug|ARM.ActiveCfg = Debug|ARM
136
+		{A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Debug|ARM.Build.0 = Debug|ARM
137
+		{A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Debug|ARM64.ActiveCfg = Debug|ARM64
138
+		{A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Debug|ARM64.Build.0 = Debug|ARM64
139
+		{A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Debug|x64.ActiveCfg = Debug|x64
140
+		{A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Debug|x64.Build.0 = Debug|x64
141
+		{A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Debug|x86.ActiveCfg = Debug|Win32
142
+		{A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Debug|x86.Build.0 = Debug|Win32
143
+		{A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Release|ARM.ActiveCfg = Release|ARM
144
+		{A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Release|ARM.Build.0 = Release|ARM
145
+		{A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Release|ARM64.ActiveCfg = Release|ARM64
146
+		{A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Release|ARM64.Build.0 = Release|ARM64
147
+		{A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Release|x64.ActiveCfg = Release|x64
148
+		{A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Release|x64.Build.0 = Release|x64
149
+		{A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Release|x86.ActiveCfg = Release|Win32
150
+		{A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Release|x86.Build.0 = Release|Win32
151
+		{2D5D43D9-CFFC-4C40-B4CD-02EFB4E2742B}.Debug|ARM.ActiveCfg = Debug|ARM
152
+		{2D5D43D9-CFFC-4C40-B4CD-02EFB4E2742B}.Debug|ARM.Build.0 = Debug|ARM
153
+		{2D5D43D9-CFFC-4C40-B4CD-02EFB4E2742B}.Debug|ARM64.ActiveCfg = Debug|ARM64
154
+		{2D5D43D9-CFFC-4C40-B4CD-02EFB4E2742B}.Debug|ARM64.Build.0 = Debug|ARM64
155
+		{2D5D43D9-CFFC-4C40-B4CD-02EFB4E2742B}.Debug|x64.ActiveCfg = Debug|x64
156
+		{2D5D43D9-CFFC-4C40-B4CD-02EFB4E2742B}.Debug|x64.Build.0 = Debug|x64
157
+		{2D5D43D9-CFFC-4C40-B4CD-02EFB4E2742B}.Debug|x86.ActiveCfg = Debug|Win32
158
+		{2D5D43D9-CFFC-4C40-B4CD-02EFB4E2742B}.Debug|x86.Build.0 = Debug|Win32
159
+		{2D5D43D9-CFFC-4C40-B4CD-02EFB4E2742B}.Release|ARM.ActiveCfg = Release|ARM
160
+		{2D5D43D9-CFFC-4C40-B4CD-02EFB4E2742B}.Release|ARM.Build.0 = Release|ARM
161
+		{2D5D43D9-CFFC-4C40-B4CD-02EFB4E2742B}.Release|ARM64.ActiveCfg = Release|ARM64
162
+		{2D5D43D9-CFFC-4C40-B4CD-02EFB4E2742B}.Release|ARM64.Build.0 = Release|ARM64
163
+		{2D5D43D9-CFFC-4C40-B4CD-02EFB4E2742B}.Release|x64.ActiveCfg = Release|x64
164
+		{2D5D43D9-CFFC-4C40-B4CD-02EFB4E2742B}.Release|x64.Build.0 = Release|x64
165
+		{2D5D43D9-CFFC-4C40-B4CD-02EFB4E2742B}.Release|x86.ActiveCfg = Release|Win32
166
+		{2D5D43D9-CFFC-4C40-B4CD-02EFB4E2742B}.Release|x86.Build.0 = Release|Win32
167
+		{11C084A3-A57C-4296-A679-CAC17B603144}.Debug|ARM.ActiveCfg = Debug|ARM
168
+		{11C084A3-A57C-4296-A679-CAC17B603144}.Debug|ARM.Build.0 = Debug|ARM
169
+		{11C084A3-A57C-4296-A679-CAC17B603144}.Debug|ARM64.ActiveCfg = Debug|ARM64
170
+		{11C084A3-A57C-4296-A679-CAC17B603144}.Debug|ARM64.Build.0 = Debug|ARM64
171
+		{11C084A3-A57C-4296-A679-CAC17B603144}.Debug|x64.ActiveCfg = Debug|x64
172
+		{11C084A3-A57C-4296-A679-CAC17B603144}.Debug|x64.Build.0 = Debug|x64
173
+		{11C084A3-A57C-4296-A679-CAC17B603144}.Debug|x86.ActiveCfg = Debug|Win32
174
+		{11C084A3-A57C-4296-A679-CAC17B603144}.Debug|x86.Build.0 = Debug|Win32
175
+		{11C084A3-A57C-4296-A679-CAC17B603144}.Release|ARM.ActiveCfg = Release|ARM
176
+		{11C084A3-A57C-4296-A679-CAC17B603144}.Release|ARM.Build.0 = Release|ARM
177
+		{11C084A3-A57C-4296-A679-CAC17B603144}.Release|ARM64.ActiveCfg = Release|ARM64
178
+		{11C084A3-A57C-4296-A679-CAC17B603144}.Release|ARM64.Build.0 = Release|ARM64
179
+		{11C084A3-A57C-4296-A679-CAC17B603144}.Release|x64.ActiveCfg = Release|x64
180
+		{11C084A3-A57C-4296-A679-CAC17B603144}.Release|x64.Build.0 = Release|x64
181
+		{11C084A3-A57C-4296-A679-CAC17B603144}.Release|x86.ActiveCfg = Release|Win32
182
+		{11C084A3-A57C-4296-A679-CAC17B603144}.Release|x86.Build.0 = Release|Win32
183
+	EndGlobalSection
184
+	GlobalSection(SolutionProperties) = preSolution
185
+		HideSolutionNode = FALSE
186
+	EndGlobalSection
187
+	GlobalSection(NestedProjects) = preSolution
188
+		{C38970C0-5FBF-4D69-90D8-CBAC225AE895} = {6030669C-4F4D-4889-B38E-0299826D8C01}
189
+		{FCA38F3C-7C73-4C47-BE4E-32F77FA8538D} = {6030669C-4F4D-4889-B38E-0299826D8C01}
190
+		{A990658C-CE31-4BCC-976F-0FC6B1AF693D} = {6030669C-4F4D-4889-B38E-0299826D8C01}
191
+		{0CC28589-39E4-4288-B162-97B959F8B843} = {6030669C-4F4D-4889-B38E-0299826D8C01}
192
+		{A62D504A-16B8-41D2-9F19-E2E86019E5E4} = {6030669C-4F4D-4889-B38E-0299826D8C01}
193
+		{F7D32BD0-2749-483E-9A0D-1635EF7E3136} = {6030669C-4F4D-4889-B38E-0299826D8C01}
194
+		{DA8B35B3-DA00-4B02-BDE6-6A397B3FD46B} = {6030669C-4F4D-4889-B38E-0299826D8C01}
195
+		{67A1076F-7790-4203-86EA-4402CCB5E782} = {6030669C-4F4D-4889-B38E-0299826D8C01}
196
+		{A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD} = {6030669C-4F4D-4889-B38E-0299826D8C01}
197
+		{2D5D43D9-CFFC-4C40-B4CD-02EFB4E2742B} = {6030669C-4F4D-4889-B38E-0299826D8C01}
198
+		{11C084A3-A57C-4296-A679-CAC17B603144} = {6030669C-4F4D-4889-B38E-0299826D8C01}
199
+	EndGlobalSection
200
+	GlobalSection(ExtensibilityGlobals) = postSolution
201
+		SolutionGuid = {D1E18B0A-0D27-4F39-8A8B-7E3D784A99FC}
202
+	EndGlobalSection
203
+EndGlobal

+ 16
- 0
windows/ReactNativeWebView/PropertySheet.props Прегледај датотеку

@@ -0,0 +1,16 @@
1
+<?xml version="1.0" encoding="utf-8"?>
2
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3
+  <ImportGroup Label="PropertySheets" />
4
+  <PropertyGroup Label="UserMacros" />
5
+  <!--
6
+    To customize common C++/WinRT project properties: 
7
+    * right-click the project node
8
+    * expand the Common Properties item
9
+    * select the C++/WinRT property page
10
+
11
+    For more advanced scenarios, and complete documentation, please see:
12
+    https://github.com/Microsoft/cppwinrt/tree/master/nuget 
13
+    -->
14
+  <PropertyGroup />
15
+  <ItemDefinitionGroup />
16
+</Project>

+ 3
- 0
windows/ReactNativeWebView/ReactNativeWebView.def Прегледај датотеку

@@ -0,0 +1,3 @@
1
+EXPORTS
2
+DllCanUnloadNow = WINRT_CanUnloadNow                    PRIVATE
3
+DllGetActivationFactory = WINRT_GetActivationFactory    PRIVATE

+ 33
- 0
windows/ReactNativeWebView/ReactNativeWebView.filters Прегледај датотеку

@@ -0,0 +1,33 @@
1
+<?xml version="1.0" encoding="utf-8"?>
2
+<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3
+  <ItemGroup>
4
+    <Filter Include="Resources">
5
+      <UniqueIdentifier>accd3aa8-1ba0-4223-9bbe-0c431709210b</UniqueIdentifier>
6
+      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tga;tiff;tif;png;wav;mfcribbon-ms</Extensions>
7
+    </Filter>
8
+    <Filter Include="Generated Files">
9
+      <UniqueIdentifier>{926ab91d-31b4-48c3-b9a4-e681349f27f0}</UniqueIdentifier>
10
+    </Filter>
11
+  </ItemGroup>
12
+  <ItemGroup>
13
+    <ClCompile Include="pch.cpp" />
14
+    <ClCompile Include="$(GeneratedFilesDir)module.g.cpp" />
15
+    <ClCompile Include="ReactPackageProvider.cpp" />
16
+    <ClCompile Include="WebViewManager.cpp" />
17
+  </ItemGroup>
18
+  <ItemGroup>
19
+    <ClInclude Include="pch.h" />
20
+    <ClInclude Include="ReactPackageProvider.h" />
21
+    <ClInclude Include="WebViewManager.h" />
22
+  </ItemGroup>
23
+  <ItemGroup>
24
+    <None Include="ReactNativeWebView.def" />
25
+    <None Include="packages.config" />
26
+  </ItemGroup>
27
+  <ItemGroup>
28
+    <None Include="PropertySheet.props" />
29
+  </ItemGroup>
30
+  <ItemGroup>
31
+    <Midl Include="ReactPackageProvider.idl" />
32
+  </ItemGroup>
33
+</Project>

+ 150
- 0
windows/ReactNativeWebView/ReactNativeWebView.vcxproj Прегледај датотеку

@@ -0,0 +1,150 @@
1
+<?xml version="1.0" encoding="utf-8"?>
2
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3
+  <Import Project="$(SolutionDir)packages\Microsoft.Windows.CppWinRT.2.0.190730.2\build\native\Microsoft.Windows.CppWinRT.props" Condition="Exists('$(SolutionDir)packages\Microsoft.Windows.CppWinRT.2.0.190730.2\build\native\Microsoft.Windows.CppWinRT.props')" />
4
+  <PropertyGroup Label="Globals">
5
+    <CppWinRTOptimized>true</CppWinRTOptimized>
6
+    <CppWinRTRootNamespaceAutoMerge>true</CppWinRTRootNamespaceAutoMerge>
7
+    <MinimalCoreWin>true</MinimalCoreWin>
8
+    <ProjectGuid>{729d9af8-cd9e-4427-9f6c-fb757e287729}</ProjectGuid>
9
+    <ProjectName>ReactNativeWebView</ProjectName>
10
+    <RootNamespace>ReactNativeWebView</RootNamespace>
11
+    <DefaultLanguage>en-US</DefaultLanguage>
12
+    <MinimumVisualStudioVersion>14.0</MinimumVisualStudioVersion>
13
+    <AppContainerApplication>true</AppContainerApplication>
14
+    <ApplicationType>Windows Store</ApplicationType>
15
+    <ApplicationTypeRevision>10.0</ApplicationTypeRevision>
16
+    <WindowsTargetPlatformVersion Condition=" '$(WindowsTargetPlatformVersion)' == '' ">10.0.18362.0</WindowsTargetPlatformVersion>
17
+    <WindowsTargetPlatformMinVersion>10.0.15063.0</WindowsTargetPlatformMinVersion>
18
+  </PropertyGroup>
19
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
20
+  <ItemGroup Label="ProjectConfigurations">
21
+    <ProjectConfiguration Include="Debug|ARM">
22
+      <Configuration>Debug</Configuration>
23
+      <Platform>ARM</Platform>
24
+    </ProjectConfiguration>
25
+    <ProjectConfiguration Include="Debug|Win32">
26
+      <Configuration>Debug</Configuration>
27
+      <Platform>Win32</Platform>
28
+    </ProjectConfiguration>
29
+    <ProjectConfiguration Include="Debug|x64">
30
+      <Configuration>Debug</Configuration>
31
+      <Platform>x64</Platform>
32
+    </ProjectConfiguration>
33
+    <ProjectConfiguration Include="Release|ARM">
34
+      <Configuration>Release</Configuration>
35
+      <Platform>ARM</Platform>
36
+    </ProjectConfiguration>
37
+    <ProjectConfiguration Include="Release|Win32">
38
+      <Configuration>Release</Configuration>
39
+      <Platform>Win32</Platform>
40
+    </ProjectConfiguration>
41
+    <ProjectConfiguration Include="Release|x64">
42
+      <Configuration>Release</Configuration>
43
+      <Platform>x64</Platform>
44
+    </ProjectConfiguration>
45
+  </ItemGroup>
46
+  <PropertyGroup Label="Configuration">
47
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
48
+    <PlatformToolset>v140</PlatformToolset>
49
+    <PlatformToolset Condition="'$(VisualStudioVersion)' == '15.0'">v141</PlatformToolset>
50
+    <PlatformToolset Condition="'$(VisualStudioVersion)' == '16.0'">v142</PlatformToolset>
51
+    <CharacterSet>Unicode</CharacterSet>
52
+    <GenerateManifest>false</GenerateManifest>
53
+  </PropertyGroup>
54
+  <PropertyGroup Condition="'$(Configuration)'=='Debug'" Label="Configuration">
55
+    <UseDebugLibraries>true</UseDebugLibraries>
56
+    <LinkIncremental>true</LinkIncremental>
57
+  </PropertyGroup>
58
+  <PropertyGroup Condition="'$(Configuration)'=='Release'" Label="Configuration">
59
+    <UseDebugLibraries>false</UseDebugLibraries>
60
+    <WholeProgramOptimization>true</WholeProgramOptimization>
61
+    <LinkIncremental>false</LinkIncremental>
62
+  </PropertyGroup>
63
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
64
+  <ImportGroup Label="ExtensionSettings">
65
+  </ImportGroup>
66
+  <ImportGroup Label="Shared">
67
+    <Import Project="..\..\..\react-native-windows\Microsoft.ReactNative.Cxx\Microsoft.ReactNative.Cxx.vcxitems" Label="Shared" />
68
+  </ImportGroup>
69
+  <ImportGroup Label="PropertySheets">
70
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
71
+  </ImportGroup>
72
+  <ImportGroup Label="PropertySheets">
73
+    <Import Project="PropertySheet.props" />
74
+  </ImportGroup>
75
+  <PropertyGroup Label="UserMacros" />
76
+  <PropertyGroup />
77
+  <ItemDefinitionGroup>
78
+    <ClCompile>
79
+      <PrecompiledHeader>Use</PrecompiledHeader>
80
+      <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
81
+      <PrecompiledHeaderOutputFile>$(IntDir)pch.pch</PrecompiledHeaderOutputFile>
82
+      <WarningLevel>Level4</WarningLevel>
83
+      <AdditionalOptions>%(AdditionalOptions) /bigobj</AdditionalOptions>
84
+      <!--Temporarily disable cppwinrt heap enforcement to work around xaml compiler generated std::shared_ptr use -->
85
+      <AdditionalOptions Condition="'$(CppWinRTHeapEnforcement)'==''">/DWINRT_NO_MAKE_DETECTION %(AdditionalOptions)</AdditionalOptions>
86
+      <DisableSpecificWarnings>28204</DisableSpecificWarnings>
87
+      <PreprocessorDefinitions>_WINRT_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
88
+      <AdditionalUsingDirectories>$(WindowsSDK_WindowsMetadata);$(AdditionalUsingDirectories)</AdditionalUsingDirectories>
89
+    </ClCompile>
90
+    <Link>
91
+      <SubSystem>Console</SubSystem>
92
+      <GenerateWindowsMetadata>true</GenerateWindowsMetadata>
93
+      <ModuleDefinitionFile>ReactNativeWebView.def</ModuleDefinitionFile>
94
+    </Link>
95
+  </ItemDefinitionGroup>
96
+  <ItemDefinitionGroup Condition="'$(Configuration)'=='Debug'">
97
+    <ClCompile>
98
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
99
+    </ClCompile>
100
+  </ItemDefinitionGroup>
101
+  <ItemDefinitionGroup Condition="'$(Configuration)'=='Release'">
102
+    <ClCompile>
103
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
104
+    </ClCompile>
105
+  </ItemDefinitionGroup>
106
+  <ItemGroup>
107
+    <ClInclude Include="ReactWebViewManager.h" />
108
+    <ClInclude Include="pch.h" />
109
+    <ClInclude Include="ReactPackageProvider.h">
110
+      <DependentUpon>ReactPackageProvider.idl</DependentUpon>
111
+    </ClInclude>
112
+  </ItemGroup>
113
+  <ItemGroup>
114
+    <ClCompile Include="ReactWebViewManager.cpp" />
115
+    <ClCompile Include="pch.cpp">
116
+      <PrecompiledHeader>Create</PrecompiledHeader>
117
+    </ClCompile>
118
+    <ClCompile Include="ReactPackageProvider.cpp">
119
+      <DependentUpon>ReactPackageProvider.idl</DependentUpon>
120
+    </ClCompile>
121
+    <ClCompile Include="$(GeneratedFilesDir)module.g.cpp" />
122
+  </ItemGroup>
123
+  <ItemGroup>
124
+    <Midl Include="ReactPackageProvider.idl" />
125
+  </ItemGroup>
126
+  <ItemGroup>
127
+    <None Include="packages.config" />
128
+    <None Include="ReactNativeWebView.def" />
129
+  </ItemGroup>
130
+  <ItemGroup>
131
+    <None Include="PropertySheet.props" />
132
+  </ItemGroup>
133
+  <ItemGroup>
134
+    <ProjectReference Include="..\..\..\react-native-windows\Microsoft.ReactNative\Microsoft.ReactNative.vcxproj">
135
+      <Project>{f7d32bd0-2749-483e-9a0d-1635ef7e3136}</Project>
136
+      <Private>false</Private>
137
+    </ProjectReference>
138
+  </ItemGroup>
139
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
140
+  <ImportGroup Label="ExtensionTargets">
141
+    <Import Project="$(SolutionDir)packages\Microsoft.Windows.CppWinRT.2.0.190730.2\build\native\Microsoft.Windows.CppWinRT.targets" Condition="Exists('$(SolutionDir)packages\Microsoft.Windows.CppWinRT.2.0.190730.2\build\native\Microsoft.Windows.CppWinRT.targets')" />
142
+  </ImportGroup>
143
+  <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
144
+    <PropertyGroup>
145
+      <ErrorText>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}.</ErrorText>
146
+    </PropertyGroup>
147
+    <Error Condition="!Exists('$(SolutionDir)packages\Microsoft.Windows.CppWinRT.2.0.190730.2\build\native\Microsoft.Windows.CppWinRT.props')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)packages\Microsoft.Windows.CppWinRT.2.0.190730.2\build\native\Microsoft.Windows.CppWinRT.props'))" />
148
+    <Error Condition="!Exists('$(SolutionDir)packages\Microsoft.Windows.CppWinRT.2.0.190730.2\build\native\Microsoft.Windows.CppWinRT.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)packages\Microsoft.Windows.CppWinRT.2.0.190730.2\build\native\Microsoft.Windows.CppWinRT.targets'))" />
149
+  </Target>
150
+</Project>

+ 17
- 0
windows/ReactNativeWebView/ReactPackageProvider.cpp Прегледај датотеку

@@ -0,0 +1,17 @@
1
+#include "pch.h"
2
+#include "ReactPackageProvider.h"
3
+#if __has_include("ReactPackageProvider.g.cpp")
4
+#include "ReactPackageProvider.g.cpp"
5
+#endif
6
+
7
+#include "ReactWebViewManager.h"
8
+
9
+using namespace winrt::Microsoft::ReactNative;
10
+
11
+namespace winrt::ReactNativeWebView::implementation {
12
+
13
+void ReactPackageProvider::CreatePackage(IReactPackageBuilder const &packageBuilder) noexcept {
14
+  packageBuilder.AddViewManager(L"ReactWebViewManager", []() { return winrt::make<ReactWebViewManager>(); });
15
+}
16
+
17
+} // namespace winrt::ReactNativeWebView::implementation

+ 20
- 0
windows/ReactNativeWebView/ReactPackageProvider.h Прегледај датотеку

@@ -0,0 +1,20 @@
1
+#pragma once
2
+#include "ReactPackageProvider.g.h"
3
+
4
+using namespace winrt::Microsoft::ReactNative;
5
+
6
+namespace winrt::ReactNativeWebView::implementation {
7
+
8
+struct ReactPackageProvider : ReactPackageProviderT<ReactPackageProvider> {
9
+  ReactPackageProvider() = default;
10
+
11
+  void CreatePackage(IReactPackageBuilder const &packageBuilder) noexcept;
12
+};
13
+
14
+} // namespace winrt::ReactNativeWebView::implementation
15
+
16
+namespace winrt::ReactNativeWebView::factory_implementation {
17
+
18
+struct ReactPackageProvider : ReactPackageProviderT<ReactPackageProvider, implementation::ReactPackageProvider> {};
19
+
20
+} // namespace winrt::ReactNativeWebView::factory_implementation

+ 7
- 0
windows/ReactNativeWebView/ReactPackageProvider.idl Прегледај датотеку

@@ -0,0 +1,7 @@
1
+namespace ReactNativeWebView {
2
+[webhosthidden]
3
+[default_interface] 
4
+runtimeclass ReactPackageProvider : Microsoft.ReactNative.IReactPackageProvider {
5
+  ReactPackageProvider();
6
+};
7
+} // namespace ReactNativeWebView

+ 173
- 0
windows/ReactNativeWebView/ReactWebViewManager.cpp Прегледај датотеку

@@ -0,0 +1,173 @@
1
+#include "pch.h"
2
+#include "ReactWebViewManager.h"
3
+#include "NativeModules.h"
4
+
5
+namespace winrt {
6
+    using namespace Microsoft::ReactNative;
7
+    using namespace Windows::Foundation;
8
+    using namespace Windows::Foundation::Collections;
9
+    using namespace Windows::UI::Xaml;
10
+    using namespace Windows::UI::Xaml::Controls;
11
+}
12
+
13
+namespace winrt::ReactNativeWebView::implementation {
14
+
15
+    ReactWebViewManager::ReactWebViewManager() {}
16
+
17
+    // IViewManager
18
+    winrt::hstring ReactWebViewManager::Name() noexcept {
19
+        return L"RCTWebView";
20
+    }
21
+
22
+    winrt::FrameworkElement ReactWebViewManager::CreateView() noexcept {
23
+        auto webView = winrt::WebView();
24
+        m_webView = winrt::make_weak(webView);
25
+        RegisterEvents();
26
+        return webView;
27
+    }
28
+
29
+    void ReactWebViewManager::RegisterEvents() {
30
+        if (auto webView = m_webView.get()) {
31
+            m_navigationCompletedRevoker = webView.NavigationCompleted(
32
+                winrt::auto_revoke, [=](auto const& sender, auto const& args) {
33
+                    OnNavigationCompleted(sender, args);
34
+                });
35
+        }
36
+    }
37
+
38
+    // IViewManagerWithReactContext
39
+    winrt::IReactContext ReactWebViewManager::ReactContext() noexcept {
40
+        return m_reactContext;
41
+    }
42
+
43
+    void ReactWebViewManager::ReactContext(IReactContext reactContext) noexcept {
44
+        m_reactContext = reactContext;
45
+    }
46
+
47
+    // IViewManagerWithNativeProperties
48
+    IMapView<hstring, ViewManagerPropertyType> ReactWebViewManager::NativeProps() noexcept {
49
+        auto nativeProps = winrt::single_threaded_map<hstring, ViewManagerPropertyType>();
50
+        nativeProps.Insert(L"source", ViewManagerPropertyType::Map);
51
+        return nativeProps.GetView();
52
+    }
53
+
54
+    void ReactWebViewManager::UpdateProperties(
55
+        FrameworkElement const& view,
56
+        IJSValueReader const& propertyMapReader) noexcept {
57
+        if (auto webView = view.try_as<winrt::WebView>()) {
58
+            const JSValueObject& propertyMap = JSValue::ReadObjectFrom(propertyMapReader);
59
+
60
+            for (auto const& pair : propertyMap) {
61
+                auto const& propertyName = pair.first;
62
+                auto const& propertyValue = pair.second;
63
+
64
+                if (propertyName == "source") {
65
+                    if (!propertyValue.IsNull()) {
66
+                        auto const& srcMap = propertyValue.Object();
67
+
68
+                        auto uriString = srcMap.at("uri").String();
69
+                        // non-uri sources not yet supported
70
+                        if (uriString.length() == 0) {
71
+                            continue;
72
+                        }
73
+
74
+                        bool isPackagerAsset = false;
75
+                        if (srcMap.find("__packager_asset") != srcMap.end()) {
76
+                            isPackagerAsset = srcMap.at("__packager_asset").Boolean();
77
+                        }
78
+
79
+                        if (isPackagerAsset && uriString.find("assets") == 0) {
80
+                            uriString.replace(0, 6, "ms-appx://");
81
+                        }
82
+
83
+                        SetSource(winrt::Uri(to_hstring(uriString)));
84
+                    }
85
+                }
86
+            }
87
+        }
88
+    }
89
+
90
+    void ReactWebViewManager::SetSource(winrt::Uri const& uri) {
91
+        if (auto webView = m_webView.get()) {
92
+            auto tag = webView.GetValue(winrt::FrameworkElement::TagProperty()).as<winrt::IPropertyValue>().GetInt64();
93
+            m_reactContext.DispatchEvent(
94
+                webView,
95
+                L"topLoadingStart",
96
+                [webView, tag, uri](winrt::IJSValueWriter const& eventDataWriter) noexcept {
97
+                    eventDataWriter.WriteObjectBegin();
98
+                    {
99
+                        WriteProperty(eventDataWriter, L"canGoBack", webView.CanGoBack());
100
+                        WriteProperty(eventDataWriter, L"canGoForward", webView.CanGoForward());
101
+                        WriteProperty(eventDataWriter, L"loading", true);
102
+                        WriteProperty(eventDataWriter, L"target", tag);
103
+                        WriteProperty(eventDataWriter, L"title", webView.DocumentTitle());
104
+                        WriteProperty(eventDataWriter, L"url", uri.ToString());
105
+                    }
106
+                    eventDataWriter.WriteObjectEnd();
107
+                });
108
+
109
+            webView.Navigate(uri);
110
+        }
111
+    }
112
+
113
+    // IViewManagerWithExportedEventTypeConstants
114
+    ConstantProvider ReactWebViewManager::ExportedCustomBubblingEventTypeConstants() noexcept {
115
+        return nullptr;
116
+    }
117
+
118
+    ConstantProvider ReactWebViewManager::ExportedCustomDirectEventTypeConstants() noexcept {
119
+        return [](winrt::IJSValueWriter const& constantWriter) {
120
+            WriteCustomDirectEventTypeConstant(constantWriter, "onLoadingStart");
121
+            WriteCustomDirectEventTypeConstant(constantWriter, "onLoad");
122
+            WriteCustomDirectEventTypeConstant(constantWriter, "onLoadingFinish");
123
+        };
124
+    }
125
+
126
+    // IViewManagerWithCommands
127
+    IMapView<hstring, int64_t> ReactWebViewManager::Commands() noexcept {
128
+        auto commands = winrt::single_threaded_map<hstring, int64_t>();
129
+        commands.Insert(L"goForward", 0);
130
+        commands.Insert(L"goBack", 1);
131
+        commands.Insert(L"reload", 2);
132
+        return commands.GetView();
133
+    }
134
+
135
+    void ReactWebViewManager::DispatchCommand(
136
+        FrameworkElement const& view,
137
+        int64_t commandId,
138
+        winrt::IJSValueReader const& commandArgsReader) noexcept {
139
+        if (auto webView = view.try_as<winrt::WebView>()) {
140
+            switch (commandId) {
141
+            case 0: // goForward
142
+                webView.GoForward();
143
+                break;
144
+            case 1: // goBack
145
+                webView.GoBack();
146
+                break;
147
+            case 2: // reload
148
+                webView.Refresh();
149
+                break;
150
+            }
151
+        }
152
+    }
153
+
154
+    void ReactWebViewManager::OnNavigationCompleted(winrt::WebView const& webView, winrt::WebViewNavigationCompletedEventArgs const& args) {
155
+        m_reactContext.DispatchEvent(
156
+            webView,
157
+            L"topLoadingFinish",
158
+            [webView, args](winrt::IJSValueWriter const& eventDataWriter) noexcept {
159
+                eventDataWriter.WriteObjectBegin();
160
+                {
161
+                    auto tag = webView.GetValue(winrt::FrameworkElement::TagProperty()).as<winrt::IPropertyValue>().GetInt64();
162
+                    WriteProperty(eventDataWriter, L"canGoBack", webView.CanGoBack());
163
+                    WriteProperty(eventDataWriter, L"canGoForward", webView.CanGoForward());
164
+                    WriteProperty(eventDataWriter, L"loading", false);
165
+                    WriteProperty(eventDataWriter, L"target", tag);
166
+                    WriteProperty(eventDataWriter, L"title", webView.DocumentTitle());
167
+                    WriteProperty(eventDataWriter, L"url", args.Uri().ToString());
168
+                }
169
+                eventDataWriter.WriteObjectEnd();
170
+            });
171
+    }
172
+
173
+} // namespace winrt::ReactWebView::implementation

+ 56
- 0
windows/ReactNativeWebView/ReactWebViewManager.h Прегледај датотеку

@@ -0,0 +1,56 @@
1
+// Copyright (c) Microsoft Corporation. All rights reserved.
2
+// Licensed under the MIT License.
3
+
4
+#pragma once
5
+#include "winrt/Microsoft.ReactNative.h"
6
+#include "NativeModules.h"
7
+
8
+namespace winrt::ReactNativeWebView::implementation {
9
+    class ReactWebViewManager : public winrt::implements<
10
+        ReactWebViewManager,
11
+        winrt::Microsoft::ReactNative::IViewManager,
12
+        winrt::Microsoft::ReactNative::IViewManagerWithReactContext,
13
+        winrt::Microsoft::ReactNative::IViewManagerWithNativeProperties,
14
+        winrt::Microsoft::ReactNative::IViewManagerWithExportedEventTypeConstants,
15
+        winrt::Microsoft::ReactNative::IViewManagerWithCommands> {
16
+    public:
17
+        ReactWebViewManager();
18
+        // IViewManager
19
+        winrt::hstring Name() noexcept;
20
+        winrt::Windows::UI::Xaml::FrameworkElement CreateView() noexcept;
21
+
22
+        // IViewManagerWithReactContext
23
+        winrt::Microsoft::ReactNative::IReactContext ReactContext() noexcept;
24
+        void ReactContext(winrt::Microsoft::ReactNative::IReactContext reactContext) noexcept;
25
+
26
+        // IViewManagerWithNativeProperties
27
+        winrt::Windows::Foundation::Collections::
28
+            IMapView<winrt::hstring, winrt::Microsoft::ReactNative::ViewManagerPropertyType>
29
+            NativeProps() noexcept;
30
+
31
+        void UpdateProperties(
32
+            winrt::Windows::UI::Xaml::FrameworkElement const& view,
33
+            winrt::Microsoft::ReactNative::IJSValueReader const& propertyMapReader) noexcept;
34
+
35
+        // IViewManagerWithExportedEventTypeConstants
36
+        winrt::Microsoft::ReactNative::ConstantProvider ExportedCustomBubblingEventTypeConstants() noexcept;
37
+        winrt::Microsoft::ReactNative::ConstantProvider ExportedCustomDirectEventTypeConstants() noexcept;
38
+
39
+        // IViewManagerWithCommands
40
+        winrt::Windows::Foundation::Collections::IMapView<winrt::hstring, int64_t> Commands() noexcept;
41
+
42
+        void DispatchCommand(
43
+            winrt::Windows::UI::Xaml::FrameworkElement const& view,
44
+            int64_t commandId,
45
+            winrt::Microsoft::ReactNative::IJSValueReader const& commandArgsReader) noexcept;
46
+
47
+    private:
48
+        winrt::weak_ref<winrt::Windows::UI::Xaml::Controls::WebView> m_webView;
49
+        winrt::Microsoft::ReactNative::IReactContext m_reactContext{ nullptr };
50
+        winrt::Windows::UI::Xaml::Controls::WebView::NavigationCompleted_revoker m_navigationCompletedRevoker{};
51
+
52
+        void RegisterEvents();
53
+        void SetSource(winrt::Windows::Foundation::Uri const& uri);
54
+        void OnNavigationCompleted(winrt::Windows::UI::Xaml::Controls::WebView const& sender, winrt::Windows::UI::Xaml::Controls::WebViewNavigationCompletedEventArgs const& args);
55
+    };
56
+} // namespace winrt::ReactWebView::implementation

+ 4
- 0
windows/ReactNativeWebView/packages.config Прегледај датотеку

@@ -0,0 +1,4 @@
1
+<?xml version="1.0" encoding="utf-8"?>
2
+<packages>
3
+  <package id="Microsoft.Windows.CppWinRT" version="2.0.190730.2" targetFramework="native" />
4
+</packages>

+ 1
- 0
windows/ReactNativeWebView/pch.cpp Прегледај датотеку

@@ -0,0 +1 @@
1
+#include "pch.h"

+ 8
- 0
windows/ReactNativeWebView/pch.h Прегледај датотеку

@@ -0,0 +1,8 @@
1
+#pragma once
2
+#include <unknwn.h>
3
+#include <winrt/Windows.Foundation.h>
4
+#include <winrt/Windows.Foundation.Collections.h>
5
+#include <winrt/Windows.UI.Xaml.h>
6
+#include <winrt/Windows.UI.Xaml.Controls.h>
7
+#include <winrt/Windows.UI.Xaml.Navigation.h>
8
+#include <winrt/Microsoft.ReactNative.h>

+ 18
- 326
yarn.lock Прегледај датотеку

@@ -1035,13 +1035,6 @@
1035 1035
     once "^1.4.0"
1036 1036
     universal-user-agent "^4.0.0"
1037 1037
 
1038
-"@react-native-community/cli-debugger-ui@^3.0.0":
1039
-  version "3.0.0"
1040
-  resolved "https://registry.yarnpkg.com/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-3.0.0.tgz#d01d08d1e5ddc1633d82c7d84d48fff07bd39416"
1041
-  integrity sha512-m3X+iWLsK/H7/b7PpbNO33eQayR/+M26la4ZbYe1KRke5Umg4PIWsvg21O8Tw4uJcY8LA5hsP+rBi/syBkBf0g==
1042
-  dependencies:
1043
-    serve-static "^1.13.1"
1044
-
1045 1038
 "@react-native-community/cli-platform-android@^2.6.0", "@react-native-community/cli-platform-android@^2.9.0":
1046 1039
   version "2.9.0"
1047 1040
   resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-android/-/cli-platform-android-2.9.0.tgz#28831e61ce565a2c7d1905852fce1eecfd33cb5e"
@@ -1107,11 +1100,6 @@
1107 1100
     mime "^2.4.1"
1108 1101
     node-fetch "^2.5.0"
1109 1102
 
1110
-"@react-native-community/cli-types@^3.0.0":
1111
-  version "3.0.0"
1112
-  resolved "https://registry.yarnpkg.com/@react-native-community/cli-types/-/cli-types-3.0.0.tgz#488d46605cb05e88537e030f38da236eeda74652"
1113
-  integrity sha512-ng6Tm537E/M42GjE4TRUxQyL8sRfClcL7bQWblOCoxPZzJ2J3bdALsjeG3vDnVCIfI/R0AeFalN9KjMt0+Z/Zg==
1114
-
1115 1103
 "@react-native-community/cli@^2.6.0":
1116 1104
   version "2.10.0"
1117 1105
   resolved "https://registry.yarnpkg.com/@react-native-community/cli/-/cli-2.10.0.tgz#3bda7a77dadfde006d81ee835263b5ff88f1b590"
@@ -1151,50 +1139,6 @@
1151 1139
     shell-quote "1.6.1"
1152 1140
     ws "^1.1.0"
1153 1141
 
1154
-"@react-native-community/cli@^3.0.0":
1155
-  version "3.0.4"
1156
-  resolved "https://registry.yarnpkg.com/@react-native-community/cli/-/cli-3.0.4.tgz#a9dba1bc77855a6e45fccaabb017360645d936bb"
1157
-  integrity sha512-kt+ENtC+eRUSfWPbbpx3r7fAQDcFwgM03VW/lBdVAUjkNxffPFT2GGdK23CJSBOXTjRSiGuwhvwH4Z28PdrlRA==
1158
-  dependencies:
1159
-    "@hapi/joi" "^15.0.3"
1160
-    "@react-native-community/cli-debugger-ui" "^3.0.0"
1161
-    "@react-native-community/cli-tools" "^3.0.0"
1162
-    "@react-native-community/cli-types" "^3.0.0"
1163
-    chalk "^2.4.2"
1164
-    command-exists "^1.2.8"
1165
-    commander "^2.19.0"
1166
-    compression "^1.7.1"
1167
-    connect "^3.6.5"
1168
-    cosmiconfig "^5.1.0"
1169
-    deepmerge "^3.2.0"
1170
-    envinfo "^7.1.0"
1171
-    errorhandler "^1.5.0"
1172
-    execa "^1.0.0"
1173
-    find-up "^4.1.0"
1174
-    fs-extra "^7.0.1"
1175
-    glob "^7.1.1"
1176
-    graceful-fs "^4.1.3"
1177
-    inquirer "^3.0.6"
1178
-    lodash "^4.17.5"
1179
-    metro "^0.56.0"
1180
-    metro-config "^0.56.0"
1181
-    metro-core "^0.56.0"
1182
-    metro-react-native-babel-transformer "^0.56.0"
1183
-    minimist "^1.2.0"
1184
-    mkdirp "^0.5.1"
1185
-    morgan "^1.9.0"
1186
-    node-notifier "^5.2.1"
1187
-    open "^6.2.0"
1188
-    ora "^3.4.0"
1189
-    plist "^3.0.0"
1190
-    semver "^6.3.0"
1191
-    serve-static "^1.13.1"
1192
-    shell-quote "1.6.1"
1193
-    strip-ansi "^5.2.0"
1194
-    sudo-prompt "^9.0.0"
1195
-    wcwidth "^1.0.1"
1196
-    ws "^1.1.0"
1197
-
1198 1142
 "@semantic-release/commit-analyzer@^6.1.0":
1199 1143
   version "6.3.0"
1200 1144
   resolved "https://registry.yarnpkg.com/@semantic-release/commit-analyzer/-/commit-analyzer-6.3.0.tgz#e0fb2f6af7be2321ad9401d8ae25be0cc1005d83"
@@ -2520,11 +2464,6 @@ combined-stream@^1.0.6, combined-stream@~1.0.6:
2520 2464
   dependencies:
2521 2465
     delayed-stream "~1.0.0"
2522 2466
 
2523
-command-exists@^1.2.8:
2524
-  version "1.2.8"
2525
-  resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.8.tgz#715acefdd1223b9c9b37110a149c6392c2852291"
2526
-  integrity sha512-PM54PkseWbiiD/mMsbvW351/u+dafwTJ0ye2qB60G1aGQP9j3xK2gmMDc+R34L3nDtx4qMCitXT75mkbkGJDLw==
2527
-
2528 2467
 commander@^2.11.0, commander@^2.19.0, commander@~2.20.0:
2529 2468
   version "2.20.0"
2530 2469
   resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422"
@@ -3825,7 +3764,7 @@ find-up@^3.0.0:
3825 3764
   dependencies:
3826 3765
     locate-path "^3.0.0"
3827 3766
 
3828
-find-up@^4.0.0, find-up@^4.1.0:
3767
+find-up@^4.0.0:
3829 3768
   version "4.1.0"
3830 3769
   resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19"
3831 3770
   integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==
@@ -4242,11 +4181,6 @@ has@^1.0.1, has@^1.0.3:
4242 4181
   dependencies:
4243 4182
     function-bind "^1.1.1"
4244 4183
 
4245
-hermes-engine@^0.2.1:
4246
-  version "0.2.1"
4247
-  resolved "https://registry.yarnpkg.com/hermes-engine/-/hermes-engine-0.2.1.tgz#25c0f1ff852512a92cb5c5cc47cf967e1e722ea2"
4248
-  integrity sha512-eNHUQHuadDMJARpaqvlCZoK/Nitpj6oywq3vQ3wCwEsww5morX34mW5PmKWQTO7aU0ck0hgulxR+EVDlXygGxQ==
4249
-
4250 4184
 hermesvm@^0.1.0:
4251 4185
   version "0.1.1"
4252 4186
   resolved "https://registry.yarnpkg.com/hermesvm/-/hermesvm-0.1.1.tgz#bd1df92b4dc504e261c23df34864daf24b844d03"
@@ -5273,7 +5207,7 @@ jsbn@~0.1.0:
5273 5207
   resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
5274 5208
   integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM=
5275 5209
 
5276
-jsc-android@245459.0.0, jsc-android@^245459.0.0:
5210
+jsc-android@245459.0.0:
5277 5211
   version "245459.0.0"
5278 5212
   resolved "https://registry.yarnpkg.com/jsc-android/-/jsc-android-245459.0.0.tgz#e584258dd0b04c9159a27fb104cd5d491fd202c9"
5279 5213
   integrity sha512-wkjURqwaB1daNkDi2OYYbsLnIdC/lUM2nPXQKRs5pqEU9chDg435bjvo+LSaHotDENygHQDHe+ntUkkw2gwMtg==
@@ -6003,24 +5937,6 @@ metro-babel-register@0.54.1:
6003 5937
     core-js "^2.2.2"
6004 5938
     escape-string-regexp "^1.0.5"
6005 5939
 
6006
-metro-babel-register@^0.56.0, metro-babel-register@^0.56.4:
6007
-  version "0.56.4"
6008
-  resolved "https://registry.yarnpkg.com/metro-babel-register/-/metro-babel-register-0.56.4.tgz#b0c627a1cfdd1bdd768f81af79481754e833a902"
6009
-  integrity sha512-Phm6hMluOWYqfykftjJ1jsTpWvbgb49AC/1taxEctxUdRCZlFgZwBleJZAhQYxJD5J+ikFkEbHDzePEXb29KVA==
6010
-  dependencies:
6011
-    "@babel/core" "^7.0.0"
6012
-    "@babel/plugin-proposal-class-properties" "^7.0.0"
6013
-    "@babel/plugin-proposal-nullish-coalescing-operator" "^7.0.0"
6014
-    "@babel/plugin-proposal-object-rest-spread" "^7.0.0"
6015
-    "@babel/plugin-proposal-optional-catch-binding" "^7.0.0"
6016
-    "@babel/plugin-proposal-optional-chaining" "^7.0.0"
6017
-    "@babel/plugin-transform-async-to-generator" "^7.0.0"
6018
-    "@babel/plugin-transform-flow-strip-types" "^7.0.0"
6019
-    "@babel/plugin-transform-modules-commonjs" "^7.0.0"
6020
-    "@babel/register" "^7.0.0"
6021
-    core-js "^2.2.2"
6022
-    escape-string-regexp "^1.0.5"
6023
-
6024 5940
 metro-babel-transformer@0.54.1:
6025 5941
   version "0.54.1"
6026 5942
   resolved "https://registry.yarnpkg.com/metro-babel-transformer/-/metro-babel-transformer-0.54.1.tgz#371ffa2d1118b22cc9e40b3c3ea6738c49dae9dc"
@@ -6028,14 +5944,6 @@ metro-babel-transformer@0.54.1:
6028 5944
   dependencies:
6029 5945
     "@babel/core" "^7.0.0"
6030 5946
 
6031
-metro-babel-transformer@^0.56.4:
6032
-  version "0.56.4"
6033
-  resolved "https://registry.yarnpkg.com/metro-babel-transformer/-/metro-babel-transformer-0.56.4.tgz#fe1d0dc600fcf90201a5bea4d42caea10b801057"
6034
-  integrity sha512-IOi4ILgZvaX7GCGHBJp79paNVOq5QxhhbyqAdEJgDP8bHfl/OVHoVKSypfrsMSKSiBrqxhIjyc4XjkXsQtkx5g==
6035
-  dependencies:
6036
-    "@babel/core" "^7.0.0"
6037
-    metro-source-map "^0.56.4"
6038
-
6039 5947
 metro-babel7-plugin-react-transform@0.54.1:
6040 5948
   version "0.54.1"
6041 5949
   resolved "https://registry.yarnpkg.com/metro-babel7-plugin-react-transform/-/metro-babel7-plugin-react-transform-0.54.1.tgz#5335b810284789724886dc483d5bde9c149a1996"
@@ -6053,16 +5961,6 @@ metro-cache@0.54.1:
6053 5961
     mkdirp "^0.5.1"
6054 5962
     rimraf "^2.5.4"
6055 5963
 
6056
-metro-cache@^0.56.4:
6057
-  version "0.56.4"
6058
-  resolved "https://registry.yarnpkg.com/metro-cache/-/metro-cache-0.56.4.tgz#542f9f8a35f8fb9d5576f46fd3ab4d4f42851a7e"
6059
-  integrity sha512-d1hiUSKwtRsuMxUhHVJ3tjK2BbpUlJGvTyMWohK8Wxx+0GbnWRWWFcI4vlCzlZfoK0VtZK2MJEl5t7Du1mIniQ==
6060
-  dependencies:
6061
-    jest-serializer "^24.4.0"
6062
-    metro-core "^0.56.4"
6063
-    mkdirp "^0.5.1"
6064
-    rimraf "^2.5.4"
6065
-
6066 5964
 metro-config@0.54.1, metro-config@^0.54.1:
6067 5965
   version "0.54.1"
6068 5966
   resolved "https://registry.yarnpkg.com/metro-config/-/metro-config-0.54.1.tgz#808b4e17625d9f4e9afa34232778fdf8e63cc8dd"
@@ -6075,18 +5973,6 @@ metro-config@0.54.1, metro-config@^0.54.1:
6075 5973
     metro-core "0.54.1"
6076 5974
     pretty-format "^24.7.0"
6077 5975
 
6078
-metro-config@^0.56.0, metro-config@^0.56.4:
6079
-  version "0.56.4"
6080
-  resolved "https://registry.yarnpkg.com/metro-config/-/metro-config-0.56.4.tgz#338fd8165fba59424cec427c1a881757945e57e9"
6081
-  integrity sha512-O85QDHwWdMn/8ERe13y4a6vbZL0AHyO8atTvL+9BCulLEO+FQBi1iJjr3+ViLa8cf0m5dRftDsa7P47m5euk4A==
6082
-  dependencies:
6083
-    cosmiconfig "^5.0.5"
6084
-    jest-validate "^24.7.0"
6085
-    metro "^0.56.4"
6086
-    metro-cache "^0.56.4"
6087
-    metro-core "^0.56.4"
6088
-    pretty-format "^24.7.0"
6089
-
6090 5976
 metro-core@0.54.1, metro-core@^0.54.1:
6091 5977
   version "0.54.1"
6092 5978
   resolved "https://registry.yarnpkg.com/metro-core/-/metro-core-0.54.1.tgz#17f6ecc167918da8819d4af5726349e55714954b"
@@ -6097,16 +5983,6 @@ metro-core@0.54.1, metro-core@^0.54.1:
6097 5983
     metro-resolver "0.54.1"
6098 5984
     wordwrap "^1.0.0"
6099 5985
 
6100
-metro-core@^0.56.0, metro-core@^0.56.4:
6101
-  version "0.56.4"
6102
-  resolved "https://registry.yarnpkg.com/metro-core/-/metro-core-0.56.4.tgz#67cc41b3c0bf66e9c2306f50239a1080b1e82312"
6103
-  integrity sha512-hMzkBdgPt5Zm9nr/1KtIT+A6H7TNiLVCEGG5OiAXj8gTRsA2yy7wAdQpwy0xbE+zi88t/pLOzXpd3ClG/YxyWg==
6104
-  dependencies:
6105
-    jest-haste-map "^24.7.1"
6106
-    lodash.throttle "^4.1.1"
6107
-    metro-resolver "^0.56.4"
6108
-    wordwrap "^1.0.0"
6109
-
6110 5986
 metro-inspector-proxy@0.54.1:
6111 5987
   version "0.54.1"
6112 5988
   resolved "https://registry.yarnpkg.com/metro-inspector-proxy/-/metro-inspector-proxy-0.54.1.tgz#0ef48ee3feb11c6da47aa100151a9bf2a7c358ee"
@@ -6118,17 +5994,6 @@ metro-inspector-proxy@0.54.1:
6118 5994
     ws "^1.1.5"
6119 5995
     yargs "^9.0.0"
6120 5996
 
6121
-metro-inspector-proxy@^0.56.4:
6122
-  version "0.56.4"
6123
-  resolved "https://registry.yarnpkg.com/metro-inspector-proxy/-/metro-inspector-proxy-0.56.4.tgz#7343ff3c5908af4fd99e96b6d646e24e99816be4"
6124
-  integrity sha512-E1S3MO25mWKmcLn1UQuCDiS0hf9P2Fwq8sEAX5lBLoZbehepNH+4xJ3xXSY51JX4dozBrE8GGoKL4ll3II40LA==
6125
-  dependencies:
6126
-    connect "^3.6.5"
6127
-    debug "^2.2.0"
6128
-    rxjs "^5.4.3"
6129
-    ws "^1.1.5"
6130
-    yargs "^9.0.0"
6131
-
6132 5997
 metro-minify-uglify@0.54.1:
6133 5998
   version "0.54.1"
6134 5999
   resolved "https://registry.yarnpkg.com/metro-minify-uglify/-/metro-minify-uglify-0.54.1.tgz#54ed1cb349245ce82dba8cc662bbf69fbca142c3"
@@ -6136,13 +6001,6 @@ metro-minify-uglify@0.54.1:
6136 6001
   dependencies:
6137 6002
     uglify-es "^3.1.9"
6138 6003
 
6139
-metro-minify-uglify@^0.56.4:
6140
-  version "0.56.4"
6141
-  resolved "https://registry.yarnpkg.com/metro-minify-uglify/-/metro-minify-uglify-0.56.4.tgz#13589dfb1d43343608aacb7f78ddfcc052daa63c"
6142
-  integrity sha512-BHgj7+BKEK2pHvWHUR730bIrsZwl8DPtr49x9L0j2grPZ5/UROWXzEr8VZgIss7fl64t845uu1HXNNyuSj2EhA==
6143
-  dependencies:
6144
-    uglify-es "^3.1.9"
6145
-
6146 6004
 metro-react-native-babel-preset@0.54.1:
6147 6005
   version "0.54.1"
6148 6006
   resolved "https://registry.yarnpkg.com/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.54.1.tgz#b8f03865c381841d7f8912e7ba46804ea3a928b8"
@@ -6185,47 +6043,6 @@ metro-react-native-babel-preset@0.54.1:
6185 6043
     metro-babel7-plugin-react-transform "0.54.1"
6186 6044
     react-transform-hmr "^1.0.4"
6187 6045
 
6188
-metro-react-native-babel-preset@^0.56.4:
6189
-  version "0.56.4"
6190
-  resolved "https://registry.yarnpkg.com/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.56.4.tgz#dcedc64b7ff5c0734839458e70eb0ebef6d063a8"
6191
-  integrity sha512-CzbBDM9Rh6w8s1fq+ZqihAh7DDqUAcfo9pPww25+N/eJ7UK436Q7JdfxwdIPpBwLFn6o6MyYn+uwL9OEWBJarA==
6192
-  dependencies:
6193
-    "@babel/plugin-proposal-class-properties" "^7.0.0"
6194
-    "@babel/plugin-proposal-export-default-from" "^7.0.0"
6195
-    "@babel/plugin-proposal-nullish-coalescing-operator" "^7.0.0"
6196
-    "@babel/plugin-proposal-object-rest-spread" "^7.0.0"
6197
-    "@babel/plugin-proposal-optional-catch-binding" "^7.0.0"
6198
-    "@babel/plugin-proposal-optional-chaining" "^7.0.0"
6199
-    "@babel/plugin-syntax-dynamic-import" "^7.0.0"
6200
-    "@babel/plugin-syntax-export-default-from" "^7.0.0"
6201
-    "@babel/plugin-syntax-flow" "^7.2.0"
6202
-    "@babel/plugin-transform-arrow-functions" "^7.0.0"
6203
-    "@babel/plugin-transform-block-scoping" "^7.0.0"
6204
-    "@babel/plugin-transform-classes" "^7.0.0"
6205
-    "@babel/plugin-transform-computed-properties" "^7.0.0"
6206
-    "@babel/plugin-transform-destructuring" "^7.0.0"
6207
-    "@babel/plugin-transform-exponentiation-operator" "^7.0.0"
6208
-    "@babel/plugin-transform-flow-strip-types" "^7.0.0"
6209
-    "@babel/plugin-transform-for-of" "^7.0.0"
6210
-    "@babel/plugin-transform-function-name" "^7.0.0"
6211
-    "@babel/plugin-transform-literals" "^7.0.0"
6212
-    "@babel/plugin-transform-modules-commonjs" "^7.0.0"
6213
-    "@babel/plugin-transform-object-assign" "^7.0.0"
6214
-    "@babel/plugin-transform-parameters" "^7.0.0"
6215
-    "@babel/plugin-transform-react-display-name" "^7.0.0"
6216
-    "@babel/plugin-transform-react-jsx" "^7.0.0"
6217
-    "@babel/plugin-transform-react-jsx-source" "^7.0.0"
6218
-    "@babel/plugin-transform-regenerator" "^7.0.0"
6219
-    "@babel/plugin-transform-runtime" "^7.0.0"
6220
-    "@babel/plugin-transform-shorthand-properties" "^7.0.0"
6221
-    "@babel/plugin-transform-spread" "^7.0.0"
6222
-    "@babel/plugin-transform-sticky-regex" "^7.0.0"
6223
-    "@babel/plugin-transform-template-literals" "^7.0.0"
6224
-    "@babel/plugin-transform-typescript" "^7.0.0"
6225
-    "@babel/plugin-transform-unicode-regex" "^7.0.0"
6226
-    "@babel/template" "^7.0.0"
6227
-    react-refresh "^0.4.0"
6228
-
6229 6046
 metro-react-native-babel-transformer@0.54.1, metro-react-native-babel-transformer@^0.54.1:
6230 6047
   version "0.54.1"
6231 6048
   resolved "https://registry.yarnpkg.com/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.54.1.tgz#45b56db004421134e10e739f69e8de50775fef17"
@@ -6236,17 +6053,6 @@ metro-react-native-babel-transformer@0.54.1, metro-react-native-babel-transforme
6236 6053
     metro-babel-transformer "0.54.1"
6237 6054
     metro-react-native-babel-preset "0.54.1"
6238 6055
 
6239
-metro-react-native-babel-transformer@^0.56.0:
6240
-  version "0.56.4"
6241
-  resolved "https://registry.yarnpkg.com/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.56.4.tgz#3c6e48b605c305362ee624e45ff338656e35fc1d"
6242
-  integrity sha512-ng74eutuy1nyGI9+TDzzVAVfEmNPDlapV4msTQMKPi4EFqo/fBn7Ct33ME9l5E51pQBBnxt/UwcpTvd13b29kQ==
6243
-  dependencies:
6244
-    "@babel/core" "^7.0.0"
6245
-    babel-preset-fbjs "^3.1.2"
6246
-    metro-babel-transformer "^0.56.4"
6247
-    metro-react-native-babel-preset "^0.56.4"
6248
-    metro-source-map "^0.56.4"
6249
-
6250 6056
 metro-resolver@0.54.1:
6251 6057
   version "0.54.1"
6252 6058
   resolved "https://registry.yarnpkg.com/metro-resolver/-/metro-resolver-0.54.1.tgz#0295b38624b678b88b16bf11d47288845132b087"
@@ -6254,13 +6060,6 @@ metro-resolver@0.54.1:
6254 6060
   dependencies:
6255 6061
     absolute-path "^0.0.0"
6256 6062
 
6257
-metro-resolver@^0.56.4:
6258
-  version "0.56.4"
6259
-  resolved "https://registry.yarnpkg.com/metro-resolver/-/metro-resolver-0.56.4.tgz#9876f57bca37fd1bfcffd733541e2ee4a89fad7f"
6260
-  integrity sha512-Ug4ulVfpkKZ1Wu7mdYj9XLGuOqZTuWCqEhyx3siKTc/2eBwKZQXmiNo5d/IxWNvmwL/87Abeb724I6CMzMfjiQ==
6261
-  dependencies:
6262
-    absolute-path "^0.0.0"
6263
-
6264 6063
 metro-source-map@0.54.1:
6265 6064
   version "0.54.1"
6266 6065
   resolved "https://registry.yarnpkg.com/metro-source-map/-/metro-source-map-0.54.1.tgz#e17bad53c11978197d3c05c9168d799c2e04dcc5"
@@ -6283,19 +6082,6 @@ metro-source-map@0.55.0, metro-source-map@^0.55.0:
6283 6082
     source-map "^0.5.6"
6284 6083
     vlq "^1.0.0"
6285 6084
 
6286
-metro-source-map@^0.56.0, metro-source-map@^0.56.4:
6287
-  version "0.56.4"
6288
-  resolved "https://registry.yarnpkg.com/metro-source-map/-/metro-source-map-0.56.4.tgz#868ccac3f3519fe14eca358bc186f63651b2b9bc"
6289
-  integrity sha512-f1P9/rpFmG3Z0Jatiw2zvLItx1TwR7mXTSDj4qLDCWeVMB3kEXAr3R0ucumTW8c6HfpJljeRBWzYFXF33fd81g==
6290
-  dependencies:
6291
-    "@babel/traverse" "^7.0.0"
6292
-    "@babel/types" "^7.0.0"
6293
-    invariant "^2.2.4"
6294
-    metro-symbolicate "^0.56.4"
6295
-    ob1 "^0.56.4"
6296
-    source-map "^0.5.6"
6297
-    vlq "^1.0.0"
6298
-
6299 6085
 metro-symbolicate@0.55.0:
6300 6086
   version "0.55.0"
6301 6087
   resolved "https://registry.yarnpkg.com/metro-symbolicate/-/metro-symbolicate-0.55.0.tgz#4086a2adae54b5e44a4911ca572d8a7b03c71fa1"
@@ -6306,17 +6092,6 @@ metro-symbolicate@0.55.0:
6306 6092
     through2 "^2.0.1"
6307 6093
     vlq "^1.0.0"
6308 6094
 
6309
-metro-symbolicate@^0.56.4:
6310
-  version "0.56.4"
6311
-  resolved "https://registry.yarnpkg.com/metro-symbolicate/-/metro-symbolicate-0.56.4.tgz#53e9d40beac9049fa75a3e620ddd47d4907ff015"
6312
-  integrity sha512-8mCNNn6zV5FFKCIcRgI7736Xl+owgvYuy8qanPxZN36f7utiWRYeB+PirEBPcglBk4qQvoy2lT6oPULNXZQbbQ==
6313
-  dependencies:
6314
-    invariant "^2.2.4"
6315
-    metro-source-map "^0.56.4"
6316
-    source-map "^0.5.6"
6317
-    through2 "^2.0.1"
6318
-    vlq "^1.0.0"
6319
-
6320 6095
 metro@0.54.1, metro@^0.54.1:
6321 6096
   version "0.54.1"
6322 6097
   resolved "https://registry.yarnpkg.com/metro/-/metro-0.54.1.tgz#a629be00abee5a450a25a8f71c24745f70cc9b44"
@@ -6376,65 +6151,6 @@ metro@0.54.1, metro@^0.54.1:
6376 6151
     xpipe "^1.0.5"
6377 6152
     yargs "^9.0.0"
6378 6153
 
6379
-metro@^0.56.0, metro@^0.56.4:
6380
-  version "0.56.4"
6381
-  resolved "https://registry.yarnpkg.com/metro/-/metro-0.56.4.tgz#be7e1380ee6ac3552c25ead8098eab261029e4d7"
6382
-  integrity sha512-Kt3OQJQtQdts0JrKnyGdLpKHDjqYBgIfzvYrvfhmFCkKuZ8aqRlVnvpfjQ4/OBm0Fmm9NyyxbNRD9VIbj7WjnA==
6383
-  dependencies:
6384
-    "@babel/core" "^7.0.0"
6385
-    "@babel/generator" "^7.0.0"
6386
-    "@babel/parser" "^7.0.0"
6387
-    "@babel/plugin-external-helpers" "^7.0.0"
6388
-    "@babel/template" "^7.0.0"
6389
-    "@babel/traverse" "^7.0.0"
6390
-    "@babel/types" "^7.0.0"
6391
-    absolute-path "^0.0.0"
6392
-    async "^2.4.0"
6393
-    babel-preset-fbjs "^3.1.2"
6394
-    buffer-crc32 "^0.2.13"
6395
-    chalk "^2.4.1"
6396
-    concat-stream "^1.6.0"
6397
-    connect "^3.6.5"
6398
-    debug "^2.2.0"
6399
-    denodeify "^1.2.1"
6400
-    eventemitter3 "^3.0.0"
6401
-    fbjs "^1.0.0"
6402
-    fs-extra "^1.0.0"
6403
-    graceful-fs "^4.1.3"
6404
-    image-size "^0.6.0"
6405
-    invariant "^2.2.4"
6406
-    jest-haste-map "^24.7.1"
6407
-    jest-worker "^24.6.0"
6408
-    json-stable-stringify "^1.0.1"
6409
-    lodash.throttle "^4.1.1"
6410
-    merge-stream "^1.0.1"
6411
-    metro-babel-register "^0.56.4"
6412
-    metro-babel-transformer "^0.56.4"
6413
-    metro-cache "^0.56.4"
6414
-    metro-config "^0.56.4"
6415
-    metro-core "^0.56.4"
6416
-    metro-inspector-proxy "^0.56.4"
6417
-    metro-minify-uglify "^0.56.4"
6418
-    metro-react-native-babel-preset "^0.56.4"
6419
-    metro-resolver "^0.56.4"
6420
-    metro-source-map "^0.56.4"
6421
-    metro-symbolicate "^0.56.4"
6422
-    mime-types "2.1.11"
6423
-    mkdirp "^0.5.1"
6424
-    node-fetch "^2.2.0"
6425
-    nullthrows "^1.1.0"
6426
-    resolve "^1.5.0"
6427
-    rimraf "^2.5.4"
6428
-    serialize-error "^2.1.0"
6429
-    source-map "^0.5.6"
6430
-    temp "0.8.3"
6431
-    throat "^4.1.0"
6432
-    wordwrap "^1.0.0"
6433
-    write-file-atomic "^1.2.0"
6434
-    ws "^1.1.5"
6435
-    xpipe "^1.0.5"
6436
-    yargs "^9.0.0"
6437
-
6438 6154
 micromatch@^3.1.10, micromatch@^3.1.4:
6439 6155
   version "3.1.10"
6440 6156
   resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23"
@@ -7103,11 +6819,6 @@ ob1@0.55.0:
7103 6819
   resolved "https://registry.yarnpkg.com/ob1/-/ob1-0.55.0.tgz#e393b4ae786ef442b3ef2a298ab70d6ec353dbdd"
7104 6820
   integrity sha512-pfyiMVsUItl8WiRKMT15eCi662pCRAuYTq2+V3UpE+PpFErJI/TvRh/M/l/9TaLlbFr7krJ7gdl+FXJNcybmvw==
7105 6821
 
7106
-ob1@^0.56.4:
7107
-  version "0.56.4"
7108
-  resolved "https://registry.yarnpkg.com/ob1/-/ob1-0.56.4.tgz#c4acb3baa42f4993a44b35b2da7c8ef443dcccec"
7109
-  integrity sha512-URgFof9z2wotiYFsqlydXtQfGV81gvBI2ODy64xfd3vPo+AYom5PVDX4t4zn23t/O+S2IxqApSQM8uJAybmz7w==
7110
-
7111 6822
 object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1:
7112 6823
   version "4.1.1"
7113 6824
   resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
@@ -7894,7 +7605,7 @@ react-deep-force-update@^1.0.0:
7894 7605
   resolved "https://registry.yarnpkg.com/react-deep-force-update/-/react-deep-force-update-1.1.2.tgz#3d2ae45c2c9040cbb1772be52f8ea1ade6ca2ee1"
7895 7606
   integrity sha512-WUSQJ4P/wWcusaH+zZmbECOk7H5N2pOIl0vzheeornkIMhu+qrNdGFm0bDZLCb0hSF0jf/kH1SgkNGfBdTc4wA==
7896 7607
 
7897
-react-devtools-core@^3.6.1, react-devtools-core@^3.6.3:
7608
+react-devtools-core@^3.6.1:
7898 7609
   version "3.6.3"
7899 7610
   resolved "https://registry.yarnpkg.com/react-devtools-core/-/react-devtools-core-3.6.3.tgz#977d95b684c6ad28205f0c62e1e12c5f16675814"
7900 7611
   integrity sha512-+P+eFy/yo8Z/UH9J0DqHZuUM5+RI2wl249TNvMx3J2jpUomLQa4Zxl56GEotGfw3PIP1eI+hVf1s53FlUONStQ==
@@ -7941,15 +7652,15 @@ react-native-macos@0.60.0-microsoft.49:
7941 7652
     stacktrace-parser "^0.1.3"
7942 7653
     whatwg-fetch "^3.0.0"
7943 7654
 
7944
-react-native@0.61.5:
7945
-  version "0.61.5"
7946
-  resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.61.5.tgz#6e21acb56cbd75a3baeb1f70201a66f42600bba8"
7947
-  integrity sha512-MXqE3NoGO0T3dUKIKkIppijBhRRMpfN6ANbhMXHDuyfA+fSilRWgCwYgR/YNCC7ntECoJYikKaNTUBB0DeQy6Q==
7655
+react-native@0.60:
7656
+  version "0.60.6"
7657
+  resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.60.6.tgz#8a13dece1c3f6e01db0833db14d2b01b2d8ccba5"
7658
+  integrity sha512-eIoHh0fncrmw2WUs42D1KwLfatOuLFLFLOKzJJJ8mOOQtbo9i2rOOa0+2iWjefDoAy8BJH88bQGvDvlrexmhow==
7948 7659
   dependencies:
7949 7660
     "@babel/runtime" "^7.0.0"
7950
-    "@react-native-community/cli" "^3.0.0"
7951
-    "@react-native-community/cli-platform-android" "^3.0.0"
7952
-    "@react-native-community/cli-platform-ios" "^3.0.0"
7661
+    "@react-native-community/cli" "^2.6.0"
7662
+    "@react-native-community/cli-platform-android" "^2.6.0"
7663
+    "@react-native-community/cli-platform-ios" "^2.4.1"
7953 7664
     abort-controller "^3.0.0"
7954 7665
     art "^0.10.0"
7955 7666
     base64-js "^1.1.2"
@@ -7959,20 +7670,19 @@ react-native@0.61.5:
7959 7670
     event-target-shim "^5.0.1"
7960 7671
     fbjs "^1.0.0"
7961 7672
     fbjs-scripts "^1.1.0"
7962
-    hermes-engine "^0.2.1"
7673
+    hermesvm "^0.1.0"
7963 7674
     invariant "^2.2.4"
7964
-    jsc-android "^245459.0.0"
7965
-    metro-babel-register "^0.56.0"
7966
-    metro-react-native-babel-transformer "^0.56.0"
7967
-    metro-source-map "^0.56.0"
7675
+    jsc-android "245459.0.0"
7676
+    metro-babel-register "0.54.1"
7677
+    metro-react-native-babel-transformer "0.54.1"
7678
+    metro-source-map "^0.55.0"
7968 7679
     nullthrows "^1.1.0"
7969 7680
     pretty-format "^24.7.0"
7970 7681
     promise "^7.1.1"
7971 7682
     prop-types "^15.7.2"
7972
-    react-devtools-core "^3.6.3"
7973
-    react-refresh "^0.4.0"
7683
+    react-devtools-core "^3.6.1"
7974 7684
     regenerator-runtime "^0.13.2"
7975
-    scheduler "0.15.0"
7685
+    scheduler "0.14.0"
7976 7686
     stacktrace-parser "^0.1.3"
7977 7687
     whatwg-fetch "^3.0.0"
7978 7688
 
@@ -7984,11 +7694,6 @@ react-proxy@^1.1.7:
7984 7694
     lodash "^4.6.1"
7985 7695
     react-deep-force-update "^1.0.0"
7986 7696
 
7987
-react-refresh@^0.4.0:
7988
-  version "0.4.2"
7989
-  resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.4.2.tgz#54a277a6caaac2803d88f1d6f13c1dcfbd81e334"
7990
-  integrity sha512-kv5QlFFSZWo7OlJFNYbxRtY66JImuP2LcrFgyJfQaf85gSP+byzG21UbDQEYjU7f//ny8rwiEkO6py2Y+fEgAQ==
7991
-
7992 7697
 react-transform-hmr@^1.0.4:
7993 7698
   version "1.0.4"
7994 7699
   resolved "https://registry.yarnpkg.com/react-transform-hmr/-/react-transform-hmr-1.0.4.tgz#e1a40bd0aaefc72e8dfd7a7cda09af85066397bb"
@@ -8541,14 +8246,6 @@ scheduler@0.14.0:
8541 8246
     loose-envify "^1.1.0"
8542 8247
     object-assign "^4.1.1"
8543 8248
 
8544
-scheduler@0.15.0:
8545
-  version "0.15.0"
8546
-  resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.15.0.tgz#6bfcf80ff850b280fed4aeecc6513bc0b4f17f8e"
8547
-  integrity sha512-xAefmSfN6jqAa7Kuq7LIJY0bwAPG3xlCj0HMEBQk1lxYiDKZscY2xJ5U/61ZTrYbmNQbXa+gc7czPkVo11tnCg==
8548
-  dependencies:
8549
-    loose-envify "^1.1.0"
8550
-    object-assign "^4.1.1"
8551
-
8552 8249
 semantic-release@15.13.24:
8553 8250
   version "15.13.24"
8554 8251
   resolved "https://registry.yarnpkg.com/semantic-release/-/semantic-release-15.13.24.tgz#f0b9544427d059ba5e3c89ac1545234130796be7"
@@ -8598,7 +8295,7 @@ semver-regex@^2.0.0:
8598 8295
   resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
8599 8296
   integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
8600 8297
 
8601
-semver@^6.0.0, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0:
8298
+semver@^6.0.0, semver@^6.1.2, semver@^6.2.0:
8602 8299
   version "6.3.0"
8603 8300
   resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
8604 8301
   integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
@@ -9152,11 +8849,6 @@ strip-json-comments@~2.0.1:
9152 8849
   resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
9153 8850
   integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo=
9154 8851
 
9155
-sudo-prompt@^9.0.0:
9156
-  version "9.1.1"
9157
-  resolved "https://registry.yarnpkg.com/sudo-prompt/-/sudo-prompt-9.1.1.tgz#73853d729770392caec029e2470db9c221754db0"
9158
-  integrity sha512-es33J1g2HjMpyAhz8lOR+ICmXXAqTuKbuXuUWLhOLew20oN9oUCgCJx615U/v7aioZg7IX5lIh9x34vwneu4pA==
9159
-
9160 8852
 supports-color@^5.0.0, supports-color@^5.3.0:
9161 8853
   version "5.5.0"
9162 8854
   resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"