diff --git a/.flowconfig b/.flowconfig
index 7d0709c9..47e911ad 100644
--- a/.flowconfig
+++ b/.flowconfig
@@ -70,4 +70,4 @@ suppress_comment=\\(.\\|\n\\)*\\$FlowFixedInNextDeploy
suppress_comment=\\(.\\|\n\\)*\\$FlowExpectedError
[version]
-0.78.0
+0.109.0
diff --git a/.gitignore b/.gitignore
index 0322b55c..ad5bfac1 100644
--- a/.gitignore
+++ b/.gitignore
@@ -29,3 +29,4 @@ android/*.iml
android/local.properties
android/.settings
android/.project
+Session.vim
diff --git a/CHANGELOG.md b/CHANGELOG.md
index e9367758..f1f6c234 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,43 @@
# Changelog
+## Changes for v2.20
+
+- #1037 Invalidate upload session
+
+## Changes vor v2.19
+
+- #1048 fix: use correct type for stat size #1048
+- #1063 RNFSManager:readDir iOS crash fix #1063
+- #1036 fix: addListener and removeListeners methods wass added to pass warning with Native Event Emitter #1036
+- RNFSManager iOS crash in readDir
+- fix: use correct type for stat size
+- make react-native-windows peer dependency optional #1016
+
+## Changes for v2.17
+
+- #938 Manually flush & invalidate session upon completion
+- #954 Switch to using channels for byte copying.
+- #962 Size limit with copyAssetsVideoIOS
+- #963 Add basic support for Android content URIs in stat
+- #972 Manually flush & invalidate completed session
+- #974 Add content for copyAssetsFileIOS method
+- #975 Fix copyAssetsFileIOS's image resizing option to resize to exact width and height
+- #985 README.md: clarify usage of readFileRes
+- #986 macOS support
+
+## Changes for v2.16
+- #797 Added path to the Android download folder
+- #842 Fixes #811 Concurrent downloads send progress updates to all progress callbacks
+- #783 Import RCTImageLoaderProtocol instead of RCTImageLoader to fix iOS build on RN>0.60
+
+## Changes for v2.15
+- #717 bugfix #443: Add option progressInterval for downloadFile
+- #759 Fix for issue #749: RNFS.uploadFiles upload raw not multipart
+- #728 Correctly read binaryStreamOnly param
+- #752 Fix Xcode and Java deprecation warnings
+- #779 Add conditional comments around methods not supported in Mac Catalyst
+- #736 Added support for ph:// uris to copyAssetsFileIOS
+
## Changes for v2.14
- #718 Add tvOS deployment target to podspec
- #710 Added existsRes function to Android
diff --git a/Downloader.h b/Downloader.h
index 9c0a6031..82042523 100644
--- a/Downloader.h
+++ b/Downloader.h
@@ -4,7 +4,7 @@ typedef void (^DownloadCompleteCallback)(NSNumber*, NSNumber*);
typedef void (^ErrorCallback)(NSError*);
typedef void (^BeginCallback)(NSNumber*, NSNumber*, NSDictionary*);
typedef void (^ProgressCallback)(NSNumber*, NSNumber*);
-typedef void (^ResumableCallback)();
+typedef void (^ResumableCallback)(void);
@interface RNFSDownloadParams : NSObject
@@ -19,8 +19,10 @@ typedef void (^ResumableCallback)();
@property bool background; // Whether to continue download when app is in background
@property bool discretionary; // Whether the file may be downloaded at the OS's discretion (iOS only)
@property bool cacheable; // Whether the file may be stored in the shared NSURLCache (iOS only)
+@property (copy) NSNumber* progressInterval;
@property (copy) NSNumber* progressDivider;
-@property (copy) NSNumber* readTimeout;
+@property (copy) NSNumber* readTimeout; // How long (in milliseconds) a task should wait for additional data to arrive before giving up
+@property (copy) NSNumber* backgroundTimeout; // How long (in milliseconds) to wait for an entire resource to transfer before giving up
@end
diff --git a/Downloader.m b/Downloader.m
index 91ba9883..cb2ca238 100644
--- a/Downloader.m
+++ b/Downloader.m
@@ -11,6 +11,7 @@ @interface RNFSDownloader()
@property (retain) NSURLSession* session;
@property (retain) NSURLSessionDownloadTask* task;
@property (retain) NSNumber* statusCode;
+@property (assign) NSTimeInterval lastProgressEmitTimestamp;
@property (retain) NSNumber* lastProgressValue;
@property (retain) NSNumber* contentLength;
@property (retain) NSNumber* bytesWritten;
@@ -25,9 +26,10 @@ @implementation RNFSDownloader
- (NSString *)downloadFile:(RNFSDownloadParams*)params
{
NSString *uuid = nil;
-
+
_params = params;
+ _lastProgressEmitTimestamp = 0;
_bytesWritten = 0;
NSURL* url = [NSURL URLWithString:_params.fromUrl];
@@ -61,27 +63,34 @@ - (NSString *)downloadFile:(RNFSDownloadParams*)params
config.HTTPAdditionalHeaders = _params.headers;
config.timeoutIntervalForRequest = [_params.readTimeout intValue] / 1000.0;
+ config.timeoutIntervalForResource = [_params.backgroundTimeout intValue] / 1000.0;
_session = [NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:nil];
_task = [_session downloadTaskWithURL:url];
[_task resume];
-
+
return uuid;
}
- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didWriteData:(int64_t)bytesWritten totalBytesWritten:(int64_t)totalBytesWritten totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite
{
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)downloadTask.response;
- if (!_statusCode) {
+ if (_params.beginCallback && !_statusCode) {
_statusCode = [NSNumber numberWithLong:httpResponse.statusCode];
_contentLength = [NSNumber numberWithLong:httpResponse.expectedContentLength];
return _params.beginCallback(_statusCode, _contentLength, httpResponse.allHeaderFields);
}
- if ([_statusCode isEqualToNumber:[NSNumber numberWithInt:200]]) {
+ if (_params.progressCallback && [_statusCode isEqualToNumber:[NSNumber numberWithInt:200]]) {
_bytesWritten = @(totalBytesWritten);
- if (_params.progressDivider.integerValue <= 0) {
+ if(_params.progressInterval.integerValue > 0){
+ NSTimeInterval timestamp = [[NSDate date] timeIntervalSince1970];
+ if(timestamp - _lastProgressEmitTimestamp > _params.progressInterval.integerValue / 1000.0){
+ _lastProgressEmitTimestamp = timestamp;
+ return _params.progressCallback(_contentLength, _bytesWritten);
+ }
+ }else if (_params.progressDivider.integerValue <= 0) {
return _params.progressCallback(_contentLength, _bytesWritten);
} else {
double doubleBytesWritten = (double)[_bytesWritten longValue];
@@ -90,7 +99,7 @@ - (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTas
NSNumber* progress = [NSNumber numberWithUnsignedInt: floor(doublePercents)];
if ([progress unsignedIntValue] % [_params.progressDivider integerValue] == 0) {
if (([progress unsignedIntValue] != [_lastProgressValue unsignedIntValue]) || ([_bytesWritten unsignedIntegerValue] == [_contentLength longValue])) {
- NSLog(@"---Progress callback EMIT--- %zu", [progress unsignedIntValue]);
+ NSLog(@"---Progress callback EMIT--- %u", [progress unsignedIntValue]);
_lastProgressValue = [NSNumber numberWithUnsignedInt:[progress unsignedIntValue]];
return _params.progressCallback(_contentLength, _bytesWritten);
}
@@ -119,18 +128,31 @@ - (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTas
NSLog(@"RNFS download: unable to move tempfile to destination. %@, %@", error, error.userInfo);
}
+ // When numerous downloads are called the sessions are not always invalidated and cleared by iOS14.
+ // This leads to error 28 – no space left on device so we manually flush and invalidate to free up space
+ if(session != nil){
+ [session flushWithCompletionHandler:^{
+ [session finishTasksAndInvalidate];
+ }];
+ }
+
return _params.completeCallback(_statusCode, _bytesWritten);
}
- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error
{
- if (error && error.code != NSURLErrorCancelled) {
+ if (error) {
+ NSLog(@"RNFS download: didCompleteWithError %@, %@", error, error.userInfo);
+ if (error.code != NSURLErrorCancelled) {
_resumeData = error.userInfo[NSURLSessionDownloadTaskResumeData];
if (_resumeData != nil) {
- _params.resumableCallback();
+ if (_params.resumableCallback) {
+ _params.resumableCallback();
+ }
} else {
_params.errorCallback(error);
}
+ }
}
}
@@ -140,15 +162,17 @@ - (void)stopDownload
[_task cancelByProducingResumeData:^(NSData * _Nullable resumeData) {
if (resumeData != nil) {
self.resumeData = resumeData;
- _params.resumableCallback();
+ if (self->_params.resumableCallback) {
+ self->_params.resumableCallback();
+ }
} else {
NSError *error = [NSError errorWithDomain:@"RNFS"
- code:@"Aborted"
+ code:0 //used to pass an NSString @"Aborted" here, but it needs an NSInteger
userInfo:@{
NSLocalizedDescriptionKey: @"Download has been aborted"
}];
-
- _params.errorCallback(error);
+
+ self->_params.errorCallback(error);
}
}];
diff --git a/Examples/.npmignore b/Examples/.npmignore
new file mode 100644
index 00000000..7718eb3a
--- /dev/null
+++ b/Examples/.npmignore
@@ -0,0 +1,2 @@
+# Make sure we don't publish examples
+RNFS.Windows/
diff --git a/Examples/RNFS.Windows/.buckconfig b/Examples/RNFS.Windows/.buckconfig
new file mode 100644
index 00000000..934256cb
--- /dev/null
+++ b/Examples/RNFS.Windows/.buckconfig
@@ -0,0 +1,6 @@
+
+[android]
+ target = Google Inc.:Google APIs:23
+
+[maven_repositories]
+ central = https://repo1.maven.org/maven2
diff --git a/Examples/RNFS.Windows/.eslintrc.js b/Examples/RNFS.Windows/.eslintrc.js
new file mode 100644
index 00000000..18969972
--- /dev/null
+++ b/Examples/RNFS.Windows/.eslintrc.js
@@ -0,0 +1,6 @@
+module.exports = {
+ root: true,
+ extends: '@react-native-community',
+ parser: '@typescript-eslint/parser',
+ plugins: ['@typescript-eslint'],
+};
diff --git a/Examples/RNFS.Windows/.gitattributes b/Examples/RNFS.Windows/.gitattributes
new file mode 100644
index 00000000..d42ff183
--- /dev/null
+++ b/Examples/RNFS.Windows/.gitattributes
@@ -0,0 +1 @@
+*.pbxproj -text
diff --git a/Examples/RNFS.Windows/.gitignore b/Examples/RNFS.Windows/.gitignore
new file mode 100644
index 00000000..4deaf9ea
--- /dev/null
+++ b/Examples/RNFS.Windows/.gitignore
@@ -0,0 +1,65 @@
+yarn.lock
+
+# OSX
+#
+.DS_Store
+
+# Xcode
+#
+build/
+*.pbxuser
+!default.pbxuser
+*.mode1v3
+!default.mode1v3
+*.mode2v3
+!default.mode2v3
+*.perspectivev3
+!default.perspectivev3
+xcuserdata
+*.xccheckout
+*.moved-aside
+DerivedData
+*.hmap
+*.ipa
+*.xcuserstate
+
+# Android/IntelliJ
+#
+build/
+.idea
+.gradle
+local.properties
+*.iml
+
+# Visual Studio Code
+#
+.vscode/
+
+# node.js
+#
+node_modules/
+npm-debug.log
+yarn-error.log
+
+# BUCK
+buck-out/
+\.buckd/
+*.keystore
+!debug.keystore
+
+# fastlane
+#
+# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the
+# screenshots whenever they are needed.
+# For more information about the recommended setup visit:
+# https://docs.fastlane.tools/best-practices/source-control/
+
+*/fastlane/report.xml
+*/fastlane/Preview.html
+*/fastlane/screenshots
+
+# Bundle artifact
+*.jsbundle
+
+# CocoaPods
+/ios/Pods/
diff --git a/Examples/RNFS.Windows/.prettierrc.js b/Examples/RNFS.Windows/.prettierrc.js
new file mode 100644
index 00000000..5c4de1a4
--- /dev/null
+++ b/Examples/RNFS.Windows/.prettierrc.js
@@ -0,0 +1,6 @@
+module.exports = {
+ bracketSpacing: false,
+ jsxBracketSameLine: true,
+ singleQuote: true,
+ trailingComma: 'all',
+};
diff --git a/Examples/RNFS.Windows/.watchmanconfig b/Examples/RNFS.Windows/.watchmanconfig
new file mode 100644
index 00000000..9e26dfee
--- /dev/null
+++ b/Examples/RNFS.Windows/.watchmanconfig
@@ -0,0 +1 @@
+{}
\ No newline at end of file
diff --git a/Examples/RNFS.Windows/App.tsx b/Examples/RNFS.Windows/App.tsx
new file mode 100644
index 00000000..c13d11d9
--- /dev/null
+++ b/Examples/RNFS.Windows/App.tsx
@@ -0,0 +1,967 @@
+/**
+ * Sample React Native App
+ * https://github.com/facebook/react-native
+ *
+ * Generated with the TypeScript template
+ * https://github.com/react-native-community/react-native-template-typescript
+ *
+ * @format
+ */
+
+import React, { useState } from 'react';
+import {
+ SafeAreaView,
+ StyleSheet,
+ ScrollView,
+ View,
+ Text,
+ StatusBar,
+ TextInput,
+ Button,
+ Alert,
+ Picker,
+} from 'react-native';
+
+
+import RNFS from 'react-native-fs';
+//import {Picker} from '@react-native-community/picker';
+
+import {
+ Colors,
+ DebugInstructions,
+ ReloadInstructions,
+} from 'react-native/Libraries/NewAppScreen';
+
+
+const App: () => React$Node = () => {
+
+ const [mkdirParam, setMkdirParam] = useState('');
+
+ const [moveFileSource, setMoveFileSource] = useState('');
+ const [moveFileDest, setMoveFileDest] = useState('');
+
+ const [copyFileSource, setCopyFileSource] = useState('');
+ const [copyFileDest, setCopyFileDest] = useState('');
+
+ const [unlinkFileParam, setUnlinkFileParam] = useState('');
+
+ const [readDirParam, setReadDirParam] = useState('');
+
+ const [statParam, setStatParam] = useState('');
+
+ const [readFileParam, setReadFileParam] = useState('');
+
+ const [readParam, setReadParam] = useState('');
+ const [readLengthParam, setReadLengthParam] = useState('');
+ const [readPositionParam, setReadPositionParam] = useState('');
+
+ const [hashFileParam, setHashFileParam] = useState('');
+ const [selectedValue, setSelectedValue] = useState('md5');
+
+ const [writeFileParam, setWriteFileParam] = useState('');
+ const [writeFileContentValue, setWriteFileContentValue] = useState('');
+
+ const [appendFileParam, setAppendFileParam] = useState('');
+ const [appendContentValue, setAppendContentValue] = useState('');
+
+ const [writeParam, setWriteParam] = useState('');
+ const [writeContentValue, setWriteContentValue] = useState('');
+ const [writePositionValue, setWritePositionValue] = useState('');
+
+ const [touchFilePathParam, setTouchFilePathParam] = useState('');
+
+ const [downloadFilePathParam, setDownloadFilePathParam] = useState('');
+ const [downloadFileSource, setDownloadFileSource] = useState('');
+ const [downloadFileName, setDownloadFileName] = useState('');
+
+ const [uploadFileSource1, setUploadFileSource1] = useState('');
+ const [uploadFileSource2, setUploadFileSource2] = useState('');
+ const [uploadFileDestination, setUploadFileDestination] = useState('');
+
+ const [existsSource, setExistsSource] = useState('');
+
+ const mkdirExample = () => {
+ if(mkdirParam.length > 0) {
+ RNFS.mkdir(RNFS.DocumentDirectoryPath + '/' + mkdirParam)
+ .then((result) => {
+ Alert.alert('Successfully created directory.')
+ })
+ .catch((err) => {
+ Alert.alert(err.message)
+ })
+ }
+ }
+
+ const moveFileExample = () => {
+ if(moveFileSource.length > 0) {
+ RNFS.moveFile(RNFS.DocumentDirectoryPath + '/' + moveFileSource,
+ RNFS.DocumentDirectoryPath + '/' + moveFileDest)
+ .then((result) => {
+ Alert.alert('Successfully moved file to specified destination.')
+ })
+ .catch((err) => {
+ Alert.alert(err.message)
+ })
+ }
+ }
+
+ const copyFileExample = () => {
+ if(copyFileSource.length > 0) {
+ RNFS.copyFile(RNFS.DocumentDirectoryPath + '/' + copyFileSource,
+ RNFS.DocumentDirectoryPath + '/' + copyFileDest)
+ .then((result) => {
+ Alert.alert('Successfully put copy of file to specified destination.')
+ })
+ .catch((err) => {
+ Alert.alert(err.message)
+ })
+ }
+ }
+
+ const copyFolderExample = () => {
+ if(copyFileSource.length > 0) {
+ RNFS.copyFolder(RNFS.DocumentDirectoryPath + '/' + copyFileSource,
+ RNFS.DocumentDirectoryPath + '/' + copyFileDest)
+ .then((result) => {
+ Alert.alert('Successfully put copy of file to specified destination.')
+ })
+ .catch((err) => {
+ Alert.alert(err.message)
+ })
+ }
+ }
+
+ const getFSInfoExample = () => {
+ RNFS.getFSInfo()
+ .then((result) => {
+ Alert.alert('Total space: ' + result.totalSpace + ' bytes\nFree space: ' + result.freeSpace + ' bytes')
+ })
+ .catch((err) => {
+ Alert.alert(err.message)
+ })
+ }
+
+ const unlinkExample = () => {
+ if(unlinkFileParam.length > 0) {
+ RNFS.unlink(RNFS.DocumentDirectoryPath + '/' + unlinkFileParam)
+ .then((result) => {
+ Alert.alert('Successfully unlinked specified file or folder')
+ })
+ .catch((err) => {
+ Alert.alert(err.message)
+ })
+ }
+ }
+
+ const readDirExample = () => {
+ RNFS.readDir(RNFS.DocumentDirectoryPath + '/' + readDirParam)
+ .then((result) => {
+ if(result.length == 0) {
+ Alert.alert('Directory is empty')
+ }
+ else {
+ let title = 'Number of contents: ' + result.length
+ let output = '\nresult[0].name: ' + result[0].name +
+ '\nresult[0].size: ' + result[0].size + ' bytes' +
+ '\nresult[0].mtime: ' + result[0].mtime +
+ '\nresult[0].ctime: ' + result[0].ctime +
+ '\nresult[0].name: ' + result[0].name +
+ '\nresult[0].path: ' + result[0].path +
+ '\nresult[0].isFile(): ' + result[0].isFile() +
+ '\nresult[0].isDirectory(): ' + result[0].isDirectory()
+ Alert.alert(title, output)
+ }
+ })
+ .catch((err) => {
+ Alert.alert(err.message)
+ })
+ }
+
+ const statExample = () => {
+ RNFS.stat(RNFS.DocumentDirectoryPath + '/' + statParam)
+ .then((result) => {
+ let title = 'Stat Results:'
+ let output = 'result.path: ' + result.path +
+ '\nresult.ctime: ' + result.ctime +
+ '\nresult.mtime: ' + result.mtime +
+ '\nresult.size: ' + result.size + ' bytes' +
+ '\nresult.mode: ' + result.mode +
+ '\nresult.originalFilePath: ' + result.originalFilePath +
+ '\nresult.isFile(): ' + result.isFile() +
+ '\nresult.isDirectory(): ' + result.isDirectory()
+ Alert.alert(title, output)
+ })
+ .catch((err) => {
+ Alert.alert(err.message)
+ })
+ }
+
+ const readFileExample = () => {
+ if(readFileParam.length > 0) {
+ RNFS.readFile(RNFS.DocumentDirectoryPath + '/' + readFileParam)
+ .then((result) => {
+ Alert.alert('File Contents:', result.substr(0,50))
+ })
+ .catch((err) => {
+ Alert.alert(err.message)
+ })
+ }
+ }
+
+ const readExample = () => {
+ if(readParam.length > 0) {
+
+ var length = parseInt(readLengthParam, 10)
+ var position = parseInt(readPositionParam, 10)
+
+ if(length == NaN || position == NaN) {
+ Alert.alert('Length and Position must be integers')
+ return
+ }
+
+ RNFS.read(RNFS.DocumentDirectoryPath + '/' + readParam, length, position)
+ .then((result) => {
+ Alert.alert('File Contents:', result)
+ })
+ .catch((err) => {
+ Alert.alert(err.message)
+ })
+ }
+ }
+
+ const hashFileExample = () => {
+ if(hashFileParam.length > 0) {
+ RNFS.hash(RNFS.DocumentDirectoryPath + '/' + hashFileParam, selectedValue)
+ .then((result) => {
+ Alert.alert('Hashed File Contents:', result)
+ })
+ .catch((err) => {
+ Alert.alert(err.message)
+ })
+ }
+ }
+
+ const writeFileExample = () => {
+
+ if(writeFileParam.length > 0 && writeFileContentValue.length > 0) {
+ RNFS.writeFile(RNFS.DocumentDirectoryPath + '/' + writeFileParam, writeFileContentValue)
+ .then((result) => {
+ Alert.alert('Successfully Wrote to File')
+ })
+ .catch((err) => {
+ Alert.alert(err.message)
+ })
+ }
+ }
+
+ const appendFileExample = () => {
+
+ if(appendFileParam.length > 0 && appendContentValue.length > 0) {
+ RNFS.appendFile(RNFS.DocumentDirectoryPath + '/' + appendFileParam, appendContentValue)
+ .then((result) => {
+ Alert.alert('Successfully Appended to File')
+ })
+ .catch((err) => {
+ Alert.alert(err.message)
+ })
+ }
+ }
+
+ const writeExample = () => {
+
+ if(writeParam.length > 0 && writeContentValue.length > 0) {
+
+ var position = parseInt(writePositionValue, 10)
+
+ if(position == NaN) {
+ Alert.alert('Length and Position must be integers')
+ return
+ }
+
+ RNFS.write(RNFS.DocumentDirectoryPath + '/' + writeParam, writeContentValue, position)
+ .then((result) => {
+ Alert.alert('Successfully Wrote to File ')
+ })
+ .catch((err) => {
+ Alert.alert(err.message)
+ })
+ }
+ }
+
+ const touchFileExample = () => {
+ RNFS.touch(RNFS.DocumentDirectoryPath + '/' + touchFilePathParam, new Date('December 17, 1988 03:24:00'), new Date('1989-12-17T03:24:00'))
+ .then((result) => {
+ Alert.alert('Successfully Appended to File')
+ })
+ .catch((err) => {
+ Alert.alert(err.message)
+ })
+ }
+
+ const downloadFileExample = () => {
+ RNFS.downloadFile({
+ fromUrl: downloadFileSource,
+ toFile: RNFS.DocumentDirectoryPath + '/' + downloadFilePathParam +'/' + downloadFileName,
+ begin: () => {console.log('It has begun!');},
+ progress: () => {console.log('It is going!');},
+ progressDivider: 7,
+ }).promise.then((r) => {
+ console.log('Successfully Downloaded File', r.jobId + ' ' + r.statusCode + ' ' + r.bytesWritten);
+ })
+ .catch((err) => {
+ console.log(err.message);
+ });
+
+ }
+
+ const uploadFileExample = () => {
+ if(uploadFileSource1.length > 0 && uploadFileSource2.length > 0) {
+ //var uploadUrl = uploadFileDestination; // For testing purposes, go to http://requestb.in/ and create your own link
+ // create an array of objects of the files you want to upload
+ var files = [
+ {
+ name: 'test1',
+ filename: 'test1.png',
+ filepath: RNFS.DocumentDirectoryPath + '/' + uploadFileSource1,
+ }, {
+ name: 'test2',
+ filename: 'test2.png',
+ filepath: RNFS.DocumentDirectoryPath + '/' + uploadFileSource2,
+ }
+ ];
+
+ var uploadBegin = (response) => {
+ var jobId = response.jobId;
+ console.log('UPLOAD HAS BEGUN! JobId: ' + jobId);
+ };
+
+ var uploadProgress = (response) => {
+ var percentage = Math.floor((response.totalBytesSent/response.totalBytesExpectedToSend) * 100);
+ console.log('UPLOAD IS ' + percentage + '% DONE!');
+ };
+
+ // upload files
+ RNFS.uploadFiles({
+ toUrl: uploadFileDestination,
+ files: files,
+ method: 'POST',
+ headers: {
+ 'authorization': 'myOwnToken',
+ 'content-language': 'en-US',
+ },
+ fields: {
+ 'asdasdadfhdvbf': 'asdg',
+ 'asd': 'asdgasfdghasd',
+ },
+ begin: uploadBegin,
+ progress: uploadProgress,
+ }).promise.then((response) => {
+ if (response.statusCode == 200) {
+ console.log('FILES UPLOADED!'); // response.statusCode, response.headers, response.body
+ } else {
+ console.log('SERVER ERROR');
+ }
+ })
+ .catch((err) => {
+ if(err.description === "cancelled") {
+ console.log('User cancelled');
+ }
+ console.log(err);
+ });
+
+ }
+ }
+
+ const uploadFileExample2 = () => {
+ if(uploadFileSource1.length > 0 && uploadFileSource2.length > 0) {
+ //var uploadUrl = uploadFileDestination; // For testing purposes, go to http://requestb.in/ and create your own link
+ // create an array of objects of the files you want to upload
+ var files = [
+ {
+ name: 'test1',
+ filename: 'test1.png',
+ filepath: RNFS.DocumentDirectoryPath + '/' + uploadFileSource1,
+ }, {
+ name: 'test2',
+ filename: 'test2.png',
+ filepath: RNFS.DocumentDirectoryPath + '/' + uploadFileSource2,
+ }
+ ];
+
+ var uploadBegin = (response) => {
+ var jobId = response.jobId;
+ console.log('UPLOAD HAS BEGUN! JobId: ' + jobId);
+ };
+
+ var uploadProgress = (response) => {
+ var percentage = Math.floor((response.totalBytesSent/response.totalBytesExpectedToSend) * 100);
+ console.log('UPLOAD IS ' + percentage + '% DONE!');
+ };
+
+ // upload files
+ RNFS.uploadFiles({
+ toUrl: uploadFileDestination,
+ files: files,
+ method: 'POST',
+ headers: {
+ 'referer': 'toast',
+ },
+ begin: uploadBegin,
+ progress: uploadProgress,
+ }).promise.then((response) => {
+ if (response.statusCode == 200) {
+ console.log('FILES UPLOADED!'); // response.statusCode, response.headers, response.body
+ } else {
+ console.log('SERVER ERROR');
+ }
+ })
+ .catch((err) => {
+ if(err.description === "cancelled") {
+ console.log('User cancelled');
+ }
+ console.log(err);
+ });
+
+ }
+ }
+
+
+ const existsExample = () => {
+ RNFS.exists(RNFS.DocumentDirectoryPath + '/' + existsSource)
+ .then((result) => {
+ Alert.alert('Exists: ' + result)
+ })
+ .catch((err) => {
+ Alert.alert(err.message)
+ })
+ }
+
+ return (
+ <>
+
+
+
+ {global.HermesInternal == null ? null : (
+
+ Engine: Hermes
+
+ )}
+
+ {"React Native File System Windows Demo App"}
+
+
+
+
+
+
+ {"RNFS.MainBundlePath: " + RNFS.MainBundlePath + '\n'}
+ {"RNFS.CachesDirectoryPath: " + RNFS.CachesDirectoryPath + '\n'}
+ {"RNFS.ExternalCachesDirectoryPath: " + RNFS.ExternalCachesDirectoryPath + '\n'}
+ {"RNFS.DocumentDirectoryPath: " + RNFS.DocumentDirectoryPath + '\n'}
+ {"RNFS.DownloadDirectoryPath: " + RNFS.DownloadDirectoryPath + '\n'}
+ {"RNFS.ExternalDirectoryPath: " + RNFS.ExternalDirectoryPath + '\n'}
+ {"RNFS.ExternalStorageDirectoryPath: " + RNFS.ExternalStorageDirectoryPath + '\n'}
+ {"RNFS.TemporaryDirectoryPath: " + RNFS.TemporaryDirectoryPath + '\n'}
+ {"RNFS.LibraryDirectoryPath: " + RNFS.LibraryDirectoryPath + '\n'}
+ {"RNFS.PicturesDirectoryPath: " + RNFS.PicturesDirectoryPath + '\n'}
+ {"RNFS.FileProtectionKeys: " + RNFS.FileProtectionKeys + '\n'}
+
+
+
+
+
+
+
+
+ {"mkdir"}
+
+
+ setMkdirParam(mkdirParam)}
+ placeholderTextColor = "#9a73ef"
+ autoCapitalize = "none"
+ />
+
+
+
+
+
+
+
+
+ {"exists"}
+
+
+ setExistsSource(existsSource)}
+ placeholderTextColor = "#9a73ef"
+ autoCapitalize = "none"
+ />
+
+
+
+
+
+
+
+
+ {"moveFile"}
+
+
+ setMoveFileSource(moveFileSource)}
+ placeholderTextColor = "#9a73ef"
+ autoCapitalize = "none"
+ />
+ setMoveFileDest(moveFileDest)}
+ placeholderTextColor = "#9a73ef"
+ autoCapitalize = "none"
+ />
+
+
+
+
+
+
+
+
+ {"copyFile"}
+
+
+ setCopyFileSource(copyFileSource)}
+ placeholderTextColor = "#9a73ef"
+ autoCapitalize = "none"
+ />
+ setCopyFileDest(copyFileDest)}
+ placeholderTextColor = "#9a73ef"
+ autoCapitalize = "none"
+ />
+
+
+
+
+
+
+
+
+
+ {"getFSInfo"}
+
+
+
+
+
+
+
+
+ {"unlink"}
+
+
+ setUnlinkFileParam(UnlinkFileParam)}
+ placeholderTextColor = "#9a73ef"
+ autoCapitalize = "none"
+ />
+
+
+
+
+
+
+
+
+ {"readDir"}
+
+
+ setReadDirParam(readDirParam)}
+ placeholderTextColor = "#9a73ef"
+ autoCapitalize = "none"
+ />
+
+
+
+
+
+
+
+
+ {"stat"}
+
+
+ setStatParam(statParam)}
+ placeholderTextColor = "#9a73ef"
+ autoCapitalize = "none"
+ />
+
+
+
+
+
+
+
+
+ {"readFile"}
+
+
+ setReadFileParam(readFileParam)}
+ placeholderTextColor = "#9a73ef"
+ autoCapitalize = "none"
+ />
+
+
+
+
+
+
+
+
+ {"read"}
+
+
+ setReadParam(readParam)}
+ placeholderTextColor = "#9a73ef"
+ autoCapitalize = "none"
+ />
+ setReadLengthParam(readLengthParam)}
+ placeholderTextColor = "#9a73ef"
+ autoCapitalize = "none"
+ />
+ setReadPositionParam(readPositionParam)}
+ placeholderTextColor = "#9a73ef"
+ autoCapitalize = "none"
+ />
+
+
+
+
+
+
+
+
+ {"hash"}
+
+
+ setHashFileParam(hashFileParam)}
+ placeholderTextColor = "#9a73ef"
+ autoCapitalize = "none"
+ />
+ setReadPositionParam(readPositionParam)}
+ style={{ height: 50, width: 150 }}
+ onValueChange={(itemValue, itemIndex) => setSelectedValue(itemValue)}
+ >
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {"writeFile"}
+
+
+ setWriteFileParam(writeFileParam)}
+ placeholderTextColor = "#9a73ef"
+ autoCapitalize = "none"
+ />
+ setWriteFileContentValue(writeFileContentValue)}
+ placeholderTextColor = "#9a73ef"
+ autoCapitalize = "none"
+ />
+
+
+
+
+
+
+
+
+ {"appendFile"}
+
+
+ setAppendFileParam(appendFileParam)}
+ placeholderTextColor = "#9a73ef"
+ autoCapitalize = "none"
+ />
+ setAppendContentValue(appendContentValue)}
+ placeholderTextColor = "#9a73ef"
+ autoCapitalize = "none"
+ />
+
+
+
+
+
+
+
+
+ {"write"}
+
+
+ setWriteParam(writeParam)}
+ placeholderTextColor = "#9a73ef"
+ autoCapitalize = "none"
+ />
+ setWriteContentValue(writeContentValue)}
+ placeholderTextColor = "#9a73ef"
+ autoCapitalize = "none"
+ />
+ setWritePositionValue(writePositionValue)}
+ placeholderTextColor = "#9a73ef"
+ autoCapitalize = "none"
+ />
+
+
+
+
+
+
+
+
+ {"touch"}
+
+
+ setTouchFilePathParam(touchFilePathParam)}
+ placeholderTextColor = "#9a73ef"
+ autoCapitalize = "none"
+ />
+
+
+
+
+
+
+
+
+ {"downloadFile"}
+
+
+ setDownloadFileSource(downloadFileSource)}
+ placeholderTextColor = "#9a73ef"
+ autoCapitalize = "none"
+ />
+ setDownloadFileName(downloadFileName)}
+ placeholderTextColor = "#9a73ef"
+ autoCapitalize = "none"
+ />
+ setDownloadFilePathParam(downloadFilePathParam)}
+ placeholderTextColor = "#9a73ef"
+ autoCapitalize = "none"
+ />
+
+
+
+
+
+
+
+
+ {"uploadFiles"}
+
+
+ setUploadFileSource1(uploadFileSource1)}
+ placeholderTextColor = "#9a73ef"
+ autoCapitalize = "none"
+ />
+ setUploadFileSource2(uploadFileSource2)}
+ placeholderTextColor = "#9a73ef"
+ autoCapitalize = "none"
+ />
+ setUploadFileDestination(uploadFileDestination)}
+ placeholderTextColor = "#9a73ef"
+ autoCapitalize = "none"
+ />
+
+
+
+
+
+
+
+
+ >
+ );
+};
+
+const styles = StyleSheet.create({
+ scrollView: {
+ backgroundColor: Colors.black,
+ },
+ engine: {
+ position: 'absolute',
+ right: 0,
+ },
+ body: {
+ backgroundColor: Colors.dark,
+ },
+ sectionContainer: {
+ marginTop: 32,
+ paddingHorizontal: 24,
+ },
+ sectionTitle: {
+ fontSize: 24,
+ fontWeight: '600',
+ color: Colors.white,
+ },
+ sectionDescription: {
+ marginTop: 8,
+ fontSize: 18,
+ fontWeight: '400',
+ color: Colors.dark,
+ },
+ highlight: {
+ fontWeight: '700',
+ },
+ footer: {
+ color: Colors.dark,
+ fontSize: 12,
+ fontWeight: '600',
+ padding: 4,
+ paddingRight: 12,
+ textAlign: 'right',
+ },
+});
+
+export default App;
diff --git a/Examples/RNFS.Windows/app.json b/Examples/RNFS.Windows/app.json
new file mode 100644
index 00000000..d1d721bf
--- /dev/null
+++ b/Examples/RNFS.Windows/app.json
@@ -0,0 +1,4 @@
+{
+ "name": "RNFSWin",
+ "displayName": "RNFSWin"
+}
\ No newline at end of file
diff --git a/Examples/RNFS.Windows/babel.config.js b/Examples/RNFS.Windows/babel.config.js
new file mode 100644
index 00000000..f842b77f
--- /dev/null
+++ b/Examples/RNFS.Windows/babel.config.js
@@ -0,0 +1,3 @@
+module.exports = {
+ presets: ['module:metro-react-native-babel-preset'],
+};
diff --git a/Examples/RNFS.Windows/index.js b/Examples/RNFS.Windows/index.js
new file mode 100644
index 00000000..a850d031
--- /dev/null
+++ b/Examples/RNFS.Windows/index.js
@@ -0,0 +1,9 @@
+/**
+ * @format
+ */
+
+import {AppRegistry} from 'react-native';
+import App from './App';
+import {name as appName} from './app.json';
+
+AppRegistry.registerComponent(appName, () => App);
diff --git a/Examples/RNFS.Windows/metro.config.js b/Examples/RNFS.Windows/metro.config.js
new file mode 100644
index 00000000..1b710a4d
--- /dev/null
+++ b/Examples/RNFS.Windows/metro.config.js
@@ -0,0 +1,29 @@
+/**
+ * Metro configuration for React Native
+ * https://github.com/facebook/react-native
+ *
+ * @format
+ */
+const path = require('path');
+const blacklist = require('metro-config/src/defaults/blacklist');
+
+module.exports = {
+ resolver: {
+ blacklistRE: blacklist([
+ // This stops "react-native run-windows" from causing the metro server to crash if its already running
+ new RegExp(
+ `${path.resolve(__dirname, 'windows').replace(/[/\\]/g, '/')}.*`,
+ ),
+ // This prevents "react-native run-windows" from hitting: EBUSY: resource busy or locked, open msbuild.ProjectImports.zip
+ /.*\.ProjectImports\.zip/,
+ ]),
+ },
+ transformer: {
+ getTransformOptions: async () => ({
+ transform: {
+ experimentalImportSupport: false,
+ inlineRequires: false,
+ },
+ }),
+ },
+};
diff --git a/Examples/RNFS.Windows/package.json b/Examples/RNFS.Windows/package.json
new file mode 100644
index 00000000..4910608d
--- /dev/null
+++ b/Examples/RNFS.Windows/package.json
@@ -0,0 +1,45 @@
+{
+ "name": "RNFS.Win",
+ "version": "0.0.1",
+ "private": true,
+ "scripts": {
+ "start": "react-native start",
+ "test": "jest",
+ "lint": "eslint .",
+ "windows": "react-native run-windows"
+ },
+ "dependencies": {
+ "@react-native-community/picker": "^1.6.5",
+ "react": "17.0.2",
+ "react-native": "0.64.0",
+ "react-native-fs": "../..",
+ "react-native-windows": "^0.64.1"
+ },
+ "devDependencies": {
+ "@babel/core": "^7.8.4",
+ "@babel/runtime": "^7.8.4",
+ "@react-native-community/eslint-config": "^1.1.0",
+ "@types/jest": "^25.2.3",
+ "@types/react-native": "^0.63.2",
+ "@types/react-test-renderer": "^16.9.2",
+ "@typescript-eslint/eslint-plugin": "^2.27.0",
+ "@typescript-eslint/parser": "^2.27.0",
+ "babel-jest": "^25.1.0",
+ "eslint": "^6.5.1",
+ "jest": "^25.1.0",
+ "metro-react-native-babel-preset": "^0.59.0",
+ "react-test-renderer": "16.13.1",
+ "typescript": "^3.8.3"
+ },
+ "jest": {
+ "preset": "react-native",
+ "moduleFileExtensions": [
+ "ts",
+ "tsx",
+ "js",
+ "jsx",
+ "json",
+ "node"
+ ]
+ }
+}
diff --git a/Examples/RNFS.Windows/tsconfig.json b/Examples/RNFS.Windows/tsconfig.json
new file mode 100644
index 00000000..9fe77783
--- /dev/null
+++ b/Examples/RNFS.Windows/tsconfig.json
@@ -0,0 +1,62 @@
+
+{
+ "compilerOptions": {
+ /* Basic Options */
+ "target": "esnext", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017','ES2018' or 'ESNEXT'. */
+ "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */
+ "lib": ["es6"], /* Specify library files to be included in the compilation. */
+ "allowJs": true, /* Allow javascript files to be compiled. */
+ // "checkJs": true, /* Report errors in .js files. */
+ "jsx": "react-native", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */
+ // "declaration": true, /* Generates corresponding '.d.ts' file. */
+ // "sourceMap": true, /* Generates corresponding '.map' file. */
+ // "outFile": "./", /* Concatenate and emit output to single file. */
+ // "outDir": "./", /* Redirect output structure to the directory. */
+ // "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */
+ // "removeComments": true, /* Do not emit comments to output. */
+ "noEmit": true, /* Do not emit outputs. */
+ // "incremental": true, /* Enable incremental compilation */
+ // "importHelpers": true, /* Import emit helpers from 'tslib'. */
+ // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */
+ "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */
+
+ /* Strict Type-Checking Options */
+ "strict": true, /* Enable all strict type-checking options. */
+ // "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */
+ // "strictNullChecks": true, /* Enable strict null checks. */
+ // "strictFunctionTypes": true, /* Enable strict checking of function types. */
+ // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */
+ // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */
+ // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */
+
+ /* Additional Checks */
+ // "noUnusedLocals": true, /* Report errors on unused locals. */
+ // "noUnusedParameters": true, /* Report errors on unused parameters. */
+ // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */
+ // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */
+
+ /* Module Resolution Options */
+ "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */
+ // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */
+ // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */
+ // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */
+ // "typeRoots": [], /* List of folders to include type definitions from. */
+ // "types": [], /* Type declaration files to be included in compilation. */
+ "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */
+ "esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */
+ // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */
+
+ /* Source Map Options */
+ // "sourceRoot": "./", /* Specify the location where debugger should locate TypeScript files instead of source locations. */
+ // "mapRoot": "./", /* Specify the location where debugger should locate map files instead of generated locations. */
+ // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */
+ // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */
+
+ /* Experimental Options */
+ // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */
+ // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */
+ },
+ "exclude": [
+ "node_modules", "babel.config.js", "metro.config.js", "jest.config.js"
+ ]
+}
diff --git a/Examples/RNFS.Windows/windows/.gitignore b/Examples/RNFS.Windows/windows/.gitignore
new file mode 100644
index 00000000..4ea0c7b5
--- /dev/null
+++ b/Examples/RNFS.Windows/windows/.gitignore
@@ -0,0 +1,92 @@
+*AppPackages*
+*BundleArtifacts*
+
+#OS junk files
+[Tt]humbs.db
+*.DS_Store
+
+#Visual Studio files
+*.[Oo]bj
+*.user
+*.aps
+*.pch
+*.vspscc
+*.vssscc
+*_i.c
+*_p.c
+*.ncb
+*.suo
+*.tlb
+*.tlh
+*.bak
+*.[Cc]ache
+*.ilk
+*.log
+*.lib
+*.sbr
+*.sdf
+*.opensdf
+*.opendb
+*.unsuccessfulbuild
+ipch/
+[Oo]bj/
+[Bb]in
+[Dd]ebug*/
+[Rr]elease*/
+Ankh.NoLoad
+
+# Visual C++ cache files
+ipch/
+*.aps
+*.ncb
+*.opendb
+*.opensdf
+*.sdf
+*.cachefile
+*.VC.db
+*.VC.VC.opendb
+
+#MonoDevelop
+*.pidb
+*.userprefs
+
+#Tooling
+_ReSharper*/
+*.resharper
+[Tt]est[Rr]esult*
+*.sass-cache
+
+#Project files
+[Bb]uild/
+
+#Subversion files
+.svn
+
+# Office Temp Files
+~$*
+
+# vim Temp Files
+*~
+
+#NuGet
+packages/
+*.nupkg
+
+#ncrunch
+*ncrunch*
+*crunch*.local.xml
+
+# visual studio database projects
+*.dbmdl
+
+#Test files
+*.testsettings
+
+#Other files
+*.DotSettings
+.vs/
+*project.lock.json
+
+#Files generated by the VS build
+**/Generated Files/**
+
diff --git a/Examples/RNFS.Windows/windows/RNFSWin.sln b/Examples/RNFS.Windows/windows/RNFSWin.sln
new file mode 100644
index 00000000..d32ad42a
--- /dev/null
+++ b/Examples/RNFS.Windows/windows/RNFSWin.sln
@@ -0,0 +1,223 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 16
+VisualStudioVersion = 16.0.29215.179
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RNFSWin", "RNFSWin\RNFSWin.vcxproj", "{1599491E-7A95-445B-9AE0-6BD0C48A6F89}"
+ ProjectSection(ProjectDependencies) = postProject
+ {F7D32BD0-2749-483E-9A0D-1635EF7E3136} = {F7D32BD0-2749-483E-9A0D-1635EF7E3136}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Folly", "..\node_modules\react-native-windows\Folly\Folly.vcxproj", "{A990658C-CE31-4BCC-976F-0FC6B1AF693D}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ReactCommon", "..\node_modules\react-native-windows\ReactCommon\ReactCommon.vcxproj", "{A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}"
+ ProjectSection(ProjectDependencies) = postProject
+ {A990658C-CE31-4BCC-976F-0FC6B1AF693D} = {A990658C-CE31-4BCC-976F-0FC6B1AF693D}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Chakra", "..\node_modules\react-native-windows\Chakra\Chakra.vcxitems", "{C38970C0-5FBF-4D69-90D8-CBAC225AE895}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Microsoft.ReactNative", "..\node_modules\react-native-windows\Microsoft.ReactNative\Microsoft.ReactNative.vcxproj", "{F7D32BD0-2749-483E-9A0D-1635EF7E3136}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "JSI.Shared", "..\node_modules\react-native-windows\JSI\Shared\JSI.Shared.vcxitems", "{0CC28589-39E4-4288-B162-97B959F8B843}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "JSI.Universal", "..\node_modules\react-native-windows\JSI\Universal\JSI.Universal.vcxproj", "{A62D504A-16B8-41D2-9F19-E2E86019E5E4}"
+EndProject
+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}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Common", "..\node_modules\react-native-windows\Common\Common.vcxproj", "{FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ReactNative", "ReactNative", "{5EA20F54-880A-49F3-99FA-4B3FE54E8AB1}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Microsoft.ReactNative.Shared", "..\node_modules\react-native-windows\Shared\Shared.vcxitems", "{2049DBE9-8D13-42C9-AE4B-413AE38FFFD0}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Mso", "..\node_modules\react-native-windows\Mso\Mso.vcxitems", "{84E05BFA-CBAF-4F0D-BFB6-4CE85742A57E}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Include", "..\node_modules\react-native-windows\include\Include.vcxitems", "{EF074BA1-2D54-4D49-A28E-5E040B47CD2E}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RNFS", "..\..\..\windows\RNFS\RNFS.vcxproj", "{4F89A807-A843-4DF0-8D74-A04A3F48FEF9}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RNFSWinUnitTest", "..\..\..\windows\RNFS.Tests\RNFSWinUnitTest.vcxproj", "{97B91D7B-4AC7-44F8-B7D3-7C7346EAF646}"
+EndProject
+Global
+ GlobalSection(SharedMSBuildProjectFiles) = preSolution
+ ..\node_modules\react-native-windows\JSI\Shared\JSI.Shared.vcxitems*{0cc28589-39e4-4288-b162-97b959f8b843}*SharedItemsImports = 9
+ ..\node_modules\react-native-windows\Shared\Shared.vcxitems*{2049dbe9-8d13-42c9-ae4b-413ae38fffd0}*SharedItemsImports = 9
+ ..\node_modules\react-native-windows\Mso\Mso.vcxitems*{84e05bfa-cbaf-4f0d-bfb6-4ce85742a57e}*SharedItemsImports = 9
+ ..\node_modules\react-native-windows\Microsoft.ReactNative.Cxx\Microsoft.ReactNative.Cxx.vcxitems*{97b91d7b-4ac7-44f8-b7d3-7c7346eaf646}*SharedItemsImports = 4
+ ..\node_modules\react-native-windows\Mso\Mso.vcxitems*{97b91d7b-4ac7-44f8-b7d3-7c7346eaf646}*SharedItemsImports = 4
+ ..\node_modules\react-native-windows\JSI\Shared\JSI.Shared.vcxitems*{a62d504a-16b8-41d2-9f19-e2e86019e5e4}*SharedItemsImports = 4
+ ..\node_modules\react-native-windows\Chakra\Chakra.vcxitems*{c38970c0-5fbf-4d69-90d8-cbac225ae895}*SharedItemsImports = 9
+ ..\node_modules\react-native-windows\Microsoft.ReactNative.Cxx\Microsoft.ReactNative.Cxx.vcxitems*{da8b35b3-da00-4b02-bde6-6a397b3fd46b}*SharedItemsImports = 9
+ ..\node_modules\react-native-windows\include\Include.vcxitems*{ef074ba1-2d54-4d49-a28e-5e040b47cd2e}*SharedItemsImports = 9
+ ..\node_modules\react-native-windows\Chakra\Chakra.vcxitems*{f7d32bd0-2749-483e-9a0d-1635ef7e3136}*SharedItemsImports = 4
+ ..\node_modules\react-native-windows\Microsoft.ReactNative.Cxx\Microsoft.ReactNative.Cxx.vcxitems*{f7d32bd0-2749-483e-9a0d-1635ef7e3136}*SharedItemsImports = 4
+ ..\node_modules\react-native-windows\Mso\Mso.vcxitems*{f7d32bd0-2749-483e-9a0d-1635ef7e3136}*SharedItemsImports = 4
+ ..\node_modules\react-native-windows\Shared\Shared.vcxitems*{f7d32bd0-2749-483e-9a0d-1635ef7e3136}*SharedItemsImports = 4
+ EndGlobalSection
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|ARM = Debug|ARM
+ Debug|ARM64 = Debug|ARM64
+ Debug|x64 = Debug|x64
+ Debug|x86 = Debug|x86
+ Release|ARM = Release|ARM
+ Release|ARM64 = Release|ARM64
+ Release|x64 = Release|x64
+ Release|x86 = Release|x86
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {1599491E-7A95-445B-9AE0-6BD0C48A6F89}.Debug|ARM.ActiveCfg = Debug|ARM
+ {1599491E-7A95-445B-9AE0-6BD0C48A6F89}.Debug|ARM.Build.0 = Debug|ARM
+ {1599491E-7A95-445B-9AE0-6BD0C48A6F89}.Debug|ARM.Deploy.0 = Debug|ARM
+ {1599491E-7A95-445B-9AE0-6BD0C48A6F89}.Debug|ARM64.ActiveCfg = Debug|ARM64
+ {1599491E-7A95-445B-9AE0-6BD0C48A6F89}.Debug|ARM64.Build.0 = Debug|ARM64
+ {1599491E-7A95-445B-9AE0-6BD0C48A6F89}.Debug|ARM64.Deploy.0 = Debug|ARM64
+ {1599491E-7A95-445B-9AE0-6BD0C48A6F89}.Debug|x64.ActiveCfg = Debug|x64
+ {1599491E-7A95-445B-9AE0-6BD0C48A6F89}.Debug|x64.Build.0 = Debug|x64
+ {1599491E-7A95-445B-9AE0-6BD0C48A6F89}.Debug|x64.Deploy.0 = Debug|x64
+ {1599491E-7A95-445B-9AE0-6BD0C48A6F89}.Debug|x86.ActiveCfg = Debug|Win32
+ {1599491E-7A95-445B-9AE0-6BD0C48A6F89}.Debug|x86.Build.0 = Debug|Win32
+ {1599491E-7A95-445B-9AE0-6BD0C48A6F89}.Debug|x86.Deploy.0 = Debug|Win32
+ {1599491E-7A95-445B-9AE0-6BD0C48A6F89}.Release|ARM.ActiveCfg = Release|ARM
+ {1599491E-7A95-445B-9AE0-6BD0C48A6F89}.Release|ARM.Build.0 = Release|ARM
+ {1599491E-7A95-445B-9AE0-6BD0C48A6F89}.Release|ARM.Deploy.0 = Release|ARM
+ {1599491E-7A95-445B-9AE0-6BD0C48A6F89}.Release|ARM64.ActiveCfg = Release|ARM64
+ {1599491E-7A95-445B-9AE0-6BD0C48A6F89}.Release|ARM64.Build.0 = Release|ARM64
+ {1599491E-7A95-445B-9AE0-6BD0C48A6F89}.Release|ARM64.Deploy.0 = Release|ARM64
+ {1599491E-7A95-445B-9AE0-6BD0C48A6F89}.Release|x64.ActiveCfg = Release|x64
+ {1599491E-7A95-445B-9AE0-6BD0C48A6F89}.Release|x64.Build.0 = Release|x64
+ {1599491E-7A95-445B-9AE0-6BD0C48A6F89}.Release|x64.Deploy.0 = Release|x64
+ {1599491E-7A95-445B-9AE0-6BD0C48A6F89}.Release|x86.ActiveCfg = Release|Win32
+ {1599491E-7A95-445B-9AE0-6BD0C48A6F89}.Release|x86.Build.0 = Release|Win32
+ {1599491E-7A95-445B-9AE0-6BD0C48A6F89}.Release|x86.Deploy.0 = Release|Win32
+ {A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Debug|ARM.ActiveCfg = Debug|ARM
+ {A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Debug|ARM.Build.0 = Debug|ARM
+ {A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Debug|ARM64.ActiveCfg = Debug|ARM64
+ {A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Debug|ARM64.Build.0 = Debug|ARM64
+ {A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Debug|x64.ActiveCfg = Debug|x64
+ {A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Debug|x64.Build.0 = Debug|x64
+ {A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Debug|x86.ActiveCfg = Debug|Win32
+ {A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Debug|x86.Build.0 = Debug|Win32
+ {A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Release|ARM.ActiveCfg = Release|ARM
+ {A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Release|ARM.Build.0 = Release|ARM
+ {A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Release|ARM64.ActiveCfg = Release|ARM64
+ {A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Release|ARM64.Build.0 = Release|ARM64
+ {A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Release|x64.ActiveCfg = Release|x64
+ {A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Release|x64.Build.0 = Release|x64
+ {A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Release|x86.ActiveCfg = Release|Win32
+ {A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Release|x86.Build.0 = Release|Win32
+ {A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Debug|ARM.ActiveCfg = Debug|ARM
+ {A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Debug|ARM.Build.0 = Debug|ARM
+ {A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Debug|ARM64.ActiveCfg = Debug|ARM64
+ {A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Debug|ARM64.Build.0 = Debug|ARM64
+ {A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Debug|x64.ActiveCfg = Debug|x64
+ {A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Debug|x64.Build.0 = Debug|x64
+ {A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Debug|x86.ActiveCfg = Debug|Win32
+ {A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Debug|x86.Build.0 = Debug|Win32
+ {A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Release|ARM.ActiveCfg = Release|ARM
+ {A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Release|ARM.Build.0 = Release|ARM
+ {A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Release|ARM64.ActiveCfg = Release|ARM64
+ {A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Release|ARM64.Build.0 = Release|ARM64
+ {A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Release|x64.ActiveCfg = Release|x64
+ {A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Release|x64.Build.0 = Release|x64
+ {A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Release|x86.ActiveCfg = Release|Win32
+ {A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Release|x86.Build.0 = Release|Win32
+ {F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Debug|ARM.ActiveCfg = Debug|ARM
+ {F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Debug|ARM.Build.0 = Debug|ARM
+ {F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Debug|ARM64.ActiveCfg = Debug|ARM64
+ {F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Debug|ARM64.Build.0 = Debug|ARM64
+ {F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Debug|x64.ActiveCfg = Debug|x64
+ {F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Debug|x64.Build.0 = Debug|x64
+ {F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Debug|x86.ActiveCfg = Debug|Win32
+ {F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Debug|x86.Build.0 = Debug|Win32
+ {F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Release|ARM.ActiveCfg = Release|ARM
+ {F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Release|ARM.Build.0 = Release|ARM
+ {F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Release|ARM64.ActiveCfg = Release|ARM64
+ {F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Release|ARM64.Build.0 = Release|ARM64
+ {F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Release|x64.ActiveCfg = Release|x64
+ {F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Release|x64.Build.0 = Release|x64
+ {F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Release|x86.ActiveCfg = Release|Win32
+ {F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Release|x86.Build.0 = Release|Win32
+ {A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Debug|ARM.ActiveCfg = Debug|ARM
+ {A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Debug|ARM.Build.0 = Debug|ARM
+ {A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Debug|ARM64.ActiveCfg = Debug|ARM64
+ {A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Debug|ARM64.Build.0 = Debug|ARM64
+ {A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Debug|x64.ActiveCfg = Debug|x64
+ {A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Debug|x64.Build.0 = Debug|x64
+ {A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Debug|x86.ActiveCfg = Debug|Win32
+ {A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Debug|x86.Build.0 = Debug|Win32
+ {A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Release|ARM.ActiveCfg = Release|ARM
+ {A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Release|ARM.Build.0 = Release|ARM
+ {A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Release|ARM64.ActiveCfg = Release|ARM64
+ {A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Release|ARM64.Build.0 = Release|ARM64
+ {A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Release|x64.ActiveCfg = Release|x64
+ {A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Release|x64.Build.0 = Release|x64
+ {A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Release|x86.ActiveCfg = Release|Win32
+ {A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Release|x86.Build.0 = Release|Win32
+ {FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Debug|ARM.ActiveCfg = Debug|ARM
+ {FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Debug|ARM.Build.0 = Debug|ARM
+ {FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Debug|ARM64.ActiveCfg = Debug|ARM64
+ {FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Debug|ARM64.Build.0 = Debug|ARM64
+ {FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Debug|x64.ActiveCfg = Debug|x64
+ {FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Debug|x64.Build.0 = Debug|x64
+ {FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Debug|x86.ActiveCfg = Debug|Win32
+ {FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Debug|x86.Build.0 = Debug|Win32
+ {FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Release|ARM.ActiveCfg = Release|ARM
+ {FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Release|ARM.Build.0 = Release|ARM
+ {FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Release|ARM64.ActiveCfg = Release|ARM64
+ {FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Release|ARM64.Build.0 = Release|ARM64
+ {FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Release|x64.ActiveCfg = Release|x64
+ {FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Release|x64.Build.0 = Release|x64
+ {FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Release|x86.ActiveCfg = Release|Win32
+ {FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Release|x86.Build.0 = Release|Win32
+ {4F89A807-A843-4DF0-8D74-A04A3F48FEF9}.Debug|ARM.ActiveCfg = Debug|ARM
+ {4F89A807-A843-4DF0-8D74-A04A3F48FEF9}.Debug|ARM.Build.0 = Debug|ARM
+ {4F89A807-A843-4DF0-8D74-A04A3F48FEF9}.Debug|ARM64.ActiveCfg = Debug|ARM64
+ {4F89A807-A843-4DF0-8D74-A04A3F48FEF9}.Debug|ARM64.Build.0 = Debug|ARM64
+ {4F89A807-A843-4DF0-8D74-A04A3F48FEF9}.Debug|x64.ActiveCfg = Debug|x64
+ {4F89A807-A843-4DF0-8D74-A04A3F48FEF9}.Debug|x64.Build.0 = Debug|x64
+ {4F89A807-A843-4DF0-8D74-A04A3F48FEF9}.Debug|x86.ActiveCfg = Debug|Win32
+ {4F89A807-A843-4DF0-8D74-A04A3F48FEF9}.Debug|x86.Build.0 = Debug|Win32
+ {4F89A807-A843-4DF0-8D74-A04A3F48FEF9}.Release|ARM.ActiveCfg = Release|ARM
+ {4F89A807-A843-4DF0-8D74-A04A3F48FEF9}.Release|ARM.Build.0 = Release|ARM
+ {4F89A807-A843-4DF0-8D74-A04A3F48FEF9}.Release|ARM64.ActiveCfg = Release|ARM64
+ {4F89A807-A843-4DF0-8D74-A04A3F48FEF9}.Release|ARM64.Build.0 = Release|ARM64
+ {4F89A807-A843-4DF0-8D74-A04A3F48FEF9}.Release|x64.ActiveCfg = Release|x64
+ {4F89A807-A843-4DF0-8D74-A04A3F48FEF9}.Release|x64.Build.0 = Release|x64
+ {4F89A807-A843-4DF0-8D74-A04A3F48FEF9}.Release|x86.ActiveCfg = Release|Win32
+ {4F89A807-A843-4DF0-8D74-A04A3F48FEF9}.Release|x86.Build.0 = Release|Win32
+ {97B91D7B-4AC7-44F8-B7D3-7C7346EAF646}.Debug|ARM.ActiveCfg = Debug|Win32
+ {97B91D7B-4AC7-44F8-B7D3-7C7346EAF646}.Debug|ARM64.ActiveCfg = Debug|Win32
+ {97B91D7B-4AC7-44F8-B7D3-7C7346EAF646}.Debug|x64.ActiveCfg = Debug|x64
+ {97B91D7B-4AC7-44F8-B7D3-7C7346EAF646}.Debug|x64.Build.0 = Debug|x64
+ {97B91D7B-4AC7-44F8-B7D3-7C7346EAF646}.Debug|x64.Deploy.0 = Debug|x64
+ {97B91D7B-4AC7-44F8-B7D3-7C7346EAF646}.Debug|x86.ActiveCfg = Debug|Win32
+ {97B91D7B-4AC7-44F8-B7D3-7C7346EAF646}.Debug|x86.Build.0 = Debug|Win32
+ {97B91D7B-4AC7-44F8-B7D3-7C7346EAF646}.Release|ARM.ActiveCfg = Release|Win32
+ {97B91D7B-4AC7-44F8-B7D3-7C7346EAF646}.Release|ARM64.ActiveCfg = Release|Win32
+ {97B91D7B-4AC7-44F8-B7D3-7C7346EAF646}.Release|x64.ActiveCfg = Release|x64
+ {97B91D7B-4AC7-44F8-B7D3-7C7346EAF646}.Release|x64.Build.0 = Release|x64
+ {97B91D7B-4AC7-44F8-B7D3-7C7346EAF646}.Release|x64.Deploy.0 = Release|x64
+ {97B91D7B-4AC7-44F8-B7D3-7C7346EAF646}.Release|x86.ActiveCfg = Release|Win32
+ {97B91D7B-4AC7-44F8-B7D3-7C7346EAF646}.Release|x86.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(NestedProjects) = preSolution
+ {A990658C-CE31-4BCC-976F-0FC6B1AF693D} = {5EA20F54-880A-49F3-99FA-4B3FE54E8AB1}
+ {A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD} = {5EA20F54-880A-49F3-99FA-4B3FE54E8AB1}
+ {C38970C0-5FBF-4D69-90D8-CBAC225AE895} = {5EA20F54-880A-49F3-99FA-4B3FE54E8AB1}
+ {F7D32BD0-2749-483E-9A0D-1635EF7E3136} = {5EA20F54-880A-49F3-99FA-4B3FE54E8AB1}
+ {0CC28589-39E4-4288-B162-97B959F8B843} = {5EA20F54-880A-49F3-99FA-4B3FE54E8AB1}
+ {A62D504A-16B8-41D2-9F19-E2E86019E5E4} = {5EA20F54-880A-49F3-99FA-4B3FE54E8AB1}
+ {DA8B35B3-DA00-4B02-BDE6-6A397B3FD46B} = {5EA20F54-880A-49F3-99FA-4B3FE54E8AB1}
+ {FCA38F3C-7C73-4C47-BE4E-32F77FA8538D} = {5EA20F54-880A-49F3-99FA-4B3FE54E8AB1}
+ {2049DBE9-8D13-42C9-AE4B-413AE38FFFD0} = {5EA20F54-880A-49F3-99FA-4B3FE54E8AB1}
+ {84E05BFA-CBAF-4F0D-BFB6-4CE85742A57E} = {5EA20F54-880A-49F3-99FA-4B3FE54E8AB1}
+ {EF074BA1-2D54-4D49-A28E-5E040B47CD2E} = {5EA20F54-880A-49F3-99FA-4B3FE54E8AB1}
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {D43FAD39-F619-437D-BB40-04A3982ACB6A}
+ EndGlobalSection
+EndGlobal
diff --git a/Examples/RNFS.Windows/windows/RNFSWin/.gitignore b/Examples/RNFS.Windows/windows/RNFSWin/.gitignore
new file mode 100644
index 00000000..917243bd
--- /dev/null
+++ b/Examples/RNFS.Windows/windows/RNFSWin/.gitignore
@@ -0,0 +1 @@
+/Bundle
diff --git a/Examples/RNFS.Windows/windows/RNFSWin/App.cpp b/Examples/RNFS.Windows/windows/RNFSWin/App.cpp
new file mode 100644
index 00000000..535e47d7
--- /dev/null
+++ b/Examples/RNFS.Windows/windows/RNFSWin/App.cpp
@@ -0,0 +1,80 @@
+#include "pch.h"
+
+#include "App.h"
+
+#include "AutolinkedNativeModules.g.h"
+#include "ReactPackageProvider.h"
+
+
+using namespace winrt::RNFSWin;
+using namespace winrt::RNFSWin::implementation;
+using namespace winrt;
+using namespace Windows::UI::Xaml;
+using namespace Windows::UI::Xaml::Controls;
+using namespace Windows::UI::Xaml::Navigation;
+using namespace Windows::ApplicationModel;
+
+///
+/// Initializes the singleton application object. This is the first line of
+/// authored code executed, and as such is the logical equivalent of main() or
+/// WinMain().
+///
+App::App() noexcept
+{
+#if BUNDLE
+ JavaScriptBundleFile(L"index.windows");
+ InstanceSettings().UseWebDebugger(false);
+ InstanceSettings().UseFastRefresh(false);
+#else
+ JavaScriptMainModuleName(L"index");
+ InstanceSettings().UseWebDebugger(true);
+ InstanceSettings().UseFastRefresh(true);
+#endif
+
+#if _DEBUG
+ InstanceSettings().UseDeveloperSupport(true);
+#else
+ InstanceSettings().UseDeveloperSupport(false);
+#endif
+
+ RegisterAutolinkedNativeModulePackages(PackageProviders()); // Includes any autolinked modules
+
+ PackageProviders().Append(make()); // Includes all modules in this project
+
+ InitializeComponent();
+}
+
+///
+/// Invoked when the application is launched normally by the end user. Other entry points
+/// will be used such as when the application is launched to open a specific file.
+///
+/// Details about the launch request and process.
+void App::OnLaunched(activation::LaunchActivatedEventArgs const& e)
+{
+ super::OnLaunched(e);
+
+ Frame rootFrame = Window::Current().Content().as();
+ rootFrame.Navigate(xaml_typename(), box_value(e.Arguments()));
+}
+
+///
+/// Invoked when application execution is being suspended. Application state is saved
+/// without knowing whether the application will be terminated or resumed with the contents
+/// of memory still intact.
+///
+/// The source of the suspend request.
+/// Details about the suspend request.
+void App::OnSuspending([[maybe_unused]] IInspectable const& sender, [[maybe_unused]] SuspendingEventArgs const& e)
+{
+ // Save application state and stop any background activity
+}
+
+///
+/// Invoked when Navigation to a certain page fails
+///
+/// The Frame which failed navigation
+/// Details about the navigation failure
+void App::OnNavigationFailed(IInspectable const&, NavigationFailedEventArgs const& e)
+{
+ throw hresult_error(E_FAIL, hstring(L"Failed to load Page ") + e.SourcePageType().Name);
+}
diff --git a/Examples/RNFS.Windows/windows/RNFSWin/App.h b/Examples/RNFS.Windows/windows/RNFSWin/App.h
new file mode 100644
index 00000000..19b7ed36
--- /dev/null
+++ b/Examples/RNFS.Windows/windows/RNFSWin/App.h
@@ -0,0 +1,20 @@
+#pragma once
+
+#include "App.xaml.g.h"
+
+namespace activation = winrt::Windows::ApplicationModel::Activation;
+
+namespace winrt::RNFSWin::implementation
+{
+ struct App : AppT
+ {
+ App() noexcept;
+ void OnLaunched(activation::LaunchActivatedEventArgs const&);
+ void OnSuspending(IInspectable const&, Windows::ApplicationModel::SuspendingEventArgs const&);
+ void OnNavigationFailed(IInspectable const&, Windows::UI::Xaml::Navigation::NavigationFailedEventArgs const&);
+ private:
+ using super = AppT;
+ };
+} // namespace winrt::RNFSWin::implementation
+
+
diff --git a/Examples/RNFS.Windows/windows/RNFSWin/App.idl b/Examples/RNFS.Windows/windows/RNFSWin/App.idl
new file mode 100644
index 00000000..856c51d1
--- /dev/null
+++ b/Examples/RNFS.Windows/windows/RNFSWin/App.idl
@@ -0,0 +1,3 @@
+namespace RNFSWin
+{
+}
diff --git a/Examples/RNFS.Windows/windows/RNFSWin/App.xaml b/Examples/RNFS.Windows/windows/RNFSWin/App.xaml
new file mode 100644
index 00000000..b66b17b9
--- /dev/null
+++ b/Examples/RNFS.Windows/windows/RNFSWin/App.xaml
@@ -0,0 +1,10 @@
+
+
+
+
+
diff --git a/windows/RNFS.Tests/Assets/LockScreenLogo.scale-200.png b/Examples/RNFS.Windows/windows/RNFSWin/Assets/LockScreenLogo.scale-200.png
similarity index 100%
rename from windows/RNFS.Tests/Assets/LockScreenLogo.scale-200.png
rename to Examples/RNFS.Windows/windows/RNFSWin/Assets/LockScreenLogo.scale-200.png
diff --git a/windows/RNFS.Tests/Assets/SplashScreen.scale-200.png b/Examples/RNFS.Windows/windows/RNFSWin/Assets/SplashScreen.scale-200.png
similarity index 100%
rename from windows/RNFS.Tests/Assets/SplashScreen.scale-200.png
rename to Examples/RNFS.Windows/windows/RNFSWin/Assets/SplashScreen.scale-200.png
diff --git a/windows/RNFS.Tests/Assets/Square150x150Logo.scale-200.png b/Examples/RNFS.Windows/windows/RNFSWin/Assets/Square150x150Logo.scale-200.png
similarity index 100%
rename from windows/RNFS.Tests/Assets/Square150x150Logo.scale-200.png
rename to Examples/RNFS.Windows/windows/RNFSWin/Assets/Square150x150Logo.scale-200.png
diff --git a/windows/RNFS.Tests/Assets/Square44x44Logo.scale-200.png b/Examples/RNFS.Windows/windows/RNFSWin/Assets/Square44x44Logo.scale-200.png
similarity index 100%
rename from windows/RNFS.Tests/Assets/Square44x44Logo.scale-200.png
rename to Examples/RNFS.Windows/windows/RNFSWin/Assets/Square44x44Logo.scale-200.png
diff --git a/windows/RNFS.Tests/Assets/Square44x44Logo.targetsize-24_altform-unplated.png b/Examples/RNFS.Windows/windows/RNFSWin/Assets/Square44x44Logo.targetsize-24_altform-unplated.png
similarity index 100%
rename from windows/RNFS.Tests/Assets/Square44x44Logo.targetsize-24_altform-unplated.png
rename to Examples/RNFS.Windows/windows/RNFSWin/Assets/Square44x44Logo.targetsize-24_altform-unplated.png
diff --git a/windows/RNFS.Tests/Assets/StoreLogo.png b/Examples/RNFS.Windows/windows/RNFSWin/Assets/StoreLogo.png
similarity index 100%
rename from windows/RNFS.Tests/Assets/StoreLogo.png
rename to Examples/RNFS.Windows/windows/RNFSWin/Assets/StoreLogo.png
diff --git a/windows/RNFS.Tests/Assets/Wide310x150Logo.scale-200.png b/Examples/RNFS.Windows/windows/RNFSWin/Assets/Wide310x150Logo.scale-200.png
similarity index 100%
rename from windows/RNFS.Tests/Assets/Wide310x150Logo.scale-200.png
rename to Examples/RNFS.Windows/windows/RNFSWin/Assets/Wide310x150Logo.scale-200.png
diff --git a/Examples/RNFS.Windows/windows/RNFSWin/AutolinkedNativeModules.g.cpp b/Examples/RNFS.Windows/windows/RNFSWin/AutolinkedNativeModules.g.cpp
new file mode 100644
index 00000000..d8bdd645
--- /dev/null
+++ b/Examples/RNFS.Windows/windows/RNFSWin/AutolinkedNativeModules.g.cpp
@@ -0,0 +1,18 @@
+// AutolinkedNativeModules.g.cpp contents generated by "react-native autolink-windows"
+// clang-format off
+#include "pch.h"
+#include "AutolinkedNativeModules.g.h"
+
+// Includes from RNFS
+#include
+
+namespace winrt::Microsoft::ReactNative
+{
+
+void RegisterAutolinkedNativeModulePackages(winrt::Windows::Foundation::Collections::IVector const& packageProviders)
+{
+ // IReactPackageProviders from RNFS
+ packageProviders.Append(winrt::RNFS::ReactPackageProvider());
+}
+
+}
diff --git a/Examples/RNFS.Windows/windows/RNFSWin/AutolinkedNativeModules.g.h b/Examples/RNFS.Windows/windows/RNFSWin/AutolinkedNativeModules.g.h
new file mode 100644
index 00000000..1bf5f894
--- /dev/null
+++ b/Examples/RNFS.Windows/windows/RNFSWin/AutolinkedNativeModules.g.h
@@ -0,0 +1,10 @@
+// AutolinkedNativeModules.g.h contents generated by "react-native autolink-windows"
+
+#pragma once
+
+namespace winrt::Microsoft::ReactNative
+{
+
+void RegisterAutolinkedNativeModulePackages(winrt::Windows::Foundation::Collections::IVector const& packageProviders);
+
+}
diff --git a/Examples/RNFS.Windows/windows/RNFSWin/AutolinkedNativeModules.g.targets b/Examples/RNFS.Windows/windows/RNFSWin/AutolinkedNativeModules.g.targets
new file mode 100644
index 00000000..542cc070
--- /dev/null
+++ b/Examples/RNFS.Windows/windows/RNFSWin/AutolinkedNativeModules.g.targets
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+ {4f89a807-a843-4df0-8d74-a04a3f48fef9}
+
+
+
diff --git a/Examples/RNFS.Windows/windows/RNFSWin/MainPage.cpp b/Examples/RNFS.Windows/windows/RNFSWin/MainPage.cpp
new file mode 100644
index 00000000..4033dbe2
--- /dev/null
+++ b/Examples/RNFS.Windows/windows/RNFSWin/MainPage.cpp
@@ -0,0 +1,24 @@
+#include "pch.h"
+#include "MainPage.h"
+#if __has_include("MainPage.g.cpp")
+#include "MainPage.g.cpp"
+#endif
+
+#include "App.h"
+
+
+
+using namespace winrt;
+using namespace Windows::UI::Xaml;
+
+namespace winrt::RNFSWin::implementation
+{
+ MainPage::MainPage()
+ {
+ InitializeComponent();
+ auto app = Application::Current().as();
+ ReactRootView().ReactNativeHost(app->Host());
+ }
+}
+
+
diff --git a/Examples/RNFS.Windows/windows/RNFSWin/MainPage.h b/Examples/RNFS.Windows/windows/RNFSWin/MainPage.h
new file mode 100644
index 00000000..6e40cd32
--- /dev/null
+++ b/Examples/RNFS.Windows/windows/RNFSWin/MainPage.h
@@ -0,0 +1,21 @@
+#pragma once
+#include "MainPage.g.h"
+#include
+
+
+namespace winrt::RNFSWin::implementation
+{
+ struct MainPage : MainPageT
+ {
+ MainPage();
+ };
+}
+
+namespace winrt::RNFSWin::factory_implementation
+{
+ struct MainPage : MainPageT
+ {
+ };
+}
+
+
diff --git a/Examples/RNFS.Windows/windows/RNFSWin/MainPage.idl b/Examples/RNFS.Windows/windows/RNFSWin/MainPage.idl
new file mode 100644
index 00000000..9c595dad
--- /dev/null
+++ b/Examples/RNFS.Windows/windows/RNFSWin/MainPage.idl
@@ -0,0 +1,8 @@
+namespace RNFSWin
+{
+ [default_interface]
+ runtimeclass MainPage : Windows.UI.Xaml.Controls.Page
+ {
+ MainPage();
+ }
+}
diff --git a/Examples/RNFS.Windows/windows/RNFSWin/MainPage.xaml b/Examples/RNFS.Windows/windows/RNFSWin/MainPage.xaml
new file mode 100644
index 00000000..eaa9104c
--- /dev/null
+++ b/Examples/RNFS.Windows/windows/RNFSWin/MainPage.xaml
@@ -0,0 +1,16 @@
+
+
+
diff --git a/Examples/RNFS.Windows/windows/RNFSWin/Package.appxmanifest b/Examples/RNFS.Windows/windows/RNFSWin/Package.appxmanifest
new file mode 100644
index 00000000..c01ee837
--- /dev/null
+++ b/Examples/RNFS.Windows/windows/RNFSWin/Package.appxmanifest
@@ -0,0 +1,52 @@
+
+
+
+
+
+
+
+
+
+ RNFSWin
+ RNFS
+ Assets\StoreLogo.png
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Examples/RNFS.Windows/windows/RNFSWin/PropertySheet.props b/Examples/RNFS.Windows/windows/RNFSWin/PropertySheet.props
new file mode 100644
index 00000000..5942ba39
--- /dev/null
+++ b/Examples/RNFS.Windows/windows/RNFSWin/PropertySheet.props
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Examples/RNFS.Windows/windows/RNFSWin/RNFSWin.vcxproj b/Examples/RNFS.Windows/windows/RNFSWin/RNFSWin.vcxproj
new file mode 100644
index 00000000..1b25b0e2
--- /dev/null
+++ b/Examples/RNFS.Windows/windows/RNFSWin/RNFSWin.vcxproj
@@ -0,0 +1,197 @@
+
+
+
+
+ true
+ true
+ true
+ {1599491e-7a95-445b-9ae0-6bd0c48a6f89}
+ RNFSWin
+ RNFSWin
+ en-US
+ 16.0
+ true
+ Windows Store
+ 10.0
+ 10.0.19041.0
+ 10.0.16299.0
+ RNFSWin_TemporaryKey.pfx
+ ABDC35DCD0C803AB4DF09EED4517173F2D0C0BBC
+ password
+
+
+
+ $([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), 'node_modules\react-native-windows\package.json'))\node_modules\react-native-windows\
+
+ false
+
+
+
+ Debug
+ ARM
+
+
+ Debug
+ ARM64
+
+
+ Debug
+ Win32
+
+
+ Debug
+ x64
+
+
+ Release
+ ARM
+
+
+ Release
+ ARM64
+
+
+ Release
+ Win32
+
+
+ Release
+ x64
+
+
+
+ Application
+ Unicode
+
+
+ true
+ true
+
+
+ false
+ true
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Use
+ pch.h
+ $(IntDir)pch.pch
+ Level4
+ $(ProjectDir)pch;%(AdditionalIncludeDirectories)
+ %(AdditionalOptions) /bigobj
+ 4453;28204
+
+
+
+
+ _DEBUG;%(PreprocessorDefinitions)
+
+
+
+
+ NDEBUG;%(PreprocessorDefinitions)
+
+
+
+
+
+ MainPage.xaml
+ Code
+
+
+
+
+ App.xaml
+
+
+
+
+ Designer
+
+
+
+
+ Designer
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MainPage.xaml
+ Code
+
+
+
+
+ Create
+
+
+ App.xaml
+
+
+
+
+
+ App.xaml
+
+
+ MainPage.xaml
+ Code
+
+
+
+
+
+
+
+
+ Designer
+
+
+
+
+
+
+
+
+ This project references targets in your node_modules\react-native-windows folder. The missing file is {0}.
+
+
+
+
+
+
+
+
+
+
+ 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}.
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Examples/RNFS.Windows/windows/RNFSWin/RNFSWin.vcxproj.filters b/Examples/RNFS.Windows/windows/RNFSWin/RNFSWin.vcxproj.filters
new file mode 100644
index 00000000..273bb7a9
--- /dev/null
+++ b/Examples/RNFS.Windows/windows/RNFSWin/RNFSWin.vcxproj.filters
@@ -0,0 +1,65 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ pch
+
+
+
+
+ Assets
+
+
+ Assets
+
+
+ Assets
+
+
+ Assets
+
+
+ Assets
+
+
+ Assets
+
+
+ Assets
+
+
+
+
+
+
+
+ {e48dc53e-40b1-40cb-970a-f89935452892}
+
+
+ {65b1a344-96e1-4fa0-bdd2-742bb6f4d1c6}
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Examples/RNFS.Windows/windows/RNFSWin/RNFSWin_TemporaryKey.pfx b/Examples/RNFS.Windows/windows/RNFSWin/RNFSWin_TemporaryKey.pfx
new file mode 100644
index 00000000..791dc85b
Binary files /dev/null and b/Examples/RNFS.Windows/windows/RNFSWin/RNFSWin_TemporaryKey.pfx differ
diff --git a/Examples/RNFS.Windows/windows/RNFSWin/ReactPackageProvider.cpp b/Examples/RNFS.Windows/windows/RNFSWin/ReactPackageProvider.cpp
new file mode 100644
index 00000000..5787e87d
--- /dev/null
+++ b/Examples/RNFS.Windows/windows/RNFSWin/ReactPackageProvider.cpp
@@ -0,0 +1,18 @@
+#include "pch.h"
+#include "ReactPackageProvider.h"
+#include "NativeModules.h"
+
+
+using namespace winrt::Microsoft::ReactNative;
+
+namespace winrt::RNFSWin::implementation
+{
+
+void ReactPackageProvider::CreatePackage(IReactPackageBuilder const &packageBuilder) noexcept
+{
+ AddAttributedModules(packageBuilder);
+}
+
+} // namespace winrt::RNFSWin::implementation
+
+
diff --git a/Examples/RNFS.Windows/windows/RNFSWin/ReactPackageProvider.h b/Examples/RNFS.Windows/windows/RNFSWin/ReactPackageProvider.h
new file mode 100644
index 00000000..64e32539
--- /dev/null
+++ b/Examples/RNFS.Windows/windows/RNFSWin/ReactPackageProvider.h
@@ -0,0 +1,15 @@
+#pragma once
+
+#include "winrt/Microsoft.ReactNative.h"
+
+
+namespace winrt::RNFSWin::implementation
+{
+ struct ReactPackageProvider : winrt::implements
+ {
+ public: // IReactPackageProvider
+ void CreatePackage(winrt::Microsoft::ReactNative::IReactPackageBuilder const &packageBuilder) noexcept;
+ };
+} // namespace winrt::RNFSWin::implementation
+
+
diff --git a/Examples/RNFS.Windows/windows/RNFSWin/packages.config b/Examples/RNFS.Windows/windows/RNFSWin/packages.config
new file mode 100644
index 00000000..7ad3ffb8
--- /dev/null
+++ b/Examples/RNFS.Windows/windows/RNFSWin/packages.config
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/Examples/RNFS.Windows/windows/RNFSWin/pch.cpp b/Examples/RNFS.Windows/windows/RNFSWin/pch.cpp
new file mode 100644
index 00000000..bcb5590b
--- /dev/null
+++ b/Examples/RNFS.Windows/windows/RNFSWin/pch.cpp
@@ -0,0 +1 @@
+#include "pch.h"
diff --git a/Examples/RNFS.Windows/windows/RNFSWin/pch/pch.h b/Examples/RNFS.Windows/windows/RNFSWin/pch/pch.h
new file mode 100644
index 00000000..37658676
--- /dev/null
+++ b/Examples/RNFS.Windows/windows/RNFSWin/pch/pch.h
@@ -0,0 +1,22 @@
+#pragma once
+
+#define NOMINMAX
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include
+
+#include
+#include
+#include
+#include
+#include
diff --git a/FS.common.js b/FS.common.js
index d8ba4e45..2f9c2a3b 100755
--- a/FS.common.js
+++ b/FS.common.js
@@ -9,11 +9,14 @@
var RNFSManager = require('react-native').NativeModules.RNFSManager;
-var NativeAppEventEmitter = require('react-native').NativeAppEventEmitter; // iOS
-var DeviceEventEmitter = require('react-native').DeviceEventEmitter; // Android
+var NativeEventEmitter = require('react-native').NativeEventEmitter;
+
+var RNFS_NativeEventEmitter = new NativeEventEmitter(RNFSManager);
+
var base64 = require('base-64');
var utf8 = require('utf8');
var isIOS = require('react-native').Platform.OS === 'ios';
+var isWindows = require('react-native').Platform.OS === 'windows'; // To accommodate Windows
var RNFSFileTypeRegular = RNFSManager.RNFSFileTypeRegular;
var RNFSFileTypeDirectory = RNFSManager.RNFSFileTypeDirectory;
@@ -68,12 +71,14 @@ type DownloadFileOptions = {
background?: boolean; // Continue the download in the background after the app terminates (iOS only)
discretionary?: boolean; // Allow the OS to control the timing and speed of the download to improve perceived performance (iOS only)
cacheable?: boolean; // Whether the download can be stored in the shared NSURLCache (iOS only)
+ progressInterval?: number;
progressDivider?: number;
begin?: (res: DownloadBeginCallbackResult) => void;
progress?: (res: DownloadProgressCallbackResult) => void;
resumable?: () => void; // only supported on iOS yet
connectionTimeout?: number; // only supported on Android yet
readTimeout?: number; // supported on Android and iOS
+ backgroundTimeout?: number; // Maximum time (in milliseconds) to download an entire resource (iOS only, useful for timing out background downloads)
};
type DownloadBeginCallbackResult = {
@@ -201,6 +206,13 @@ var RNFS = {
return RNFSManager.copyFile(normalizeFilePath(filepath), normalizeFilePath(destPath), options).then(() => void 0);
},
+ // Windows workaround for slow copying of large folders of files
+ copyFolder(filepath: string, destPath: string): Promise {
+ if(isWindows) {
+ return RNFSManager.copyFolder(normalizeFilePath(filepath), normalizeFilePath(destPath));
+ }
+ },
+
pathForBundle(bundleNamed: string): Promise {
return RNFSManager.pathForBundle(bundleNamed);
},
@@ -487,22 +499,30 @@ var RNFS = {
if (options.headers && typeof options.headers !== 'object') throw new Error('downloadFile: Invalid value for property `headers`');
if (options.background && typeof options.background !== 'boolean') throw new Error('downloadFile: Invalid value for property `background`');
if (options.progressDivider && typeof options.progressDivider !== 'number') throw new Error('downloadFile: Invalid value for property `progressDivider`');
+ if (options.progressInterval && typeof options.progressInterval !== 'number') throw new Error('downloadFile: Invalid value for property `progressInterval`');
if (options.readTimeout && typeof options.readTimeout !== 'number') throw new Error('downloadFile: Invalid value for property `readTimeout`');
if (options.connectionTimeout && typeof options.connectionTimeout !== 'number') throw new Error('downloadFile: Invalid value for property `connectionTimeout`');
+ if (options.backgroundTimeout && typeof options.backgroundTimeout !== 'number') throw new Error('downloadFile: Invalid value for property `backgroundTimeout`');
var jobId = getJobId();
var subscriptions = [];
if (options.begin) {
- subscriptions.push(NativeAppEventEmitter.addListener('DownloadBegin-' + jobId, options.begin));
+ subscriptions.push(RNFS_NativeEventEmitter.addListener('DownloadBegin', (res) => {
+ if (res.jobId === jobId) options.begin(res);
+ }));
}
if (options.progress) {
- subscriptions.push(NativeAppEventEmitter.addListener('DownloadProgress-' + jobId, options.progress));
+ subscriptions.push(RNFS_NativeEventEmitter.addListener('DownloadProgress', (res) => {
+ if (res.jobId === jobId) options.progress(res);
+ }));
}
if (options.resumable) {
- subscriptions.push(NativeAppEventEmitter.addListener('DownloadResumable-' + jobId, options.resumable));
+ subscriptions.push(RNFS_NativeEventEmitter.addListener('DownloadResumable', (res) => {
+ if (res.jobId === jobId) options.resumable(res);
+ }));
}
var bridgeOptions = {
@@ -512,8 +532,13 @@ var RNFS = {
headers: options.headers || {},
background: !!options.background,
progressDivider: options.progressDivider || 0,
+ progressInterval: options.progressInterval || 0,
readTimeout: options.readTimeout || 15000,
- connectionTimeout: options.connectionTimeout || 5000
+ connectionTimeout: options.connectionTimeout || 5000,
+ backgroundTimeout: options.backgroundTimeout || 3600000, // 1 hour
+ hasBeginCallback: options.begin instanceof Function,
+ hasProgressCallback: options.progress instanceof Function,
+ hasResumableCallback: options.resumable instanceof Function,
};
return {
@@ -547,19 +572,17 @@ var RNFS = {
if (options.method && typeof options.method !== 'string') throw new Error('uploadFiles: Invalid value for property `method`');
if (options.begin) {
- subscriptions.push(NativeAppEventEmitter.addListener('UploadBegin-' + jobId, options.begin));
- }
- if (options.beginCallback && options.beginCallback instanceof Function) {
+ subscriptions.push(RNFS_NativeEventEmitter.addListener('UploadBegin', options.begin));
+ } else if (options.beginCallback) {
// Deprecated
- subscriptions.push(NativeAppEventEmitter.addListener('UploadBegin-' + jobId, options.beginCallback));
+ subscriptions.push(RNFS_NativeEventEmitter.addListener('UploadBegin', options.beginCallback));
}
if (options.progress) {
- subscriptions.push(NativeAppEventEmitter.addListener('UploadProgress-' + jobId, options.progress));
- }
- if (options.progressCallback && options.progressCallback instanceof Function) {
+ subscriptions.push(RNFS_NativeEventEmitter.addListener('UploadProgress', options.progress));
+ } else if (options.progressCallback) {
// Deprecated
- subscriptions.push(NativeAppEventEmitter.addListener('UploadProgress-' + jobId, options.progressCallback));
+ subscriptions.push(RNFS_NativeEventEmitter.addListener('UploadProgress', options.progressCallback));
}
var bridgeOptions = {
@@ -569,7 +592,9 @@ var RNFS = {
binaryStreamOnly: options.binaryStreamOnly || false,
headers: options.headers || {},
fields: options.fields || {},
- method: options.method || 'POST'
+ method: options.method || 'POST',
+ hasBeginCallback: options.begin instanceof Function || options.beginCallback instanceof Function,
+ hasProgressCallback: options.progress instanceof Function || options.progressCallback instanceof Function,
};
return {
@@ -581,18 +606,29 @@ var RNFS = {
};
},
- touch(filepath: string, mtime?: Date, ctime?: Date): Promise {
+ touch(filepath: string, mtime?: Date, ctime?: Date, Creation?: boolean): Promise {
if (ctime && !(ctime instanceof Date)) throw new Error('touch: Invalid value for argument `ctime`');
if (mtime && !(mtime instanceof Date)) throw new Error('touch: Invalid value for argument `mtime`');
var ctimeTime = 0;
- if (isIOS) {
+ if (isIOS || isWindows) { // Modified to accommodate Windows
ctimeTime = ctime && ctime.getTime();
}
- return RNFSManager.touch(
- normalizeFilePath(filepath),
- mtime && mtime.getTime(),
- ctimeTime
- );
+ if (isWindows) {
+ var modifyCreationTime = !ctime ? false: true;
+ return RNFSManager.touch(
+ normalizeFilePath(filepath),
+ mtime && mtime.getTime(),
+ ctimeTime,
+ modifyCreationTime
+ );
+ }
+ else {
+ return RNFSManager.touch(
+ normalizeFilePath(filepath),
+ mtime && mtime.getTime(),
+ ctimeTime
+ );
+ }
},
scanFile(path: string): Promise {
@@ -603,12 +639,14 @@ var RNFS = {
CachesDirectoryPath: RNFSManager.RNFSCachesDirectoryPath,
ExternalCachesDirectoryPath: RNFSManager.RNFSExternalCachesDirectoryPath,
DocumentDirectoryPath: RNFSManager.RNFSDocumentDirectoryPath,
+ DownloadDirectoryPath: RNFSManager.RNFSDownloadDirectoryPath,
ExternalDirectoryPath: RNFSManager.RNFSExternalDirectoryPath,
ExternalStorageDirectoryPath: RNFSManager.RNFSExternalStorageDirectoryPath,
TemporaryDirectoryPath: RNFSManager.RNFSTemporaryDirectoryPath,
LibraryDirectoryPath: RNFSManager.RNFSLibraryDirectoryPath,
- PicturesDirectoryPath: RNFSManager.RNFSPicturesDirectoryPath,
- FileProtectionKeys: RNFSManager.RNFSFileProtectionKeys
+ PicturesDirectoryPath: RNFSManager.RNFSPicturesDirectoryPath, // For Windows
+ FileProtectionKeys: RNFSManager.RNFSFileProtectionKeys,
+ RoamingDirectoryPath: RNFSManager.RNFSRoamingDirectoryPath, // For Windows
};
module.exports = RNFS;
diff --git a/IntegrationTests/IntegrationTests.xcodeproj/project.pbxproj b/IntegrationTests/IntegrationTests.xcodeproj/project.pbxproj
index 01f053cc..a4a7b4b8 100644
--- a/IntegrationTests/IntegrationTests.xcodeproj/project.pbxproj
+++ b/IntegrationTests/IntegrationTests.xcodeproj/project.pbxproj
@@ -553,7 +553,7 @@
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
"$(SRCROOT)/../React/**",
);
- IPHONEOS_DEPLOYMENT_TARGET = 7.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
@@ -593,7 +593,7 @@
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
"$(SRCROOT)/../React/**",
);
- IPHONEOS_DEPLOYMENT_TARGET = 7.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
VALIDATE_PRODUCT = YES;
diff --git a/README.md b/README.md
index e0ffde79..b1b75ca3 100644
--- a/README.md
+++ b/README.md
@@ -8,11 +8,24 @@ For RN < 0.57 and/or Gradle < 3 you MUST install react-native-fs at version @2.1
For RN >= 0.57 and/or Gradle >= 3 you MUST install react-native-fs at version >= @2.13.2!
+For RN >= 0.61 please install react-native-fs at version >= @2.16.0!
+
+## Table of Contents
+1. [Changelog](#Changelog)
+1. Usage
+ 1. [iOS](#usage-ios)
+ 1. [Android](#usage-android)
+ 1. [Windows](#usage-windows)
+1. [Examples](#Examples)
+1. [API](#API)
+1. [Background Downloads Tutorial (iOS)](#background-downloads-tutorial-ios)
+1. [Test / Demo App](#test--demo-app)
+
## Changelog
View the changelog [here](https://github.com/itinance/react-native-fs/blob/master/CHANGELOG.md).
-## Usage (iOS)
+## Usage (iOS/macOS)
First you need to install react-native-fs:
@@ -78,7 +91,7 @@ project(':react-native-fs').projectDir = new File(settingsDir, '../node_modules/
...
dependencies {
...
- compile project(':react-native-fs')
+ implementation project(':react-native-fs')
}
```
@@ -252,7 +265,8 @@ var files = [
}
];
-var uploadBegin = (response) => {
+var upload
+= (response) => {
var jobId = response.jobId;
console.log('UPLOAD HAS BEGUN! JobId: ' + jobId);
};
@@ -301,12 +315,16 @@ The following constants are available on the `RNFS` export:
- `CachesDirectoryPath` (`String`) The absolute path to the caches directory
- `ExternalCachesDirectoryPath` (`String`) The absolute path to the external caches directory (android only)
- `DocumentDirectoryPath` (`String`) The absolute path to the document directory
+- `DownloadDirectoryPath` (`String`) The absolute path to the download directory (on android and Windows only)
- `TemporaryDirectoryPath` (`String`) The absolute path to the temporary directory (falls back to Caching-Directory on Android)
- `LibraryDirectoryPath` (`String`) The absolute path to the NSLibraryDirectory (iOS only)
- `ExternalDirectoryPath` (`String`) The absolute path to the external files, shared directory (android only)
- `ExternalStorageDirectoryPath` (`String`) The absolute path to the external storage, shared directory (android only)
+- `PicturesDirectoryPath` (`String`) The absolute path to the pictures directory (Windows only)
+- `RoamingDirectoryPath` (`String`) The absolute path to the roaming directory (Windows only)
+
-IMPORTANT: when using `ExternalStorageDirectoryPath` it's necessary to request permissions (on Android) to read and write on the external storage, here an example: [React Native Offical Doc] (https://facebook.github.io/react-native/docs/permissionsandroid)
+IMPORTANT: when using `ExternalStorageDirectoryPath` it's necessary to request permissions (on Android) to read and write on the external storage, here an example: [React Native Offical Doc](https://facebook.github.io/react-native/docs/permissionsandroid)
### `readDir(dirpath: string): Promise`
@@ -314,15 +332,15 @@ Reads the contents of `path`. This must be an absolute path. Use the above path
The returned promise resolves with an array of objects with the following properties:
-```
+```js
type ReadDirItem = {
ctime: date; // The creation date of the file (iOS only)
mtime: date; // The last modified date of the file
name: string; // The name of the item
path: string; // The absolute path to the item
size: string; // Size in bytes
- isFile: () => boolean; // Is the file just a file?
- isDirectory: () => boolean; // Is the file a directory?
+ isFile: () => boolean; // Is the item just a file?
+ isDirectory: () => boolean; // Is the item a directory?
};
```
@@ -333,7 +351,7 @@ Reads the contents of `dirpath ` in the Android app's assets folder.
The returned promise resolves with an array of objects with the following properties:
-```
+```js
type ReadDirItem = {
name: string; // The name of the item
path: string; // The absolute path to the item
@@ -356,12 +374,12 @@ Node.js style version of `readDir` that returns only the names. Note the lowerca
Stats an item at `filepath`. If the `filepath` is linked to a virtual file, for example Android Content URI, the `originalPath` can be used to find the pointed file path.
The promise resolves with an object with the following properties:
-```
+```js
type StatResult = {
path: // The same as filepath argument
ctime: date; // The creation date of the file
mtime: date; // The last modified date of the file
- size: string; // Size in bytes
+ size: number; // Size in bytes
mode: number; // UNIX file mode
originalFilepath: string; // ANDROID: In case of content uri this is the pointed file path, otherwise is the same as path
isFile: () => boolean; // Is the file just a file?
@@ -391,7 +409,7 @@ Note: Android only.
### `readFileRes(filename:string, encoding?: string): Promise`
-Reads the file named `filename` in the Android app's res folder and return contents. `res/drawable` is used as the parent folder for image files, `res/raw` for everything else. `encoding` can be one of `utf8` (default), `ascii`, `base64`. Use `base64` for reading binary files.
+Reads the file named `filename` in the Android app's `res` folder and return contents. Only the file name (not folder) needs to be specified. The file type will be detected from the extension and automatically located within `res/drawable` (for image files) or `res/raw` (for everything else). `encoding` can be one of `utf8` (default), `ascii`, `base64`. Use `base64` for reading binary files.
Note: Android only.
@@ -411,11 +429,19 @@ Write the `contents` to `filepath` at the given random access position. When `po
Moves the file located at `filepath` to `destPath`. This is more performant than reading and then re-writing the file data because the move is done natively and the data doesn't have to be copied or cross the bridge.
+Note: Overwrites existing file in Windows.
+
+### `copyFolder(srcFolderPath: string, destFolderPath: string): Promise`
+
+Copies the contents located at `srcFolderPath` to `destFolderPath`.
+
+Note: Windows only. This method is recommended when directories need to be copied from one place to another.
+
### `copyFile(filepath: string, destPath: string): Promise`
Copies the file located at `filepath` to `destPath`.
-Note: On Android copyFile will overwrite `destPath` if it already exists. On iOS an error will be thrown if the file already exists.
+Note: On Android and Windows copyFile will overwrite `destPath` if it already exists. On iOS an error will be thrown if the file already exists.
### `copyFileAssets(filepath: string, destPath: string): Promise`
@@ -429,16 +455,52 @@ Copies the file named `filename` in the Android app's res folder and copies it t
Note: Android only. Will overwrite destPath if it already exists.
-### `copyAssetsFileIOS(imageUri: string, destPath: string, width: number, height: number, scale : number = 1.0, compression : number = 1.0, resizeMode : string = 'contain' ): Promise`
+### (iOS only) `copyAssetsFileIOS(imageUri: string, destPath: string, width: number, height: number, scale?: number, compression?: number, resizeMode?: string): Promise`
+
+*Not available on Mac Catalyst.*
+
+Reads an image file from Camera Roll and writes to `destPath`. This method [assumes the image file to be JPEG file](https://github.com/itinance/react-native-fs/blob/f2f8f4a058cd9acfbcac3b8cf1e08fa1e9b09786/RNFSManager.m#L752-L753). This method will download the original from iCloud if necessary.
+
+#### Parameters
+
+##### `imageUri` string (required)
+
+URI of a file in Camera Roll. Can be [either of the following formats](https://github.com/itinance/react-native-fs/blob/f2f8f4a058cd9acfbcac3b8cf1e08fa1e9b09786/RNFSManager.m#L781-L785):
+
+- `ph://CC95F08C-88C3-4012-9D6D-64A413D254B3/L0/001`
+- `assets-library://asset/asset.JPG?id=CC95F08C-88C3-4012-9D6D-64A413D254B3&ext=JPG`
+
+##### `destPath` string (required)
+
+Destination to which the copied file will be saved, e.g. `RNFS.TemporaryDirectoryPath + 'example.jpg'`.
+
+##### `width` number (required)
+
+Copied file's image width will be resized to `width`. [If 0 is provided, width won't be resized.](https://github.com/itinance/react-native-fs/blob/f2f8f4a058cd9acfbcac3b8cf1e08fa1e9b09786/RNFSManager.m#L808)
+
+##### `height` number (required)
-iOS-only: copies a file from camera-roll, that is prefixed with "assets-library://asset/asset.JPG?..."
-to a specific destination. It will download the original from iCloud if necessary.
+Copied file's image height will be resized to `height`. [If 0 is provided, height won't be resized.](https://github.com/itinance/react-native-fs/blob/f2f8f4a058cd9acfbcac3b8cf1e08fa1e9b09786/RNFSManager.m#L808)
-If width and height is > 0, the image will be resized to a specific size and a specific compression rate.
-If scale is below 1, the image will be scaled according to the scale-factor (between 0.0 and 1.0)
-The resizeMode is also considered.
+##### `scale` number (optional)
-*Video-Support:*
+Copied file's image will be scaled proportional to `scale` factor from `width` x `height`. If both `width` and `height` are 0, the image won't scale. Range is [0.0, 1.0] and default is 1.0.
+
+##### `compression` number (optional)
+
+Quality of copied file's image. The value 0.0 represents the maximum compression (or lowest quality) while the value 1.0 represents the least compression (or best quality). Range is [0.0, 1.0] and default is 1.0.
+
+##### `resizeMode` string (optional)
+
+If `resizeMode` is 'contain', copied file's image will be scaled so that its larger dimension fits `width` x `height`. If `resizeMode` is other value than 'contain', the image will be scaled so that it completely fills `width` x `height`. Default is 'contain'. Refer to [PHImageContentMode](https://developer.apple.com/documentation/photokit/phimagecontentmode).
+
+#### Return value
+
+##### `Promise`
+
+Copied file's URI.
+
+#### Video-Support
One can use this method also to create a thumbNail from a video in a specific size.
Currently it is impossible to specify a concrete position, the OS will decide wich
@@ -448,10 +510,11 @@ To copy a video from assets-library and save it as a mp4-file, refer to copyAsse
Further information: https://developer.apple.com/reference/photos/phimagemanager/1616964-requestimageforasset
The promise will on success return the final destination of the file, as it was defined in the destPath-parameter.
-### copyAssetsVideoIOS(videoUri: string, destPath: string): Promise
+### (iOS only) `copyAssetsVideoIOS(videoUri: string, destPath: string): Promise`
+
+*Not available on Mac Catalyst.*
-iOS-only: copies a video from assets-library, that is prefixed with 'assets-library://asset/asset.MOV?...'
-to a specific destination.
+Copies a video from assets-library, that is prefixed with 'assets-library://asset/asset.MOV?...' to a specific destination.
### `unlink(filepath: string): Promise`
@@ -481,7 +544,7 @@ Reads the file at `path` and returns its checksum as determined by `algorithm`,
### `touch(filepath: string, mtime?: Date, ctime?: Date): Promise`
-Sets the modification timestamp `mtime` and creation timestamp `ctime` of the file at `filepath`. Setting `ctime` is only supported on iOS, android always sets both timestamps to `mtime`.
+Sets the modification timestamp `mtime` and creation timestamp `ctime` of the file at `filepath`. Setting `ctime` is supported on iOS and Windows, android always sets both timestamps to `mtime`.
### `mkdir(filepath: string, options?: MkdirOptions): Promise`
@@ -497,7 +560,7 @@ Create a directory at `filepath`. Automatically creates parents and does not thr
### `downloadFile(options: DownloadFileOptions): { jobId: number, promise: Promise }`
-```
+```js
type DownloadFileOptions = {
fromUrl: string; // URL to download file from
toFile: string; // Local filesystem path to save the file to
@@ -505,15 +568,17 @@ type DownloadFileOptions = {
background?: boolean; // Continue the download in the background after the app terminates (iOS only)
discretionary?: boolean; // Allow the OS to control the timing and speed of the download to improve perceived performance (iOS only)
cacheable?: boolean; // Whether the download can be stored in the shared NSURLCache (iOS only, defaults to true)
+ progressInterval?: number;
progressDivider?: number;
- begin?: (res: DownloadBeginCallbackResult) => void;
+ begin?: (res: DownloadBeginCallbackResult) => void; // Note: it is required when progress prop provided
progress?: (res: DownloadProgressCallbackResult) => void;
resumable?: () => void; // only supported on iOS yet
connectionTimeout?: number // only supported on Android yet
readTimeout?: number // supported on Android and iOS
+ backgroundTimeout?: number // Maximum time (in milliseconds) to download an entire resource (iOS only, useful for timing out background downloads)
};
```
-```
+```js
type DownloadResult = {
jobId: number; // The download job ID, required if one wishes to cancel the download. See `stopDownload`.
statusCode: number; // The HTTP status code
@@ -525,7 +590,7 @@ Download file from `options.fromUrl` to `options.toFile`. Will overwrite any pre
If `options.begin` is provided, it will be invoked once upon download starting when headers have been received and passed a single argument with the following properties:
-```
+```js
type DownloadBeginCallbackResult = {
jobId: number; // The download job ID, required if one wishes to cancel the download. See `stopDownload`.
statusCode: number; // The HTTP status code
@@ -536,7 +601,7 @@ type DownloadBeginCallbackResult = {
If `options.progress` is provided, it will be invoked continuously and passed a single argument with the following properties:
-```
+```js
type DownloadProgressCallbackResult = {
jobId: number; // The download job ID, required if one wishes to cancel the download. See `stopDownload`.
contentLength: number; // The total size in bytes of the download resource
@@ -544,6 +609,9 @@ type DownloadProgressCallbackResult = {
};
```
+If `options.progressInterval` is provided, it will return progress events in the maximum frequency of `progressDivider`.
+For example, if `progressInterval` = 100, you will not receive callbacks more often than every 100th millisecond.
+
If `options.progressDivider` is provided, it will return progress events that divided by `progressDivider`.
For example, if `progressDivider` = 10, you will receive only ten callbacks for this values of progress: 0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100
@@ -569,7 +637,7 @@ Check if the the download job with this ID is resumable with `resumeDownload()`.
Example:
-```
+```js
if (await RNFS.isResumable(jobId) {
RNFS.resumeDownload(jobId)
}
@@ -585,7 +653,7 @@ Read more about background downloads in the [Background Downloads Tutorial (iOS)
`options` (`Object`) - An object containing named parameters
-```
+```js
type UploadFileOptions = {
toUrl: string; // URL to upload file to
binaryStreamOnly?: boolean// Allow for binary data stream for file to be uploaded without extra headers, Default is 'false'
@@ -598,7 +666,7 @@ type UploadFileOptions = {
};
```
-```
+```js
type UploadResult = {
jobId: number; // The upload job ID, required if one wishes to cancel the upload. See `stopUpload`.
statusCode: number; // The HTTP status code
@@ -609,7 +677,7 @@ type UploadResult = {
Each file should have the following structure:
-```
+```js
type UploadFileItem = {
name: string; // Name of the file, if not defined then filename is used
filename: string; // Name of file
@@ -620,7 +688,7 @@ type UploadFileItem = {
If `options.begin` is provided, it will be invoked once upon upload has begun:
-```
+```js
type UploadBeginCallbackResult = {
jobId: number; // The upload job ID, required if one wishes to cancel the upload. See `stopUpload`.
};
@@ -628,7 +696,7 @@ type UploadBeginCallbackResult = {
If `options.progress` is provided, it will be invoked continuously and passed a single object with the following properties:
-```
+```js
type UploadProgressCallbackResult = {
jobId: number; // The upload job ID, required if one wishes to cancel the upload. See `stopUpload`.
totalBytesExpectedToSend: number; // The total number of bytes that will be sent to the server
@@ -646,7 +714,7 @@ Abort the current upload job with this ID.
Returns an object with the following properties:
-```
+```js
type FSInfoResult = {
totalSpace: number; // The total amount of storage space on the device (in bytes).
freeSpace: number; // The amount of available storage space on the device (in bytes).
@@ -678,7 +746,7 @@ Background downloads in iOS require a bit of a setup.
First, in your `AppDelegate.m` file add the following:
-```
+```js
#import
...
diff --git a/RNFS.podspec b/RNFS.podspec
index af731d96..ce27d0ac 100644
--- a/RNFS.podspec
+++ b/RNFS.podspec
@@ -10,12 +10,13 @@ Pod::Spec.new do |s|
s.license = pjson["license"]
s.author = { "Johannes Lumpe" => "johannes@lum.pe" }
- s.ios.deployment_target = '7.0'
+ s.ios.deployment_target = '8.0'
s.tvos.deployment_target = '9.2'
+ s.osx.deployment_target = '10.10'
s.source = { :git => "https://github.com/itinance/react-native-fs", :tag => "v#{s.version}" }
s.source_files = '*.{h,m}'
s.preserve_paths = "**/*.js"
- s.dependency 'React'
-end
\ No newline at end of file
+ s.dependency 'React-Core'
+end
diff --git a/RNFS.xcodeproj/project.pbxproj b/RNFS.xcodeproj/project.pbxproj
index 5f9a197f..879b4f43 100644
--- a/RNFS.xcodeproj/project.pbxproj
+++ b/RNFS.xcodeproj/project.pbxproj
@@ -261,7 +261,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 7.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
@@ -297,7 +297,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 7.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
VALIDATE_PRODUCT = YES;
diff --git a/RNFSManager.h b/RNFSManager.h
index b0189ed5..8ef10e40 100644
--- a/RNFSManager.h
+++ b/RNFSManager.h
@@ -7,11 +7,12 @@
//
#import
+#import
#import
-typedef void (^CompletionHandler)();
+typedef void (^CompletionHandler)(void);
-@interface RNFSManager : NSObject
+@interface RNFSManager : RCTEventEmitter
+(void)setCompletionHandlerForIdentifier: (NSString *)identifier completionHandler: (CompletionHandler)completionHandler;
diff --git a/RNFSManager.m b/RNFSManager.m
index 68a0d810..5ddd9417 100755
--- a/RNFSManager.m
+++ b/RNFSManager.m
@@ -14,7 +14,12 @@
#import
#import
+
+#if __has_include()
#import
+#else
+#import
+#endif
#import
#import
@@ -32,8 +37,6 @@ @implementation RNFSManager
static NSMutableDictionary *completionHandlers;
-@synthesize bridge = _bridge;
-
RCT_EXPORT_MODULE();
- (dispatch_queue_t)methodQueue
@@ -54,26 +57,27 @@ + (BOOL)requiresMainQueueSetup
NSError *error = nil;
NSArray *contents = [fileManager contentsOfDirectoryAtPath:dirPath error:&error];
-
- contents = [contents rnfs_mapObjectsUsingBlock:^id(NSString *obj, NSUInteger idx) {
+ NSMutableArray *tagetContents = [[NSMutableArray alloc] init];
+ for (NSString *obj in contents) {
NSString *path = [dirPath stringByAppendingPathComponent:obj];
NSDictionary *attributes = [fileManager attributesOfItemAtPath:path error:nil];
-
- return @{
- @"ctime": [self dateToTimeIntervalNumber:(NSDate *)[attributes objectForKey:NSFileCreationDate]],
- @"mtime": [self dateToTimeIntervalNumber:(NSDate *)[attributes objectForKey:NSFileModificationDate]],
- @"name": obj,
- @"path": path,
- @"size": [attributes objectForKey:NSFileSize],
- @"type": [attributes objectForKey:NSFileType]
- };
- }];
+ if(attributes != nil) {
+ [tagetContents addObject:@{
+ @"ctime": [self dateToTimeIntervalNumber:(NSDate *)[attributes objectForKey:NSFileCreationDate]],
+ @"mtime": [self dateToTimeIntervalNumber:(NSDate *)[attributes objectForKey:NSFileModificationDate]],
+ @"name": obj,
+ @"path": path,
+ @"size": [attributes objectForKey:NSFileSize],
+ @"type": [attributes objectForKey:NSFileType]
+ }];
+ }
+ }
if (error) {
return [self reject:reject withError:error];
}
- resolve(contents);
+ resolve(tagetContents);
}
RCT_EXPORT_METHOD(exists:(NSString *)filepath
@@ -157,8 +161,15 @@ + (BOOL)requiresMainQueueSetup
[fH writeData:data];
return resolve(nil);
- } @catch (NSException *e) {
- return [self reject:reject withError:e];
+ } @catch (NSException *exception) {
+ NSMutableDictionary * info = [NSMutableDictionary dictionary];
+ [info setValue:exception.name forKey:@"ExceptionName"];
+ [info setValue:exception.reason forKey:@"ExceptionReason"];
+ [info setValue:exception.callStackReturnAddresses forKey:@"ExceptionCallStackReturnAddresses"];
+ [info setValue:exception.callStackSymbols forKey:@"ExceptionCallStackSymbols"];
+ [info setValue:exception.userInfo forKey:@"ExceptionUserInfo"];
+ NSError *err = [NSError errorWithDomain:@"RNFS" code:0 userInfo:info];
+ return [self reject:reject withError:err];
}
}
@@ -452,6 +463,11 @@ + (BOOL)requiresMainQueueSetup
resolve(nil);
}
+- (NSArray *)supportedEvents
+{
+ return @[@"UploadBegin",@"UploadProgress",@"DownloadBegin",@"DownloadProgress",@"DownloadResumable"];
+}
+
RCT_EXPORT_METHOD(downloadFile:(NSDictionary *)options
resolver:(RCTPromiseResolveBlock)resolve
rejecter:(RCTPromiseRejectBlock)reject)
@@ -469,10 +485,17 @@ + (BOOL)requiresMainQueueSetup
params.discretionary = [discretionary boolValue];
NSNumber* cacheable = options[@"cacheable"];
params.cacheable = cacheable ? [cacheable boolValue] : YES;
+ NSNumber* progressInterval= options[@"progressInterval"];
+ params.progressInterval = progressInterval;
NSNumber* progressDivider = options[@"progressDivider"];
params.progressDivider = progressDivider;
NSNumber* readTimeout = options[@"readTimeout"];
params.readTimeout = readTimeout;
+ NSNumber* backgroundTimeout = options[@"backgroundTimeout"];
+ params.backgroundTimeout = backgroundTimeout;
+ bool hasBeginCallback = [options[@"hasBeginCallback"] boolValue];
+ bool hasProgressCallback = [options[@"hasProgressCallback"] boolValue];
+ bool hasResumableCallback = [options[@"hasResumableCallback"] boolValue];
__block BOOL callbackFired = NO;
@@ -500,24 +523,32 @@ + (BOOL)requiresMainQueueSetup
return [self reject:reject withError:error];
};
- params.beginCallback = ^(NSNumber* statusCode, NSNumber* contentLength, NSDictionary* headers) {
- [self.bridge.eventDispatcher sendAppEventWithName:[NSString stringWithFormat:@"DownloadBegin-%@", jobId]
- body:@{@"jobId": jobId,
- @"statusCode": statusCode,
- @"contentLength": contentLength,
- @"headers": headers ?: [NSNull null]}];
- };
+ if (hasBeginCallback) {
+ params.beginCallback = ^(NSNumber* statusCode, NSNumber* contentLength, NSDictionary* headers) {
+ if (self.bridge != nil)
+ [self sendEventWithName:@"DownloadBegin" body:@{@"jobId": jobId,
+ @"statusCode": statusCode,
+ @"contentLength": contentLength,
+ @"headers": headers ?: [NSNull null]}];
+ };
+ }
- params.progressCallback = ^(NSNumber* contentLength, NSNumber* bytesWritten) {
- [self.bridge.eventDispatcher sendAppEventWithName:[NSString stringWithFormat:@"DownloadProgress-%@", jobId]
- body:@{@"jobId": jobId,
- @"contentLength": contentLength,
- @"bytesWritten": bytesWritten}];
- };
-
+ if (hasProgressCallback) {
+ params.progressCallback = ^(NSNumber* contentLength, NSNumber* bytesWritten) {
+ if (self.bridge != nil)
+ [self sendEventWithName:@"DownloadProgress"
+ body:@{@"jobId": jobId,
+ @"contentLength": contentLength,
+ @"bytesWritten": bytesWritten}];
+ };
+ }
+
+ if (hasResumableCallback) {
params.resumableCallback = ^() {
- [self.bridge.eventDispatcher sendAppEventWithName:[NSString stringWithFormat:@"DownloadResumable-%@", jobId] body:nil];
+ if (self.bridge != nil)
+ [self sendEventWithName:@"DownloadResumable" body:@{@"jobId": jobId}];
};
+ }
if (!self.downloaders) self.downloaders = [[NSMutableDictionary alloc] init];
@@ -544,7 +575,7 @@ + (BOOL)requiresMainQueueSetup
RCT_EXPORT_METHOD(resumeDownload:(nonnull NSNumber *)jobId)
{
RNFSDownloader* downloader = [self.downloaders objectForKey:[jobId stringValue]];
-
+
if (downloader != nil) {
[downloader resumeDownload];
}
@@ -556,7 +587,7 @@ + (BOOL)requiresMainQueueSetup
)
{
RNFSDownloader* downloader = [self.downloaders objectForKey:[jobId stringValue]];
-
+
if (downloader != nil) {
resolve([NSNumber numberWithBool:[downloader isResumable]]);
} else {
@@ -588,13 +619,15 @@ + (BOOL)requiresMainQueueSetup
NSNumber* jobId = options[@"jobId"];
params.toUrl = options[@"toUrl"];
params.files = options[@"files"];
- params.binaryStreamOnly = options[@"binaryStreamOnly"];
+ params.binaryStreamOnly = [[options objectForKey:@"binaryStreamOnly"] boolValue];
NSDictionary* headers = options[@"headers"];
NSDictionary* fields = options[@"fields"];
NSString* method = options[@"method"];
params.headers = headers;
params.fields = fields;
params.method = method;
+ bool hasBeginCallback = [options[@"hasBeginCallback"] boolValue];
+ bool hasProgressCallback = [options[@"hasProgressCallback"] boolValue];
params.completeCallback = ^(NSString* body, NSURLResponse *resp) {
[self.uploaders removeObjectForKey:[jobId stringValue]];
@@ -613,17 +646,23 @@ + (BOOL)requiresMainQueueSetup
return [self reject:reject withError:error];
};
- params.beginCallback = ^() {
- [self.bridge.eventDispatcher sendAppEventWithName:[NSString stringWithFormat:@"UploadBegin-%@", jobId]
- body:@{@"jobId": jobId}];
- };
+ if (hasBeginCallback) {
+ params.beginCallback = ^() {
+ if (self.bridge != nil)
+ [self sendEventWithName:@"UploadBegin"
+ body:@{@"jobId": jobId}];
+ };
+ }
- params.progressCallback = ^(NSNumber* totalBytesExpectedToSend, NSNumber* totalBytesSent) {
- [self.bridge.eventDispatcher sendAppEventWithName:[NSString stringWithFormat:@"UploadProgress-%@", jobId]
- body:@{@"jobId": jobId,
- @"totalBytesExpectedToSend": totalBytesExpectedToSend,
- @"totalBytesSent": totalBytesSent}];
- };
+ if (hasProgressCallback) {
+ params.progressCallback = ^(NSNumber* totalBytesExpectedToSend, NSNumber* totalBytesSent) {
+ if (self.bridge != nil)
+ [self sendEventWithName:@"UploadProgress"
+ body:@{@"jobId": jobId,
+ @"totalBytesExpectedToSend": totalBytesExpectedToSend,
+ @"totalBytesSent": totalBytesSent}];
+ };
+ }
if (!self.uploaders) self.uploaders = [[NSMutableDictionary alloc] init];
@@ -708,6 +747,8 @@ + (BOOL)requiresMainQueueSetup
}
+// [PHAsset fetchAssetsWithALAssetURLs] is deprecated and not supported in Mac Catalyst
+#if !TARGET_OS_UIKITFORMAC && !TARGET_OS_OSX
/**
* iOS Only: copy images from the assets-library (camera-roll) to a specific path, asuming
* JPEG-Images.
@@ -737,7 +778,12 @@ + (BOOL)requiresMainQueueSetup
CGSize size = CGSizeMake(width, height);
NSURL* url = [NSURL URLWithString:imageUri];
- PHFetchResult *results = [PHAsset fetchAssetsWithALAssetURLs:@[url] options:nil];
+ PHFetchResult *results = nil;
+ if ([url.scheme isEqualToString:@"ph"]) {
+ results = [PHAsset fetchAssetsWithLocalIdentifiers:@[[imageUri substringFromIndex: 5]] options:nil];
+ } else {
+ results = [PHAsset fetchAssetsWithALAssetURLs:@[url] options:nil];
+ }
if (results.count == 0) {
NSString *errorText = [NSString stringWithFormat:@"Failed to fetch PHAsset with local identifier %@ with no error message.", imageUri];
@@ -767,7 +813,7 @@ + (BOOL)requiresMainQueueSetup
imageOptions.resizeMode = PHImageRequestOptionsResizeModeNone;
} else {
targetSize = CGSizeApplyAffineTransform(size, CGAffineTransformMakeScale(scale, scale));
- imageOptions.resizeMode = PHImageRequestOptionsResizeModeFast;
+ imageOptions.resizeMode = PHImageRequestOptionsResizeModeExact;
}
PHImageContentMode contentMode = PHImageContentModeAspectFill;
@@ -796,7 +842,10 @@ + (BOOL)requiresMainQueueSetup
}
}];
}
+#endif
+// [PHAsset fetchAssetsWithALAssetURLs] is deprecated and not supported in Mac Catalyst
+#if !TARGET_OS_UIKITFORMAC && !TARGET_OS_OSX
/**
* iOS Only: copy videos from the assets-library (camera-roll) to a specific path as mp4-file.
*
@@ -808,17 +857,24 @@ + (BOOL)requiresMainQueueSetup
rejecter: (RCTPromiseRejectBlock) reject)
{
NSURL* url = [NSURL URLWithString:imageUri];
- __block NSURL* videoURL = [NSURL URLWithString:destination];
+ //unused?
+ //__block NSURL* videoURL = [NSURL URLWithString:destination];
__block NSError *error = nil;
-
- PHFetchResult *phAssetFetchResult = [PHAsset fetchAssetsWithALAssetURLs:@[url] options:nil];
+
+ PHFetchResult *phAssetFetchResult = nil;
+ if ([url.scheme isEqualToString:@"ph"]) {
+ phAssetFetchResult = [PHAsset fetchAssetsWithLocalIdentifiers:@[[imageUri substringFromIndex: 5]] options:nil];
+ } else {
+ phAssetFetchResult = [PHAsset fetchAssetsWithALAssetURLs:@[url] options:nil];
+ }
+
PHAsset *phAsset = [phAssetFetchResult firstObject];
-
+
PHVideoRequestOptions *options = [[PHVideoRequestOptions alloc] init];
options.networkAccessAllowed = YES;
options.version = PHVideoRequestOptionsVersionOriginal;
options.deliveryMode = PHVideoRequestOptionsDeliveryModeAutomatic;
-
+
dispatch_group_t group = dispatch_group_create();
dispatch_group_enter(group);
@@ -827,10 +883,16 @@ + (BOOL)requiresMainQueueSetup
if ([asset isKindOfClass:[AVURLAsset class]]) {
NSURL *url = [(AVURLAsset *)asset URL];
NSLog(@"Final URL %@",url);
- NSData *videoData = [NSData dataWithContentsOfURL:url];
-
- BOOL writeResult = [videoData writeToFile:destination options:NSDataWritingAtomic error:&error];
-
+ BOOL writeResult = false;
+
+ if (@available(iOS 9.0, *)) {
+ NSURL *destinationUrl = [NSURL fileURLWithPath:destination relativeToURL:nil];
+ writeResult = [[NSFileManager defaultManager] copyItemAtURL:url toURL:destinationUrl error:&error];
+ } else {
+ NSData *videoData = [NSData dataWithContentsOfURL:url];
+ writeResult = [videoData writeToFile:destination options:NSDataWritingAtomic error:&error];
+ }
+
if(writeResult) {
NSLog(@"video success");
}
@@ -849,6 +911,7 @@ + (BOOL)requiresMainQueueSetup
return resolve(destination);
}
+#endif
RCT_EXPORT_METHOD(touch:(NSString*)filepath
mtime:(NSDate *)mtime
diff --git a/Uploader.h b/Uploader.h
index aed8392e..e75cef03 100644
--- a/Uploader.h
+++ b/Uploader.h
@@ -1,5 +1,8 @@
#import
+
+#if !TARGET_OS_OSX
#import
+#endif
typedef void (^UploadCompleteCallback)(NSString*, NSURLResponse *);
typedef void (^UploadErrorCallback)(NSError*);
diff --git a/Uploader.m b/Uploader.m
index d0dd2a14..9463c81d 100644
--- a/Uploader.m
+++ b/Uploader.m
@@ -86,7 +86,7 @@ - (void)uploadFiles:(RNFSUploadParams*)params
}
[reqBody appendData:[[NSString stringWithFormat:@"Content-Length: %ld\r\n\r\n", (long)[fileData length]] dataUsingEncoding:NSUTF8StringEncoding]];
}
-
+
[reqBody appendData:fileData];
if (!binaryStreamOnly) {
[reqBody appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
@@ -106,10 +106,13 @@ - (void)uploadFiles:(RNFSUploadParams*)params
NSURLSession *session = [NSURLSession sessionWithConfiguration:sessionConfiguration delegate:(id)self delegateQueue:[NSOperationQueue mainQueue]];
_task = [session dataTaskWithRequest:req completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
NSString * str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
- return _params.completeCallback(str, response);
+ return self->_params.completeCallback(str, response);
}];
[_task resume];
- _params.beginCallback();
+ [session finishTasksAndInvalidate];
+ if (_params.beginCallback) {
+ _params.beginCallback();
+ }
}
- (NSString *)generateBoundaryString
@@ -139,7 +142,9 @@ - (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didComp
- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didSendBodyData:(int64_t)bytesSent totalBytesSent:(int64_t)totalBytesSent totalBytesExpectedToSend:(NSInteger)totalBytesExpectedToSend
{
- return _params.progressCallback([NSNumber numberWithLongLong:totalBytesExpectedToSend], [NSNumber numberWithLongLong:totalBytesSent]);
+ if (_params.progressCallback) {
+ _params.progressCallback([NSNumber numberWithLongLong:totalBytesExpectedToSend], [NSNumber numberWithLongLong:totalBytesSent]);
+ }
}
- (void)stopUpload
diff --git a/android/build.gradle b/android/build.gradle
index 47ae512b..ddef857f 100644
--- a/android/build.gradle
+++ b/android/build.gradle
@@ -4,7 +4,7 @@ def safeExtGet(prop, fallback) {
buildscript {
repositories {
- jcenter()
+ mavenCentral()
}
dependencies {
@@ -19,7 +19,7 @@ android {
buildToolsVersion safeExtGet('buildToolsVersion', '26.0.3')
defaultConfig {
- minSdkVersion safeExtGet('minSdkVersion', 16)
+ minSdkVersion safeExtGet('minSdkVersion', 19)
targetSdkVersion safeExtGet('targetSdkVersion', 26)
versionCode 1
versionName "1.0"
diff --git a/android/src/main/java/com/rnfs/DownloadParams.java b/android/src/main/java/com/rnfs/DownloadParams.java
index 32a81aac..18658c39 100644
--- a/android/src/main/java/com/rnfs/DownloadParams.java
+++ b/android/src/main/java/com/rnfs/DownloadParams.java
@@ -22,6 +22,7 @@ public interface OnDownloadProgress {
public URL src;
public File dest;
public ReadableMap headers;
+ public int progressInterval;
public float progressDivider;
public int readTimeout;
public int connectionTimeout;
diff --git a/android/src/main/java/com/rnfs/Downloader.java b/android/src/main/java/com/rnfs/Downloader.java
index 3764bd17..4da698eb 100644
--- a/android/src/main/java/com/rnfs/Downloader.java
+++ b/android/src/main/java/com/rnfs/Downloader.java
@@ -1,14 +1,10 @@
package com.rnfs;
-import java.io.File;
import java.io.FileOutputStream;
-import java.io.FileInputStream;
import java.io.BufferedInputStream;
import java.io.InputStream;
import java.io.OutputStream;
-import java.io.IOException;
import java.net.URL;
-import java.net.URLConnection;
import java.net.HttpURLConnection;
import java.util.*;
import java.util.concurrent.atomic.AtomicBoolean;
@@ -90,7 +86,7 @@ private void download(DownloadParams param, DownloadResult res) throws Exception
if(statusCode >= 200 && statusCode < 300) {
Map> headers = connection.getHeaderFields();
- Map headersFlat = new HashMap();
+ Map headersFlat = new HashMap<>();
for (Map.Entry> entry : headers.entrySet()) {
String headerKey = entry.getKey();
@@ -101,7 +97,9 @@ private void download(DownloadParams param, DownloadResult res) throws Exception
}
}
- mParam.onDownloadBegin.onDownloadBegin(statusCode, lengthOfFile, headersFlat);
+ if (mParam.onDownloadBegin != null) {
+ mParam.onDownloadBegin.onDownloadBegin(statusCode, lengthOfFile, headersFlat);
+ }
input = new BufferedInputStream(connection.getInputStream(), 8 * 1024);
output = new FileOutputStream(param.dest);
@@ -110,23 +108,35 @@ private void download(DownloadParams param, DownloadResult res) throws Exception
long total = 0;
int count;
double lastProgressValue = 0;
+ long lastProgressEmitTimestamp = 0;
+ boolean hasProgressCallback = mParam.onDownloadProgress != null;
while ((count = input.read(data)) != -1) {
if (mAbort.get()) throw new Exception("Download has been aborted");
total += count;
- if (param.progressDivider <= 0) {
- publishProgress(new long[]{lengthOfFile, total});
- } else {
- double progress = Math.round(((double) total * 100) / lengthOfFile);
- if (progress % param.progressDivider == 0) {
- if ((progress != lastProgressValue) || (total == lengthOfFile)) {
- Log.d("Downloader", "EMIT: " + String.valueOf(progress) + ", TOTAL:" + String.valueOf(total));
- lastProgressValue = progress;
+
+ if (hasProgressCallback) {
+ if (param.progressInterval > 0) {
+ long timestamp = System.currentTimeMillis();
+ if (timestamp - lastProgressEmitTimestamp > param.progressInterval) {
+ lastProgressEmitTimestamp = timestamp;
publishProgress(new long[]{lengthOfFile, total});
}
+ } else if (param.progressDivider <= 0) {
+ publishProgress(new long[]{lengthOfFile, total});
+ } else {
+ double progress = Math.round(((double) total * 100) / lengthOfFile);
+ if (progress % param.progressDivider == 0) {
+ if ((progress != lastProgressValue) || (total == lengthOfFile)) {
+ Log.d("Downloader", "EMIT: " + String.valueOf(progress) + ", TOTAL:" + String.valueOf(total));
+ lastProgressValue = progress;
+ publishProgress(new long[]{lengthOfFile, total});
+ }
+ }
}
}
+
output.write(data, 0, count);
}
@@ -134,7 +144,7 @@ private void download(DownloadParams param, DownloadResult res) throws Exception
res.bytesWritten = total;
}
res.statusCode = statusCode;
- } finally {
+ } finally {
if (output != null) output.close();
if (input != null) input.close();
if (connection != null) connection.disconnect();
@@ -155,7 +165,9 @@ protected void stop() {
@Override
protected void onProgressUpdate(long[]... values) {
super.onProgressUpdate(values);
- mParam.onDownloadProgress.onDownloadProgress(values[0][0], values[0][1]);
+ if (mParam.onDownloadProgress != null) {
+ mParam.onDownloadProgress.onDownloadProgress(values[0][0], values[0][1]);
+ }
}
protected void onPostExecute(Exception ex) {
diff --git a/android/src/main/java/com/rnfs/RNFSManager.java b/android/src/main/java/com/rnfs/RNFSManager.java
index 015dae3a..351ac066 100755
--- a/android/src/main/java/com/rnfs/RNFSManager.java
+++ b/android/src/main/java/com/rnfs/RNFSManager.java
@@ -11,7 +11,6 @@
import android.util.Base64;
import android.util.SparseArray;
import android.media.MediaScannerConnection;
-import android.net.Uri;
import com.facebook.react.bridge.Arguments;
import com.facebook.react.bridge.Promise;
@@ -49,6 +48,7 @@ public class RNFSManager extends ReactContextBaseJavaModule {
private static final String RNFSExternalDirectoryPath = "RNFSExternalDirectoryPath";
private static final String RNFSExternalStorageDirectoryPath = "RNFSExternalStorageDirectoryPath";
private static final String RNFSPicturesDirectoryPath = "RNFSPicturesDirectoryPath";
+ private static final String RNFSDownloadDirectoryPath = "RNFSDownloadDirectoryPath";
private static final String RNFSTemporaryDirectoryPath = "RNFSTemporaryDirectoryPath";
private static final String RNFSCachesDirectoryPath = "RNFSCachesDirectoryPath";
private static final String RNFSExternalCachesDirectoryPath = "RNFSExternalCachesDirectoryPath";
@@ -57,8 +57,8 @@ public class RNFSManager extends ReactContextBaseJavaModule {
private static final String RNFSFileTypeRegular = "RNFSFileTypeRegular";
private static final String RNFSFileTypeDirectory = "RNFSFileTypeDirectory";
- private SparseArray downloaders = new SparseArray();
- private SparseArray uploaders = new SparseArray();
+ private SparseArray downloaders = new SparseArray<>();
+ private SparseArray uploaders = new SparseArray<>();
private ReactApplicationContext reactContext;
@@ -69,7 +69,7 @@ public RNFSManager(ReactApplicationContext reactContext) {
@Override
public String getName() {
- return this.MODULE_NAME;
+ return MODULE_NAME;
}
private Uri getFileUri(String filepath, boolean isDirectoryAllowed) throws IORejectionException {
@@ -94,6 +94,7 @@ private String getOriginalFilepath(String filepath, boolean isDirectoryAllowed)
if (cursor.moveToFirst()) {
originalFilepath = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA));
}
+ cursor.close();
} catch (IllegalArgumentException ignored) {
}
}
@@ -114,11 +115,15 @@ private InputStream getInputStream(String filepath) throws IORejectionException
return stream;
}
+ private String getWriteAccessByAPILevel() {
+ return android.os.Build.VERSION.SDK_INT <= android.os.Build.VERSION_CODES.P ? "w" : "rwt";
+ }
+
private OutputStream getOutputStream(String filepath, boolean append) throws IORejectionException {
Uri uri = getFileUri(filepath, false);
OutputStream stream;
try {
- stream = reactContext.getContentResolver().openOutputStream(uri, append ? "wa" : "w");
+ stream = reactContext.getContentResolver().openOutputStream(uri, append ? "wa" : getWriteAccessByAPILevel());
} catch (FileNotFoundException ex) {
throw new IORejectionException("ENOENT", "ENOENT: " + ex.getMessage() + ", open '" + filepath + "'");
}
@@ -288,7 +293,7 @@ public void readFileRes(String filename, Promise promise) {
byte[] buffer = new byte[stream.available()];
stream.read(buffer);
String base64Content = Base64.encodeToString(buffer, Base64.NO_WRAP);
- promise.resolve(base64Content);;
+ promise.resolve(base64Content);
} catch (Exception ex) {
ex.printStackTrace();
reject(promise, filename, ex);
@@ -476,7 +481,7 @@ public void readDirAssets(String directory, Promise promise) {
}
} catch (IOException ex) {
//.. ah.. is a directory or a compressed file?
- isDirectory = ex.getMessage().indexOf("compressed") == -1;
+ isDirectory = !ex.getMessage().contains("compressed");
}
fileMap.putInt("size", length);
fileMap.putInt("type", isDirectory ? 1 : 0); // if 0, probably a folder..
@@ -698,15 +703,19 @@ public void downloadFile(final ReadableMap options, final Promise promise) {
URL url = new URL(options.getString("fromUrl"));
final int jobId = options.getInt("jobId");
ReadableMap headers = options.getMap("headers");
+ int progressInterval = options.getInt("progressInterval");
int progressDivider = options.getInt("progressDivider");
int readTimeout = options.getInt("readTimeout");
int connectionTimeout = options.getInt("connectionTimeout");
+ boolean hasBeginCallback = options.getBoolean("hasBeginCallback");
+ boolean hasProgressCallback = options.getBoolean("hasProgressCallback");
DownloadParams params = new DownloadParams();
params.src = url;
params.dest = file;
params.headers = headers;
+ params.progressInterval = progressInterval;
params.progressDivider = progressDivider;
params.readTimeout = readTimeout;
params.connectionTimeout = connectionTimeout;
@@ -727,36 +736,40 @@ public void onTaskCompleted(DownloadResult res) {
}
};
- params.onDownloadBegin = new DownloadParams.OnDownloadBegin() {
- public void onDownloadBegin(int statusCode, long contentLength, Map headers) {
- WritableMap headersMap = Arguments.createMap();
+ if (hasBeginCallback) {
+ params.onDownloadBegin = new DownloadParams.OnDownloadBegin() {
+ public void onDownloadBegin(int statusCode, long contentLength, Map headers) {
+ WritableMap headersMap = Arguments.createMap();
- for (Map.Entry entry : headers.entrySet()) {
- headersMap.putString(entry.getKey(), entry.getValue());
- }
+ for (Map.Entry entry : headers.entrySet()) {
+ headersMap.putString(entry.getKey(), entry.getValue());
+ }
- WritableMap data = Arguments.createMap();
+ WritableMap data = Arguments.createMap();
- data.putInt("jobId", jobId);
- data.putInt("statusCode", statusCode);
- data.putDouble("contentLength", (double)contentLength);
- data.putMap("headers", headersMap);
+ data.putInt("jobId", jobId);
+ data.putInt("statusCode", statusCode);
+ data.putDouble("contentLength", (double)contentLength);
+ data.putMap("headers", headersMap);
- sendEvent(getReactApplicationContext(), "DownloadBegin-" + jobId, data);
- }
- };
+ sendEvent(getReactApplicationContext(), "DownloadBegin", data);
+ }
+ };
+ }
- params.onDownloadProgress = new DownloadParams.OnDownloadProgress() {
- public void onDownloadProgress(long contentLength, long bytesWritten) {
- WritableMap data = Arguments.createMap();
+ if (hasProgressCallback) {
+ params.onDownloadProgress = new DownloadParams.OnDownloadProgress() {
+ public void onDownloadProgress(long contentLength, long bytesWritten) {
+ WritableMap data = Arguments.createMap();
- data.putInt("jobId", jobId);
- data.putDouble("contentLength", (double)contentLength);
- data.putDouble("bytesWritten", (double)bytesWritten);
+ data.putInt("jobId", jobId);
+ data.putDouble("contentLength", (double)contentLength);
+ data.putDouble("bytesWritten", (double)bytesWritten);
- sendEvent(getReactApplicationContext(), "DownloadProgress-" + jobId, data);
- }
- };
+ sendEvent(getReactApplicationContext(), "DownloadProgress", data);
+ }
+ };
+ }
Downloader downloader = new Downloader();
@@ -788,6 +801,9 @@ public void uploadFiles(final ReadableMap options, final Promise promise) {
ReadableMap fields = options.getMap("fields");
String method = options.getString("method");
boolean binaryStreamOnly = options.getBoolean("binaryStreamOnly");
+ boolean hasBeginCallback = options.getBoolean("hasBeginCallback");
+ boolean hasProgressCallback = options.getBoolean("hasProgressCallback");
+
ArrayList fileList = new ArrayList<>();
UploadParams params = new UploadParams();
for(int i =0;i getConstants() {
constants.put(RNFSTemporaryDirectoryPath, this.getReactApplicationContext().getCacheDir().getAbsolutePath());
constants.put(RNFSPicturesDirectoryPath, Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).getAbsolutePath());
constants.put(RNFSCachesDirectoryPath, this.getReactApplicationContext().getCacheDir().getAbsolutePath());
+ constants.put(RNFSDownloadDirectoryPath, Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getAbsolutePath());
constants.put(RNFSFileTypeRegular, 0);
constants.put(RNFSFileTypeDirectory, 1);
diff --git a/android/src/main/java/com/rnfs/Uploader.java b/android/src/main/java/com/rnfs/Uploader.java
index c63713cd..5b2e5941 100644
--- a/android/src/main/java/com/rnfs/Uploader.java
+++ b/android/src/main/java/com/rnfs/Uploader.java
@@ -16,6 +16,9 @@
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
+import java.nio.channels.Channels;
+import java.nio.channels.FileChannel;
+import java.nio.channels.WritableByteChannel;
import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicBoolean;
@@ -114,7 +117,9 @@ private void upload(UploadParams params, UploadResult result) throws Exception {
fileCount++;
}
fileCount = 0;
- mParams.onUploadBegin.onUploadBegin();
+ if (mParams.onUploadBegin != null) {
+ mParams.onUploadBegin.onUploadBegin();
+ }
if (!binaryStreamOnly) {
long requestLength = totalFileLength;
requestLength += stringData.length() + files.length * crlf.length();
@@ -124,38 +129,49 @@ private void upload(UploadParams params, UploadResult result) throws Exception {
connection.connect();
request = new DataOutputStream(connection.getOutputStream());
+ WritableByteChannel requestChannel = Channels.newChannel(request);
+
if (!binaryStreamOnly) {
request.writeBytes(metaData);
}
byteSentTotal = 0;
- Runtime run = Runtime.getRuntime();
-
+
for (ReadableMap map : params.files) {
if (!binaryStreamOnly) {
request.writeBytes(fileHeader[fileCount]);
}
+
File file = new File(map.getString("filepath"));
- int fileLength = (int) file.length();
- int bytes_read = 0;
- BufferedInputStream bufInput = new BufferedInputStream(new FileInputStream(file));
- int buffer_size =(int) Math.ceil(fileLength / 100.f);
- if(buffer_size > run.freeMemory() / 10.f) {
- buffer_size = (int) Math.ceil(run.freeMemory() / 10.f);
- }
- byte[] buffer = new byte[buffer_size];
- while ((bytes_read = bufInput.read(buffer)) != -1) {
- request.write(buffer, 0, bytes_read);
- byteSentTotal += bytes_read;
- mParams.onUploadProgress.onUploadProgress((int) totalFileLength, byteSentTotal);
+
+ long fileLength = file.length();
+ long bufferSize = (long) Math.ceil(fileLength / 100.f);
+ long bytesRead = 0;
+
+ FileInputStream fileStream = new FileInputStream(file);
+ FileChannel fileChannel = fileStream.getChannel();
+
+ while (bytesRead < fileLength) {
+ long transferredBytes = fileChannel.transferTo(bytesRead, bufferSize, requestChannel);
+ bytesRead += transferredBytes;
+
+ if (mParams.onUploadProgress != null) {
+ byteSentTotal += transferredBytes;
+ mParams.onUploadProgress.onUploadProgress((int) totalFileLength, byteSentTotal);
+ }
}
+
if (!binaryStreamOnly) {
request.writeBytes(crlf);
}
+
fileCount++;
- bufInput.close();
+ fileStream.close();
+ }
+
+ if (!binaryStreamOnly) {
+ request.writeBytes(tail);
}
- request.writeBytes(tail);
request.flush();
request.close();
diff --git a/index.d.ts b/index.d.ts
index 7d90d44b..25ffca18 100644
--- a/index.d.ts
+++ b/index.d.ts
@@ -12,7 +12,7 @@ type ReadDirItem = {
mtime: Date | undefined // The last modified date of the file
name: string // The name of the item
path: string // The absolute path to the item
- size: string // Size in bytes
+ size: number // Size in bytes
isFile: () => boolean // Is the file just a file?
isDirectory: () => boolean // Is the file a directory?
}
@@ -20,7 +20,7 @@ type ReadDirItem = {
type StatResult = {
name: string | undefined // The name of the item TODO: why is this not documented?
path: string // The absolute path to the item
- size: string // Size in bytes
+ size: number // Size in bytes
mode: number // UNIX file mode
ctime: number // Created date
mtime: number // Last modified date
@@ -39,12 +39,14 @@ type DownloadFileOptions = {
background?: boolean // Continue the download in the background after the app terminates (iOS only)
discretionary?: boolean // Allow the OS to control the timing and speed of the download to improve perceived performance (iOS only)
cacheable?: boolean // Whether the download can be stored in the shared NSURLCache (iOS only)
+ progressInterval?: number
progressDivider?: number
begin?: (res: DownloadBeginCallbackResult) => void
progress?: (res: DownloadProgressCallbackResult) => void
resumable?: () => void // only supported on iOS yet
connectionTimeout?: number // only supported on Android yet
readTimeout?: number // supported on Android and iOS
+ backgroundTimeout?: number // Maximum time (in milliseconds) to download an entire resource (iOS only, useful for timing out background downloads)
}
type DownloadBeginCallbackResult = {
@@ -119,10 +121,14 @@ export function copyFile(
destPath: string,
options?: FileOptions
): Promise
+export function copyFolder(
+ srcPath: string,
+ destPath: string,
+): Promise
export function pathForBundle(bundleNamed: string): Promise
export function pathForGroup(groupName: string): Promise
export function getFSInfo(): Promise
-export function getAllExternalFilesDirs(): Promise
+export function getAllExternalFilesDirs(): Promise
export function unlink(filepath: string): Promise
export function exists(filepath: string): Promise
@@ -276,12 +282,14 @@ export function uploadFiles(
export function touch(
filepath: string,
mtime?: Date,
- ctime?: Date
+ ctime?: Date,
+ modifyCreationTime?: boolean
): Promise
export const MainBundlePath: string
export const CachesDirectoryPath: string
export const ExternalCachesDirectoryPath: string
+export const DownloadDirectoryPath: string
export const DocumentDirectoryPath: string
export const ExternalDirectoryPath: string
export const ExternalStorageDirectoryPath: string
diff --git a/package-lock.json b/package-lock.json
index dfb5ab9f..f702deff 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,8152 +1,177 @@
{
"name": "react-native-fs",
- "version": "2.14.1",
+ "version": "2.18.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
- "@babel/code-frame": {
- "version": "7.5.5",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz",
- "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==",
- "dev": true,
- "requires": {
- "@babel/highlight": "^7.0.0"
- }
- },
- "@babel/core": {
- "version": "7.5.5",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.5.5.tgz",
- "integrity": "sha512-i4qoSr2KTtce0DmkuuQBV4AuQgGPUcPXMr9L5MyYAtk06z068lQ10a4O009fe5OB/DfNV+h+qqT7ddNV8UnRjg==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.5.5",
- "@babel/generator": "^7.5.5",
- "@babel/helpers": "^7.5.5",
- "@babel/parser": "^7.5.5",
- "@babel/template": "^7.4.4",
- "@babel/traverse": "^7.5.5",
- "@babel/types": "^7.5.5",
- "convert-source-map": "^1.1.0",
- "debug": "^4.1.0",
- "json5": "^2.1.0",
- "lodash": "^4.17.13",
- "resolve": "^1.3.2",
- "semver": "^5.4.1",
- "source-map": "^0.5.0"
- },
- "dependencies": {
- "debug": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
- "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
- "dev": true,
- "requires": {
- "ms": "^2.1.1"
- }
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
- }
- }
- },
- "@babel/generator": {
- "version": "7.5.5",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.5.5.tgz",
- "integrity": "sha512-ETI/4vyTSxTzGnU2c49XHv2zhExkv9JHLTwDAFz85kmcwuShvYG2H08FwgIguQf4JC75CBnXAUM5PqeF4fj0nQ==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.5.5",
- "jsesc": "^2.5.1",
- "lodash": "^4.17.13",
- "source-map": "^0.5.0",
- "trim-right": "^1.0.1"
- }
- },
- "@babel/helper-annotate-as-pure": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz",
- "integrity": "sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.0.0"
- }
- },
- "@babel/helper-builder-binary-assignment-operator-visitor": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz",
- "integrity": "sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w==",
- "dev": true,
- "requires": {
- "@babel/helper-explode-assignable-expression": "^7.1.0",
- "@babel/types": "^7.0.0"
- }
- },
- "@babel/helper-builder-react-jsx": {
- "version": "7.3.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.3.0.tgz",
- "integrity": "sha512-MjA9KgwCuPEkQd9ncSXvSyJ5y+j2sICHyrI0M3L+6fnS4wMSNDc1ARXsbTfbb2cXHn17VisSnU/sHFTCxVxSMw==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.3.0",
- "esutils": "^2.0.0"
- }
- },
- "@babel/helper-call-delegate": {
- "version": "7.4.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.4.4.tgz",
- "integrity": "sha512-l79boDFJ8S1c5hvQvG+rc+wHw6IuH7YldmRKsYtpbawsxURu/paVy57FZMomGK22/JckepaikOkY0MoAmdyOlQ==",
- "dev": true,
- "requires": {
- "@babel/helper-hoist-variables": "^7.4.4",
- "@babel/traverse": "^7.4.4",
- "@babel/types": "^7.4.4"
- }
- },
- "@babel/helper-create-class-features-plugin": {
- "version": "7.5.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.5.5.tgz",
- "integrity": "sha512-ZsxkyYiRA7Bg+ZTRpPvB6AbOFKTFFK4LrvTet8lInm0V468MWCaSYJE+I7v2z2r8KNLtYiV+K5kTCnR7dvyZjg==",
- "dev": true,
- "requires": {
- "@babel/helper-function-name": "^7.1.0",
- "@babel/helper-member-expression-to-functions": "^7.5.5",
- "@babel/helper-optimise-call-expression": "^7.0.0",
- "@babel/helper-plugin-utils": "^7.0.0",
- "@babel/helper-replace-supers": "^7.5.5",
- "@babel/helper-split-export-declaration": "^7.4.4"
- }
- },
- "@babel/helper-define-map": {
- "version": "7.5.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.5.5.tgz",
- "integrity": "sha512-fTfxx7i0B5NJqvUOBBGREnrqbTxRh7zinBANpZXAVDlsZxYdclDp467G1sQ8VZYMnAURY3RpBUAgOYT9GfzHBg==",
- "dev": true,
- "requires": {
- "@babel/helper-function-name": "^7.1.0",
- "@babel/types": "^7.5.5",
- "lodash": "^4.17.13"
- }
- },
- "@babel/helper-explode-assignable-expression": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz",
- "integrity": "sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA==",
- "dev": true,
- "requires": {
- "@babel/traverse": "^7.1.0",
- "@babel/types": "^7.0.0"
- }
- },
- "@babel/helper-function-name": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz",
- "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==",
- "dev": true,
- "requires": {
- "@babel/helper-get-function-arity": "^7.0.0",
- "@babel/template": "^7.1.0",
- "@babel/types": "^7.0.0"
- }
- },
- "@babel/helper-get-function-arity": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz",
- "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.0.0"
- }
- },
- "@babel/helper-hoist-variables": {
- "version": "7.4.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.4.tgz",
- "integrity": "sha512-VYk2/H/BnYbZDDg39hr3t2kKyifAm1W6zHRfhx8jGjIHpQEBv9dry7oQ2f3+J703TLu69nYdxsovl0XYfcnK4w==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.4.4"
- }
- },
- "@babel/helper-member-expression-to-functions": {
- "version": "7.5.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.5.5.tgz",
- "integrity": "sha512-5qZ3D1uMclSNqYcXqiHoA0meVdv+xUEex9em2fqMnrk/scphGlGgg66zjMrPJESPwrFJ6sbfFQYUSa0Mz7FabA==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.5.5"
- }
- },
- "@babel/helper-module-imports": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz",
- "integrity": "sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.0.0"
- }
- },
- "@babel/helper-module-transforms": {
- "version": "7.5.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.5.5.tgz",
- "integrity": "sha512-jBeCvETKuJqeiaCdyaheF40aXnnU1+wkSiUs/IQg3tB85up1LyL8x77ClY8qJpuRJUcXQo+ZtdNESmZl4j56Pw==",
- "dev": true,
- "requires": {
- "@babel/helper-module-imports": "^7.0.0",
- "@babel/helper-simple-access": "^7.1.0",
- "@babel/helper-split-export-declaration": "^7.4.4",
- "@babel/template": "^7.4.4",
- "@babel/types": "^7.5.5",
- "lodash": "^4.17.13"
- }
- },
- "@babel/helper-optimise-call-expression": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz",
- "integrity": "sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.0.0"
- }
- },
- "@babel/helper-plugin-utils": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz",
- "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==",
- "dev": true
- },
- "@babel/helper-regex": {
- "version": "7.5.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.5.5.tgz",
- "integrity": "sha512-CkCYQLkfkiugbRDO8eZn6lRuR8kzZoGXCg3149iTk5se7g6qykSpy3+hELSwquhu+TgHn8nkLiBwHvNX8Hofcw==",
- "dev": true,
- "requires": {
- "lodash": "^4.17.13"
- }
- },
- "@babel/helper-remap-async-to-generator": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz",
- "integrity": "sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg==",
- "dev": true,
- "requires": {
- "@babel/helper-annotate-as-pure": "^7.0.0",
- "@babel/helper-wrap-function": "^7.1.0",
- "@babel/template": "^7.1.0",
- "@babel/traverse": "^7.1.0",
- "@babel/types": "^7.0.0"
- }
- },
- "@babel/helper-replace-supers": {
- "version": "7.5.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.5.5.tgz",
- "integrity": "sha512-XvRFWrNnlsow2u7jXDuH4jDDctkxbS7gXssrP4q2nUD606ukXHRvydj346wmNg+zAgpFx4MWf4+usfC93bElJg==",
- "dev": true,
- "requires": {
- "@babel/helper-member-expression-to-functions": "^7.5.5",
- "@babel/helper-optimise-call-expression": "^7.0.0",
- "@babel/traverse": "^7.5.5",
- "@babel/types": "^7.5.5"
- }
- },
- "@babel/helper-simple-access": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz",
- "integrity": "sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w==",
- "dev": true,
- "requires": {
- "@babel/template": "^7.1.0",
- "@babel/types": "^7.0.0"
- }
- },
- "@babel/helper-split-export-declaration": {
- "version": "7.4.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz",
- "integrity": "sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.4.4"
- }
- },
- "@babel/helper-wrap-function": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz",
- "integrity": "sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ==",
- "dev": true,
- "requires": {
- "@babel/helper-function-name": "^7.1.0",
- "@babel/template": "^7.1.0",
- "@babel/traverse": "^7.1.0",
- "@babel/types": "^7.2.0"
- }
- },
- "@babel/helpers": {
- "version": "7.5.5",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.5.5.tgz",
- "integrity": "sha512-nRq2BUhxZFnfEn/ciJuhklHvFOqjJUD5wpx+1bxUF2axL9C+v4DE/dmp5sT2dKnpOs4orZWzpAZqlCy8QqE/7g==",
- "dev": true,
- "requires": {
- "@babel/template": "^7.4.4",
- "@babel/traverse": "^7.5.5",
- "@babel/types": "^7.5.5"
- }
- },
- "@babel/highlight": {
- "version": "7.5.0",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz",
- "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==",
- "dev": true,
- "requires": {
- "chalk": "^2.0.0",
- "esutils": "^2.0.2",
- "js-tokens": "^4.0.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
- "supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
- }
- },
- "@babel/parser": {
- "version": "7.5.5",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.5.5.tgz",
- "integrity": "sha512-E5BN68cqR7dhKan1SfqgPGhQ178bkVKpXTPEXnFJBrEt8/DKRZlybmy+IgYLTeN7tp1R5Ccmbm2rBk17sHYU3g==",
- "dev": true
- },
- "@babel/plugin-external-helpers": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-external-helpers/-/plugin-external-helpers-7.2.0.tgz",
- "integrity": "sha512-QFmtcCShFkyAsNtdCM3lJPmRe1iB+vPZymlB4LnDIKEBj2yKQLQKtoxXxJ8ePT5fwMl4QGg303p4mB0UsSI2/g==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.0.0"
- }
- },
- "@babel/plugin-proposal-async-generator-functions": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz",
- "integrity": "sha512-+Dfo/SCQqrwx48ptLVGLdE39YtWRuKc/Y9I5Fy0P1DDBB9lsAHpjcEJQt+4IifuSOSTLBKJObJqMvaO1pIE8LQ==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.0.0",
- "@babel/helper-remap-async-to-generator": "^7.1.0",
- "@babel/plugin-syntax-async-generators": "^7.2.0"
- }
- },
- "@babel/plugin-proposal-class-properties": {
- "version": "7.5.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.5.5.tgz",
- "integrity": "sha512-AF79FsnWFxjlaosgdi421vmYG6/jg79bVD0dpD44QdgobzHKuLZ6S3vl8la9qIeSwGi8i1fS0O1mfuDAAdo1/A==",
- "dev": true,
- "requires": {
- "@babel/helper-create-class-features-plugin": "^7.5.5",
- "@babel/helper-plugin-utils": "^7.0.0"
- }
- },
- "@babel/plugin-proposal-dynamic-import": {
- "version": "7.5.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.5.0.tgz",
- "integrity": "sha512-x/iMjggsKTFHYC6g11PL7Qy58IK8H5zqfm9e6hu4z1iH2IRyAp9u9dL80zA6R76yFovETFLKz2VJIC2iIPBuFw==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.0.0",
- "@babel/plugin-syntax-dynamic-import": "^7.2.0"
- }
- },
- "@babel/plugin-proposal-export-default-from": {
- "version": "7.5.2",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.5.2.tgz",
- "integrity": "sha512-wr9Itk05L1/wyyZKVEmXWCdcsp/e185WUNl6AfYZeEKYaUPPvHXRDqO5K1VH7/UamYqGJowFRuCv30aDYZawsg==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.0.0",
- "@babel/plugin-syntax-export-default-from": "^7.2.0"
- }
- },
- "@babel/plugin-proposal-json-strings": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz",
- "integrity": "sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.0.0",
- "@babel/plugin-syntax-json-strings": "^7.2.0"
- }
- },
- "@babel/plugin-proposal-nullish-coalescing-operator": {
- "version": "7.4.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.4.4.tgz",
- "integrity": "sha512-Amph7Epui1Dh/xxUxS2+K22/MUi6+6JVTvy3P58tja3B6yKTSjwwx0/d83rF7551D6PVSSoplQb8GCwqec7HRw==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.0.0",
- "@babel/plugin-syntax-nullish-coalescing-operator": "^7.2.0"
- }
- },
- "@babel/plugin-proposal-object-rest-spread": {
- "version": "7.5.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.5.5.tgz",
- "integrity": "sha512-F2DxJJSQ7f64FyTVl5cw/9MWn6naXGdk3Q3UhDbFEEHv+EilCPoeRD3Zh/Utx1CJz4uyKlQ4uH+bJPbEhMV7Zw==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.0.0",
- "@babel/plugin-syntax-object-rest-spread": "^7.2.0"
- }
- },
- "@babel/plugin-proposal-optional-catch-binding": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz",
- "integrity": "sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.0.0",
- "@babel/plugin-syntax-optional-catch-binding": "^7.2.0"
- }
- },
- "@babel/plugin-proposal-optional-chaining": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.2.0.tgz",
- "integrity": "sha512-ea3Q6edZC/55wEBVZAEz42v528VulyO0eir+7uky/sT4XRcdkWJcFi1aPtitTlwUzGnECWJNExWww1SStt+yWw==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.0.0",
- "@babel/plugin-syntax-optional-chaining": "^7.2.0"
- }
- },
- "@babel/plugin-proposal-unicode-property-regex": {
- "version": "7.4.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.4.4.tgz",
- "integrity": "sha512-j1NwnOqMG9mFUOH58JTFsA/+ZYzQLUZ/drqWUqxCYLGeu2JFZL8YrNC9hBxKmWtAuOCHPcRpgv7fhap09Fb4kA==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.0.0",
- "@babel/helper-regex": "^7.4.4",
- "regexpu-core": "^4.5.4"
- }
- },
- "@babel/plugin-syntax-async-generators": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz",
- "integrity": "sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.0.0"
- }
- },
- "@babel/plugin-syntax-class-properties": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.2.0.tgz",
- "integrity": "sha512-UxYaGXYQ7rrKJS/PxIKRkv3exi05oH7rokBAsmCSsCxz1sVPZ7Fu6FzKoGgUvmY+0YgSkYHgUoCh5R5bCNBQlw==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.0.0"
- }
- },
- "@babel/plugin-syntax-dynamic-import": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.2.0.tgz",
- "integrity": "sha512-mVxuJ0YroI/h/tbFTPGZR8cv6ai+STMKNBq0f8hFxsxWjl94qqhsb+wXbpNMDPU3cfR1TIsVFzU3nXyZMqyK4w==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.0.0"
- }
- },
- "@babel/plugin-syntax-export-default-from": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.2.0.tgz",
- "integrity": "sha512-c7nqUnNST97BWPtoe+Ssi+fJukc9P9/JMZ71IOMNQWza2E+Psrd46N6AEvtw6pqK+gt7ChjXyrw4SPDO79f3Lw==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.0.0"
- }
- },
- "@babel/plugin-syntax-flow": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.2.0.tgz",
- "integrity": "sha512-r6YMuZDWLtLlu0kqIim5o/3TNRAlWb073HwT3e2nKf9I8IIvOggPrnILYPsrrKilmn/mYEMCf/Z07w3yQJF6dg==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.0.0"
- }
- },
- "@babel/plugin-syntax-json-strings": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz",
- "integrity": "sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.0.0"
- }
- },
- "@babel/plugin-syntax-jsx": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.2.0.tgz",
- "integrity": "sha512-VyN4QANJkRW6lDBmENzRszvZf3/4AXaj9YR7GwrWeeN9tEBPuXbmDYVU9bYBN0D70zCWVwUy0HWq2553VCb6Hw==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.0.0"
- }
- },
- "@babel/plugin-syntax-nullish-coalescing-operator": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.2.0.tgz",
- "integrity": "sha512-lRCEaKE+LTxDQtgbYajI04ddt6WW0WJq57xqkAZ+s11h4YgfRHhVA/Y2VhfPzzFD4qeLHWg32DMp9HooY4Kqlg==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.0.0"
- }
- },
- "@babel/plugin-syntax-object-rest-spread": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz",
- "integrity": "sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.0.0"
- }
- },
- "@babel/plugin-syntax-optional-catch-binding": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz",
- "integrity": "sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.0.0"
- }
- },
- "@babel/plugin-syntax-optional-chaining": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.2.0.tgz",
- "integrity": "sha512-HtGCtvp5Uq/jH/WNUPkK6b7rufnCPLLlDAFN7cmACoIjaOOiXxUt3SswU5loHqrhtqTsa/WoLQ1OQ1AGuZqaWA==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.0.0"
- }
- },
- "@babel/plugin-syntax-typescript": {
- "version": "7.3.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.3.3.tgz",
- "integrity": "sha512-dGwbSMA1YhVS8+31CnPR7LB4pcbrzcV99wQzby4uAfrkZPYZlQ7ImwdpzLqi6Z6IL02b8IAL379CaMwo0x5Lag==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.0.0"
- }
- },
- "@babel/plugin-transform-arrow-functions": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz",
- "integrity": "sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.0.0"
- }
- },
- "@babel/plugin-transform-async-to-generator": {
- "version": "7.5.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.5.0.tgz",
- "integrity": "sha512-mqvkzwIGkq0bEF1zLRRiTdjfomZJDV33AH3oQzHVGkI2VzEmXLpKKOBvEVaFZBJdN0XTyH38s9j/Kiqr68dggg==",
- "dev": true,
- "requires": {
- "@babel/helper-module-imports": "^7.0.0",
- "@babel/helper-plugin-utils": "^7.0.0",
- "@babel/helper-remap-async-to-generator": "^7.1.0"
- }
- },
- "@babel/plugin-transform-block-scoped-functions": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz",
- "integrity": "sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.0.0"
- }
- },
- "@babel/plugin-transform-block-scoping": {
- "version": "7.5.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.5.5.tgz",
- "integrity": "sha512-82A3CLRRdYubkG85lKwhZB0WZoHxLGsJdux/cOVaJCJpvYFl1LVzAIFyRsa7CvXqW8rBM4Zf3Bfn8PHt5DP0Sg==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.0.0",
- "lodash": "^4.17.13"
- }
- },
- "@babel/plugin-transform-classes": {
- "version": "7.5.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.5.5.tgz",
- "integrity": "sha512-U2htCNK/6e9K7jGyJ++1p5XRU+LJjrwtoiVn9SzRlDT2KubcZ11OOwy3s24TjHxPgxNwonCYP7U2K51uVYCMDg==",
- "dev": true,
- "requires": {
- "@babel/helper-annotate-as-pure": "^7.0.0",
- "@babel/helper-define-map": "^7.5.5",
- "@babel/helper-function-name": "^7.1.0",
- "@babel/helper-optimise-call-expression": "^7.0.0",
- "@babel/helper-plugin-utils": "^7.0.0",
- "@babel/helper-replace-supers": "^7.5.5",
- "@babel/helper-split-export-declaration": "^7.4.4",
- "globals": "^11.1.0"
- }
- },
- "@babel/plugin-transform-computed-properties": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz",
- "integrity": "sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.0.0"
- }
- },
- "@babel/plugin-transform-destructuring": {
- "version": "7.5.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.5.0.tgz",
- "integrity": "sha512-YbYgbd3TryYYLGyC7ZR+Tq8H/+bCmwoaxHfJHupom5ECstzbRLTch6gOQbhEY9Z4hiCNHEURgq06ykFv9JZ/QQ==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.0.0"
- }
- },
- "@babel/plugin-transform-dotall-regex": {
- "version": "7.4.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.4.4.tgz",
- "integrity": "sha512-P05YEhRc2h53lZDjRPk/OektxCVevFzZs2Gfjd545Wde3k+yFDbXORgl2e0xpbq8mLcKJ7Idss4fAg0zORN/zg==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.0.0",
- "@babel/helper-regex": "^7.4.4",
- "regexpu-core": "^4.5.4"
- }
- },
- "@babel/plugin-transform-duplicate-keys": {
- "version": "7.5.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.5.0.tgz",
- "integrity": "sha512-igcziksHizyQPlX9gfSjHkE2wmoCH3evvD2qR5w29/Dk0SMKE/eOI7f1HhBdNhR/zxJDqrgpoDTq5YSLH/XMsQ==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.0.0"
- }
- },
- "@babel/plugin-transform-exponentiation-operator": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz",
- "integrity": "sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A==",
- "dev": true,
- "requires": {
- "@babel/helper-builder-binary-assignment-operator-visitor": "^7.1.0",
- "@babel/helper-plugin-utils": "^7.0.0"
- }
- },
- "@babel/plugin-transform-flow-strip-types": {
- "version": "7.4.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.4.4.tgz",
- "integrity": "sha512-WyVedfeEIILYEaWGAUWzVNyqG4sfsNooMhXWsu/YzOvVGcsnPb5PguysjJqI3t3qiaYj0BR8T2f5njdjTGe44Q==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.0.0",
- "@babel/plugin-syntax-flow": "^7.2.0"
- }
- },
- "@babel/plugin-transform-for-of": {
- "version": "7.4.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.4.tgz",
- "integrity": "sha512-9T/5Dlr14Z9TIEXLXkt8T1DU7F24cbhwhMNUziN3hB1AXoZcdzPcTiKGRn/6iOymDqtTKWnr/BtRKN9JwbKtdQ==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.0.0"
- }
- },
- "@babel/plugin-transform-function-name": {
- "version": "7.4.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.4.4.tgz",
- "integrity": "sha512-iU9pv7U+2jC9ANQkKeNF6DrPy4GBa4NWQtl6dHB4Pb3izX2JOEvDTFarlNsBj/63ZEzNNIAMs3Qw4fNCcSOXJA==",
- "dev": true,
- "requires": {
- "@babel/helper-function-name": "^7.1.0",
- "@babel/helper-plugin-utils": "^7.0.0"
- }
- },
- "@babel/plugin-transform-literals": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz",
- "integrity": "sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.0.0"
- }
- },
- "@babel/plugin-transform-member-expression-literals": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.2.0.tgz",
- "integrity": "sha512-HiU3zKkSU6scTidmnFJ0bMX8hz5ixC93b4MHMiYebmk2lUVNGOboPsqQvx5LzooihijUoLR/v7Nc1rbBtnc7FA==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.0.0"
- }
- },
- "@babel/plugin-transform-modules-amd": {
- "version": "7.5.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.5.0.tgz",
- "integrity": "sha512-n20UsQMKnWrltocZZm24cRURxQnWIvsABPJlw/fvoy9c6AgHZzoelAIzajDHAQrDpuKFFPPcFGd7ChsYuIUMpg==",
- "dev": true,
- "requires": {
- "@babel/helper-module-transforms": "^7.1.0",
- "@babel/helper-plugin-utils": "^7.0.0",
- "babel-plugin-dynamic-import-node": "^2.3.0"
- }
- },
- "@babel/plugin-transform-modules-commonjs": {
- "version": "7.5.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.5.0.tgz",
- "integrity": "sha512-xmHq0B+ytyrWJvQTc5OWAC4ii6Dhr0s22STOoydokG51JjWhyYo5mRPXoi+ZmtHQhZZwuXNN+GG5jy5UZZJxIQ==",
- "dev": true,
- "requires": {
- "@babel/helper-module-transforms": "^7.4.4",
- "@babel/helper-plugin-utils": "^7.0.0",
- "@babel/helper-simple-access": "^7.1.0",
- "babel-plugin-dynamic-import-node": "^2.3.0"
- }
- },
- "@babel/plugin-transform-modules-systemjs": {
- "version": "7.5.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.5.0.tgz",
- "integrity": "sha512-Q2m56tyoQWmuNGxEtUyeEkm6qJYFqs4c+XyXH5RAuYxObRNz9Zgj/1g2GMnjYp2EUyEy7YTrxliGCXzecl/vJg==",
- "dev": true,
- "requires": {
- "@babel/helper-hoist-variables": "^7.4.4",
- "@babel/helper-plugin-utils": "^7.0.0",
- "babel-plugin-dynamic-import-node": "^2.3.0"
- }
- },
- "@babel/plugin-transform-modules-umd": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.2.0.tgz",
- "integrity": "sha512-BV3bw6MyUH1iIsGhXlOK6sXhmSarZjtJ/vMiD9dNmpY8QXFFQTj+6v92pcfy1iqa8DeAfJFwoxcrS/TUZda6sw==",
- "dev": true,
- "requires": {
- "@babel/helper-module-transforms": "^7.1.0",
- "@babel/helper-plugin-utils": "^7.0.0"
- }
- },
- "@babel/plugin-transform-named-capturing-groups-regex": {
- "version": "7.4.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.4.5.tgz",
- "integrity": "sha512-z7+2IsWafTBbjNsOxU/Iv5CvTJlr5w4+HGu1HovKYTtgJ362f7kBcQglkfmlspKKZ3bgrbSGvLfNx++ZJgCWsg==",
- "dev": true,
- "requires": {
- "regexp-tree": "^0.1.6"
- }
- },
- "@babel/plugin-transform-new-target": {
- "version": "7.4.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.4.4.tgz",
- "integrity": "sha512-r1z3T2DNGQwwe2vPGZMBNjioT2scgWzK9BCnDEh+46z8EEwXBq24uRzd65I7pjtugzPSj921aM15RpESgzsSuA==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.0.0"
- }
- },
- "@babel/plugin-transform-object-assign": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.2.0.tgz",
- "integrity": "sha512-nmE55cZBPFgUktbF2OuoZgPRadfxosLOpSgzEPYotKSls9J4pEPcembi8r78RU37Rph6UApCpNmsQA4QMWK9Ng==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.0.0"
- }
- },
- "@babel/plugin-transform-object-super": {
- "version": "7.5.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.5.5.tgz",
- "integrity": "sha512-un1zJQAhSosGFBduPgN/YFNvWVpRuHKU7IHBglLoLZsGmruJPOo6pbInneflUdmq7YvSVqhpPs5zdBvLnteltQ==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.0.0",
- "@babel/helper-replace-supers": "^7.5.5"
- }
- },
- "@babel/plugin-transform-parameters": {
- "version": "7.4.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.4.tgz",
- "integrity": "sha512-oMh5DUO1V63nZcu/ZVLQFqiihBGo4OpxJxR1otF50GMeCLiRx5nUdtokd+u9SuVJrvvuIh9OosRFPP4pIPnwmw==",
- "dev": true,
- "requires": {
- "@babel/helper-call-delegate": "^7.4.4",
- "@babel/helper-get-function-arity": "^7.0.0",
- "@babel/helper-plugin-utils": "^7.0.0"
- }
- },
- "@babel/plugin-transform-property-literals": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.2.0.tgz",
- "integrity": "sha512-9q7Dbk4RhgcLp8ebduOpCbtjh7C0itoLYHXd9ueASKAG/is5PQtMR5VJGka9NKqGhYEGn5ITahd4h9QeBMylWQ==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.0.0"
- }
- },
- "@babel/plugin-transform-react-display-name": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.2.0.tgz",
- "integrity": "sha512-Htf/tPa5haZvRMiNSQSFifK12gtr/8vwfr+A9y69uF0QcU77AVu4K7MiHEkTxF7lQoHOL0F9ErqgfNEAKgXj7A==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.0.0"
- }
- },
- "@babel/plugin-transform-react-jsx": {
- "version": "7.3.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.3.0.tgz",
- "integrity": "sha512-a/+aRb7R06WcKvQLOu4/TpjKOdvVEKRLWFpKcNuHhiREPgGRB4TQJxq07+EZLS8LFVYpfq1a5lDUnuMdcCpBKg==",
- "dev": true,
- "requires": {
- "@babel/helper-builder-react-jsx": "^7.3.0",
- "@babel/helper-plugin-utils": "^7.0.0",
- "@babel/plugin-syntax-jsx": "^7.2.0"
- }
- },
- "@babel/plugin-transform-react-jsx-source": {
- "version": "7.5.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.5.0.tgz",
- "integrity": "sha512-58Q+Jsy4IDCZx7kqEZuSDdam/1oW8OdDX8f+Loo6xyxdfg1yF0GE2XNJQSTZCaMol93+FBzpWiPEwtbMloAcPg==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.0.0",
- "@babel/plugin-syntax-jsx": "^7.2.0"
- }
- },
- "@babel/plugin-transform-regenerator": {
- "version": "7.4.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.5.tgz",
- "integrity": "sha512-gBKRh5qAaCWntnd09S8QC7r3auLCqq5DI6O0DlfoyDjslSBVqBibrMdsqO+Uhmx3+BlOmE/Kw1HFxmGbv0N9dA==",
- "dev": true,
- "requires": {
- "regenerator-transform": "^0.14.0"
- }
- },
- "@babel/plugin-transform-reserved-words": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.2.0.tgz",
- "integrity": "sha512-fz43fqW8E1tAB3DKF19/vxbpib1fuyCwSPE418ge5ZxILnBhWyhtPgz8eh1RCGGJlwvksHkyxMxh0eenFi+kFw==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.0.0"
- }
- },
- "@babel/plugin-transform-runtime": {
- "version": "7.5.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.5.5.tgz",
- "integrity": "sha512-6Xmeidsun5rkwnGfMOp6/z9nSzWpHFNVr2Jx7kwoq4mVatQfQx5S56drBgEHF+XQbKOdIaOiMIINvp/kAwMN+w==",
- "dev": true,
- "requires": {
- "@babel/helper-module-imports": "^7.0.0",
- "@babel/helper-plugin-utils": "^7.0.0",
- "resolve": "^1.8.1",
- "semver": "^5.5.1"
- }
- },
- "@babel/plugin-transform-shorthand-properties": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz",
- "integrity": "sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.0.0"
- }
- },
- "@babel/plugin-transform-spread": {
- "version": "7.2.2",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.2.2.tgz",
- "integrity": "sha512-KWfky/58vubwtS0hLqEnrWJjsMGaOeSBn90Ezn5Jeg9Z8KKHmELbP1yGylMlm5N6TPKeY9A2+UaSYLdxahg01w==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.0.0"
- }
- },
- "@babel/plugin-transform-sticky-regex": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz",
- "integrity": "sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.0.0",
- "@babel/helper-regex": "^7.0.0"
- }
- },
- "@babel/plugin-transform-strict-mode": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-strict-mode/-/plugin-transform-strict-mode-7.2.0.tgz",
- "integrity": "sha512-BJ5BF9+9zWTVCLe+nfLSfHUC0V/ly+ipMxVUdFjwlHFJ+Ue8WudbNh0ddzN0NnAQX5Kg0uk+DgRoGOJdnfNJgg==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.0.0"
- }
- },
- "@babel/plugin-transform-template-literals": {
- "version": "7.4.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.4.4.tgz",
- "integrity": "sha512-mQrEC4TWkhLN0z8ygIvEL9ZEToPhG5K7KDW3pzGqOfIGZ28Jb0POUkeWcoz8HnHvhFy6dwAT1j8OzqN8s804+g==",
- "dev": true,
- "requires": {
- "@babel/helper-annotate-as-pure": "^7.0.0",
- "@babel/helper-plugin-utils": "^7.0.0"
- }
- },
- "@babel/plugin-transform-typeof-symbol": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz",
- "integrity": "sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.0.0"
- }
- },
- "@babel/plugin-transform-typescript": {
- "version": "7.5.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.5.5.tgz",
- "integrity": "sha512-pehKf4m640myZu5B2ZviLaiBlxMCjSZ1qTEO459AXKX5GnPueyulJeCqZFs1nz/Ya2dDzXQ1NxZ/kKNWyD4h6w==",
- "dev": true,
- "requires": {
- "@babel/helper-create-class-features-plugin": "^7.5.5",
- "@babel/helper-plugin-utils": "^7.0.0",
- "@babel/plugin-syntax-typescript": "^7.2.0"
- }
- },
- "@babel/plugin-transform-unicode-regex": {
- "version": "7.4.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.4.4.tgz",
- "integrity": "sha512-il+/XdNw01i93+M9J9u4T7/e/Ue/vWfNZE4IRUQjplu2Mqb/AFTDimkw2tdEdSH50wuQXZAbXSql0UphQke+vA==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.0.0",
- "@babel/helper-regex": "^7.4.4",
- "regexpu-core": "^4.5.4"
- }
- },
- "@babel/preset-env": {
- "version": "7.5.5",
- "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.5.5.tgz",
- "integrity": "sha512-GMZQka/+INwsMz1A5UEql8tG015h5j/qjptpKY2gJ7giy8ohzU710YciJB5rcKsWGWHiW3RUnHib0E5/m3Tp3A==",
- "dev": true,
- "requires": {
- "@babel/helper-module-imports": "^7.0.0",
- "@babel/helper-plugin-utils": "^7.0.0",
- "@babel/plugin-proposal-async-generator-functions": "^7.2.0",
- "@babel/plugin-proposal-dynamic-import": "^7.5.0",
- "@babel/plugin-proposal-json-strings": "^7.2.0",
- "@babel/plugin-proposal-object-rest-spread": "^7.5.5",
- "@babel/plugin-proposal-optional-catch-binding": "^7.2.0",
- "@babel/plugin-proposal-unicode-property-regex": "^7.4.4",
- "@babel/plugin-syntax-async-generators": "^7.2.0",
- "@babel/plugin-syntax-dynamic-import": "^7.2.0",
- "@babel/plugin-syntax-json-strings": "^7.2.0",
- "@babel/plugin-syntax-object-rest-spread": "^7.2.0",
- "@babel/plugin-syntax-optional-catch-binding": "^7.2.0",
- "@babel/plugin-transform-arrow-functions": "^7.2.0",
- "@babel/plugin-transform-async-to-generator": "^7.5.0",
- "@babel/plugin-transform-block-scoped-functions": "^7.2.0",
- "@babel/plugin-transform-block-scoping": "^7.5.5",
- "@babel/plugin-transform-classes": "^7.5.5",
- "@babel/plugin-transform-computed-properties": "^7.2.0",
- "@babel/plugin-transform-destructuring": "^7.5.0",
- "@babel/plugin-transform-dotall-regex": "^7.4.4",
- "@babel/plugin-transform-duplicate-keys": "^7.5.0",
- "@babel/plugin-transform-exponentiation-operator": "^7.2.0",
- "@babel/plugin-transform-for-of": "^7.4.4",
- "@babel/plugin-transform-function-name": "^7.4.4",
- "@babel/plugin-transform-literals": "^7.2.0",
- "@babel/plugin-transform-member-expression-literals": "^7.2.0",
- "@babel/plugin-transform-modules-amd": "^7.5.0",
- "@babel/plugin-transform-modules-commonjs": "^7.5.0",
- "@babel/plugin-transform-modules-systemjs": "^7.5.0",
- "@babel/plugin-transform-modules-umd": "^7.2.0",
- "@babel/plugin-transform-named-capturing-groups-regex": "^7.4.5",
- "@babel/plugin-transform-new-target": "^7.4.4",
- "@babel/plugin-transform-object-super": "^7.5.5",
- "@babel/plugin-transform-parameters": "^7.4.4",
- "@babel/plugin-transform-property-literals": "^7.2.0",
- "@babel/plugin-transform-regenerator": "^7.4.5",
- "@babel/plugin-transform-reserved-words": "^7.2.0",
- "@babel/plugin-transform-shorthand-properties": "^7.2.0",
- "@babel/plugin-transform-spread": "^7.2.0",
- "@babel/plugin-transform-sticky-regex": "^7.2.0",
- "@babel/plugin-transform-template-literals": "^7.4.4",
- "@babel/plugin-transform-typeof-symbol": "^7.2.0",
- "@babel/plugin-transform-unicode-regex": "^7.4.4",
- "@babel/types": "^7.5.5",
- "browserslist": "^4.6.0",
- "core-js-compat": "^3.1.1",
- "invariant": "^2.2.2",
- "js-levenshtein": "^1.1.3",
- "semver": "^5.5.0"
- }
- },
- "@babel/preset-flow": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.0.0.tgz",
- "integrity": "sha512-bJOHrYOPqJZCkPVbG1Lot2r5OSsB+iUOaxiHdlOeB1yPWS6evswVHwvkDLZ54WTaTRIk89ds0iHmGZSnxlPejQ==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.0.0",
- "@babel/plugin-transform-flow-strip-types": "^7.0.0"
- }
- },
- "@babel/register": {
- "version": "7.5.5",
- "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.5.5.tgz",
- "integrity": "sha512-pdd5nNR+g2qDkXZlW1yRCWFlNrAn2PPdnZUB72zjX4l1Vv4fMRRLwyf+n/idFCLI1UgVGboUU8oVziwTBiyNKQ==",
- "dev": true,
- "requires": {
- "core-js": "^3.0.0",
- "find-cache-dir": "^2.0.0",
- "lodash": "^4.17.13",
- "mkdirp": "^0.5.1",
- "pirates": "^4.0.0",
- "source-map-support": "^0.5.9"
- },
- "dependencies": {
- "core-js": {
- "version": "3.1.4",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.1.4.tgz",
- "integrity": "sha512-YNZN8lt82XIMLnLirj9MhKDFZHalwzzrL9YLt6eb0T5D0EDl4IQ90IGkua8mHbnxNrkj1d8hbdizMc0Qmg1WnQ==",
- "dev": true
- }
- }
- },
- "@babel/runtime": {
- "version": "7.5.5",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.5.5.tgz",
- "integrity": "sha512-28QvEGyQyNkB0/m2B4FU7IEZGK2NUrcMtT6BZEFALTguLk+AUT6ofsHtPk5QyjAdUkpMJ+/Em+quwz4HOt30AQ==",
- "dev": true,
- "requires": {
- "regenerator-runtime": "^0.13.2"
- },
- "dependencies": {
- "regenerator-runtime": {
- "version": "0.13.3",
- "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz",
- "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==",
- "dev": true
- }
- }
- },
- "@babel/template": {
- "version": "7.4.4",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.4.4.tgz",
- "integrity": "sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.0.0",
- "@babel/parser": "^7.4.4",
- "@babel/types": "^7.4.4"
- }
- },
- "@babel/traverse": {
- "version": "7.5.5",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.5.5.tgz",
- "integrity": "sha512-MqB0782whsfffYfSjH4TM+LMjrJnhCNEDMDIjeTpl+ASaUvxcjoiVCo/sM1GhS1pHOXYfWVCYneLjMckuUxDaQ==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.5.5",
- "@babel/generator": "^7.5.5",
- "@babel/helper-function-name": "^7.1.0",
- "@babel/helper-split-export-declaration": "^7.4.4",
- "@babel/parser": "^7.5.5",
- "@babel/types": "^7.5.5",
- "debug": "^4.1.0",
- "globals": "^11.1.0",
- "lodash": "^4.17.13"
- },
- "dependencies": {
- "debug": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
- "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
- "dev": true,
- "requires": {
- "ms": "^2.1.1"
- }
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
- }
- }
- },
- "@babel/types": {
- "version": "7.5.5",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.5.5.tgz",
- "integrity": "sha512-s63F9nJioLqOlW3UkyMd+BYhXt44YuaFm/VV0VwuteqjYwRrObkU7ra9pY4wAJR3oXi8hJrMcrcJdO/HH33vtw==",
- "dev": true,
- "requires": {
- "esutils": "^2.0.2",
- "lodash": "^4.17.13",
- "to-fast-properties": "^2.0.0"
- }
- },
- "@react-native-community/cli": {
- "version": "1.11.2",
- "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-1.11.2.tgz",
- "integrity": "sha512-5NuYd30f5PCTrGUbZLnusZKv5nfTWvTDTRa/3Q4vwdMnUQrhm9sZXWGQ5CnFoQ7cE58EAqhj6/ShXeJF3DZ9uQ==",
- "dev": true,
- "requires": {
- "chalk": "^1.1.1",
- "commander": "^2.19.0",
- "compression": "^1.7.1",
- "connect": "^3.6.5",
- "denodeify": "^1.2.1",
- "envinfo": "^5.7.0",
- "errorhandler": "^1.5.0",
- "escape-string-regexp": "^1.0.5",
- "execa": "^1.0.0",
- "fs-extra": "^7.0.1",
- "glob": "^7.1.1",
- "graceful-fs": "^4.1.3",
- "inquirer": "^3.0.6",
- "lodash": "^4.17.5",
- "metro": "^0.51.0",
- "metro-config": "^0.51.0",
- "metro-core": "^0.51.0",
- "metro-memory-fs": "^0.51.0",
- "metro-react-native-babel-transformer": "^0.51.0",
- "mime": "^1.3.4",
- "minimist": "^1.2.0",
- "mkdirp": "^0.5.1",
- "morgan": "^1.9.0",
- "node-fetch": "^2.2.0",
- "node-notifier": "^5.2.1",
- "opn": "^3.0.2",
- "plist": "^3.0.0",
- "semver": "^5.0.3",
- "serve-static": "^1.13.1",
- "shell-quote": "1.6.1",
- "slash": "^2.0.0",
- "ws": "^1.1.0",
- "xcode": "^2.0.0",
- "xmldoc": "^0.4.0"
- },
- "dependencies": {
- "cross-spawn": {
- "version": "6.0.5",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
- "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
- "dev": true,
- "requires": {
- "nice-try": "^1.0.4",
- "path-key": "^2.0.1",
- "semver": "^5.5.0",
- "shebang-command": "^1.2.0",
- "which": "^1.2.9"
- }
- },
- "execa": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
- "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
- "dev": true,
- "requires": {
- "cross-spawn": "^6.0.0",
- "get-stream": "^4.0.0",
- "is-stream": "^1.1.0",
- "npm-run-path": "^2.0.0",
- "p-finally": "^1.0.0",
- "signal-exit": "^3.0.0",
- "strip-eof": "^1.0.0"
- }
- },
- "fs-extra": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz",
- "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "jsonfile": "^4.0.0",
- "universalify": "^0.1.0"
- }
- },
- "get-stream": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
- "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
- "dev": true,
- "requires": {
- "pump": "^3.0.0"
- }
- },
- "jsonfile": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
- "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.6"
- }
- },
- "node-fetch": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz",
- "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==",
- "dev": true
- },
- "simple-plist": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/simple-plist/-/simple-plist-1.0.0.tgz",
- "integrity": "sha512-043L2rO80LVF7zfZ+fqhsEkoJFvW8o59rt/l4ctx1TJWoTx7/jkiS1R5TatD15Z1oYnuLJytzE7gcnnBuIPL2g==",
- "dev": true,
- "requires": {
- "bplist-creator": "0.0.7",
- "bplist-parser": "0.1.1",
- "plist": "^3.0.1"
- }
- },
- "xcode": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/xcode/-/xcode-2.0.0.tgz",
- "integrity": "sha512-5xF6RCjAdDEiEsbbZaS/gBRt3jZ/177otZcpoLCjGN/u1LrfgH7/Sgeeavpr/jELpyDqN2im3AKosl2G2W8hfw==",
- "dev": true,
- "requires": {
- "simple-plist": "^1.0.0",
- "uuid": "^3.3.2"
- }
- }
- }
- },
- "absolute-path": {
- "version": "0.0.0",
- "resolved": "https://registry.npmjs.org/absolute-path/-/absolute-path-0.0.0.tgz",
- "integrity": "sha1-p4di+9rftSl76ZsV01p4Wy8JW/c=",
- "dev": true
- },
- "accepts": {
- "version": "1.3.7",
- "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
- "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
- "dev": true,
- "requires": {
- "mime-types": "~2.1.24",
- "negotiator": "0.6.2"
- }
- },
- "ansi": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/ansi/-/ansi-0.3.1.tgz",
- "integrity": "sha1-DELU+xcWDVqa8eSEus4cZpIsGyE=",
- "dev": true
- },
- "ansi-colors": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz",
- "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==",
- "dev": true,
- "requires": {
- "ansi-wrap": "^0.1.0"
- }
- },
- "ansi-cyan": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/ansi-cyan/-/ansi-cyan-0.1.1.tgz",
- "integrity": "sha1-U4rlKK+JgvKK4w2G8vF0VtJgmHM=",
- "dev": true,
- "requires": {
- "ansi-wrap": "0.1.0"
- }
- },
- "ansi-escapes": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz",
- "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==",
- "dev": true
- },
- "ansi-gray": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz",
- "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=",
- "dev": true,
- "requires": {
- "ansi-wrap": "0.1.0"
- }
- },
- "ansi-red": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/ansi-red/-/ansi-red-0.1.1.tgz",
- "integrity": "sha1-jGOPnRCAgAo1PJwoyKgcpHBdlGw=",
- "dev": true,
- "requires": {
- "ansi-wrap": "0.1.0"
- }
- },
- "ansi-regex": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
- "dev": true
- },
- "ansi-styles": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
- "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
- "dev": true
- },
- "ansi-wrap": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz",
- "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=",
- "dev": true
- },
- "anymatch": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
- "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
- "dev": true,
- "requires": {
- "micromatch": "^3.1.4",
- "normalize-path": "^2.1.1"
- },
- "dependencies": {
- "arr-diff": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
- "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
- "dev": true
- },
- "array-unique": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
- "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
- "dev": true
- },
- "braces": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
- "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
- "dev": true,
- "requires": {
- "arr-flatten": "^1.1.0",
- "array-unique": "^0.3.2",
- "extend-shallow": "^2.0.1",
- "fill-range": "^4.0.0",
- "isobject": "^3.0.1",
- "repeat-element": "^1.1.2",
- "snapdragon": "^0.8.1",
- "snapdragon-node": "^2.0.1",
- "split-string": "^3.0.2",
- "to-regex": "^3.0.1"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
- }
- },
- "expand-brackets": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
- "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
- "dev": true,
- "requires": {
- "debug": "^2.3.3",
- "define-property": "^0.2.5",
- "extend-shallow": "^2.0.1",
- "posix-character-classes": "^0.1.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
- },
- "dependencies": {
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- },
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- },
- "is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-data-descriptor": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
- "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^0.1.6",
- "is-data-descriptor": "^0.1.4",
- "kind-of": "^5.0.0"
- }
- },
- "kind-of": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
- "dev": true
- }
- }
- },
- "extend-shallow": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
- "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
- "dev": true,
- "requires": {
- "assign-symbols": "^1.0.0",
- "is-extendable": "^1.0.1"
- },
- "dependencies": {
- "is-extendable": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
- "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
- "dev": true,
- "requires": {
- "is-plain-object": "^2.0.4"
- }
- }
- }
- },
- "extglob": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
- "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
- "dev": true,
- "requires": {
- "array-unique": "^0.3.2",
- "define-property": "^1.0.0",
- "expand-brackets": "^2.1.4",
- "extend-shallow": "^2.0.1",
- "fragment-cache": "^0.2.1",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
- },
- "dependencies": {
- "define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
- "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^1.0.0"
- }
- },
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
- }
- },
- "fill-range": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
- "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
- "dev": true,
- "requires": {
- "extend-shallow": "^2.0.1",
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1",
- "to-regex-range": "^2.1.0"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
- }
- },
- "is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
- }
- },
- "is-number": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
- "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true
- },
- "kind-of": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
- "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
- "dev": true
- },
- "micromatch": {
- "version": "3.1.10",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
- "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
- "dev": true,
- "requires": {
- "arr-diff": "^4.0.0",
- "array-unique": "^0.3.2",
- "braces": "^2.3.1",
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "extglob": "^2.0.4",
- "fragment-cache": "^0.2.1",
- "kind-of": "^6.0.2",
- "nanomatch": "^1.2.9",
- "object.pick": "^1.3.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.2"
- }
- }
- }
- },
- "are-we-there-yet": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz",
- "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==",
- "dev": true,
- "requires": {
- "delegates": "^1.0.0",
- "readable-stream": "^2.0.6"
- }
- },
- "argparse": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
- "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
- "dev": true,
- "requires": {
- "sprintf-js": "~1.0.2"
- }
- },
- "arr-diff": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
- "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
- "dev": true
- },
- "arr-flatten": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
- "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
- "dev": true
- },
- "arr-union": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-2.1.0.tgz",
- "integrity": "sha1-IPnqtexw9cfSFbEHexw5Fh0pLH0=",
- "dev": true
- },
- "array-filter": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz",
- "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=",
- "dev": true
- },
- "array-map": {
- "version": "0.0.0",
- "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz",
- "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=",
- "dev": true
- },
- "array-reduce": {
- "version": "0.0.0",
- "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz",
- "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=",
- "dev": true
- },
- "array-slice": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz",
- "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=",
- "dev": true
- },
- "array-unique": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz",
- "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=",
- "dev": true
- },
- "art": {
- "version": "0.10.3",
- "resolved": "https://registry.npmjs.org/art/-/art-0.10.3.tgz",
- "integrity": "sha512-HXwbdofRTiJT6qZX/FnchtldzJjS3vkLJxQilc3Xj+ma2MXjY4UAyQ0ls1XZYVnDvVIBiFZbC6QsvtW86TD6tQ==",
- "dev": true
- },
- "asap": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
- "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=",
- "dev": true
- },
- "assign-symbols": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
- "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
- "dev": true
- },
- "async": {
- "version": "2.6.3",
- "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz",
- "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==",
- "dev": true,
- "requires": {
- "lodash": "^4.17.14"
- }
- },
- "async-limiter": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz",
- "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==",
- "dev": true
- },
- "atob": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
- "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
- "dev": true
- },
- "babel-plugin-dynamic-import-node": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz",
- "integrity": "sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==",
- "dev": true,
- "requires": {
- "object.assign": "^4.1.0"
- }
- },
- "babel-plugin-syntax-trailing-function-commas": {
- "version": "7.0.0-beta.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-7.0.0-beta.0.tgz",
- "integrity": "sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ==",
- "dev": true
- },
- "babel-preset-fbjs": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/babel-preset-fbjs/-/babel-preset-fbjs-3.2.0.tgz",
- "integrity": "sha512-5Jo+JeWiVz2wHUUyAlvb/sSYnXNig9r+HqGAOSfh5Fzxp7SnAaR/tEGRJ1ZX7C77kfk82658w6R5Z+uPATTD9g==",
- "dev": true,
- "requires": {
- "@babel/plugin-proposal-class-properties": "^7.0.0",
- "@babel/plugin-proposal-object-rest-spread": "^7.0.0",
- "@babel/plugin-syntax-class-properties": "^7.0.0",
- "@babel/plugin-syntax-flow": "^7.0.0",
- "@babel/plugin-syntax-jsx": "^7.0.0",
- "@babel/plugin-syntax-object-rest-spread": "^7.0.0",
- "@babel/plugin-transform-arrow-functions": "^7.0.0",
- "@babel/plugin-transform-block-scoped-functions": "^7.0.0",
- "@babel/plugin-transform-block-scoping": "^7.0.0",
- "@babel/plugin-transform-classes": "^7.0.0",
- "@babel/plugin-transform-computed-properties": "^7.0.0",
- "@babel/plugin-transform-destructuring": "^7.0.0",
- "@babel/plugin-transform-flow-strip-types": "^7.0.0",
- "@babel/plugin-transform-for-of": "^7.0.0",
- "@babel/plugin-transform-function-name": "^7.0.0",
- "@babel/plugin-transform-literals": "^7.0.0",
- "@babel/plugin-transform-member-expression-literals": "^7.0.0",
- "@babel/plugin-transform-modules-commonjs": "^7.0.0",
- "@babel/plugin-transform-object-super": "^7.0.0",
- "@babel/plugin-transform-parameters": "^7.0.0",
- "@babel/plugin-transform-property-literals": "^7.0.0",
- "@babel/plugin-transform-react-display-name": "^7.0.0",
- "@babel/plugin-transform-react-jsx": "^7.0.0",
- "@babel/plugin-transform-shorthand-properties": "^7.0.0",
- "@babel/plugin-transform-spread": "^7.0.0",
- "@babel/plugin-transform-template-literals": "^7.0.0",
- "babel-plugin-syntax-trailing-function-commas": "^7.0.0-beta.0"
- }
- },
- "balanced-match": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
- "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
- "dev": true
- },
- "base": {
- "version": "0.11.2",
- "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
- "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
- "dev": true,
- "requires": {
- "cache-base": "^1.0.1",
- "class-utils": "^0.3.5",
- "component-emitter": "^1.2.1",
- "define-property": "^1.0.0",
- "isobject": "^3.0.1",
- "mixin-deep": "^1.2.0",
- "pascalcase": "^0.1.1"
- },
- "dependencies": {
- "define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
- "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^1.0.0"
- }
- },
- "is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
- }
- },
- "isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true
- },
- "kind-of": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
- "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
- "dev": true
- }
- }
- },
- "base-64": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/base-64/-/base-64-0.1.0.tgz",
- "integrity": "sha1-eAqZyE59YAJgNhURxId2E78k9rs="
- },
- "base64-js": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz",
- "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==",
- "dev": true
- },
- "basic-auth": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz",
- "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==",
- "dev": true,
- "requires": {
- "safe-buffer": "5.1.2"
- }
- },
- "big-integer": {
- "version": "1.6.44",
- "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.44.tgz",
- "integrity": "sha512-7MzElZPTyJ2fNvBkPxtFQ2fWIkVmuzw41+BZHSzpEq3ymB2MfeKp1+yXl/tS75xCx+WnyV+yb0kp+K1C3UNwmQ==",
- "dev": true
- },
- "bplist-creator": {
- "version": "0.0.7",
- "resolved": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.0.7.tgz",
- "integrity": "sha1-N98VNgkoJLh8QvlXsBNEEXNyrkU=",
- "dev": true,
- "requires": {
- "stream-buffers": "~2.2.0"
- }
- },
- "bplist-parser": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.1.1.tgz",
- "integrity": "sha1-1g1dzCDLptx+HymbNdPh+V2vuuY=",
- "dev": true,
- "requires": {
- "big-integer": "^1.6.7"
- }
- },
- "brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "dev": true,
- "requires": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "braces": {
- "version": "1.8.5",
- "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz",
- "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
- "dev": true,
- "requires": {
- "expand-range": "^1.8.1",
- "preserve": "^0.2.0",
- "repeat-element": "^1.1.2"
- }
- },
- "browserslist": {
- "version": "4.6.6",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.6.6.tgz",
- "integrity": "sha512-D2Nk3W9JL9Fp/gIcWei8LrERCS+eXu9AM5cfXA8WEZ84lFks+ARnZ0q/R69m2SV3Wjma83QDDPxsNKXUwdIsyA==",
- "dev": true,
- "requires": {
- "caniuse-lite": "^1.0.30000984",
- "electron-to-chromium": "^1.3.191",
- "node-releases": "^1.1.25"
- }
- },
- "bser": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.0.tgz",
- "integrity": "sha512-8zsjWrQkkBoLK6uxASk1nJ2SKv97ltiGDo6A3wA0/yRPz+CwmEyDo0hUrhIuukG2JHpAl3bvFIixw2/3Hi0DOg==",
- "dev": true,
- "requires": {
- "node-int64": "^0.4.0"
- }
- },
- "buffer-crc32": {
- "version": "0.2.13",
- "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
- "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=",
- "dev": true
- },
- "buffer-from": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
- "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
- "dev": true
- },
- "bytes": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
- "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=",
- "dev": true
- },
- "cache-base": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
- "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
- "dev": true,
- "requires": {
- "collection-visit": "^1.0.0",
- "component-emitter": "^1.2.1",
- "get-value": "^2.0.6",
- "has-value": "^1.0.0",
- "isobject": "^3.0.1",
- "set-value": "^2.0.0",
- "to-object-path": "^0.3.0",
- "union-value": "^1.0.0",
- "unset-value": "^1.0.0"
- },
- "dependencies": {
- "isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true
- }
- }
- },
- "caller-callsite": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz",
- "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=",
- "dev": true,
- "requires": {
- "callsites": "^2.0.0"
- }
- },
- "caller-path": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz",
- "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=",
- "dev": true,
- "requires": {
- "caller-callsite": "^2.0.0"
- }
- },
- "callsites": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz",
- "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=",
- "dev": true
- },
- "camelcase": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
- "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
- "dev": true
- },
- "caniuse-lite": {
- "version": "1.0.30000985",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000985.tgz",
- "integrity": "sha512-1ngiwkgqAYPG0JSSUp3PUDGPKKY59EK7NrGGX+VOxaKCNzRbNc7uXMny+c3VJfZxtoK3wSImTvG9T9sXiTw2+w==",
- "dev": true
- },
- "capture-exit": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-1.2.0.tgz",
- "integrity": "sha1-HF/MSJ/QqwDU8ax64QcuMXP7q28=",
- "dev": true,
- "requires": {
- "rsvp": "^3.3.3"
- }
- },
- "chalk": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
- "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
- "dev": true,
- "requires": {
- "ansi-styles": "^2.2.1",
- "escape-string-regexp": "^1.0.2",
- "has-ansi": "^2.0.0",
- "strip-ansi": "^3.0.0",
- "supports-color": "^2.0.0"
- }
- },
- "chardet": {
- "version": "0.4.2",
- "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz",
- "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=",
- "dev": true
- },
- "class-utils": {
- "version": "0.3.6",
- "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
- "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
- "dev": true,
- "requires": {
- "arr-union": "^3.1.0",
- "define-property": "^0.2.5",
- "isobject": "^3.0.0",
- "static-extend": "^0.1.1"
- },
- "dependencies": {
- "arr-union": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
- "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
- "dev": true
- },
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- },
- "isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true
- }
- }
- },
- "cli-cursor": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
- "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
- "dev": true,
- "requires": {
- "restore-cursor": "^2.0.0"
- }
- },
- "cli-width": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz",
- "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=",
- "dev": true
- },
- "cliui": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
- "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
- "dev": true,
- "requires": {
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1",
- "wrap-ansi": "^2.0.0"
- },
- "dependencies": {
- "is-fullwidth-code-point": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
- "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
- "dev": true,
- "requires": {
- "number-is-nan": "^1.0.0"
- }
- },
- "string-width": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
- "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
- "dev": true,
- "requires": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
- }
- }
- }
- },
- "code-point-at": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
- "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
- "dev": true
- },
- "collection-visit": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
- "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
- "dev": true,
- "requires": {
- "map-visit": "^1.0.0",
- "object-visit": "^1.0.0"
- }
- },
- "color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "dev": true,
- "requires": {
- "color-name": "1.1.3"
- }
- },
- "color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
- "dev": true
- },
- "color-support": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
- "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==",
- "dev": true
- },
- "commander": {
- "version": "2.20.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz",
- "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==",
- "dev": true
- },
- "commondir": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
- "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=",
- "dev": true
- },
- "component-emitter": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
- "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==",
- "dev": true
- },
- "compressible": {
- "version": "2.0.17",
- "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.17.tgz",
- "integrity": "sha512-BGHeLCK1GV7j1bSmQQAi26X+GgWcTjLr/0tzSvMCl3LH1w1IJ4PFSPoV5316b30cneTziC+B1a+3OjoSUcQYmw==",
- "dev": true,
- "requires": {
- "mime-db": ">= 1.40.0 < 2"
- }
- },
- "compression": {
- "version": "1.7.4",
- "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz",
- "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==",
- "dev": true,
- "requires": {
- "accepts": "~1.3.5",
- "bytes": "3.0.0",
- "compressible": "~2.0.16",
- "debug": "2.6.9",
- "on-headers": "~1.0.2",
- "safe-buffer": "5.1.2",
- "vary": "~1.1.2"
- }
- },
- "concat-map": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
- "dev": true
- },
- "concat-stream": {
- "version": "1.6.2",
- "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
- "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
- "dev": true,
- "requires": {
- "buffer-from": "^1.0.0",
- "inherits": "^2.0.3",
- "readable-stream": "^2.2.2",
- "typedarray": "^0.0.6"
- }
- },
- "connect": {
- "version": "3.7.0",
- "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz",
- "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==",
- "dev": true,
- "requires": {
- "debug": "2.6.9",
- "finalhandler": "1.1.2",
- "parseurl": "~1.3.3",
- "utils-merge": "1.0.1"
- }
- },
- "convert-source-map": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz",
- "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==",
- "dev": true,
- "requires": {
- "safe-buffer": "~5.1.1"
- }
- },
- "copy-descriptor": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
- "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
- "dev": true
- },
- "core-js": {
- "version": "1.2.7",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz",
- "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=",
- "dev": true
- },
- "core-js-compat": {
- "version": "3.1.4",
- "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.1.4.tgz",
- "integrity": "sha512-Z5zbO9f1d0YrJdoaQhphVAnKPimX92D6z8lCGphH89MNRxlL1prI9ExJPqVwP0/kgkQCv8c4GJGT8X16yUncOg==",
- "dev": true,
- "requires": {
- "browserslist": "^4.6.2",
- "core-js-pure": "3.1.4",
- "semver": "^6.1.1"
- },
- "dependencies": {
- "semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "dev": true
- }
- }
- },
- "core-js-pure": {
- "version": "3.1.4",
- "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.1.4.tgz",
- "integrity": "sha512-uJ4Z7iPNwiu1foygbcZYJsJs1jiXrTTCvxfLDXNhI/I+NHbSIEyr548y4fcsCEyWY0XgfAG/qqaunJ1SThHenA==",
- "dev": true
- },
- "core-util-is": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
- "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
- "dev": true
- },
- "cosmiconfig": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz",
- "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==",
- "dev": true,
- "requires": {
- "import-fresh": "^2.0.0",
- "is-directory": "^0.3.1",
- "js-yaml": "^3.13.1",
- "parse-json": "^4.0.0"
- }
- },
- "create-react-class": {
- "version": "15.6.3",
- "resolved": "https://registry.npmjs.org/create-react-class/-/create-react-class-15.6.3.tgz",
- "integrity": "sha512-M+/3Q6E6DLO6Yx3OwrWjwHBnvfXXYA7W+dFjt/ZDBemHO1DDZhsalX/NUtnTYclN6GfnBDRh4qRHjcDHmlJBJg==",
- "dev": true,
- "requires": {
- "fbjs": "^0.8.9",
- "loose-envify": "^1.3.1",
- "object-assign": "^4.1.1"
- }
- },
- "cross-spawn": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
- "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
- "dev": true,
- "requires": {
- "lru-cache": "^4.0.1",
- "shebang-command": "^1.2.0",
- "which": "^1.2.9"
- }
- },
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dev": true,
- "requires": {
- "ms": "2.0.0"
- }
- },
- "decamelize": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
- "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
- "dev": true
- },
- "decode-uri-component": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
- "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
- "dev": true
- },
- "define-properties": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
- "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
- "dev": true,
- "requires": {
- "object-keys": "^1.0.12"
- }
- },
- "define-property": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
- "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
- "dev": true,
- "requires": {
- "is-descriptor": "^1.0.2",
- "isobject": "^3.0.1"
- },
- "dependencies": {
- "is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
- }
- },
- "isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true
- },
- "kind-of": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
- "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
- "dev": true
- }
- }
- },
- "delegates": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
- "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
- "dev": true
- },
- "denodeify": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/denodeify/-/denodeify-1.2.1.tgz",
- "integrity": "sha1-OjYof1A05pnnV3kBBSwubJQlFjE=",
- "dev": true
- },
- "depd": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
- "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
- "dev": true
- },
- "destroy": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
- "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=",
- "dev": true
- },
- "dom-walk": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.1.tgz",
- "integrity": "sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg=",
- "dev": true
- },
- "ee-first": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
- "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=",
- "dev": true
- },
- "electron-to-chromium": {
- "version": "1.3.200",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.200.tgz",
- "integrity": "sha512-PUurrpyDA74MuAjJRD+79ss5BqJlU3mdArRbuu4wO/dt6jc3Ic/6BDmFJxkdwbfq39cHf/XKm2vW98XSvut9Dg==",
- "dev": true
- },
- "encodeurl": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
- "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
- "dev": true
- },
- "encoding": {
- "version": "0.1.12",
- "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz",
- "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=",
- "dev": true,
- "requires": {
- "iconv-lite": "~0.4.13"
- }
- },
- "end-of-stream": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz",
- "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==",
- "dev": true,
- "requires": {
- "once": "^1.4.0"
- }
- },
- "envinfo": {
- "version": "5.12.1",
- "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-5.12.1.tgz",
- "integrity": "sha512-pwdo0/G3CIkQ0y6PCXq4RdkvId2elvtPCJMG0konqlrfkWQbf1DWeH9K2b/cvu2YgGvPPTOnonZxXM1gikFu1w==",
- "dev": true
- },
- "error-ex": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
- "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
- "dev": true,
- "requires": {
- "is-arrayish": "^0.2.1"
- }
- },
- "errorhandler": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/errorhandler/-/errorhandler-1.5.1.tgz",
- "integrity": "sha512-rcOwbfvP1WTViVoUjcfZicVzjhjTuhSMntHh6mW3IrEiyE6mJyXvsToJUJGlGlw/2xU9P5whlWNGlIDVeCiT4A==",
- "dev": true,
- "requires": {
- "accepts": "~1.3.7",
- "escape-html": "~1.0.3"
- }
- },
- "escape-html": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
- "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=",
- "dev": true
- },
- "escape-string-regexp": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
- "dev": true
- },
- "esprima": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
- "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
- "dev": true
- },
- "esutils": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
- "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
- "dev": true
- },
- "etag": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
- "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=",
- "dev": true
- },
- "event-target-shim": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-1.1.1.tgz",
- "integrity": "sha1-qG5e5r2qFgVEddp5fM3fDFVphJE=",
- "dev": true
- },
- "eventemitter3": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz",
- "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==",
- "dev": true
- },
- "exec-sh": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.2.2.tgz",
- "integrity": "sha512-FIUCJz1RbuS0FKTdaAafAByGS0CPvU3R0MeHxgtl+djzCc//F8HakL8GzmVNZanasTbTAY/3DRFA0KpVqj/eAw==",
- "dev": true,
- "requires": {
- "merge": "^1.2.0"
- }
- },
- "execa": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
- "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
- "dev": true,
- "requires": {
- "cross-spawn": "^5.0.1",
- "get-stream": "^3.0.0",
- "is-stream": "^1.1.0",
- "npm-run-path": "^2.0.0",
- "p-finally": "^1.0.0",
- "signal-exit": "^3.0.0",
- "strip-eof": "^1.0.0"
- }
- },
- "expand-brackets": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz",
- "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
- "dev": true,
- "requires": {
- "is-posix-bracket": "^0.1.0"
- }
- },
- "expand-range": {
- "version": "1.8.2",
- "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz",
- "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=",
- "dev": true,
- "requires": {
- "fill-range": "^2.1.0"
- }
- },
- "extend-shallow": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
- "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
- "dev": true,
- "requires": {
- "assign-symbols": "^1.0.0",
- "is-extendable": "^1.0.1"
- },
- "dependencies": {
- "is-extendable": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
- "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
- "dev": true,
- "requires": {
- "is-plain-object": "^2.0.4"
- }
- }
- }
- },
- "external-editor": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz",
- "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==",
- "dev": true,
- "requires": {
- "chardet": "^0.4.0",
- "iconv-lite": "^0.4.17",
- "tmp": "^0.0.33"
- }
- },
- "extglob": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz",
- "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
- "dev": true,
- "requires": {
- "is-extglob": "^1.0.0"
- }
- },
- "fancy-log": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz",
- "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==",
- "dev": true,
- "requires": {
- "ansi-gray": "^0.1.1",
- "color-support": "^1.1.3",
- "parse-node-version": "^1.0.0",
- "time-stamp": "^1.0.0"
- }
- },
- "fb-watchman": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.0.tgz",
- "integrity": "sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg=",
- "dev": true,
- "requires": {
- "bser": "^2.0.0"
- }
- },
- "fbjs": {
- "version": "0.8.17",
- "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz",
- "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=",
- "dev": true,
- "requires": {
- "core-js": "^1.0.0",
- "isomorphic-fetch": "^2.1.1",
- "loose-envify": "^1.0.0",
- "object-assign": "^4.1.0",
- "promise": "^7.1.1",
- "setimmediate": "^1.0.5",
- "ua-parser-js": "^0.7.18"
- }
- },
- "fbjs-css-vars": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz",
- "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==",
- "dev": true
- },
- "fbjs-scripts": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/fbjs-scripts/-/fbjs-scripts-1.2.0.tgz",
- "integrity": "sha512-5krZ8T0Bf8uky0abPoCLrfa7Orxd8UH4Qq8hRUF2RZYNMu+FmEOrBc7Ib3YVONmxTXTlLAvyrrdrVmksDb2OqQ==",
- "dev": true,
- "requires": {
- "@babel/core": "^7.0.0",
- "ansi-colors": "^1.0.1",
- "babel-preset-fbjs": "^3.2.0",
- "core-js": "^2.4.1",
- "cross-spawn": "^5.1.0",
- "fancy-log": "^1.3.2",
- "object-assign": "^4.0.1",
- "plugin-error": "^0.1.2",
- "semver": "^5.1.0",
- "through2": "^2.0.0"
- },
- "dependencies": {
- "core-js": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.9.tgz",
- "integrity": "sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A==",
- "dev": true
- }
- }
- },
- "figures": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
- "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
- "dev": true,
- "requires": {
- "escape-string-regexp": "^1.0.5"
- }
- },
- "filename-regex": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz",
- "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=",
- "dev": true
- },
- "fill-range": {
- "version": "2.2.4",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz",
- "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==",
- "dev": true,
- "requires": {
- "is-number": "^2.1.0",
- "isobject": "^2.0.0",
- "randomatic": "^3.0.0",
- "repeat-element": "^1.1.2",
- "repeat-string": "^1.5.2"
- }
- },
- "finalhandler": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
- "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
- "dev": true,
- "requires": {
- "debug": "2.6.9",
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "on-finished": "~2.3.0",
- "parseurl": "~1.3.3",
- "statuses": "~1.5.0",
- "unpipe": "~1.0.0"
- }
- },
- "find-cache-dir": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz",
- "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==",
- "dev": true,
- "requires": {
- "commondir": "^1.0.1",
- "make-dir": "^2.0.0",
- "pkg-dir": "^3.0.0"
- }
- },
- "find-up": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
- "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
- "dev": true,
- "requires": {
- "locate-path": "^2.0.0"
- }
- },
- "flow-bin": {
- "version": "0.103.0",
- "resolved": "https://registry.npmjs.org/flow-bin/-/flow-bin-0.103.0.tgz",
- "integrity": "sha512-Y3yrnE5ICN1Kl/y10BwjA3JSuS+gt4jVPNyUNCZb0RqmkdssMrW8QNNysJYvhgAY/JBJH8Qv7NVUf11MiwfSlA==",
- "dev": true
- },
- "for-in": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
- "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
- "dev": true
- },
- "for-own": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz",
- "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=",
- "dev": true,
- "requires": {
- "for-in": "^1.0.1"
- }
- },
- "fragment-cache": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
- "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
- "dev": true,
- "requires": {
- "map-cache": "^0.2.2"
- }
- },
- "fresh": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
- "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=",
- "dev": true
- },
- "fs-extra": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-1.0.0.tgz",
- "integrity": "sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA=",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "jsonfile": "^2.1.0",
- "klaw": "^1.0.0"
- }
- },
- "fs.realpath": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
- "dev": true
- },
- "fsevents": {
- "version": "1.2.9",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz",
- "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==",
- "dev": true,
- "optional": true,
- "requires": {
- "nan": "^2.12.1",
- "node-pre-gyp": "^0.12.0"
- },
- "dependencies": {
- "abbrev": {
- "version": "1.1.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "ansi-regex": {
- "version": "2.1.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "aproba": {
- "version": "1.2.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "are-we-there-yet": {
- "version": "1.1.5",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "delegates": "^1.0.0",
- "readable-stream": "^2.0.6"
- }
- },
- "balanced-match": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "brace-expansion": {
- "version": "1.1.11",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "chownr": {
- "version": "1.1.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "code-point-at": {
- "version": "1.1.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "concat-map": {
- "version": "0.0.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "console-control-strings": {
- "version": "1.1.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "core-util-is": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "debug": {
- "version": "4.1.1",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "ms": "^2.1.1"
- }
- },
- "deep-extend": {
- "version": "0.6.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "delegates": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "detect-libc": {
- "version": "1.0.3",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "fs-minipass": {
- "version": "1.2.5",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "minipass": "^2.2.1"
- }
- },
- "fs.realpath": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "gauge": {
- "version": "2.7.4",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "aproba": "^1.0.3",
- "console-control-strings": "^1.0.0",
- "has-unicode": "^2.0.0",
- "object-assign": "^4.1.0",
- "signal-exit": "^3.0.0",
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1",
- "wide-align": "^1.1.0"
- }
- },
- "glob": {
- "version": "7.1.3",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
- "has-unicode": {
- "version": "2.0.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "iconv-lite": {
- "version": "0.4.24",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "safer-buffer": ">= 2.1.2 < 3"
- }
- },
- "ignore-walk": {
- "version": "3.0.1",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "minimatch": "^3.0.4"
- }
- },
- "inflight": {
- "version": "1.0.6",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "inherits": {
- "version": "2.0.3",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "ini": {
- "version": "1.3.5",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "is-fullwidth-code-point": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "number-is-nan": "^1.0.0"
- }
- },
- "isarray": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "minimatch": {
- "version": "3.0.4",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- },
- "minimist": {
- "version": "0.0.8",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "minipass": {
- "version": "2.3.5",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "safe-buffer": "^5.1.2",
- "yallist": "^3.0.0"
- }
- },
- "minizlib": {
- "version": "1.2.1",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "minipass": "^2.2.1"
- }
- },
- "mkdirp": {
- "version": "0.5.1",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "minimist": "0.0.8"
- }
- },
- "ms": {
- "version": "2.1.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "needle": {
- "version": "2.3.0",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "debug": "^4.1.0",
- "iconv-lite": "^0.4.4",
- "sax": "^1.2.4"
- }
- },
- "node-pre-gyp": {
- "version": "0.12.0",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "detect-libc": "^1.0.2",
- "mkdirp": "^0.5.1",
- "needle": "^2.2.1",
- "nopt": "^4.0.1",
- "npm-packlist": "^1.1.6",
- "npmlog": "^4.0.2",
- "rc": "^1.2.7",
- "rimraf": "^2.6.1",
- "semver": "^5.3.0",
- "tar": "^4"
- }
- },
- "nopt": {
- "version": "4.0.1",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "abbrev": "1",
- "osenv": "^0.1.4"
- }
- },
- "npm-bundled": {
- "version": "1.0.6",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "npm-packlist": {
- "version": "1.4.1",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "ignore-walk": "^3.0.1",
- "npm-bundled": "^1.0.1"
- }
- },
- "npmlog": {
- "version": "4.1.2",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "are-we-there-yet": "~1.1.2",
- "console-control-strings": "~1.1.0",
- "gauge": "~2.7.3",
- "set-blocking": "~2.0.0"
- }
- },
- "number-is-nan": {
- "version": "1.0.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "object-assign": {
- "version": "4.1.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "once": {
- "version": "1.4.0",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "wrappy": "1"
- }
- },
- "os-homedir": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "os-tmpdir": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "osenv": {
- "version": "0.1.5",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "os-homedir": "^1.0.0",
- "os-tmpdir": "^1.0.0"
- }
- },
- "path-is-absolute": {
- "version": "1.0.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "process-nextick-args": {
- "version": "2.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "rc": {
- "version": "1.2.8",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "deep-extend": "^0.6.0",
- "ini": "~1.3.0",
- "minimist": "^1.2.0",
- "strip-json-comments": "~2.0.1"
- },
- "dependencies": {
- "minimist": {
- "version": "1.2.0",
- "bundled": true,
- "dev": true,
- "optional": true
- }
- }
- },
- "readable-stream": {
- "version": "2.3.6",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "rimraf": {
- "version": "2.6.3",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "glob": "^7.1.3"
- }
- },
- "safe-buffer": {
- "version": "5.1.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "safer-buffer": {
- "version": "2.1.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "sax": {
- "version": "1.2.4",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "semver": {
- "version": "5.7.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "set-blocking": {
- "version": "2.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "signal-exit": {
- "version": "3.0.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "string-width": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
- }
- },
- "string_decoder": {
- "version": "1.1.1",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- },
- "strip-ansi": {
- "version": "3.0.1",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "ansi-regex": "^2.0.0"
- }
- },
- "strip-json-comments": {
- "version": "2.0.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "tar": {
- "version": "4.4.8",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "chownr": "^1.1.1",
- "fs-minipass": "^1.2.5",
- "minipass": "^2.3.4",
- "minizlib": "^1.1.1",
- "mkdirp": "^0.5.0",
- "safe-buffer": "^5.1.2",
- "yallist": "^3.0.2"
- }
- },
- "util-deprecate": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "wide-align": {
- "version": "1.1.3",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "string-width": "^1.0.2 || 2"
- }
- },
- "wrappy": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "yallist": {
- "version": "3.0.3",
- "bundled": true,
- "dev": true,
- "optional": true
- }
- }
- },
- "function-bind": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
- "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
- "dev": true
- },
- "gauge": {
- "version": "1.2.7",
- "resolved": "https://registry.npmjs.org/gauge/-/gauge-1.2.7.tgz",
- "integrity": "sha1-6c7FSD09TuDvRLYKfZnkk14TbZM=",
- "dev": true,
- "requires": {
- "ansi": "^0.3.0",
- "has-unicode": "^2.0.0",
- "lodash.pad": "^4.1.0",
- "lodash.padend": "^4.1.0",
- "lodash.padstart": "^4.1.0"
- }
- },
- "get-caller-file": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz",
- "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==",
- "dev": true
- },
- "get-stream": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
- "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
- "dev": true
- },
- "get-value": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
- "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
- "dev": true
- },
- "glob": {
- "version": "7.1.4",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz",
- "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==",
- "dev": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
- "glob-base": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz",
- "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=",
- "dev": true,
- "requires": {
- "glob-parent": "^2.0.0",
- "is-glob": "^2.0.0"
- }
- },
- "glob-parent": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz",
- "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=",
- "dev": true,
- "requires": {
- "is-glob": "^2.0.0"
- }
- },
- "global": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz",
- "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==",
- "dev": true,
- "requires": {
- "min-document": "^2.19.0",
- "process": "^0.11.10"
- }
- },
- "globals": {
- "version": "11.12.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
- "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
- "dev": true
- },
- "graceful-fs": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.0.tgz",
- "integrity": "sha512-jpSvDPV4Cq/bgtpndIWbI5hmYxhQGHPC4d4cqBPb4DLniCfhJokdXhwhaDuLBGLQdvvRum/UiX6ECVIPvDXqdg==",
- "dev": true
- },
- "growly": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz",
- "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=",
- "dev": true
- },
- "has-ansi": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
- "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
- "dev": true,
- "requires": {
- "ansi-regex": "^2.0.0"
- }
- },
- "has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
- "dev": true
- },
- "has-symbols": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz",
- "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=",
- "dev": true
- },
- "has-unicode": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
- "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
- "dev": true
- },
- "has-value": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
- "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
- "dev": true,
- "requires": {
- "get-value": "^2.0.6",
- "has-values": "^1.0.0",
- "isobject": "^3.0.0"
- },
- "dependencies": {
- "isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true
- }
- }
- },
- "has-values": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
- "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
- "dev": true,
- "requires": {
- "is-number": "^3.0.0",
- "kind-of": "^4.0.0"
- },
- "dependencies": {
- "is-number": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
- "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "kind-of": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
- "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "hosted-git-info": {
- "version": "2.7.1",
- "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz",
- "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==",
- "dev": true
- },
- "http-errors": {
- "version": "1.7.3",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz",
- "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==",
- "dev": true,
- "requires": {
- "depd": "~1.1.2",
- "inherits": "2.0.4",
- "setprototypeof": "1.1.1",
- "statuses": ">= 1.5.0 < 2",
- "toidentifier": "1.0.0"
- }
- },
- "iconv-lite": {
- "version": "0.4.24",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
- "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
- "dev": true,
- "requires": {
- "safer-buffer": ">= 2.1.2 < 3"
- }
- },
- "image-size": {
- "version": "0.6.3",
- "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.6.3.tgz",
- "integrity": "sha512-47xSUiQioGaB96nqtp5/q55m0aBQSQdyIloMOc/x+QVTDZLNmXE892IIDrJ0hM1A5vcNUDD5tDffkSP5lCaIIA==",
- "dev": true
- },
- "import-fresh": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz",
- "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=",
- "dev": true,
- "requires": {
- "caller-path": "^2.0.0",
- "resolve-from": "^3.0.0"
- }
- },
- "imurmurhash": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
- "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
- "dev": true
- },
- "inflight": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
- "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
- "dev": true,
- "requires": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "inherits": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
- "dev": true
- },
- "inquirer": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz",
- "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==",
- "dev": true,
- "requires": {
- "ansi-escapes": "^3.0.0",
- "chalk": "^2.0.0",
- "cli-cursor": "^2.1.0",
- "cli-width": "^2.0.0",
- "external-editor": "^2.0.4",
- "figures": "^2.0.0",
- "lodash": "^4.3.0",
- "mute-stream": "0.0.7",
- "run-async": "^2.2.0",
- "rx-lite": "^4.0.8",
- "rx-lite-aggregates": "^4.0.8",
- "string-width": "^2.1.0",
- "strip-ansi": "^4.0.0",
- "through": "^2.3.6"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
- "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
- "dev": true
- },
- "ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
- "strip-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
- "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
- "dev": true,
- "requires": {
- "ansi-regex": "^3.0.0"
- }
- },
- "supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
- }
- },
- "interpret": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz",
- "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==",
- "dev": true
- },
- "invariant": {
- "version": "2.2.4",
- "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
- "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
- "dev": true,
- "requires": {
- "loose-envify": "^1.0.0"
- }
- },
- "invert-kv": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
- "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=",
- "dev": true
- },
- "is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-arrayish": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
- "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
- "dev": true
- },
- "is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true
- },
- "is-data-descriptor": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
- "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^0.1.6",
- "is-data-descriptor": "^0.1.4",
- "kind-of": "^5.0.0"
- },
- "dependencies": {
- "kind-of": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
- "dev": true
- }
- }
- },
- "is-directory": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz",
- "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=",
- "dev": true
- },
- "is-dotfile": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz",
- "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=",
- "dev": true
- },
- "is-equal-shallow": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz",
- "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=",
- "dev": true,
- "requires": {
- "is-primitive": "^2.0.0"
- }
- },
- "is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
- "dev": true
- },
- "is-extglob": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
- "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
- "dev": true
- },
- "is-fullwidth-code-point": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
- "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
- "dev": true
- },
- "is-glob": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
- "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
- "dev": true,
- "requires": {
- "is-extglob": "^1.0.0"
- }
- },
- "is-number": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz",
- "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-plain-object": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
- "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
- "dev": true,
- "requires": {
- "isobject": "^3.0.1"
- },
- "dependencies": {
- "isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true
- }
- }
- },
- "is-posix-bracket": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz",
- "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=",
- "dev": true
- },
- "is-primitive": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz",
- "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=",
- "dev": true
- },
- "is-promise": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
- "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=",
- "dev": true
- },
- "is-stream": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
- "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
- "dev": true
- },
- "is-windows": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
- "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
- "dev": true
- },
- "is-wsl": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
- "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=",
- "dev": true
- },
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
- "dev": true
- },
- "isexe": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
- "dev": true
- },
- "isobject": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
- "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
- "dev": true,
- "requires": {
- "isarray": "1.0.0"
- }
- },
- "isomorphic-fetch": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz",
- "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=",
- "dev": true,
- "requires": {
- "node-fetch": "^1.0.1",
- "whatwg-fetch": ">=0.10.0"
- }
- },
- "jest-haste-map": {
- "version": "24.0.0-alpha.6",
- "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.0.0-alpha.6.tgz",
- "integrity": "sha512-+NO2HMbjvrG8BC39ieLukdpFrcPhhjCJGhpbHodHNZygH1Tt06WrlNYGpZtWKx/zpf533tCtMQXO/q59JenjNw==",
- "dev": true,
- "requires": {
- "fb-watchman": "^2.0.0",
- "graceful-fs": "^4.1.11",
- "invariant": "^2.2.4",
- "jest-serializer": "^24.0.0-alpha.6",
- "jest-worker": "^24.0.0-alpha.6",
- "micromatch": "^2.3.11",
- "sane": "^3.0.0"
- }
- },
- "jest-serializer": {
- "version": "24.4.0",
- "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.4.0.tgz",
- "integrity": "sha512-k//0DtglVstc1fv+GY/VHDIjrtNjdYvYjMlbLUed4kxrE92sIUewOi5Hj3vrpB8CXfkJntRPDRjCrCvUhBdL8Q==",
- "dev": true
- },
- "jest-worker": {
- "version": "24.0.0-alpha.6",
- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.0.0-alpha.6.tgz",
- "integrity": "sha512-iXtH7MR9bjWlNnlnRBcrBRrb4cSVxML96La5vsnmBvDI+mJnkP5uEt6Fgpo5Y8f3z9y2Rd7wuPnKRxqQsiU/dA==",
- "dev": true,
- "requires": {
- "merge-stream": "^1.0.1"
- }
- },
- "js-levenshtein": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz",
- "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==",
- "dev": true
- },
- "js-tokens": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
- "dev": true
- },
- "js-yaml": {
- "version": "3.13.1",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
- "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
- "dev": true,
- "requires": {
- "argparse": "^1.0.7",
- "esprima": "^4.0.0"
- }
- },
- "jsesc": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
- "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
- "dev": true
- },
- "json-parse-better-errors": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
- "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
- "dev": true
- },
- "json-stable-stringify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz",
- "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=",
- "dev": true,
- "requires": {
- "jsonify": "~0.0.0"
- }
- },
- "json5": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz",
- "integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==",
- "dev": true,
- "requires": {
- "minimist": "^1.2.0"
- }
- },
- "jsonfile": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz",
- "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.6"
- }
- },
- "jsonify": {
- "version": "0.0.0",
- "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz",
- "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=",
- "dev": true
- },
- "kind-of": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
- "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
- "dev": true
- },
- "klaw": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz",
- "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.9"
- }
- },
- "lcid": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
- "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
- "dev": true,
- "requires": {
- "invert-kv": "^1.0.0"
- }
- },
- "load-json-file": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz",
- "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "parse-json": "^2.2.0",
- "pify": "^2.0.0",
- "strip-bom": "^3.0.0"
- },
- "dependencies": {
- "parse-json": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
- "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
- "dev": true,
- "requires": {
- "error-ex": "^1.2.0"
- }
- }
- }
- },
- "locate-path": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
- "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
- "dev": true,
- "requires": {
- "p-locate": "^2.0.0",
- "path-exists": "^3.0.0"
- }
- },
- "lodash": {
- "version": "4.17.15",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
- "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==",
- "dev": true
- },
- "lodash.pad": {
- "version": "4.5.1",
- "resolved": "https://registry.npmjs.org/lodash.pad/-/lodash.pad-4.5.1.tgz",
- "integrity": "sha1-QzCUmoM6fI2iLMIPaibE1Z3runA=",
- "dev": true
- },
- "lodash.padend": {
- "version": "4.6.1",
- "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz",
- "integrity": "sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4=",
- "dev": true
- },
- "lodash.padstart": {
- "version": "4.6.1",
- "resolved": "https://registry.npmjs.org/lodash.padstart/-/lodash.padstart-4.6.1.tgz",
- "integrity": "sha1-0uPuv/DZ05rVD1y9G1KnvOa7YRs=",
- "dev": true
- },
- "lodash.throttle": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz",
- "integrity": "sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ=",
- "dev": true
- },
- "loose-envify": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
- "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
- "dev": true,
- "requires": {
- "js-tokens": "^3.0.0 || ^4.0.0"
- }
- },
- "lru-cache": {
- "version": "4.1.5",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
- "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
- "dev": true,
- "requires": {
- "pseudomap": "^1.0.2",
- "yallist": "^2.1.2"
- }
- },
- "make-dir": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
- "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
- "dev": true,
- "requires": {
- "pify": "^4.0.1",
- "semver": "^5.6.0"
- },
- "dependencies": {
- "pify": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
- "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
- "dev": true
- }
- }
- },
- "makeerror": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz",
- "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=",
- "dev": true,
- "requires": {
- "tmpl": "1.0.x"
- }
- },
- "map-cache": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
- "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
- "dev": true
- },
- "map-visit": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
- "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
- "dev": true,
- "requires": {
- "object-visit": "^1.0.0"
- }
- },
- "math-random": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz",
- "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==",
- "dev": true
- },
- "mem": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz",
- "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=",
- "dev": true,
- "requires": {
- "mimic-fn": "^1.0.0"
- }
- },
- "merge": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz",
- "integrity": "sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==",
- "dev": true
- },
- "merge-stream": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz",
- "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=",
- "dev": true,
- "requires": {
- "readable-stream": "^2.0.1"
- }
- },
- "metro": {
- "version": "0.51.1",
- "resolved": "https://registry.npmjs.org/metro/-/metro-0.51.1.tgz",
- "integrity": "sha512-nM0dqn8LQlMjhChl2fzTUq2EWiUebZM7nkesD9vQe47W10bj/tbRLPiIIAxht6SRDbPd/hRA+t39PxLhPSKEKg==",
- "dev": true,
- "requires": {
- "@babel/core": "^7.0.0",
- "@babel/generator": "^7.0.0",
- "@babel/parser": "^7.0.0",
- "@babel/plugin-external-helpers": "^7.0.0",
- "@babel/template": "^7.0.0",
- "@babel/traverse": "^7.0.0",
- "@babel/types": "^7.0.0",
- "absolute-path": "^0.0.0",
- "async": "^2.4.0",
- "babel-preset-fbjs": "^3.0.1",
- "buffer-crc32": "^0.2.13",
- "chalk": "^2.4.1",
- "concat-stream": "^1.6.0",
- "connect": "^3.6.5",
- "debug": "^2.2.0",
- "denodeify": "^1.2.1",
- "eventemitter3": "^3.0.0",
- "fbjs": "^1.0.0",
- "fs-extra": "^1.0.0",
- "graceful-fs": "^4.1.3",
- "image-size": "^0.6.0",
- "invariant": "^2.2.4",
- "jest-haste-map": "24.0.0-alpha.6",
- "jest-worker": "24.0.0-alpha.6",
- "json-stable-stringify": "^1.0.1",
- "lodash.throttle": "^4.1.1",
- "merge-stream": "^1.0.1",
- "metro-babel-transformer": "0.51.1",
- "metro-cache": "0.51.1",
- "metro-config": "0.51.1",
- "metro-core": "0.51.1",
- "metro-minify-uglify": "0.51.1",
- "metro-react-native-babel-preset": "0.51.1",
- "metro-resolver": "0.51.1",
- "metro-source-map": "0.51.1",
- "mime-types": "2.1.11",
- "mkdirp": "^0.5.1",
- "node-fetch": "^2.2.0",
- "nullthrows": "^1.1.0",
- "react-transform-hmr": "^1.0.4",
- "resolve": "^1.5.0",
- "rimraf": "^2.5.4",
- "serialize-error": "^2.1.0",
- "source-map": "^0.5.6",
- "temp": "0.8.3",
- "throat": "^4.1.0",
- "wordwrap": "^1.0.0",
- "write-file-atomic": "^1.2.0",
- "ws": "^1.1.5",
- "xpipe": "^1.0.5",
- "yargs": "^9.0.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
- "core-js": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.9.tgz",
- "integrity": "sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A==",
- "dev": true
- },
- "fbjs": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-1.0.0.tgz",
- "integrity": "sha512-MUgcMEJaFhCaF1QtWGnmq9ZDRAzECTCRAF7O6UZIlAlkTs1SasiX9aP0Iw7wfD2mJ7wDTNfg2w7u5fSCwJk1OA==",
- "dev": true,
- "requires": {
- "core-js": "^2.4.1",
- "fbjs-css-vars": "^1.0.0",
- "isomorphic-fetch": "^2.1.1",
- "loose-envify": "^1.0.0",
- "object-assign": "^4.1.0",
- "promise": "^7.1.1",
- "setimmediate": "^1.0.5",
- "ua-parser-js": "^0.7.18"
- }
- },
- "mime-db": {
- "version": "1.23.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.23.0.tgz",
- "integrity": "sha1-oxtAcK2uon1zLqMzdApk0OyaZlk=",
- "dev": true
- },
- "mime-types": {
- "version": "2.1.11",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.11.tgz",
- "integrity": "sha1-wlnEcb2oCKhdbNGTtDCl+uRHOzw=",
- "dev": true,
- "requires": {
- "mime-db": "~1.23.0"
- }
- },
- "node-fetch": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz",
- "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==",
- "dev": true
- },
- "supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
- }
- },
- "metro-babel-register": {
- "version": "0.51.0",
- "resolved": "https://registry.npmjs.org/metro-babel-register/-/metro-babel-register-0.51.0.tgz",
- "integrity": "sha512-rhdvHFOZ7/ub019A3+aYs8YeLydb02/FAMsKr2Nz2Jlf6VUxWrMnrcT0NYX16F9TGdi2ulRlJ9dwvUmdhkk+Bw==",
- "dev": true,
- "requires": {
- "@babel/core": "^7.0.0",
- "@babel/plugin-proposal-class-properties": "^7.0.0",
- "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0",
- "@babel/plugin-proposal-object-rest-spread": "^7.0.0",
- "@babel/plugin-proposal-optional-catch-binding": "^7.0.0",
- "@babel/plugin-proposal-optional-chaining": "^7.0.0",
- "@babel/plugin-transform-async-to-generator": "^7.0.0",
- "@babel/plugin-transform-flow-strip-types": "^7.0.0",
- "@babel/plugin-transform-modules-commonjs": "^7.0.0",
- "@babel/register": "^7.0.0",
- "core-js": "^2.2.2",
- "escape-string-regexp": "^1.0.5"
- },
- "dependencies": {
- "core-js": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.9.tgz",
- "integrity": "sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A==",
- "dev": true
- }
- }
- },
- "metro-babel-transformer": {
- "version": "0.51.1",
- "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.51.1.tgz",
- "integrity": "sha512-+tOnZZzOzufB86ASdfimUEGB1jBKsdsVpPdjNJZkueTFyvYlGqWDQKHM1w9bwKMeM/czPQ48Y6m8Bou6le0X4w==",
- "dev": true,
- "requires": {
- "@babel/core": "^7.0.0"
- }
- },
- "metro-babel7-plugin-react-transform": {
- "version": "0.51.1",
- "resolved": "https://registry.npmjs.org/metro-babel7-plugin-react-transform/-/metro-babel7-plugin-react-transform-0.51.1.tgz",
- "integrity": "sha512-wzn4X9KgmAMZ7Bi6v9KxA7dw+AHGL0RODPxU5NDJ3A6d0yERvzfZ3qkzWhz8jbFkVBK12cu5DTho3HBazKQDOw==",
- "dev": true,
- "requires": {
- "@babel/helper-module-imports": "^7.0.0"
- }
- },
- "metro-cache": {
- "version": "0.51.1",
- "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.51.1.tgz",
- "integrity": "sha512-0m1+aicsw77LVAehNuTxDpE1c/7Xv/ajRD+UL/lFCWUxnrjSbxVtIKr8l5DxEY11082c1axVRuaV9e436W+eXg==",
- "dev": true,
- "requires": {
- "jest-serializer": "24.0.0-alpha.6",
- "metro-core": "0.51.1",
- "mkdirp": "^0.5.1",
- "rimraf": "^2.5.4"
- },
- "dependencies": {
- "jest-serializer": {
- "version": "24.0.0-alpha.6",
- "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.0.0-alpha.6.tgz",
- "integrity": "sha512-IPA5T6/GhlE6dedSk7Cd7YfuORnYjN0VD5iJVFn1Q81RJjpj++Hen5kJbKcg547vXsQ1TddV15qOA/zeIfOCLw==",
- "dev": true
- }
- }
- },
- "metro-config": {
- "version": "0.51.1",
- "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.51.1.tgz",
- "integrity": "sha512-WCNd0tTI9gb/ubgTqK1+ljZL4b3hsXVinsOAtep4nHiVb6DSDdbO2yXDD2rpYx3NE6hDRMFS9HHg6G0139pAqQ==",
- "dev": true,
- "requires": {
- "cosmiconfig": "^5.0.5",
- "metro": "0.51.1",
- "metro-cache": "0.51.1",
- "metro-core": "0.51.1",
- "pretty-format": "24.0.0-alpha.6"
- }
- },
- "metro-core": {
- "version": "0.51.1",
- "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.51.1.tgz",
- "integrity": "sha512-sG1yACjdFqmIzZN50HqLTKUMp1oy0AehHhmIuYeIllo1DjX6Y2o3UAT3rGP8U+SAqJGXf/OWzl6VNyRPGDENfA==",
- "dev": true,
- "requires": {
- "jest-haste-map": "24.0.0-alpha.6",
- "lodash.throttle": "^4.1.1",
- "metro-resolver": "0.51.1",
- "wordwrap": "^1.0.0"
- }
- },
- "metro-memory-fs": {
- "version": "0.51.1",
- "resolved": "https://registry.npmjs.org/metro-memory-fs/-/metro-memory-fs-0.51.1.tgz",
- "integrity": "sha512-dXVUpLPLwfQcYHd1HlqHGVzBsiwvUdT92TDSbdc10152TP+iynHBqLDWbxt0MAtd6c/QXwOuGZZ1IcX3+lv5iw==",
- "dev": true
- },
- "metro-minify-uglify": {
- "version": "0.51.1",
- "resolved": "https://registry.npmjs.org/metro-minify-uglify/-/metro-minify-uglify-0.51.1.tgz",
- "integrity": "sha512-HAqd/rFrQ6mnbqVAszDXIKTg2rqHlY9Fm8DReakgbkAeyMbF2mH3kEgtesPmTrhajdFk81UZcNSm6wxj1JMgVg==",
- "dev": true,
- "requires": {
- "uglify-es": "^3.1.9"
- }
- },
- "metro-react-native-babel-preset": {
- "version": "0.51.1",
- "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.51.1.tgz",
- "integrity": "sha512-e9tsYDFhU70gar0jQWcZXRPJVCv4k7tEs6Pm74wXO2OO/T1MEumbvniDIGwGG8bG8RUnYdHhjcaiub2Vc5BRWw==",
- "dev": true,
- "requires": {
- "@babel/plugin-proposal-class-properties": "^7.0.0",
- "@babel/plugin-proposal-export-default-from": "^7.0.0",
- "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0",
- "@babel/plugin-proposal-object-rest-spread": "^7.0.0",
- "@babel/plugin-proposal-optional-catch-binding": "^7.0.0",
- "@babel/plugin-proposal-optional-chaining": "^7.0.0",
- "@babel/plugin-syntax-dynamic-import": "^7.0.0",
- "@babel/plugin-syntax-export-default-from": "^7.0.0",
- "@babel/plugin-transform-arrow-functions": "^7.0.0",
- "@babel/plugin-transform-block-scoping": "^7.0.0",
- "@babel/plugin-transform-classes": "^7.0.0",
- "@babel/plugin-transform-computed-properties": "^7.0.0",
- "@babel/plugin-transform-destructuring": "^7.0.0",
- "@babel/plugin-transform-exponentiation-operator": "^7.0.0",
- "@babel/plugin-transform-flow-strip-types": "^7.0.0",
- "@babel/plugin-transform-for-of": "^7.0.0",
- "@babel/plugin-transform-function-name": "^7.0.0",
- "@babel/plugin-transform-literals": "^7.0.0",
- "@babel/plugin-transform-modules-commonjs": "^7.0.0",
- "@babel/plugin-transform-object-assign": "^7.0.0",
- "@babel/plugin-transform-parameters": "^7.0.0",
- "@babel/plugin-transform-react-display-name": "^7.0.0",
- "@babel/plugin-transform-react-jsx": "^7.0.0",
- "@babel/plugin-transform-react-jsx-source": "^7.0.0",
- "@babel/plugin-transform-regenerator": "^7.0.0",
- "@babel/plugin-transform-runtime": "^7.0.0",
- "@babel/plugin-transform-shorthand-properties": "^7.0.0",
- "@babel/plugin-transform-spread": "^7.0.0",
- "@babel/plugin-transform-sticky-regex": "^7.0.0",
- "@babel/plugin-transform-template-literals": "^7.0.0",
- "@babel/plugin-transform-typescript": "^7.0.0",
- "@babel/plugin-transform-unicode-regex": "^7.0.0",
- "@babel/template": "^7.0.0",
- "metro-babel7-plugin-react-transform": "0.51.1",
- "react-transform-hmr": "^1.0.4"
- }
- },
- "metro-react-native-babel-transformer": {
- "version": "0.51.1",
- "resolved": "https://registry.npmjs.org/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.51.1.tgz",
- "integrity": "sha512-D0KU+JPb/Z76nUWt3+bkjKggOlGvqAVI2BpIH2JFKprpUyBjWaCRqHnkBfZGixYwUfmu93MIlKJWr6iKzzFrlg==",
- "dev": true,
- "requires": {
- "@babel/core": "^7.0.0",
- "babel-preset-fbjs": "^3.0.1",
- "metro-babel-transformer": "0.51.1",
- "metro-react-native-babel-preset": "0.51.1"
- },
- "dependencies": {
- "metro-babel7-plugin-react-transform": {
- "version": "0.51.1",
- "resolved": "https://registry.npmjs.org/metro-babel7-plugin-react-transform/-/metro-babel7-plugin-react-transform-0.51.1.tgz",
- "integrity": "sha512-wzn4X9KgmAMZ7Bi6v9KxA7dw+AHGL0RODPxU5NDJ3A6d0yERvzfZ3qkzWhz8jbFkVBK12cu5DTho3HBazKQDOw==",
- "dev": true,
- "requires": {
- "@babel/helper-module-imports": "^7.0.0"
- }
- },
- "metro-react-native-babel-preset": {
- "version": "0.51.1",
- "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.51.1.tgz",
- "integrity": "sha512-e9tsYDFhU70gar0jQWcZXRPJVCv4k7tEs6Pm74wXO2OO/T1MEumbvniDIGwGG8bG8RUnYdHhjcaiub2Vc5BRWw==",
- "dev": true,
- "requires": {
- "@babel/plugin-proposal-class-properties": "^7.0.0",
- "@babel/plugin-proposal-export-default-from": "^7.0.0",
- "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0",
- "@babel/plugin-proposal-object-rest-spread": "^7.0.0",
- "@babel/plugin-proposal-optional-catch-binding": "^7.0.0",
- "@babel/plugin-proposal-optional-chaining": "^7.0.0",
- "@babel/plugin-syntax-dynamic-import": "^7.0.0",
- "@babel/plugin-syntax-export-default-from": "^7.0.0",
- "@babel/plugin-transform-arrow-functions": "^7.0.0",
- "@babel/plugin-transform-block-scoping": "^7.0.0",
- "@babel/plugin-transform-classes": "^7.0.0",
- "@babel/plugin-transform-computed-properties": "^7.0.0",
- "@babel/plugin-transform-destructuring": "^7.0.0",
- "@babel/plugin-transform-exponentiation-operator": "^7.0.0",
- "@babel/plugin-transform-flow-strip-types": "^7.0.0",
- "@babel/plugin-transform-for-of": "^7.0.0",
- "@babel/plugin-transform-function-name": "^7.0.0",
- "@babel/plugin-transform-literals": "^7.0.0",
- "@babel/plugin-transform-modules-commonjs": "^7.0.0",
- "@babel/plugin-transform-object-assign": "^7.0.0",
- "@babel/plugin-transform-parameters": "^7.0.0",
- "@babel/plugin-transform-react-display-name": "^7.0.0",
- "@babel/plugin-transform-react-jsx": "^7.0.0",
- "@babel/plugin-transform-react-jsx-source": "^7.0.0",
- "@babel/plugin-transform-regenerator": "^7.0.0",
- "@babel/plugin-transform-runtime": "^7.0.0",
- "@babel/plugin-transform-shorthand-properties": "^7.0.0",
- "@babel/plugin-transform-spread": "^7.0.0",
- "@babel/plugin-transform-sticky-regex": "^7.0.0",
- "@babel/plugin-transform-template-literals": "^7.0.0",
- "@babel/plugin-transform-typescript": "^7.0.0",
- "@babel/plugin-transform-unicode-regex": "^7.0.0",
- "@babel/template": "^7.0.0",
- "metro-babel7-plugin-react-transform": "0.51.1",
- "react-transform-hmr": "^1.0.4"
- }
- }
- }
- },
- "metro-resolver": {
- "version": "0.51.1",
- "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.51.1.tgz",
- "integrity": "sha512-zmWbD/287NDA/jLPuPV0hne/YMMSG0dljzu21TYMg2lXRLur/zROJHHhyepZvuBHgInXBi4Vhr2wvuSnY39SuA==",
- "dev": true,
- "requires": {
- "absolute-path": "^0.0.0"
- }
- },
- "metro-source-map": {
- "version": "0.51.1",
- "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.51.1.tgz",
- "integrity": "sha512-JyrE+RV4YumrboHPHTGsUUGERjQ681ImRLrSYDGcmNv4tfpk9nvAK26UAas4IvBYFCC9oW90m0udt3kaQGv59Q==",
- "dev": true,
- "requires": {
- "source-map": "^0.5.6"
- }
- },
- "micromatch": {
- "version": "2.3.11",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz",
- "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=",
- "dev": true,
- "requires": {
- "arr-diff": "^2.0.0",
- "array-unique": "^0.2.1",
- "braces": "^1.8.2",
- "expand-brackets": "^0.1.4",
- "extglob": "^0.3.1",
- "filename-regex": "^2.0.0",
- "is-extglob": "^1.0.0",
- "is-glob": "^2.0.1",
- "kind-of": "^3.0.2",
- "normalize-path": "^2.0.1",
- "object.omit": "^2.0.0",
- "parse-glob": "^3.0.4",
- "regex-cache": "^0.4.2"
- },
- "dependencies": {
- "arr-diff": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz",
- "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
- "dev": true,
- "requires": {
- "arr-flatten": "^1.0.1"
- }
- },
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "mime": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
- "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
- "dev": true
- },
- "mime-db": {
- "version": "1.40.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz",
- "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==",
- "dev": true
- },
- "mime-types": {
- "version": "2.1.24",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz",
- "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==",
- "dev": true,
- "requires": {
- "mime-db": "1.40.0"
- }
- },
- "mimic-fn": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
- "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==",
- "dev": true
- },
- "min-document": {
- "version": "2.19.0",
- "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz",
- "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=",
- "dev": true,
- "requires": {
- "dom-walk": "^0.1.0"
- }
- },
- "minimatch": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
- "dev": true,
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- },
- "minimist": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
- "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
- "dev": true
- },
- "mixin-deep": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
- "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==",
- "dev": true,
- "requires": {
- "for-in": "^1.0.2",
- "is-extendable": "^1.0.1"
- },
- "dependencies": {
- "is-extendable": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
- "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
- "dev": true,
- "requires": {
- "is-plain-object": "^2.0.4"
- }
- }
- }
- },
- "mkdirp": {
- "version": "0.5.1",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
- "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
- "dev": true,
- "requires": {
- "minimist": "0.0.8"
- },
- "dependencies": {
- "minimist": {
- "version": "0.0.8",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
- "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
- "dev": true
- }
- }
- },
- "morgan": {
- "version": "1.9.1",
- "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.1.tgz",
- "integrity": "sha512-HQStPIV4y3afTiCYVxirakhlCfGkI161c76kKFca7Fk1JusM//Qeo1ej2XaMniiNeaZklMVrh3vTtIzpzwbpmA==",
- "dev": true,
- "requires": {
- "basic-auth": "~2.0.0",
- "debug": "2.6.9",
- "depd": "~1.1.2",
- "on-finished": "~2.3.0",
- "on-headers": "~1.0.1"
- }
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
- "dev": true
- },
- "mute-stream": {
- "version": "0.0.7",
- "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
- "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=",
- "dev": true
- },
- "nan": {
- "version": "2.14.0",
- "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz",
- "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==",
- "dev": true,
- "optional": true
- },
- "nanomatch": {
- "version": "1.2.13",
- "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
- "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
- "dev": true,
- "requires": {
- "arr-diff": "^4.0.0",
- "array-unique": "^0.3.2",
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "fragment-cache": "^0.2.1",
- "is-windows": "^1.0.2",
- "kind-of": "^6.0.2",
- "object.pick": "^1.3.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
- },
- "dependencies": {
- "arr-diff": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
- "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
- "dev": true
- },
- "array-unique": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
- "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
- "dev": true
- },
- "extend-shallow": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
- "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
- "dev": true,
- "requires": {
- "assign-symbols": "^1.0.0",
- "is-extendable": "^1.0.1"
- }
- },
- "is-extendable": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
- "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
- "dev": true,
- "requires": {
- "is-plain-object": "^2.0.4"
- }
- },
- "kind-of": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
- "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
- "dev": true
- }
- }
- },
- "negotiator": {
- "version": "0.6.2",
- "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
- "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==",
- "dev": true
- },
- "nice-try": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
- "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
- "dev": true
- },
- "node-fetch": {
- "version": "1.7.3",
- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz",
- "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==",
- "dev": true,
- "requires": {
- "encoding": "^0.1.11",
- "is-stream": "^1.0.1"
- }
- },
- "node-int64": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz",
- "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=",
- "dev": true
- },
- "node-modules-regexp": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz",
- "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=",
- "dev": true
- },
- "node-notifier": {
- "version": "5.4.0",
- "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.0.tgz",
- "integrity": "sha512-SUDEb+o71XR5lXSTyivXd9J7fCloE3SyP4lSgt3lU2oSANiox+SxlNRGPjDKrwU1YN3ix2KN/VGGCg0t01rttQ==",
- "dev": true,
- "requires": {
- "growly": "^1.3.0",
- "is-wsl": "^1.1.0",
- "semver": "^5.5.0",
- "shellwords": "^0.1.1",
- "which": "^1.3.0"
- }
- },
- "node-releases": {
- "version": "1.1.26",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.26.tgz",
- "integrity": "sha512-fZPsuhhUHMTlfkhDLGtfY80DSJTjOcx+qD1j5pqPkuhUHVS7xHZIg9EE4DHK8O3f0zTxXHX5VIkDG8pu98/wfQ==",
- "dev": true,
- "requires": {
- "semver": "^5.3.0"
- }
- },
- "normalize-package-data": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
- "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
- "dev": true,
- "requires": {
- "hosted-git-info": "^2.1.4",
- "resolve": "^1.10.0",
- "semver": "2 || 3 || 4 || 5",
- "validate-npm-package-license": "^3.0.1"
- }
- },
- "normalize-path": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
- "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
- "dev": true,
- "requires": {
- "remove-trailing-separator": "^1.0.1"
- }
- },
- "npm-run-path": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
- "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
- "dev": true,
- "requires": {
- "path-key": "^2.0.0"
- }
- },
- "npmlog": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-2.0.4.tgz",
- "integrity": "sha1-mLUlMPJRTKkNCexbIsiEZyI3VpI=",
- "dev": true,
- "requires": {
- "ansi": "~0.3.1",
- "are-we-there-yet": "~1.1.2",
- "gauge": "~1.2.5"
- }
- },
- "nullthrows": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz",
- "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==",
- "dev": true
- },
- "number-is-nan": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
- "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
- "dev": true
- },
- "object-assign": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
- "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
- "dev": true
- },
- "object-copy": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
- "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
- "dev": true,
- "requires": {
- "copy-descriptor": "^0.1.0",
- "define-property": "^0.2.5",
- "kind-of": "^3.0.3"
- },
- "dependencies": {
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- },
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "object-keys": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
- "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
- "dev": true
- },
- "object-visit": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
- "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
- "dev": true,
- "requires": {
- "isobject": "^3.0.0"
- },
- "dependencies": {
- "isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true
- }
- }
- },
- "object.assign": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz",
- "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==",
- "dev": true,
- "requires": {
- "define-properties": "^1.1.2",
- "function-bind": "^1.1.1",
- "has-symbols": "^1.0.0",
- "object-keys": "^1.0.11"
- }
- },
- "object.omit": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz",
- "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=",
- "dev": true,
- "requires": {
- "for-own": "^0.1.4",
- "is-extendable": "^0.1.1"
- }
- },
- "object.pick": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
- "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
- "dev": true,
- "requires": {
- "isobject": "^3.0.1"
- },
- "dependencies": {
- "isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true
- }
- }
- },
- "on-finished": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
- "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
- "dev": true,
- "requires": {
- "ee-first": "1.1.1"
- }
- },
- "on-headers": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
- "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==",
- "dev": true
- },
- "once": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
- "dev": true,
- "requires": {
- "wrappy": "1"
- }
- },
- "onetime": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
- "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
- "dev": true,
- "requires": {
- "mimic-fn": "^1.0.0"
- }
- },
- "opn": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/opn/-/opn-3.0.3.tgz",
- "integrity": "sha1-ttmec5n3jWXDuq/+8fsojpuFJDo=",
- "dev": true,
- "requires": {
- "object-assign": "^4.0.1"
- }
- },
- "optimist": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
- "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
- "dev": true,
- "requires": {
- "minimist": "~0.0.1",
- "wordwrap": "~0.0.2"
- },
- "dependencies": {
- "minimist": {
- "version": "0.0.10",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz",
- "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=",
- "dev": true
- },
- "wordwrap": {
- "version": "0.0.3",
- "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
- "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=",
- "dev": true
- }
- }
- },
- "options": {
- "version": "0.0.6",
- "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz",
- "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=",
- "dev": true
- },
- "os-locale": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz",
- "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==",
- "dev": true,
- "requires": {
- "execa": "^0.7.0",
- "lcid": "^1.0.0",
- "mem": "^1.1.0"
- }
- },
- "os-tmpdir": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
- "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
- "dev": true
- },
- "p-finally": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
- "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
- "dev": true
- },
- "p-limit": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
- "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
- "dev": true,
- "requires": {
- "p-try": "^1.0.0"
- }
- },
- "p-locate": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
- "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
- "dev": true,
- "requires": {
- "p-limit": "^1.1.0"
- }
- },
- "p-try": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
- "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
- "dev": true
- },
- "parse-glob": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz",
- "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=",
- "dev": true,
- "requires": {
- "glob-base": "^0.3.0",
- "is-dotfile": "^1.0.0",
- "is-extglob": "^1.0.0",
- "is-glob": "^2.0.0"
- }
- },
- "parse-json": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
- "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
- "dev": true,
- "requires": {
- "error-ex": "^1.3.1",
- "json-parse-better-errors": "^1.0.1"
- }
- },
- "parse-node-version": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz",
- "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==",
- "dev": true
- },
- "parseurl": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
- "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
- "dev": true
- },
- "pascalcase": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
- "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
- "dev": true
- },
- "path-exists": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
- "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
- "dev": true
- },
- "path-is-absolute": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
- "dev": true
- },
- "path-key": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
- "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
- "dev": true
- },
- "path-parse": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
- "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
- "dev": true
- },
- "path-type": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz",
- "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=",
- "dev": true,
- "requires": {
- "pify": "^2.0.0"
- }
- },
- "pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
- "dev": true
- },
- "pirates": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz",
- "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==",
- "dev": true,
- "requires": {
- "node-modules-regexp": "^1.0.0"
- }
- },
- "pkg-dir": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
- "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
- "dev": true,
- "requires": {
- "find-up": "^3.0.0"
- },
- "dependencies": {
- "find-up": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
- "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
- "dev": true,
- "requires": {
- "locate-path": "^3.0.0"
- }
- },
- "locate-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
- "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
- "dev": true,
- "requires": {
- "p-locate": "^3.0.0",
- "path-exists": "^3.0.0"
- }
- },
- "p-limit": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz",
- "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==",
- "dev": true,
- "requires": {
- "p-try": "^2.0.0"
- }
- },
- "p-locate": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
- "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
- "dev": true,
- "requires": {
- "p-limit": "^2.0.0"
- }
- },
- "p-try": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
- "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
- "dev": true
- }
- }
- },
- "plist": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.1.tgz",
- "integrity": "sha512-GpgvHHocGRyQm74b6FWEZZVRroHKE1I0/BTjAmySaohK+cUn+hZpbqXkc3KWgW3gQYkqcQej35FohcT0FRlkRQ==",
- "dev": true,
- "requires": {
- "base64-js": "^1.2.3",
- "xmlbuilder": "^9.0.7",
- "xmldom": "0.1.x"
- }
- },
- "plugin-error": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-0.1.2.tgz",
- "integrity": "sha1-O5uzM1zPAPQl4HQ34ZJ2ln2kes4=",
- "dev": true,
- "requires": {
- "ansi-cyan": "^0.1.1",
- "ansi-red": "^0.1.1",
- "arr-diff": "^1.0.1",
- "arr-union": "^2.0.1",
- "extend-shallow": "^1.1.2"
- },
- "dependencies": {
- "arr-diff": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-1.1.0.tgz",
- "integrity": "sha1-aHwydYFjWI/vfeezb6vklesaOZo=",
- "dev": true,
- "requires": {
- "arr-flatten": "^1.0.1",
- "array-slice": "^0.2.3"
- }
- },
- "extend-shallow": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz",
- "integrity": "sha1-Gda/lN/AnXa6cR85uHLSH/TdkHE=",
- "dev": true,
- "requires": {
- "kind-of": "^1.1.0"
- }
- },
- "kind-of": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz",
- "integrity": "sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ=",
- "dev": true
- }
- }
- },
- "posix-character-classes": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
- "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
- "dev": true
- },
- "preserve": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz",
- "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=",
- "dev": true
- },
- "pretty-format": {
- "version": "24.0.0-alpha.6",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.0.0-alpha.6.tgz",
- "integrity": "sha512-zG2m6YJeuzwBFqb5EIdmwYVf30sap+iMRuYNPytOccEXZMAJbPIFGKVJ/U0WjQegmnQbRo9CI7j6j3HtDaifiA==",
- "dev": true,
- "requires": {
- "ansi-regex": "^4.0.0",
- "ansi-styles": "^3.2.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
- "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
- "dev": true
- },
- "ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
- "requires": {
- "color-convert": "^1.9.0"
- }
- }
- }
- },
- "private": {
- "version": "0.1.8",
- "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
- "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==",
- "dev": true
- },
- "process": {
- "version": "0.11.10",
- "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
- "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
- "dev": true
- },
- "process-nextick-args": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
- "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
- "dev": true
- },
- "promise": {
- "version": "7.3.1",
- "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz",
- "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==",
- "dev": true,
- "requires": {
- "asap": "~2.0.3"
- }
- },
- "prop-types": {
- "version": "15.7.2",
- "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz",
- "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==",
- "dev": true,
- "requires": {
- "loose-envify": "^1.4.0",
- "object-assign": "^4.1.1",
- "react-is": "^16.8.1"
- }
- },
- "pseudomap": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
- "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
- "dev": true
- },
- "pump": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
- "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
- "dev": true,
- "requires": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- },
- "randomatic": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz",
- "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==",
- "dev": true,
- "requires": {
- "is-number": "^4.0.0",
- "kind-of": "^6.0.0",
- "math-random": "^1.0.1"
- },
- "dependencies": {
- "is-number": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
- "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==",
- "dev": true
- },
- "kind-of": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
- "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
- "dev": true
- }
- }
- },
- "range-parser": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
- "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
- "dev": true
- },
- "react": {
- "version": "16.8.3",
- "resolved": "https://registry.npmjs.org/react/-/react-16.8.3.tgz",
- "integrity": "sha512-3UoSIsEq8yTJuSu0luO1QQWYbgGEILm+eJl2QN/VLDi7hL+EN18M3q3oVZwmVzzBJ3DkM7RMdRwBmZZ+b4IzSA==",
- "dev": true,
- "requires": {
- "loose-envify": "^1.1.0",
- "object-assign": "^4.1.1",
- "prop-types": "^15.6.2",
- "scheduler": "^0.13.3"
- }
- },
- "react-clone-referenced-element": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/react-clone-referenced-element/-/react-clone-referenced-element-1.1.0.tgz",
- "integrity": "sha512-FKOsfKbBkPxYE8576EM6uAfHC4rnMpLyH6/TJUL4WcHUEB3EUn8AxPjnnV/IiwSSzsClvHYK+sDELKN/EJ0WYg==",
- "dev": true
- },
- "react-deep-force-update": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/react-deep-force-update/-/react-deep-force-update-1.1.2.tgz",
- "integrity": "sha512-WUSQJ4P/wWcusaH+zZmbECOk7H5N2pOIl0vzheeornkIMhu+qrNdGFm0bDZLCb0hSF0jf/kH1SgkNGfBdTc4wA==",
- "dev": true
- },
- "react-devtools-core": {
- "version": "3.6.2",
- "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-3.6.2.tgz",
- "integrity": "sha512-a5r2Er0PajtlvKYBUKzB3vW5qek8TbgQWwRruDEwTm3VnqVffHmnvApRil/lfkAa8ghXcESNizrtKu/18oG55Q==",
- "dev": true,
- "requires": {
- "shell-quote": "^1.6.1",
- "ws": "^3.3.1"
- },
- "dependencies": {
- "ultron": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz",
- "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==",
- "dev": true
- },
- "ws": {
- "version": "3.3.3",
- "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz",
- "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==",
- "dev": true,
- "requires": {
- "async-limiter": "~1.0.0",
- "safe-buffer": "~5.1.0",
- "ultron": "~1.1.0"
- }
- }
- }
- },
- "react-is": {
- "version": "16.8.6",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.6.tgz",
- "integrity": "sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA==",
- "dev": true
- },
- "react-native": {
- "version": "0.59.5",
- "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.59.5.tgz",
- "integrity": "sha512-8Q/9cS6IMsGNiFhJgzmncbUeuacXQMe5EJl0c63fW30DvjEjeTVCvhM08eGzSpsNlOvL2XDRa4YOiCrwI7S1TA==",
- "dev": true,
- "requires": {
- "@babel/runtime": "^7.0.0",
- "@react-native-community/cli": "^1.2.1",
- "absolute-path": "^0.0.0",
- "art": "^0.10.0",
- "base64-js": "^1.1.2",
- "chalk": "^2.4.1",
- "commander": "^2.9.0",
- "compression": "^1.7.1",
- "connect": "^3.6.5",
- "create-react-class": "^15.6.3",
- "debug": "^2.2.0",
- "denodeify": "^1.2.1",
- "errorhandler": "^1.5.0",
- "escape-string-regexp": "^1.0.5",
- "event-target-shim": "^1.0.5",
- "fbjs": "^1.0.0",
- "fbjs-scripts": "^1.0.0",
- "fs-extra": "^1.0.0",
- "glob": "^7.1.1",
- "graceful-fs": "^4.1.3",
- "inquirer": "^3.0.6",
- "invariant": "^2.2.4",
- "lodash": "^4.17.5",
- "metro-babel-register": "0.51.0",
- "metro-react-native-babel-transformer": "0.51.0",
- "mime": "^1.3.4",
- "minimist": "^1.2.0",
- "mkdirp": "^0.5.1",
- "morgan": "^1.9.0",
- "node-fetch": "^2.2.0",
- "node-notifier": "^5.2.1",
- "npmlog": "^2.0.4",
- "nullthrows": "^1.1.0",
- "opn": "^3.0.2",
- "optimist": "^0.6.1",
- "plist": "^3.0.0",
- "pretty-format": "24.0.0-alpha.6",
- "promise": "^7.1.1",
- "prop-types": "^15.5.8",
- "react-clone-referenced-element": "^1.0.1",
- "react-devtools-core": "^3.6.0",
- "regenerator-runtime": "^0.11.0",
- "rimraf": "^2.5.4",
- "semver": "^5.0.3",
- "serve-static": "^1.13.1",
- "shell-quote": "1.6.1",
- "stacktrace-parser": "^0.1.3",
- "ws": "^1.1.5",
- "xmldoc": "^0.4.0",
- "yargs": "^9.0.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
- "core-js": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.9.tgz",
- "integrity": "sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A==",
- "dev": true
- },
- "fbjs": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-1.0.0.tgz",
- "integrity": "sha512-MUgcMEJaFhCaF1QtWGnmq9ZDRAzECTCRAF7O6UZIlAlkTs1SasiX9aP0Iw7wfD2mJ7wDTNfg2w7u5fSCwJk1OA==",
- "dev": true,
- "requires": {
- "core-js": "^2.4.1",
- "fbjs-css-vars": "^1.0.0",
- "isomorphic-fetch": "^2.1.1",
- "loose-envify": "^1.0.0",
- "object-assign": "^4.1.0",
- "promise": "^7.1.1",
- "setimmediate": "^1.0.5",
- "ua-parser-js": "^0.7.18"
- }
- },
- "metro-babel-transformer": {
- "version": "0.51.0",
- "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.51.0.tgz",
- "integrity": "sha512-M7KEY/hjD3E8tJEliWgI0VOSaJtqaznC0ItM6FiMrhoGDqqa1BvGofl+EPcKqjBSOV1UgExua/T1VOIWbjwQsw==",
- "dev": true,
- "requires": {
- "@babel/core": "^7.0.0"
- }
- },
- "metro-babel7-plugin-react-transform": {
- "version": "0.51.0",
- "resolved": "https://registry.npmjs.org/metro-babel7-plugin-react-transform/-/metro-babel7-plugin-react-transform-0.51.0.tgz",
- "integrity": "sha512-dZ95kXcE2FJMoRsYhxr7YLCbOlHWKwe0bOpihRhfImDTgFfuKIzU4ROQwMUbE0NCbzB+ATFsa2FZ3pHDJ5GI0w==",
- "dev": true,
- "requires": {
- "@babel/helper-module-imports": "^7.0.0"
- }
- },
- "metro-react-native-babel-preset": {
- "version": "0.51.0",
- "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.51.0.tgz",
- "integrity": "sha512-Y/aPeLl4RzY8IEAneOyDcpdjto/8yjIuX9eUWRngjSqdHYhGQtqiSBpfTpo0BvXpwNRLwCLHyXo58gNpckTJFw==",
- "dev": true,
- "requires": {
- "@babel/plugin-proposal-class-properties": "^7.0.0",
- "@babel/plugin-proposal-export-default-from": "^7.0.0",
- "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0",
- "@babel/plugin-proposal-object-rest-spread": "^7.0.0",
- "@babel/plugin-proposal-optional-catch-binding": "^7.0.0",
- "@babel/plugin-proposal-optional-chaining": "^7.0.0",
- "@babel/plugin-syntax-dynamic-import": "^7.0.0",
- "@babel/plugin-syntax-export-default-from": "^7.0.0",
- "@babel/plugin-transform-arrow-functions": "^7.0.0",
- "@babel/plugin-transform-block-scoping": "^7.0.0",
- "@babel/plugin-transform-classes": "^7.0.0",
- "@babel/plugin-transform-computed-properties": "^7.0.0",
- "@babel/plugin-transform-destructuring": "^7.0.0",
- "@babel/plugin-transform-exponentiation-operator": "^7.0.0",
- "@babel/plugin-transform-flow-strip-types": "^7.0.0",
- "@babel/plugin-transform-for-of": "^7.0.0",
- "@babel/plugin-transform-function-name": "^7.0.0",
- "@babel/plugin-transform-literals": "^7.0.0",
- "@babel/plugin-transform-modules-commonjs": "^7.0.0",
- "@babel/plugin-transform-object-assign": "^7.0.0",
- "@babel/plugin-transform-parameters": "^7.0.0",
- "@babel/plugin-transform-react-display-name": "^7.0.0",
- "@babel/plugin-transform-react-jsx": "^7.0.0",
- "@babel/plugin-transform-react-jsx-source": "^7.0.0",
- "@babel/plugin-transform-regenerator": "^7.0.0",
- "@babel/plugin-transform-runtime": "^7.0.0",
- "@babel/plugin-transform-shorthand-properties": "^7.0.0",
- "@babel/plugin-transform-spread": "^7.0.0",
- "@babel/plugin-transform-sticky-regex": "^7.0.0",
- "@babel/plugin-transform-template-literals": "^7.0.0",
- "@babel/plugin-transform-typescript": "^7.0.0",
- "@babel/plugin-transform-unicode-regex": "^7.0.0",
- "@babel/template": "^7.0.0",
- "metro-babel7-plugin-react-transform": "0.51.0",
- "react-transform-hmr": "^1.0.4"
- }
- },
- "metro-react-native-babel-transformer": {
- "version": "0.51.0",
- "resolved": "https://registry.npmjs.org/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.51.0.tgz",
- "integrity": "sha512-VFnqtE0qrVmU1HV9B04o53+NZHvDwR+CWCoEx4+7vCqJ9Tvas741biqCjah9xtifoKdElQELk6x0soOAWCDFJA==",
- "dev": true,
- "requires": {
- "@babel/core": "^7.0.0",
- "babel-preset-fbjs": "^3.0.1",
- "metro-babel-transformer": "0.51.0",
- "metro-react-native-babel-preset": "0.51.0"
- }
- },
- "node-fetch": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz",
- "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==",
- "dev": true
- },
- "supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
- }
- },
- "react-native-windows": {
- "version": "0.57.2",
- "resolved": "https://registry.npmjs.org/react-native-windows/-/react-native-windows-0.57.2.tgz",
- "integrity": "sha512-wFUIzxEiCewvA4ZGIDlldBxbc0FC47kmU0XwdoM7d+MuczLNkIpHJMdYKVuuaNtLPoisnn7opSIhbSu/3r2/+w==",
- "dev": true,
- "requires": {
- "chalk": "^1.1.1",
- "glob": "^7.1.1",
- "react-native-local-cli": "^1.0.0-alpha.5",
- "shelljs": "^0.7.8",
- "username": "^3.0.0",
- "uuid": "^2.0.1",
- "xml-parser": "^1.2.1"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
- "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
- "dev": true
- },
- "ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "arr-diff": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
- "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
- "dev": true
- },
- "array-unique": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
- "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
- "dev": true
- },
- "braces": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
- "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
- "dev": true,
- "requires": {
- "arr-flatten": "^1.1.0",
- "array-unique": "^0.3.2",
- "extend-shallow": "^2.0.1",
- "fill-range": "^4.0.0",
- "isobject": "^3.0.1",
- "repeat-element": "^1.1.2",
- "snapdragon": "^0.8.1",
- "snapdragon-node": "^2.0.1",
- "split-string": "^3.0.2",
- "to-regex": "^3.0.1"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
- }
- },
- "core-js": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.9.tgz",
- "integrity": "sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A==",
- "dev": true
- },
- "cross-spawn": {
- "version": "6.0.5",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
- "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
- "dev": true,
- "requires": {
- "nice-try": "^1.0.4",
- "path-key": "^2.0.1",
- "semver": "^5.5.0",
- "shebang-command": "^1.2.0",
- "which": "^1.2.9"
- }
- },
- "execa": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
- "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
- "dev": true,
- "requires": {
- "cross-spawn": "^6.0.0",
- "get-stream": "^4.0.0",
- "is-stream": "^1.1.0",
- "npm-run-path": "^2.0.0",
- "p-finally": "^1.0.0",
- "signal-exit": "^3.0.0",
- "strip-eof": "^1.0.0"
- }
- },
- "expand-brackets": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
- "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
- "dev": true,
- "requires": {
- "debug": "^2.3.3",
- "define-property": "^0.2.5",
- "extend-shallow": "^2.0.1",
- "posix-character-classes": "^0.1.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
- },
- "dependencies": {
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- },
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- },
- "is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-data-descriptor": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
- "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^0.1.6",
- "is-data-descriptor": "^0.1.4",
- "kind-of": "^5.0.0"
- }
- },
- "kind-of": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
- "dev": true
- }
- }
- },
- "extend-shallow": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
- "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
- "dev": true,
- "requires": {
- "assign-symbols": "^1.0.0",
- "is-extendable": "^1.0.1"
- },
- "dependencies": {
- "is-extendable": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
- "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
- "dev": true,
- "requires": {
- "is-plain-object": "^2.0.4"
- }
- }
- }
- },
- "extglob": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
- "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
- "dev": true,
- "requires": {
- "array-unique": "^0.3.2",
- "define-property": "^1.0.0",
- "expand-brackets": "^2.1.4",
- "extend-shallow": "^2.0.1",
- "fragment-cache": "^0.2.1",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
- },
- "dependencies": {
- "define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
- "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^1.0.0"
- }
- },
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
- }
- },
- "fbjs": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-1.0.0.tgz",
- "integrity": "sha512-MUgcMEJaFhCaF1QtWGnmq9ZDRAzECTCRAF7O6UZIlAlkTs1SasiX9aP0Iw7wfD2mJ7wDTNfg2w7u5fSCwJk1OA==",
- "dev": true,
- "requires": {
- "core-js": "^2.4.1",
- "fbjs-css-vars": "^1.0.0",
- "isomorphic-fetch": "^2.1.1",
- "loose-envify": "^1.0.0",
- "object-assign": "^4.1.0",
- "promise": "^7.1.1",
- "setimmediate": "^1.0.5",
- "ua-parser-js": "^0.7.18"
- }
- },
- "fill-range": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
- "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
- "dev": true,
- "requires": {
- "extend-shallow": "^2.0.1",
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1",
- "to-regex-range": "^2.1.0"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
- }
- },
- "get-stream": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
- "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
- "dev": true,
- "requires": {
- "pump": "^3.0.0"
- }
- },
- "is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
- }
- },
- "is-number": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
- "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true
- },
- "jest-haste-map": {
- "version": "24.0.0-alpha.6",
- "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.0.0-alpha.6.tgz",
- "integrity": "sha512-+NO2HMbjvrG8BC39ieLukdpFrcPhhjCJGhpbHodHNZygH1Tt06WrlNYGpZtWKx/zpf533tCtMQXO/q59JenjNw==",
- "dev": true,
- "requires": {
- "fb-watchman": "^2.0.0",
- "graceful-fs": "^4.1.11",
- "invariant": "^2.2.4",
- "jest-serializer": "^24.0.0-alpha.6",
- "jest-worker": "^24.0.0-alpha.6",
- "micromatch": "^2.3.11",
- "sane": "^3.0.0"
- }
- },
- "jest-serializer": {
- "version": "24.4.0",
- "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.4.0.tgz",
- "integrity": "sha512-k//0DtglVstc1fv+GY/VHDIjrtNjdYvYjMlbLUed4kxrE92sIUewOi5Hj3vrpB8CXfkJntRPDRjCrCvUhBdL8Q==",
- "dev": true
- },
- "jest-worker": {
- "version": "24.0.0-alpha.6",
- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.0.0-alpha.6.tgz",
- "integrity": "sha512-iXtH7MR9bjWlNnlnRBcrBRrb4cSVxML96La5vsnmBvDI+mJnkP5uEt6Fgpo5Y8f3z9y2Rd7wuPnKRxqQsiU/dA==",
- "dev": true,
- "requires": {
- "merge-stream": "^1.0.1"
- }
- },
- "kind-of": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
- "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
- "dev": true
- },
- "metro": {
- "version": "0.51.1",
- "resolved": "https://registry.npmjs.org/metro/-/metro-0.51.1.tgz",
- "integrity": "sha512-nM0dqn8LQlMjhChl2fzTUq2EWiUebZM7nkesD9vQe47W10bj/tbRLPiIIAxht6SRDbPd/hRA+t39PxLhPSKEKg==",
- "dev": true,
- "requires": {
- "@babel/core": "^7.0.0",
- "@babel/generator": "^7.0.0",
- "@babel/parser": "^7.0.0",
- "@babel/plugin-external-helpers": "^7.0.0",
- "@babel/template": "^7.0.0",
- "@babel/traverse": "^7.0.0",
- "@babel/types": "^7.0.0",
- "absolute-path": "^0.0.0",
- "async": "^2.4.0",
- "babel-preset-fbjs": "^3.0.1",
- "buffer-crc32": "^0.2.13",
- "chalk": "^2.4.1",
- "concat-stream": "^1.6.0",
- "connect": "^3.6.5",
- "debug": "^2.2.0",
- "denodeify": "^1.2.1",
- "eventemitter3": "^3.0.0",
- "fbjs": "^1.0.0",
- "fs-extra": "^1.0.0",
- "graceful-fs": "^4.1.3",
- "image-size": "^0.6.0",
- "invariant": "^2.2.4",
- "jest-haste-map": "24.0.0-alpha.6",
- "jest-worker": "24.0.0-alpha.6",
- "json-stable-stringify": "^1.0.1",
- "lodash.throttle": "^4.1.1",
- "merge-stream": "^1.0.1",
- "metro-babel-transformer": "0.51.1",
- "metro-cache": "0.51.1",
- "metro-config": "0.51.1",
- "metro-core": "0.51.1",
- "metro-minify-uglify": "0.51.1",
- "metro-react-native-babel-preset": "0.51.1",
- "metro-resolver": "0.51.1",
- "metro-source-map": "0.51.1",
- "mime-types": "2.1.11",
- "mkdirp": "^0.5.1",
- "node-fetch": "^2.2.0",
- "nullthrows": "^1.1.0",
- "react-transform-hmr": "^1.0.4",
- "resolve": "^1.5.0",
- "rimraf": "^2.5.4",
- "serialize-error": "^2.1.0",
- "source-map": "^0.5.6",
- "temp": "0.8.3",
- "throat": "^4.1.0",
- "wordwrap": "^1.0.0",
- "write-file-atomic": "^1.2.0",
- "ws": "^1.1.5",
- "xpipe": "^1.0.5",
- "yargs": "^9.0.0"
- },
- "dependencies": {
- "chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- }
- }
- },
- "metro-babel7-plugin-react-transform": {
- "version": "0.51.1",
- "resolved": "https://registry.npmjs.org/metro-babel7-plugin-react-transform/-/metro-babel7-plugin-react-transform-0.51.1.tgz",
- "integrity": "sha512-wzn4X9KgmAMZ7Bi6v9KxA7dw+AHGL0RODPxU5NDJ3A6d0yERvzfZ3qkzWhz8jbFkVBK12cu5DTho3HBazKQDOw==",
- "dev": true,
- "requires": {
- "@babel/helper-module-imports": "^7.0.0"
- }
- },
- "metro-cache": {
- "version": "0.51.1",
- "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.51.1.tgz",
- "integrity": "sha512-0m1+aicsw77LVAehNuTxDpE1c/7Xv/ajRD+UL/lFCWUxnrjSbxVtIKr8l5DxEY11082c1axVRuaV9e436W+eXg==",
- "dev": true,
- "requires": {
- "jest-serializer": "24.0.0-alpha.6",
- "metro-core": "0.51.1",
- "mkdirp": "^0.5.1",
- "rimraf": "^2.5.4"
- },
- "dependencies": {
- "jest-serializer": {
- "version": "24.0.0-alpha.6",
- "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.0.0-alpha.6.tgz",
- "integrity": "sha512-IPA5T6/GhlE6dedSk7Cd7YfuORnYjN0VD5iJVFn1Q81RJjpj++Hen5kJbKcg547vXsQ1TddV15qOA/zeIfOCLw==",
- "dev": true
- }
- }
- },
- "metro-config": {
- "version": "0.51.1",
- "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.51.1.tgz",
- "integrity": "sha512-WCNd0tTI9gb/ubgTqK1+ljZL4b3hsXVinsOAtep4nHiVb6DSDdbO2yXDD2rpYx3NE6hDRMFS9HHg6G0139pAqQ==",
- "dev": true,
- "requires": {
- "cosmiconfig": "^5.0.5",
- "metro": "0.51.1",
- "metro-cache": "0.51.1",
- "metro-core": "0.51.1",
- "pretty-format": "24.0.0-alpha.6"
- }
- },
- "metro-core": {
- "version": "0.51.1",
- "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.51.1.tgz",
- "integrity": "sha512-sG1yACjdFqmIzZN50HqLTKUMp1oy0AehHhmIuYeIllo1DjX6Y2o3UAT3rGP8U+SAqJGXf/OWzl6VNyRPGDENfA==",
- "dev": true,
- "requires": {
- "jest-haste-map": "24.0.0-alpha.6",
- "lodash.throttle": "^4.1.1",
- "metro-resolver": "0.51.1",
- "wordwrap": "^1.0.0"
- }
- },
- "metro-memory-fs": {
- "version": "0.51.1",
- "resolved": "https://registry.npmjs.org/metro-memory-fs/-/metro-memory-fs-0.51.1.tgz",
- "integrity": "sha512-dXVUpLPLwfQcYHd1HlqHGVzBsiwvUdT92TDSbdc10152TP+iynHBqLDWbxt0MAtd6c/QXwOuGZZ1IcX3+lv5iw==",
- "dev": true
- },
- "metro-minify-uglify": {
- "version": "0.51.1",
- "resolved": "https://registry.npmjs.org/metro-minify-uglify/-/metro-minify-uglify-0.51.1.tgz",
- "integrity": "sha512-HAqd/rFrQ6mnbqVAszDXIKTg2rqHlY9Fm8DReakgbkAeyMbF2mH3kEgtesPmTrhajdFk81UZcNSm6wxj1JMgVg==",
- "dev": true,
- "requires": {
- "uglify-es": "^3.1.9"
- }
- },
- "metro-react-native-babel-preset": {
- "version": "0.51.1",
- "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.51.1.tgz",
- "integrity": "sha512-e9tsYDFhU70gar0jQWcZXRPJVCv4k7tEs6Pm74wXO2OO/T1MEumbvniDIGwGG8bG8RUnYdHhjcaiub2Vc5BRWw==",
- "dev": true,
- "requires": {
- "@babel/plugin-proposal-class-properties": "^7.0.0",
- "@babel/plugin-proposal-export-default-from": "^7.0.0",
- "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0",
- "@babel/plugin-proposal-object-rest-spread": "^7.0.0",
- "@babel/plugin-proposal-optional-catch-binding": "^7.0.0",
- "@babel/plugin-proposal-optional-chaining": "^7.0.0",
- "@babel/plugin-syntax-dynamic-import": "^7.0.0",
- "@babel/plugin-syntax-export-default-from": "^7.0.0",
- "@babel/plugin-transform-arrow-functions": "^7.0.0",
- "@babel/plugin-transform-block-scoping": "^7.0.0",
- "@babel/plugin-transform-classes": "^7.0.0",
- "@babel/plugin-transform-computed-properties": "^7.0.0",
- "@babel/plugin-transform-destructuring": "^7.0.0",
- "@babel/plugin-transform-exponentiation-operator": "^7.0.0",
- "@babel/plugin-transform-flow-strip-types": "^7.0.0",
- "@babel/plugin-transform-for-of": "^7.0.0",
- "@babel/plugin-transform-function-name": "^7.0.0",
- "@babel/plugin-transform-literals": "^7.0.0",
- "@babel/plugin-transform-modules-commonjs": "^7.0.0",
- "@babel/plugin-transform-object-assign": "^7.0.0",
- "@babel/plugin-transform-parameters": "^7.0.0",
- "@babel/plugin-transform-react-display-name": "^7.0.0",
- "@babel/plugin-transform-react-jsx": "^7.0.0",
- "@babel/plugin-transform-react-jsx-source": "^7.0.0",
- "@babel/plugin-transform-regenerator": "^7.0.0",
- "@babel/plugin-transform-runtime": "^7.0.0",
- "@babel/plugin-transform-shorthand-properties": "^7.0.0",
- "@babel/plugin-transform-spread": "^7.0.0",
- "@babel/plugin-transform-sticky-regex": "^7.0.0",
- "@babel/plugin-transform-template-literals": "^7.0.0",
- "@babel/plugin-transform-typescript": "^7.0.0",
- "@babel/plugin-transform-unicode-regex": "^7.0.0",
- "@babel/template": "^7.0.0",
- "metro-babel7-plugin-react-transform": "0.51.1",
- "react-transform-hmr": "^1.0.4"
- }
- },
- "metro-resolver": {
- "version": "0.51.1",
- "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.51.1.tgz",
- "integrity": "sha512-zmWbD/287NDA/jLPuPV0hne/YMMSG0dljzu21TYMg2lXRLur/zROJHHhyepZvuBHgInXBi4Vhr2wvuSnY39SuA==",
- "dev": true,
- "requires": {
- "absolute-path": "^0.0.0"
- }
- },
- "metro-source-map": {
- "version": "0.51.1",
- "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.51.1.tgz",
- "integrity": "sha512-JyrE+RV4YumrboHPHTGsUUGERjQ681ImRLrSYDGcmNv4tfpk9nvAK26UAas4IvBYFCC9oW90m0udt3kaQGv59Q==",
- "dev": true,
- "requires": {
- "source-map": "^0.5.6"
- }
- },
- "mime-db": {
- "version": "1.23.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.23.0.tgz",
- "integrity": "sha1-oxtAcK2uon1zLqMzdApk0OyaZlk=",
- "dev": true
- },
- "mime-types": {
- "version": "2.1.11",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.11.tgz",
- "integrity": "sha1-wlnEcb2oCKhdbNGTtDCl+uRHOzw=",
- "dev": true,
- "requires": {
- "mime-db": "~1.23.0"
- }
- },
- "node-fetch": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz",
- "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==",
- "dev": true
- },
- "pretty-format": {
- "version": "24.0.0-alpha.6",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.0.0-alpha.6.tgz",
- "integrity": "sha512-zG2m6YJeuzwBFqb5EIdmwYVf30sap+iMRuYNPytOccEXZMAJbPIFGKVJ/U0WjQegmnQbRo9CI7j6j3HtDaifiA==",
- "dev": true,
- "requires": {
- "ansi-regex": "^4.0.0",
- "ansi-styles": "^3.2.0"
- }
- },
- "react-native-local-cli": {
- "version": "1.0.0-alpha.5",
- "resolved": "https://registry.npmjs.org/react-native-local-cli/-/react-native-local-cli-1.0.0-alpha.5.tgz",
- "integrity": "sha512-cLno8mPv4MDL1uR8JVyFHJCRFkB/Dp8DM2ZfWQEUgLQATg3thNoWvaXPxrlFTdmZy0FFHbNkey8u3Ltb01pTtQ==",
- "dev": true,
- "requires": {
- "@babel/core": "^7.1.5",
- "@babel/plugin-transform-strict-mode": "^7.2.0",
- "@babel/preset-env": "^7.1.5",
- "@babel/preset-flow": "^7.0.0",
- "@babel/register": "^7.0.0",
- "chalk": "^1.1.1",
- "commander": "^2.9.0",
- "compression": "^1.7.1",
- "connect": "^3.6.5",
- "denodeify": "^1.2.1",
- "envinfo": "^5.7.0",
- "errorhandler": "^1.5.0",
- "escape-string-regexp": "^1.0.5",
- "fs-extra": "^1.0.0",
- "glob": "^7.1.1",
- "graceful-fs": "^4.1.3",
- "inquirer": "^3.0.6",
- "lodash": "^4.17.5",
- "metro": "^0.51.0",
- "metro-config": "^0.51.0",
- "metro-core": "^0.51.0",
- "metro-memory-fs": "^0.51.0",
- "metro-react-native-babel-transformer": "^0.51.0",
- "mime": "^1.3.4",
- "minimist": "^1.2.0",
- "mkdirp": "^0.5.1",
- "morgan": "^1.9.0",
- "node-fetch": "^2.2.0",
- "node-notifier": "^5.2.1",
- "npmlog": "^2.0.4",
- "opn": "^3.0.2",
- "plist": "^3.0.0",
- "semver": "^5.0.3",
- "serve-static": "^1.13.1",
- "shell-quote": "1.6.1",
- "ws": "^1.1.0",
- "xcode": "^1.0.0",
- "xmldoc": "^0.4.0"
- }
- },
- "sane": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/sane/-/sane-3.1.0.tgz",
- "integrity": "sha512-G5GClRRxT1cELXfdAq7UKtUsv8q/ZC5k8lQGmjEm4HcAl3HzBy68iglyNCmw4+0tiXPCBZntslHlRhbnsSws+Q==",
- "dev": true,
- "requires": {
- "anymatch": "^2.0.0",
- "capture-exit": "^1.2.0",
- "exec-sh": "^0.2.0",
- "execa": "^1.0.0",
- "fb-watchman": "^2.0.0",
- "fsevents": "^1.2.3",
- "micromatch": "^3.1.4",
- "minimist": "^1.1.1",
- "walker": "~1.0.5",
- "watch": "~0.18.0"
- },
- "dependencies": {
- "micromatch": {
- "version": "3.1.10",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
- "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
- "dev": true,
- "requires": {
- "arr-diff": "^4.0.0",
- "array-unique": "^0.3.2",
- "braces": "^2.3.1",
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "extglob": "^2.0.4",
- "fragment-cache": "^0.2.1",
- "kind-of": "^6.0.2",
- "nanomatch": "^1.2.9",
- "object.pick": "^1.3.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.2"
- }
- }
- }
- },
- "supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- },
- "uuid": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz",
- "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=",
- "dev": true
- }
- }
- },
- "react-proxy": {
- "version": "1.1.8",
- "resolved": "https://registry.npmjs.org/react-proxy/-/react-proxy-1.1.8.tgz",
- "integrity": "sha1-nb/Z2SdSjDqp9ETkVYw3gwq4wmo=",
- "dev": true,
- "requires": {
- "lodash": "^4.6.1",
- "react-deep-force-update": "^1.0.0"
- }
- },
- "react-transform-hmr": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/react-transform-hmr/-/react-transform-hmr-1.0.4.tgz",
- "integrity": "sha1-4aQL0Krvxy6N/Xp82gmvhQZjl7s=",
- "dev": true,
- "requires": {
- "global": "^4.3.0",
- "react-proxy": "^1.1.7"
- }
- },
- "read-pkg": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz",
- "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=",
- "dev": true,
- "requires": {
- "load-json-file": "^2.0.0",
- "normalize-package-data": "^2.3.2",
- "path-type": "^2.0.0"
- }
- },
- "read-pkg-up": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz",
- "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=",
- "dev": true,
- "requires": {
- "find-up": "^2.0.0",
- "read-pkg": "^2.0.0"
- }
- },
- "readable-stream": {
- "version": "2.3.6",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
- "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
- "dev": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "rechoir": {
- "version": "0.6.2",
- "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
- "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=",
- "dev": true,
- "requires": {
- "resolve": "^1.1.6"
- }
- },
- "regenerate": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz",
- "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==",
- "dev": true
- },
- "regenerate-unicode-properties": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz",
- "integrity": "sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA==",
- "dev": true,
- "requires": {
- "regenerate": "^1.4.0"
- }
- },
- "regenerator-runtime": {
- "version": "0.11.1",
- "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
- "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
- "dev": true
- },
- "regenerator-transform": {
- "version": "0.14.1",
- "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.1.tgz",
- "integrity": "sha512-flVuee02C3FKRISbxhXl9mGzdbWUVHubl1SMaknjxkFB1/iqpJhArQUvRxOOPEc/9tAiX0BaQ28FJH10E4isSQ==",
- "dev": true,
- "requires": {
- "private": "^0.1.6"
- }
- },
- "regex-cache": {
- "version": "0.4.4",
- "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz",
- "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==",
- "dev": true,
- "requires": {
- "is-equal-shallow": "^0.1.3"
- }
- },
- "regex-not": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
- "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
- "dev": true,
- "requires": {
- "extend-shallow": "^3.0.2",
- "safe-regex": "^1.1.0"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
- "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
- "dev": true,
- "requires": {
- "assign-symbols": "^1.0.0",
- "is-extendable": "^1.0.1"
- }
- },
- "is-extendable": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
- "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
- "dev": true,
- "requires": {
- "is-plain-object": "^2.0.4"
- }
- }
- }
- },
- "regexp-tree": {
- "version": "0.1.11",
- "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.11.tgz",
- "integrity": "sha512-7/l/DgapVVDzZobwMCCgMlqiqyLFJ0cduo/j+3BcDJIB+yJdsYCfKuI3l/04NV+H/rfNRdPIDbXNZHM9XvQatg==",
- "dev": true
- },
- "regexpu-core": {
- "version": "4.5.4",
- "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.5.4.tgz",
- "integrity": "sha512-BtizvGtFQKGPUcTy56o3nk1bGRp4SZOTYrDtGNlqCQufptV5IkkLN6Emw+yunAJjzf+C9FQFtvq7IoA3+oMYHQ==",
- "dev": true,
- "requires": {
- "regenerate": "^1.4.0",
- "regenerate-unicode-properties": "^8.0.2",
- "regjsgen": "^0.5.0",
- "regjsparser": "^0.6.0",
- "unicode-match-property-ecmascript": "^1.0.4",
- "unicode-match-property-value-ecmascript": "^1.1.0"
- }
- },
- "regjsgen": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.0.tgz",
- "integrity": "sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA==",
- "dev": true
- },
- "regjsparser": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.0.tgz",
- "integrity": "sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==",
- "dev": true,
- "requires": {
- "jsesc": "~0.5.0"
- },
- "dependencies": {
- "jsesc": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
- "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=",
- "dev": true
- }
- }
- },
- "remove-trailing-separator": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
- "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
- "dev": true
- },
- "repeat-element": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz",
- "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==",
- "dev": true
- },
- "repeat-string": {
- "version": "1.6.1",
- "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
- "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
- "dev": true
- },
- "require-directory": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
- "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
- "dev": true
- },
- "require-main-filename": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
- "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=",
- "dev": true
- },
- "resolve": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.1.tgz",
- "integrity": "sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw==",
- "dev": true,
- "requires": {
- "path-parse": "^1.0.6"
- }
- },
- "resolve-from": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
- "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=",
- "dev": true
- },
- "resolve-url": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
- "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
- "dev": true
- },
- "restore-cursor": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
- "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
- "dev": true,
- "requires": {
- "onetime": "^2.0.0",
- "signal-exit": "^3.0.2"
- }
- },
- "ret": {
- "version": "0.1.15",
- "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
- "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
- "dev": true
- },
- "rimraf": {
- "version": "2.6.3",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
- "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
- "dev": true,
- "requires": {
- "glob": "^7.1.3"
- }
- },
- "rsvp": {
- "version": "3.6.2",
- "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz",
- "integrity": "sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw==",
- "dev": true
- },
- "run-async": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz",
- "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=",
- "dev": true,
- "requires": {
- "is-promise": "^2.1.0"
- }
- },
- "rx-lite": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz",
- "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=",
- "dev": true
- },
- "rx-lite-aggregates": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz",
- "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=",
- "dev": true,
- "requires": {
- "rx-lite": "*"
- }
- },
- "safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
- "dev": true
- },
- "safe-regex": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
- "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
- "dev": true,
- "requires": {
- "ret": "~0.1.10"
- }
- },
- "safer-buffer": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
- "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
- "dev": true
- },
- "sane": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/sane/-/sane-3.1.0.tgz",
- "integrity": "sha512-G5GClRRxT1cELXfdAq7UKtUsv8q/ZC5k8lQGmjEm4HcAl3HzBy68iglyNCmw4+0tiXPCBZntslHlRhbnsSws+Q==",
- "dev": true,
- "requires": {
- "anymatch": "^2.0.0",
- "capture-exit": "^1.2.0",
- "exec-sh": "^0.2.0",
- "execa": "^1.0.0",
- "fb-watchman": "^2.0.0",
- "fsevents": "^1.2.3",
- "micromatch": "^3.1.4",
- "minimist": "^1.1.1",
- "walker": "~1.0.5",
- "watch": "~0.18.0"
- },
- "dependencies": {
- "array-unique": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
- "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
- "dev": true
- },
- "braces": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
- "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
- "dev": true,
- "requires": {
- "arr-flatten": "^1.1.0",
- "array-unique": "^0.3.2",
- "extend-shallow": "^2.0.1",
- "fill-range": "^4.0.0",
- "isobject": "^3.0.1",
- "repeat-element": "^1.1.2",
- "snapdragon": "^0.8.1",
- "snapdragon-node": "^2.0.1",
- "split-string": "^3.0.2",
- "to-regex": "^3.0.1"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
- }
- },
- "cross-spawn": {
- "version": "6.0.5",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
- "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
- "dev": true,
- "requires": {
- "nice-try": "^1.0.4",
- "path-key": "^2.0.1",
- "semver": "^5.5.0",
- "shebang-command": "^1.2.0",
- "which": "^1.2.9"
- }
- },
- "execa": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
- "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
- "dev": true,
- "requires": {
- "cross-spawn": "^6.0.0",
- "get-stream": "^4.0.0",
- "is-stream": "^1.1.0",
- "npm-run-path": "^2.0.0",
- "p-finally": "^1.0.0",
- "signal-exit": "^3.0.0",
- "strip-eof": "^1.0.0"
- }
- },
- "expand-brackets": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
- "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
- "dev": true,
- "requires": {
- "debug": "^2.3.3",
- "define-property": "^0.2.5",
- "extend-shallow": "^2.0.1",
- "posix-character-classes": "^0.1.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
- },
- "dependencies": {
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- },
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- },
- "is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-data-descriptor": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
- "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^0.1.6",
- "is-data-descriptor": "^0.1.4",
- "kind-of": "^5.0.0"
- }
- },
- "kind-of": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
- "dev": true
- }
- }
- },
- "extglob": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
- "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
- "dev": true,
- "requires": {
- "array-unique": "^0.3.2",
- "define-property": "^1.0.0",
- "expand-brackets": "^2.1.4",
- "extend-shallow": "^2.0.1",
- "fragment-cache": "^0.2.1",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
- },
- "dependencies": {
- "define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
- "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^1.0.0"
- }
- },
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
- }
- },
- "fill-range": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
- "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
- "dev": true,
- "requires": {
- "extend-shallow": "^2.0.1",
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1",
- "to-regex-range": "^2.1.0"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
- }
- },
- "get-stream": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
- "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
- "dev": true,
- "requires": {
- "pump": "^3.0.0"
- }
- },
- "is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
- }
- },
- "is-number": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
- "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true
- },
- "micromatch": {
- "version": "3.1.10",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
- "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
- "dev": true,
- "requires": {
- "arr-diff": "^4.0.0",
- "array-unique": "^0.3.2",
- "braces": "^2.3.1",
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "extglob": "^2.0.4",
- "fragment-cache": "^0.2.1",
- "kind-of": "^6.0.2",
- "nanomatch": "^1.2.9",
- "object.pick": "^1.3.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.2"
- }
- }
- }
- },
- "sax": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/sax/-/sax-1.1.6.tgz",
- "integrity": "sha1-XWFr6KXmB9VOEUr65Vt+ry/MMkA=",
- "dev": true
- },
- "scheduler": {
- "version": "0.13.6",
- "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.13.6.tgz",
- "integrity": "sha512-IWnObHt413ucAYKsD9J1QShUKkbKLQQHdxRyw73sw4FN26iWr3DY/H34xGPe4nmL1DwXyWmSWmMrA9TfQbE/XQ==",
- "dev": true,
- "requires": {
- "loose-envify": "^1.1.0",
- "object-assign": "^4.1.1"
- }
- },
- "semver": {
- "version": "5.7.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz",
- "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==",
- "dev": true
- },
- "send": {
- "version": "0.17.1",
- "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
- "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
- "dev": true,
- "requires": {
- "debug": "2.6.9",
- "depd": "~1.1.2",
- "destroy": "~1.0.4",
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "etag": "~1.8.1",
- "fresh": "0.5.2",
- "http-errors": "~1.7.2",
- "mime": "1.6.0",
- "ms": "2.1.1",
- "on-finished": "~2.3.0",
- "range-parser": "~1.2.1",
- "statuses": "~1.5.0"
- },
- "dependencies": {
- "ms": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
- "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
- "dev": true
- }
- }
- },
- "serialize-error": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-2.1.0.tgz",
- "integrity": "sha1-ULZ51WNc34Rme9yOWa9OW4HV9go=",
- "dev": true
- },
- "serve-static": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
- "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
- "dev": true,
- "requires": {
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "parseurl": "~1.3.3",
- "send": "0.17.1"
- }
- },
- "set-blocking": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
- "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
- "dev": true
- },
- "set-value": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
- "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==",
- "dev": true,
- "requires": {
- "extend-shallow": "^2.0.1",
- "is-extendable": "^0.1.1",
- "is-plain-object": "^2.0.3",
- "split-string": "^3.0.1"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
- }
- },
- "setimmediate": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
- "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=",
- "dev": true
- },
- "setprototypeof": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
- "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==",
- "dev": true
- },
- "shebang-command": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
- "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
- "dev": true,
- "requires": {
- "shebang-regex": "^1.0.0"
- }
- },
- "shebang-regex": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
- "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
- "dev": true
- },
- "shell-quote": {
- "version": "1.6.1",
- "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz",
- "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=",
- "dev": true,
- "requires": {
- "array-filter": "~0.0.0",
- "array-map": "~0.0.0",
- "array-reduce": "~0.0.0",
- "jsonify": "~0.0.0"
- }
- },
- "shelljs": {
- "version": "0.7.8",
- "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.8.tgz",
- "integrity": "sha1-3svPh0sNHl+3LhSxZKloMEjprLM=",
- "dev": true,
- "requires": {
- "glob": "^7.0.0",
- "interpret": "^1.0.0",
- "rechoir": "^0.6.2"
- }
- },
- "shellwords": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz",
- "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==",
- "dev": true
- },
- "signal-exit": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
- "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
- "dev": true
- },
- "simple-plist": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/simple-plist/-/simple-plist-0.2.1.tgz",
- "integrity": "sha1-cXZts1IyaSjPOoByQrp2IyJjZyM=",
- "dev": true,
- "requires": {
- "bplist-creator": "0.0.7",
- "bplist-parser": "0.1.1",
- "plist": "2.0.1"
- },
- "dependencies": {
- "base64-js": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.1.2.tgz",
- "integrity": "sha1-1kAMrBxMZgl22Q0HoENR2JOV9eg=",
- "dev": true
- },
- "plist": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/plist/-/plist-2.0.1.tgz",
- "integrity": "sha1-CjLKlIGxw2TpLhjcVch23p0B2os=",
- "dev": true,
- "requires": {
- "base64-js": "1.1.2",
- "xmlbuilder": "8.2.2",
- "xmldom": "0.1.x"
- }
- },
- "xmlbuilder": {
- "version": "8.2.2",
- "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-8.2.2.tgz",
- "integrity": "sha1-aSSGc0ELS6QuGmE2VR0pIjNap3M=",
- "dev": true
- }
- }
- },
- "slash": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz",
- "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==",
- "dev": true
- },
- "slide": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz",
- "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=",
- "dev": true
- },
- "snapdragon": {
- "version": "0.8.2",
- "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
- "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
- "dev": true,
- "requires": {
- "base": "^0.11.1",
- "debug": "^2.2.0",
- "define-property": "^0.2.5",
- "extend-shallow": "^2.0.1",
- "map-cache": "^0.2.2",
- "source-map": "^0.5.6",
- "source-map-resolve": "^0.5.0",
- "use": "^3.1.0"
- },
- "dependencies": {
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- },
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
- }
- },
- "snapdragon-node": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
- "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
- "dev": true,
- "requires": {
- "define-property": "^1.0.0",
- "isobject": "^3.0.0",
- "snapdragon-util": "^3.0.1"
- },
- "dependencies": {
- "define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
- "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^1.0.0"
- }
- },
- "is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
- }
- },
- "isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true
- },
- "kind-of": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
- "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
- "dev": true
- }
- }
- },
- "snapdragon-util": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
- "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
- "dev": true,
- "requires": {
- "kind-of": "^3.2.0"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true
- },
- "source-map-resolve": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz",
- "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==",
- "dev": true,
- "requires": {
- "atob": "^2.1.1",
- "decode-uri-component": "^0.2.0",
- "resolve-url": "^0.2.1",
- "source-map-url": "^0.4.0",
- "urix": "^0.1.0"
- }
- },
- "source-map-support": {
- "version": "0.5.12",
- "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.12.tgz",
- "integrity": "sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==",
- "dev": true,
- "requires": {
- "buffer-from": "^1.0.0",
- "source-map": "^0.6.0"
- },
- "dependencies": {
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- }
- }
- },
- "source-map-url": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
- "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
- "dev": true
- },
- "spdx-correct": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz",
- "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==",
- "dev": true,
- "requires": {
- "spdx-expression-parse": "^3.0.0",
- "spdx-license-ids": "^3.0.0"
- }
- },
- "spdx-exceptions": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz",
- "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==",
- "dev": true
- },
- "spdx-expression-parse": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
- "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
- "dev": true,
- "requires": {
- "spdx-exceptions": "^2.1.0",
- "spdx-license-ids": "^3.0.0"
- }
- },
- "spdx-license-ids": {
- "version": "3.0.5",
- "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz",
- "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==",
- "dev": true
- },
- "split-string": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
- "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
- "dev": true,
- "requires": {
- "extend-shallow": "^3.0.0"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
- "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
- "dev": true,
- "requires": {
- "assign-symbols": "^1.0.0",
- "is-extendable": "^1.0.1"
- }
- },
- "is-extendable": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
- "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
- "dev": true,
- "requires": {
- "is-plain-object": "^2.0.4"
- }
- }
- }
- },
- "sprintf-js": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
- "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
+ "asap": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
+ "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=",
"dev": true
},
- "stacktrace-parser": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.6.tgz",
- "integrity": "sha512-wXhu0Z8YgCGigUtHQq+J7pjXCppk3Um5DwH4qskOKHMlJmKwuuUSm+wDAgU7t4sbVjvuDTNGwOfFKgjMEqSflA==",
- "dev": true,
- "requires": {
- "type-fest": "^0.3.0"
- }
- },
- "static-extend": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
- "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
- "dev": true,
- "requires": {
- "define-property": "^0.2.5",
- "object-copy": "^0.1.0"
- },
- "dependencies": {
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- }
- }
- },
- "statuses": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
- "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
- "dev": true
+ "base-64": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/base-64/-/base-64-0.1.0.tgz",
+ "integrity": "sha1-eAqZyE59YAJgNhURxId2E78k9rs="
},
- "stream-buffers": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-2.2.0.tgz",
- "integrity": "sha1-kdX1Ew0c75bc+n9yaUUYh0HQnuQ=",
+ "core-js": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz",
+ "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=",
"dev": true
},
- "string-width": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
- "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
- "dev": true,
- "requires": {
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^4.0.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
- "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
- "dev": true
- },
- "strip-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
- "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
- "dev": true,
- "requires": {
- "ansi-regex": "^3.0.0"
- }
- }
- }
- },
- "string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "create-react-class": {
+ "version": "15.6.3",
+ "resolved": "https://registry.npmjs.org/create-react-class/-/create-react-class-15.6.3.tgz",
+ "integrity": "sha512-M+/3Q6E6DLO6Yx3OwrWjwHBnvfXXYA7W+dFjt/ZDBemHO1DDZhsalX/NUtnTYclN6GfnBDRh4qRHjcDHmlJBJg==",
"dev": true,
"requires": {
- "safe-buffer": "~5.1.0"
+ "fbjs": "^0.8.9",
+ "loose-envify": "^1.3.1",
+ "object-assign": "^4.1.1"
}
},
- "strip-ansi": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
- "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "encoding": {
+ "version": "0.1.12",
+ "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz",
+ "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=",
"dev": true,
"requires": {
- "ansi-regex": "^2.0.0"
+ "iconv-lite": "~0.4.13"
}
},
- "strip-bom": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
- "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
- "dev": true
- },
- "strip-eof": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
- "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
- "dev": true
- },
- "supports-color": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
- "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
- "dev": true
- },
- "temp": {
- "version": "0.8.3",
- "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.3.tgz",
- "integrity": "sha1-4Ma8TSa5AxJEEOT+2BEDAU38H1k=",
+ "fbjs": {
+ "version": "0.8.17",
+ "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz",
+ "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=",
"dev": true,
"requires": {
- "os-tmpdir": "^1.0.0",
- "rimraf": "~2.2.6"
- },
- "dependencies": {
- "rimraf": {
- "version": "2.2.8",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz",
- "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=",
- "dev": true
- }
+ "core-js": "^1.0.0",
+ "isomorphic-fetch": "^2.1.1",
+ "loose-envify": "^1.0.0",
+ "object-assign": "^4.1.0",
+ "promise": "^7.1.1",
+ "setimmediate": "^1.0.5",
+ "ua-parser-js": "^0.7.18"
}
},
- "throat": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz",
- "integrity": "sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=",
- "dev": true
- },
- "through": {
- "version": "2.3.8",
- "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
- "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
+ "flow-bin": {
+ "version": "0.109.0",
+ "resolved": "https://registry.npmjs.org/flow-bin/-/flow-bin-0.109.0.tgz",
+ "integrity": "sha512-tpcMTpAGIRivYhFV3KJq+zHI2HzcXo8MoGe9pXS4G/UZuey2Faq/e8/gdph2WF0erRlML5hmwfwiq7v9c25c7w==",
"dev": true
},
- "through2": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
- "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
+ "iconv-lite": {
+ "version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
"dev": true,
"requires": {
- "readable-stream": "~2.3.6",
- "xtend": "~4.0.1"
+ "safer-buffer": ">= 2.1.2 < 3"
}
},
- "time-stamp": {
+ "is-stream": {
"version": "1.1.0",
- "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz",
- "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=",
- "dev": true
- },
- "tmp": {
- "version": "0.0.33",
- "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
- "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
- "dev": true,
- "requires": {
- "os-tmpdir": "~1.0.2"
- }
- },
- "tmpl": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz",
- "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=",
- "dev": true
- },
- "to-fast-properties": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
- "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
+ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
"dev": true
},
- "to-object-path": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
- "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "to-regex": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
- "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
- "dev": true,
- "requires": {
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "regex-not": "^1.0.2",
- "safe-regex": "^1.1.0"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
- "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
- "dev": true,
- "requires": {
- "assign-symbols": "^1.0.0",
- "is-extendable": "^1.0.1"
- }
- },
- "is-extendable": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
- "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
- "dev": true,
- "requires": {
- "is-plain-object": "^2.0.4"
- }
- }
- }
- },
- "to-regex-range": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
- "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+ "isomorphic-fetch": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz",
+ "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=",
"dev": true,
"requires": {
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1"
- },
- "dependencies": {
- "is-number": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
- "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- }
- },
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
+ "node-fetch": "^1.0.1",
+ "whatwg-fetch": ">=0.10.0"
}
},
- "toidentifier": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
- "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==",
- "dev": true
- },
- "trim-right": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
- "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
- "dev": true
- },
- "type-fest": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz",
- "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==",
- "dev": true
- },
- "typedarray": {
- "version": "0.0.6",
- "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
- "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
- "dev": true
- },
- "ua-parser-js": {
- "version": "0.7.20",
- "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.20.tgz",
- "integrity": "sha512-8OaIKfzL5cpx8eCMAhhvTlft8GYF8b2eQr6JkCyVdrgjcytyOmPCXrqXFcUnhonRpLlh5yxEZVohm6mzaowUOw==",
+ "js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
"dev": true
},
- "uglify-es": {
- "version": "3.3.9",
- "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz",
- "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==",
+ "loose-envify": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
"dev": true,
"requires": {
- "commander": "~2.13.0",
- "source-map": "~0.6.1"
- },
- "dependencies": {
- "commander": {
- "version": "2.13.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz",
- "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==",
- "dev": true
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- }
+ "js-tokens": "^3.0.0 || ^4.0.0"
}
},
- "ultron": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz",
- "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=",
- "dev": true
- },
- "unicode-canonical-property-names-ecmascript": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz",
- "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==",
- "dev": true
- },
- "unicode-match-property-ecmascript": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz",
- "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==",
+ "node-fetch": {
+ "version": "1.7.3",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz",
+ "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==",
"dev": true,
"requires": {
- "unicode-canonical-property-names-ecmascript": "^1.0.4",
- "unicode-property-aliases-ecmascript": "^1.0.4"
+ "encoding": "^0.1.11",
+ "is-stream": "^1.0.1"
}
},
- "unicode-match-property-value-ecmascript": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz",
- "integrity": "sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g==",
- "dev": true
- },
- "unicode-property-aliases-ecmascript": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz",
- "integrity": "sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw==",
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
"dev": true
},
- "union-value": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
- "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==",
+ "promise": {
+ "version": "7.3.1",
+ "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz",
+ "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==",
"dev": true,
"requires": {
- "arr-union": "^3.1.0",
- "get-value": "^2.0.6",
- "is-extendable": "^0.1.1",
- "set-value": "^2.0.1"
- },
- "dependencies": {
- "arr-union": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
- "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
- "dev": true
- }
+ "asap": "~2.0.3"
}
},
- "universalify": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
- "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
- "dev": true
- },
- "unpipe": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
- "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=",
- "dev": true
- },
- "unset-value": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
- "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+ "prop-types": {
+ "version": "15.7.2",
+ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz",
+ "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==",
"dev": true,
"requires": {
- "has-value": "^0.3.1",
- "isobject": "^3.0.0"
- },
- "dependencies": {
- "has-value": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
- "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
- "dev": true,
- "requires": {
- "get-value": "^2.0.3",
- "has-values": "^0.1.4",
- "isobject": "^2.0.0"
- },
- "dependencies": {
- "isobject": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
- "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
- "dev": true,
- "requires": {
- "isarray": "1.0.0"
- }
- }
- }
- },
- "has-values": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
- "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
- "dev": true
- },
- "isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true
- }
+ "loose-envify": "^1.4.0",
+ "object-assign": "^4.1.1",
+ "react-is": "^16.8.1"
}
},
- "urix": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
- "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
- "dev": true
- },
- "use": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
- "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
+ "react-is": {
+ "version": "16.10.2",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.10.2.tgz",
+ "integrity": "sha512-INBT1QEgtcCCgvccr5/86CfD71fw9EPmDxgiJX4I2Ddr6ZsV6iFXsuby+qWJPtmNuMY0zByTsG4468P7nHuNWA==",
"dev": true
},
- "username": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/username/-/username-3.0.0.tgz",
- "integrity": "sha1-s9upgqcrTOWdUvFZ+hrromavX8g=",
- "dev": true,
- "requires": {
- "execa": "^0.7.0",
- "mem": "^1.1.0"
- }
- },
- "utf8": {
+ "safer-buffer": {
"version": "2.1.2",
- "resolved": "https://registry.npmjs.org/utf8/-/utf8-2.1.2.tgz",
- "integrity": "sha1-H6DZJw6b6FDZsFAn9jUZv0ZFfZY="
- },
- "util-deprecate": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
- "dev": true
- },
- "utils-merge": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
- "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
"dev": true
},
- "uuid": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
- "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==",
+ "setimmediate": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
+ "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=",
"dev": true
},
- "validate-npm-package-license": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
- "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
- "dev": true,
- "requires": {
- "spdx-correct": "^3.0.0",
- "spdx-expression-parse": "^3.0.0"
- }
- },
- "vary": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
- "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=",
+ "ua-parser-js": {
+ "version": "0.7.28",
+ "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.28.tgz",
+ "integrity": "sha512-6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g==",
"dev": true
},
- "walker": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz",
- "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=",
- "dev": true,
- "requires": {
- "makeerror": "1.0.x"
- }
- },
- "watch": {
- "version": "0.18.0",
- "resolved": "https://registry.npmjs.org/watch/-/watch-0.18.0.tgz",
- "integrity": "sha1-KAlUdsbffJDJYxOJkMClQj60uYY=",
- "dev": true,
- "requires": {
- "exec-sh": "^0.2.0",
- "minimist": "^1.2.0"
- }
+ "utf8": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz",
+ "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ=="
},
"whatwg-fetch": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz",
"integrity": "sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q==",
"dev": true
- },
- "which": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
- "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
- "dev": true,
- "requires": {
- "isexe": "^2.0.0"
- }
- },
- "which-module": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
- "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
- "dev": true
- },
- "wordwrap": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
- "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
- "dev": true
- },
- "wrap-ansi": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
- "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
- "dev": true,
- "requires": {
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1"
- },
- "dependencies": {
- "is-fullwidth-code-point": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
- "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
- "dev": true,
- "requires": {
- "number-is-nan": "^1.0.0"
- }
- },
- "string-width": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
- "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
- "dev": true,
- "requires": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
- }
- }
- }
- },
- "wrappy": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
- "dev": true
- },
- "write-file-atomic": {
- "version": "1.3.4",
- "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz",
- "integrity": "sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8=",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.11",
- "imurmurhash": "^0.1.4",
- "slide": "^1.1.5"
- }
- },
- "ws": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.5.tgz",
- "integrity": "sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==",
- "dev": true,
- "requires": {
- "options": ">=0.0.5",
- "ultron": "1.0.x"
- }
- },
- "xcode": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/xcode/-/xcode-1.1.0.tgz",
- "integrity": "sha512-hllHFtfsNu5WbVzj8KbGNdI3NgOYmTLZqyF4a9c9J1aGMhAdxmLLsXlpG0Bz8fEtKh6I3pyargRXN0ZlLpcF5w==",
- "dev": true,
- "requires": {
- "simple-plist": "^0.2.1",
- "uuid": "^3.3.2"
- }
- },
- "xml-parser": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/xml-parser/-/xml-parser-1.2.1.tgz",
- "integrity": "sha1-wx9MNPKXXbgq0BMiISBZJzYVb80=",
- "dev": true,
- "requires": {
- "debug": "^2.2.0"
- }
- },
- "xmlbuilder": {
- "version": "9.0.7",
- "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz",
- "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=",
- "dev": true
- },
- "xmldoc": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/xmldoc/-/xmldoc-0.4.0.tgz",
- "integrity": "sha1-0lciS+g5PqrL+DfvIn/Y7CWzaIg=",
- "dev": true,
- "requires": {
- "sax": "~1.1.1"
- }
- },
- "xmldom": {
- "version": "0.1.27",
- "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.27.tgz",
- "integrity": "sha1-1QH5ezvbQDr4757MIFcxh6rawOk=",
- "dev": true
- },
- "xpipe": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/xpipe/-/xpipe-1.0.5.tgz",
- "integrity": "sha1-jdi/Rfw/f1Xw4FS4ePQ6YmFNr98=",
- "dev": true
- },
- "xtend": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
- "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
- "dev": true
- },
- "y18n": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
- "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=",
- "dev": true
- },
- "yallist": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
- "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
- "dev": true
- },
- "yargs": {
- "version": "9.0.1",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-9.0.1.tgz",
- "integrity": "sha1-UqzCP+7Kw0BCB47njAwAf1CF20w=",
- "dev": true,
- "requires": {
- "camelcase": "^4.1.0",
- "cliui": "^3.2.0",
- "decamelize": "^1.1.1",
- "get-caller-file": "^1.0.1",
- "os-locale": "^2.0.0",
- "read-pkg-up": "^2.0.0",
- "require-directory": "^2.1.1",
- "require-main-filename": "^1.0.1",
- "set-blocking": "^2.0.0",
- "string-width": "^2.0.0",
- "which-module": "^2.0.0",
- "y18n": "^3.2.1",
- "yargs-parser": "^7.0.0"
- }
- },
- "yargs-parser": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz",
- "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=",
- "dev": true,
- "requires": {
- "camelcase": "^4.1.0"
- }
}
}
}
diff --git a/package.json b/package.json
index 4d636f08..1e11f531 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "react-native-fs",
- "version": "2.14.1",
+ "version": "2.20.0",
"description": "Native filesystem access for react-native",
"main": "FS.common.js",
"typings": "index.d.ts",
@@ -27,19 +27,20 @@
"license": "MIT",
"dependencies": {
"base-64": "^0.1.0",
- "utf8": "^2.1.1"
+ "utf8": "^3.0.0"
},
"devDependencies": {
"create-react-class": "15.6.3",
- "flow-bin": "0.78.0",
- "prop-types": "15.7.2",
- "react": "16.6.3",
- "react-native": "0.57.8",
- "react-native-windows": "0.57.2"
+ "flow-bin": "^0.109.0",
+ "prop-types": "^15.7.2"
},
"peerDependencies": {
- "prop-types": "^15.6.0",
- "react": "^16.2.0",
- "react-native": ">=0.51.0 <1.0.0"
+ "react-native": "*",
+ "react-native-windows": "*"
+ },
+ "peerDependenciesMeta": {
+ "react-native-windows": {
+ "optional": true
+ }
}
}
diff --git a/windows/.gitignore b/windows/.gitignore
index cbf7e7f4..3a8542dc 100644
--- a/windows/.gitignore
+++ b/windows/.gitignore
@@ -1,78 +1,362 @@
-*AppPackages*
-*BundleArtifacts*
-*ReactAssets*
+## Ignore Visual Studio temporary files, build results, and
+## files generated by popular Visual Studio add-ons.
+##
+## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
-#OS junk files
-[Tt]humbs.db
-*.DS_Store
-
-#Visual Studio files
-*.[Oo]bj
+# User-specific files
+*.rsuser
+*.suo
*.user
-*.aps
-*.pch
-*.vspscc
-*.vssscc
+*.userosscache
+*.sln.docstates
+
+# User-specific files (MonoDevelop/Xamarin Studio)
+*.userprefs
+
+# Mono auto generated files
+mono_crash.*
+
+# Build results
+[Dd]ebug/
+[Dd]ebugPublic/
+[Rr]elease/
+[Rr]eleases/
+x64/
+x86/
+[Ww][Ii][Nn]32/
+[Aa][Rr][Mm]/
+[Aa][Rr][Mm]64/
+bld/
+[Bb]in/
+[Oo]bj/
+[Ll]og/
+[Ll]ogs/
+
+# Visual Studio 2015/2017 cache/options directory
+.vs/
+# Uncomment if you have tasks that create the project's static files in wwwroot
+#wwwroot/
+
+# Visual Studio 2017 auto generated files
+Generated\ Files/
+
+# MSTest test Results
+[Tt]est[Rr]esult*/
+[Bb]uild[Ll]og.*
+
+# NUnit
+*.VisualState.xml
+TestResult.xml
+nunit-*.xml
+
+# Build Results of an ATL Project
+[Dd]ebugPS/
+[Rr]eleasePS/
+dlldata.c
+
+# Benchmark Results
+BenchmarkDotNet.Artifacts/
+
+# .NET Core
+project.lock.json
+project.fragment.lock.json
+artifacts/
+
+# ASP.NET Scaffolding
+ScaffoldingReadMe.txt
+
+# StyleCop
+StyleCopReport.xml
+
+# Files built by Visual Studio
*_i.c
*_p.c
-*.ncb
-*.suo
+*_h.h
+*.ilk
+*.meta
+*.obj
+*.iobj
+*.pch
+*.pdb
+*.ipdb
+*.pgc
+*.pgd
+*.rsp
+*.sbr
*.tlb
+*.tli
*.tlh
-*.bak
-*.[Cc]ache
-*.ilk
+*.tmp
+*.tmp_proj
+*_wpftmp.csproj
*.log
-*.lib
-*.sbr
-*.sdf
-*.opensdf
-*.opendb
-*.unsuccessfulbuild
+*.vspscc
+*.vssscc
+.builds
+*.pidb
+*.svclog
+*.scc
+
+# Chutzpah Test files
+_Chutzpah*
+
+# Visual C++ cache files
ipch/
-[Oo]bj/
-[Bb]in
-[Dd]ebug*/
-[Rr]elease*/
-Ankh.NoLoad
+*.aps
+*.ncb
+*.opendb
+*.opensdf
+*.sdf
+*.cachefile
+*.VC.db
+*.VC.VC.opendb
-#MonoDevelop
-*.pidb
-*.userprefs
+# Visual Studio profiler
+*.psess
+*.vsp
+*.vspx
+*.sap
+
+# Visual Studio Trace Files
+*.e2e
+
+# TFS 2012 Local Workspace
+$tf/
-#Tooling
+# Guidance Automation Toolkit
+*.gpState
+
+# ReSharper is a .NET coding add-in
_ReSharper*/
-*.resharper
-[Tt]est[Rr]esult*
-*.sass-cache
+*.[Rr]e[Ss]harper
+*.DotSettings.user
-#Project files
-[Bb]uild/
+# TeamCity is a build add-in
+_TeamCity*
-#Subversion files
-.svn
+# DotCover is a Code Coverage Tool
+*.dotCover
-# Office Temp Files
-~$*
+# AxoCover is a Code Coverage Tool
+.axoCover/*
+!.axoCover/settings.json
-# vim Temp Files
-*~
+# Coverlet is a free, cross platform Code Coverage Tool
+coverage*.json
+coverage*.xml
+coverage*.info
+
+# Visual Studio code coverage results
+*.coverage
+*.coveragexml
+
+# NCrunch
+_NCrunch_*
+.*crunch*.local.xml
+nCrunchTemp_*
+
+# MightyMoose
+*.mm.*
+AutoTest.Net/
+
+# Web workbench (sass)
+.sass-cache/
+
+# Installshield output folder
+[Ee]xpress/
+
+# DocProject is a documentation generator add-in
+DocProject/buildhelp/
+DocProject/Help/*.HxT
+DocProject/Help/*.HxC
+DocProject/Help/*.hhc
+DocProject/Help/*.hhk
+DocProject/Help/*.hhp
+DocProject/Help/Html2
+DocProject/Help/html
+
+# Click-Once directory
+publish/
+
+# Publish Web Output
+*.[Pp]ublish.xml
+*.azurePubxml
+# Note: Comment the next line if you want to checkin your web deploy settings,
+# but database connection strings (with potential passwords) will be unencrypted
+*.pubxml
+*.publishproj
+
+# Microsoft Azure Web App publish settings. Comment the next line if you want to
+# checkin your Azure Web App publish settings, but sensitive information contained
+# in these scripts will be unencrypted
+PublishScripts/
-#NuGet
-packages/
+# NuGet Packages
*.nupkg
+# NuGet Symbol Packages
+*.snupkg
+# The packages folder can be ignored because of Package Restore
+**/[Pp]ackages/*
+# except build/, which is used as an MSBuild target.
+!**/[Pp]ackages/build/
+# Uncomment if necessary however generally it will be regenerated when needed
+#!**/[Pp]ackages/repositories.config
+# NuGet v3's project.json files produces more ignorable files
+*.nuget.props
+*.nuget.targets
-#ncrunch
-*ncrunch*
-*crunch*.local.xml
+# Microsoft Azure Build Output
+csx/
+*.build.csdef
-# visual studio database projects
+# Microsoft Azure Emulator
+ecf/
+rcf/
+
+# Windows Store app package directories and files
+AppPackages/
+BundleArtifacts/
+Package.StoreAssociation.xml
+_pkginfo.txt
+*.appx
+*.appxbundle
+*.appxupload
+
+# Visual Studio cache files
+# files ending in .cache can be ignored
+*.[Cc]ache
+# but keep track of directories ending in .cache
+!?*.[Cc]ache/
+
+# Others
+ClientBin/
+~$*
+*~
*.dbmdl
+*.dbproj.schemaview
+*.jfm
+*.pfx
+*.publishsettings
+orleans.codegen.cs
-#Test files
-*.testsettings
+# Including strong name files can present a security risk
+# (https://github.com/github/gitignore/pull/2483#issue-259490424)
+#*.snk
-#Other files
-*.DotSettings
-.vs/
-*project.lock.json
+# Since there are multiple workflows, uncomment next line to ignore bower_components
+# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
+#bower_components/
+
+# RIA/Silverlight projects
+Generated_Code/
+
+# Backup & report files from converting an old project file
+# to a newer Visual Studio version. Backup files are not needed,
+# because we have git ;-)
+_UpgradeReport_Files/
+Backup*/
+UpgradeLog*.XML
+UpgradeLog*.htm
+ServiceFabricBackup/
+*.rptproj.bak
+
+# SQL Server files
+*.mdf
+*.ldf
+*.ndf
+
+# Business Intelligence projects
+*.rdl.data
+*.bim.layout
+*.bim_*.settings
+*.rptproj.rsuser
+*- [Bb]ackup.rdl
+*- [Bb]ackup ([0-9]).rdl
+*- [Bb]ackup ([0-9][0-9]).rdl
+
+# Microsoft Fakes
+FakesAssemblies/
+
+# GhostDoc plugin setting file
+*.GhostDoc.xml
+
+# Node.js Tools for Visual Studio
+.ntvs_analysis.dat
+node_modules/
+
+# Visual Studio 6 build log
+*.plg
+
+# Visual Studio 6 workspace options file
+*.opt
+
+# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
+*.vbw
+
+# Visual Studio LightSwitch build output
+**/*.HTMLClient/GeneratedArtifacts
+**/*.DesktopClient/GeneratedArtifacts
+**/*.DesktopClient/ModelManifest.xml
+**/*.Server/GeneratedArtifacts
+**/*.Server/ModelManifest.xml
+_Pvt_Extensions
+
+# Paket dependency manager
+.paket/paket.exe
+paket-files/
+
+# FAKE - F# Make
+.fake/
+
+# CodeRush personal settings
+.cr/personal
+
+# Python Tools for Visual Studio (PTVS)
+__pycache__/
+*.pyc
+
+# Cake - Uncomment if you are using it
+# tools/**
+# !tools/packages.config
+
+# Tabs Studio
+*.tss
+
+# Telerik's JustMock configuration file
+*.jmconfig
+
+# BizTalk build output
+*.btp.cs
+*.btm.cs
+*.odx.cs
+*.xsd.cs
+
+# OpenCover UI analysis results
+OpenCover/
+
+# Azure Stream Analytics local run output
+ASALocalRun/
+
+# MSBuild Binary and Structured Log
+*.binlog
+
+# NVidia Nsight GPU debugger configuration file
+*.nvuser
+
+# MFractors (Xamarin productivity tool) working folder
+.mfractor/
+
+# Local History for Visual Studio
+.localhistory/
+
+# BeatPulse healthcheck temp database
+healthchecksdb
+
+# Backup folder for Package Reference Convert tool in Visual Studio 2017
+MigrationBackup/
+
+# Ionide (cross platform F# VS Code tools) working folder
+.ionide/
+
+# Fody - auto-generated XML schema
+FodyWeavers.xsd
\ No newline at end of file
diff --git a/windows/.npmignore b/windows/.npmignore
index e2688acf..fcd1522d 100644
--- a/windows/.npmignore
+++ b/windows/.npmignore
@@ -10,3 +10,6 @@ obj/
# Don't publish tests to NPM
RNFS.Tests/
+
+# Don't publish setting used for developement
+Directory.Build.props
\ No newline at end of file
diff --git a/windows/Directory.Build.props b/windows/Directory.Build.props
new file mode 100644
index 00000000..b699affc
--- /dev/null
+++ b/windows/Directory.Build.props
@@ -0,0 +1,9 @@
+
+
+
+
+ $([MSBuild]::NormalizeDirectory('$(SolutionDir)\..\node_modules\react-native-windows\'))
+
+
+
+
diff --git a/windows/README.md b/windows/README.md
new file mode 100644
index 00000000..52c095eb
--- /dev/null
+++ b/windows/README.md
@@ -0,0 +1,3 @@
+We do not have a solution file here because we need react-native-windows version >=0.63.x.
+Use the Examples\RNFS.Windows\windows\RNFSWin.sln file instead to change and test the code.
+That project has the right dependencies on the react-native-windows.
\ No newline at end of file
diff --git a/windows/RNFS.Tests/RNFSModuleTest.cpp b/windows/RNFS.Tests/RNFSModuleTest.cpp
new file mode 100644
index 00000000..d15c2c78
--- /dev/null
+++ b/windows/RNFS.Tests/RNFSModuleTest.cpp
@@ -0,0 +1,612 @@
+#include "pch.h"
+#include "ReactModuleBuilderMock.h"
+
+#include
+#include "future/futureWait.h"
+#include "RNFSManager.h"
+
+namespace ReactNativeTests {
+
+ std::string testLocation = "C:/react-native-fs-test-folder\\";
+
+ TEST_CLASS(RNFSManagerTest) {
+ React::ReactModuleBuilderMock m_builderMock{};
+ React::IReactModuleBuilder m_moduleBuilder;
+ Windows::Foundation::IInspectable m_moduleObject{ nullptr };
+ RNFSManager* m_module;
+
+ RNFSManagerTest() {
+ m_moduleBuilder = winrt::make(m_builderMock);
+ auto provider = React::MakeModuleProvider();
+ m_moduleObject = m_builderMock.CreateModule(provider, m_moduleBuilder);
+ m_module = React::ReactNonAbiValue::GetPtrUnsafe(m_moduleObject);
+ }
+
+ /*
+ Create folders for test
+ */
+ // This rejects, but still creates the necessary file. TODO: Address this down the line
+ TEST_METHOD(TestMethodCall_mkdirCreate1) {
+ Mso::FutureWait(m_builderMock.Call2(
+ L"mkdir",
+ std::function([]() noexcept { TestCheck(true); }),
+ std::function(
+ [](React::JSValue const& error) noexcept { TestCheck(true); }),
+ testLocation, React::JSValueObject{}));
+ //TestCheck(m_builderMock.IsResolveCallbackCalled());
+ }
+
+ TEST_METHOD(TestMethodCall_mkdirCreate2) {
+ Mso::FutureWait(m_builderMock.Call2(
+ L"mkdir",
+ std::function([]() noexcept { TestCheck(true); }),
+ std::function(
+ [](React::JSValue const& error) noexcept { TestCheck(error["message"] == "Failed to create directory."); }),
+ testLocation + "temp/", React::JSValueObject{}));
+ TestCheck(m_builderMock.IsResolveCallbackCalled());
+ }
+
+ TEST_METHOD(TestMethodCall_mkdirCreate3) {
+ Mso::FutureWait(m_builderMock.Call2(
+ L"mkdir",
+ std::function([]() noexcept { TestCheck(true); }),
+ std::function(
+ [](React::JSValue const& error) noexcept { TestCheck(error["message"] == "Failed to create directory."); }),
+ testLocation + "wait", React::JSValueObject{}));
+ TestCheck(m_builderMock.IsResolveCallbackCalled());
+ }
+
+ TEST_METHOD(TestMethodCall_mkdirCreate4) {
+ Mso::FutureWait(m_builderMock.Call2(
+ L"mkdir",
+ std::function([]() noexcept { TestCheck(true); }),
+ std::function(
+ [](React::JSValue const& error) noexcept { TestCheck(error["message"] == "Failed to create directory."); }),
+ testLocation + "wait/what\\", React::JSValueObject{}));
+ TestCheck(m_builderMock.IsResolveCallbackCalled());
+ }
+
+
+ /*
+ Create files for test
+ */
+ TEST_METHOD(TestMethodCall_writefileCreate1) {
+ Mso::FutureWait(m_builderMock.Call2(
+ L"writeFile",
+ std::function([]() noexcept { TestCheck(true); }),
+ std::function(
+ [](React::JSValue const& error) noexcept { TestCheck(error["message"] == "Failed to write to file."); }),
+ testLocation + "toHash.txt", "c3F1aXJyZWxz", React::JSValueObject{}));
+ TestCheck(m_builderMock.IsResolveCallbackCalled());
+ }
+
+ TEST_METHOD(TestMethodCall_writefileCreate2) {
+ Mso::FutureWait(m_builderMock.Call2(
+ L"writeFile",
+ std::function([]() noexcept { TestCheck(true); }),
+ std::function(
+ [](React::JSValue const& error) noexcept { TestCheck(error["message"] == "Failed to write to file."); }),
+ testLocation + "toMove.rtf", "YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXo=", React::JSValueObject{}));
+ TestCheck(m_builderMock.IsResolveCallbackCalled());
+ }
+
+ TEST_METHOD(TestMethodCall_writefileCreate3) {
+ Mso::FutureWait(m_builderMock.Call2(
+ L"writeFile",
+ std::function([]() noexcept { TestCheck(true); }),
+ std::function(
+ [](React::JSValue const& error) noexcept { TestCheck(error["message"] == "Failed to write to file."); }),
+ testLocation + "toRead", "MmIgfHwgITJiIGJ5IEJpbGwgU2hha2V5CgoKYWFh", React::JSValueObject{}));
+ TestCheck(m_builderMock.IsResolveCallbackCalled());
+ }
+
+ TEST_METHOD(TestMethodCall_writefileCreate4) {
+ Mso::FutureWait(m_builderMock.Call2(
+ L"writeFile",
+ std::function([]() noexcept { TestCheck(true); }),
+ std::function(
+ [](React::JSValue const& error) noexcept { TestCheck(error["message"] == "Failed to write to file."); }),
+ testLocation + "toRead.txt", "MmIgfHwgITJiIGJ5IEJpbGwgU2hha2V5CgoKYWFh", React::JSValueObject{}));
+ TestCheck(m_builderMock.IsResolveCallbackCalled());
+ }
+
+ TEST_METHOD(TestMethodCall_writefileCreate5) {
+ Mso::FutureWait(m_builderMock.Call2(
+ L"writeFile",
+ std::function([]() noexcept { TestCheck(true); }),
+ std::function(
+ [](React::JSValue const& error) noexcept { TestCheck(error["message"] == "Failed to write to file."); }),
+ testLocation + "toWriteTo.txt", "QSBOb3RlcGFkIGJ1ZyB0aGF0IGxldHMgbWUgd3JpdGUgdW5pbnRlbmRlZCBjaGFyYWN0ZXJz", React::JSValueObject{}));
+ TestCheck(m_builderMock.IsResolveCallbackCalled());
+ }
+
+
+ /*
+ mkdir() tests
+ */
+ TEST_METHOD(TestMethodCall_mkdirSuccessful) {
+ Mso::FutureWait(m_builderMock.Call2(
+ L"mkdir",
+ std::function([]() noexcept { TestCheck(true); }),
+ std::function(
+ [](React::JSValue const& error) noexcept { TestCheck(error["message"] == "Failed to create directory."); }),
+ testLocation + "Hello", React::JSValueObject{}));
+ TestCheck(m_builderMock.IsResolveCallbackCalled());
+ }
+
+ TEST_METHOD(TestMethodCall_mkdirUnsuccessful) {
+ Mso::FutureWait(m_builderMock.Call2(
+ L"mkdir",
+ std::function([]() noexcept { TestCheck(true); }),
+ std::function(
+ [](React::JSValue const& error) noexcept { TestCheck(true); }),
+ "", React::JSValueObject{}));
+ TestCheck(m_builderMock.IsRejectCallbackCalled());
+ }
+
+ /*
+ exists() tests
+ */
+ TEST_METHOD(TestMethodCall_existsSuccessful1) {
+ Mso::FutureWait(m_builderMock.Call2(
+ L"exists",
+ std::function([](bool result) noexcept { TestCheck(result); }),
+ std::function(
+ [](React::JSValue const& error) noexcept { TestCheck(error["message"] == "Failed to check if file or directory exists."); }),
+ testLocation + "Hello"));
+ TestCheck(m_builderMock.IsResolveCallbackCalled());
+ }
+
+ TEST_METHOD(TestMethodCall_existsUnsuccessful) {
+ Mso::FutureWait(m_builderMock.Call2(
+ L"exists",
+ std::function([](bool result) noexcept { TestCheck(!result); }),
+ std::function(
+ [](React::JSValue const& error) noexcept { TestCheck(error["message"] == "Failed to check if file or directory exists."); }),
+ testLocation + "Hello/World"));
+ TestCheck(m_builderMock.IsResolveCallbackCalled());
+ }
+
+ TEST_METHOD(TestMethodCall_existsSuccessful2) {
+ Mso::FutureWait(m_builderMock.Call2(
+ L"exists",
+ std::function([](bool result) noexcept { TestCheck(result); }),
+ std::function(
+ [](React::JSValue const& error) noexcept { TestCheck(error["message"] == "Failed to check if file or directory exists."); }),
+ testLocation + "Hello\\"));
+ TestCheck(m_builderMock.IsResolveCallbackCalled());
+ }
+
+ TEST_METHOD(TestMethodCall_existsSuccessful3) {
+ Mso::FutureWait(m_builderMock.Call2(
+ L"exists",
+ std::function([](bool result) noexcept { TestCheck(result); }),
+ std::function(
+ [](React::JSValue const& error) noexcept { TestCheck(error["message"] == "Failed to check if file or directory exists."); }),
+ testLocation + "Hello/"));
+ TestCheck(m_builderMock.IsResolveCallbackCalled());
+ }
+
+ /*
+ readfile() tests
+ */
+ TEST_METHOD(TestMethodCall_readfileSuccessful1) {
+ Mso::FutureWait(m_builderMock.Call2(
+ L"readFile",
+ std::function([](std::string value) noexcept { TestCheck(value == "MmIgfHwgITJiIGJ5IEJpbGwgU2hha2V5CgoKYWFh"
+ ); }),
+ std::function(
+ [](React::JSValue const& error) noexcept { TestCheck(error["message"] == "Failed to read file."); }),
+ testLocation + "toRead.txt"));
+ TestCheck(m_builderMock.IsResolveCallbackCalled());
+ }
+
+ TEST_METHOD(TestMethodCall_readfileSuccessful2) {
+ Mso::FutureWait(m_builderMock.Call2(
+ L"readFile",
+ std::function([](std::string value) noexcept { TestCheck(value == "MmIgfHwgITJiIGJ5IEJpbGwgU2hha2V5CgoKYWFh"
+ ); }),
+ std::function(
+ [](React::JSValue const& error) noexcept { TestCheck(error["message"] == "Failed to read file."); }),
+ testLocation + "toRead"));
+ TestCheck(m_builderMock.IsResolveCallbackCalled());
+ }
+
+ TEST_METHOD(TestMethodCall_readfileUnsuccessful) {
+ std::string toCompare("");
+ Mso::FutureWait(m_builderMock.Call2(
+ L"readFile",
+ std::function([](std::string value) noexcept { TestCheck(true); }),
+ std::function(
+ [](React::JSValue const& error) noexcept { TestCheck(true); }),
+ testLocation + "Hello"));
+ TestCheck(m_builderMock.IsRejectCallbackCalled());
+ }
+
+ /*
+ writefile() tests
+ */
+ TEST_METHOD(TestMethodCall_writefileSuccessful) {
+ Mso::FutureWait(m_builderMock.Call2(
+ L"writeFile",
+ std::function([]() noexcept { TestCheck(true); }),
+ std::function(
+ [](React::JSValue const& error) noexcept { TestCheck(error["message"] == "Failed to write to file."); }),
+ testLocation + "TestWrite.txt", "MmIgfHwgITJiIGJ5IEJpbGwgU2hha2V5DQoNCg0KYWFh", React::JSValueObject{}));
+ TestCheck(m_builderMock.IsResolveCallbackCalled());
+ }
+
+ TEST_METHOD(TestMethodCall_writefileUnsuccessful) {
+ Mso::FutureWait(m_builderMock.Call2(
+ L"writeFile",
+ std::function([]() noexcept { TestCheck(true); }),
+ std::function(
+ [](React::JSValue const& error) noexcept { TestCheck(true); }),
+ testLocation + "TestWrite/Testwrite.txt", "MmIgfHwgITJiIGJ5IEJpbGwgU2hha2V5DQoNCg0KYWFh", React::JSValueObject{}));
+ TestCheck(m_builderMock.IsRejectCallbackCalled());
+ }
+
+ /*
+ readDir() tests
+ */
+ TEST_METHOD(TestMethodCall_readDirSuccessful1) {
+ Mso::FutureWait(m_builderMock.Call2(
+ L"readDir",
+ std::function([](React::JSValueObject&) noexcept { TestCheck(true); }),
+ std::function(
+ [](React::JSValue const& error) noexcept { TestCheck(error["message"] == "Failed to read directory."); }),
+ testLocation + "wait"));
+ TestCheck(m_builderMock.IsResolveCallbackCalled());
+ }
+
+ TEST_METHOD(TestMethodCall_readDirSuccessful2) {
+ Mso::FutureWait(m_builderMock.Call2(
+ L"readDir",
+ std::function([](React::JSValueObject&) noexcept { TestCheck(true); }),
+ std::function(
+ [](React::JSValue const& error) noexcept { TestCheck(error["message"] == "Failed to read directory."); }),
+ testLocation + "Hello"));
+ TestCheck(m_builderMock.IsResolveCallbackCalled());
+ }
+
+ TEST_METHOD(TestMethodCall_readDirUnsuccessful) {
+ Mso::FutureWait(m_builderMock.Call2(
+ L"readDir",
+ std::function([](React::JSValueObject&) noexcept { TestCheck(true); }),
+ std::function(
+ [](React::JSValue const& error) noexcept { TestCheck(true); }),
+ testLocation + "Hello/World/Toast/Bro"));
+ TestCheck(m_builderMock.IsRejectCallbackCalled());
+ }
+
+ /*
+ write() tests
+ */
+ TEST_METHOD(TestMethodCall_appendSuccessful1) {
+ Mso::FutureWait(m_builderMock.Call2(
+ L"appendFile",
+ std::function([](React::JSValueObject&) noexcept { TestCheck(true); }),
+ std::function(
+ [](React::JSValue const& error) noexcept { TestCheck(error["message"] == "Failed to append to file."); }),
+ testLocation + "toWriteTo.txt", "YWFh"));
+ TestCheck(m_builderMock.IsResolveCallbackCalled());
+ }
+
+ TEST_METHOD(TestMethodCall_appendSuccessful2) {
+ Mso::FutureWait(m_builderMock.Call2(
+ L"appendFile",
+ std::function([](React::JSValueObject&) noexcept { TestCheck(true); }),
+ std::function(
+ [](React::JSValue const& error) noexcept { TestCheck(true); }),
+ testLocation + "Nonexistant", "YmJiCg=="));
+ TestCheck(m_builderMock.IsResolveCallbackCalled());
+ }
+
+ /*
+ appendFile() tests
+ */
+ TEST_METHOD(TestMethodCall_writeToBeginning) {
+ Mso::FutureWait(m_builderMock.Call2(
+ L"write",
+ std::function([](React::JSValueObject&) noexcept { TestCheck(true); }),
+ std::function(
+ [](React::JSValue const& error) noexcept { TestCheck(error["message"] == "Failed to write to file."); }),
+ testLocation + "toWriteTo.txt", "YWFh", 0));
+ TestCheck(m_builderMock.IsResolveCallbackCalled());
+ }
+
+ TEST_METHOD(TestMethodCall_writeToNegativeIndex) {
+ Mso::FutureWait(m_builderMock.Call2(
+ L"write",
+ std::function([](React::JSValueObject&) noexcept { TestCheck(true); }),
+ std::function(
+ [](React::JSValue const& error) noexcept { TestCheck(error["message"] == "Failed to write to file."); }),
+ testLocation + "toWriteTo.txt", "YmJiCg==", -1));
+ TestCheck(m_builderMock.IsResolveCallbackCalled());
+ }
+
+ /*
+ read() tests
+ */
+ TEST_METHOD(TestMethodCall_readSuccessful1) {
+ Mso::FutureWait(m_builderMock.Call2(
+ L"read",
+ std::function([](std::string value) noexcept { TestCheck(value == "Yg=="); }),
+ std::function(
+ [](React::JSValue const& error) noexcept { TestCheck(error["message"] == "Failed to read from file."); }),
+ testLocation + "TestWrite.txt", 1, 1));
+ TestCheck(m_builderMock.IsResolveCallbackCalled());
+ }
+
+ TEST_METHOD(TestMethodCall_readSuccessful2) {
+ Mso::FutureWait(m_builderMock.Call2(
+ L"read",
+ std::function([](std::string value) noexcept { TestCheck(value == "fHwgITJiIGJ5IEJpbGwgU2hha2U="); }),
+ std::function(
+ [](React::JSValue const& error) noexcept { TestCheck(error["message"] == "Failed to read from file."); }),
+ testLocation + "toRead.txt", 20, 3));
+ TestCheck(m_builderMock.IsResolveCallbackCalled());
+ }
+
+ /*
+ moveFile() tests
+ */
+ TEST_METHOD(TestMethodCall_moveFileSuccessful1) {
+ Mso::FutureWait(m_builderMock.Call2(
+ L"moveFile",
+ std::function([]() noexcept { TestCheck(true); }),
+ std::function(
+ [](React::JSValue const& error) noexcept { TestCheck(error["message"] == "Failed to move file"); }),
+ testLocation + "toMove.rtf", testLocation + "temp/toMove.rtf"));
+ TestCheck(m_builderMock.IsResolveCallbackCalled());
+ }
+
+ TEST_METHOD(TestMethodCall_moveFileSuccessful2) {
+ Mso::FutureWait(m_builderMock.Call2(
+ L"moveFile",
+ std::function([]() noexcept { TestCheck(true); }),
+ std::function(
+ [](React::JSValue const& error) noexcept { TestCheck(error["message"] == "Failed to move file"); }),
+ testLocation + "temp/toMove.rtf", testLocation + "/toMove.rtf"));
+ TestCheck(m_builderMock.IsResolveCallbackCalled());
+ }
+
+ TEST_METHOD(TestMethodCall_moveFileUnsuccessful1) {
+ Mso::FutureWait(m_builderMock.Call2(
+ L"moveFile",
+ std::function([]() noexcept { TestCheck(true); }),
+ std::function(
+ [](React::JSValue const& error) noexcept { TestCheck(true); }),
+ testLocation + "squirrels", testLocation + "I//Like//Tooooaast"));
+ TestCheck(m_builderMock.IsRejectCallbackCalled());
+ }
+
+ /*
+ copyFile() tests
+ */
+ TEST_METHOD(TestMethodCall_copyFileSuccessful) {
+ Mso::FutureWait(m_builderMock.Call2(
+ L"copyFile",
+ std::function([](std::string value) noexcept { TestCheck(true); }),
+ std::function(
+ [](React::JSValue const& error) noexcept { TestCheck(error["message"] == "Failed to copy file."); }),
+ testLocation + "toMove.rtf", testLocation + "Hello/toMove.rtf"));
+ TestCheck(m_builderMock.IsResolveCallbackCalled());
+ }
+
+ TEST_METHOD(TestMethodCall_copyFileUnsuccessful1) {
+ Mso::FutureWait(m_builderMock.Call2(
+ L"copyFile",
+ std::function([](std::string value) noexcept { TestCheck(true); }),
+ std::function(
+ [](React::JSValue const& error) noexcept { TestCheck(true); }),
+ testLocation + "toMove.rtf", testLocation + "I//Like//Tooooaast"));
+ TestCheck(m_builderMock.IsRejectCallbackCalled());
+ }
+
+ TEST_METHOD(TestMethodCall_copyFileUnsuccessful2) {
+ Mso::FutureWait(m_builderMock.Call2(
+ L"copyFile",
+ std::function([](std::string value) noexcept { TestCheck(true); }),
+ std::function(
+ [](React::JSValue const& error) noexcept { TestCheck(true); }),
+ testLocation + "I//Like//Tooooaast", testLocation));
+ TestCheck(m_builderMock.IsRejectCallbackCalled());
+ }
+
+ /*
+ touch() tests
+ */
+ TEST_METHOD(TestMethodCall_touchSuccessful1) {
+ Mso::FutureWait(m_builderMock.Call2(
+ L"touch",
+ std::function([]() noexcept { TestCheck(true); }),
+ std::function(
+ [](React::JSValue const& error) noexcept { TestCheck(error["message"] == "Failed to touch file."); }),
+ testLocation + "TestWrite.txt", 1593561600, 1593561600));
+ TestCheck(m_builderMock.IsResolveCallbackCalled());
+ }
+
+ TEST_METHOD(TestMethodCall_touchSuccessful2) {
+ Mso::FutureWait(m_builderMock.Call2(
+ L"touch",
+ std::function([]() noexcept { TestCheck(true); }),
+ std::function(
+ [](React::JSValue const& error) noexcept { TestCheck(error["message"] == "Failed to touch file."); }),
+ testLocation + "TestWrite.txt", -1593561600, -1593561600));
+ TestCheck(m_builderMock.IsResolveCallbackCalled());
+ }
+
+ TEST_METHOD(TestMethodCall_touchSuccessfulMakeHandle) {
+ Mso::FutureWait(m_builderMock.Call2(
+ L"touch",
+ std::function([]() noexcept { TestCheck(true); }),
+ std::function(
+ [](React::JSValue const& error) noexcept { TestCheck(error["message"] == "Failed to create handle for file to touch."); }),
+ testLocation, 1593561600, 1593561600));
+ TestCheck(m_builderMock.IsRejectCallbackCalled());
+ }
+
+ /*
+ getFSInfo() tests
+ */
+ //TEST_METHOD(TestMethodCall_getFSInfoSuccessful) {
+ // Mso::FutureWait(m_builderMock.Call2(
+ // L"getFSInfo",
+ // std::function([]() noexcept { TestCheck(true); }),
+ // std::function(
+ // [](React::JSValue const& error) noexcept { TestCheck(error["message"] == "Failed to retrieve file system info."); })));
+ // TestCheck(m_builderMock.IsResolveCallbackCalled());
+ //}
+
+ /*
+ stat() tests
+ */
+ TEST_METHOD(TestMethodCall_statSuccessful1) {
+ Mso::FutureWait(m_builderMock.Call2(
+ L"stat",
+ std::function([]() noexcept { TestCheck(true); }),
+ std::function(
+ [](React::JSValue const& error) noexcept { TestCheck(error["message"] == "Failed to retrieve file info."); }),
+ testLocation + "toMove.rtf"));
+ TestCheck(m_builderMock.IsResolveCallbackCalled());
+ }
+
+ TEST_METHOD(TestMethodCall_statSuccessful2) {
+ Mso::FutureWait(m_builderMock.Call2(
+ L"stat",
+ std::function([]() noexcept { TestCheck(true); }),
+ std::function(
+ [](React::JSValue const& error) noexcept { TestCheck(error["message"] == "Failed to retrieve file info."); }),
+ testLocation + "toMove.rtf/"));
+ TestCheck(m_builderMock.IsResolveCallbackCalled());
+ }
+
+ TEST_METHOD(TestMethodCall_statUnsuccessful1) {
+ Mso::FutureWait(m_builderMock.Call2(
+ L"stat",
+ std::function([]() noexcept { TestCheck(true); }),
+ std::function(
+ [](React::JSValue const& error) noexcept { TestCheck(true); }),
+ testLocation + "NonexistantAddress"));
+ TestCheck(m_builderMock.IsRejectCallbackCalled());
+ }
+
+ /*
+ hash() tests
+ */
+ TEST_METHOD(TestMethodCall_hashSuccessful_MD5) {
+ Mso::FutureWait(m_builderMock.Call2(
+ L"hash",
+ std::function([](std::string value) noexcept { TestCheck(value == "0e988e0e8dec56e3bb331e110109cc24"); }),
+ std::function(
+ [](React::JSValue const& error) noexcept { TestCheck(error["message"] == "Failed to get checksum from file."); }),
+ testLocation + "toHash.txt", "md5"));
+ TestCheck(m_builderMock.IsResolveCallbackCalled());
+ TestCheck(m_builderMock.IsResolveCallbackCalled());
+ }
+
+ TEST_METHOD(TestMethodCall_hashSuccessful_SHA1) {
+ Mso::FutureWait(m_builderMock.Call2(
+ L"hash",
+ std::function([](std::string value) noexcept { TestCheck(value == "cb6e9c8e23671c8406179b9e50e8d55d79bb6d1c"); }),
+ std::function(
+ [](React::JSValue const& error) noexcept { TestCheck(error["message"] == "Failed to get checksum from file."); }),
+ testLocation + "toHash.txt", "sha1"));
+ TestCheck(m_builderMock.IsResolveCallbackCalled());
+ }
+
+ TEST_METHOD(TestMethodCall_hashSuccessful_SHA256) {
+ Mso::FutureWait(m_builderMock.Call2(
+ L"hash",
+ std::function([](std::string value) noexcept { TestCheck(value == "ba0ed317bfab6eb1f3b59b9ea26efeb5a2afd565f7632fb6ec3fafcd3ee05336"); }),
+ std::function(
+ [](React::JSValue const& error) noexcept { TestCheck(error["message"] == "Failed to get checksum from file."); }),
+ testLocation + "toHash.txt", "sha256"));
+ TestCheck(m_builderMock.IsResolveCallbackCalled());
+ }
+
+ TEST_METHOD(TestMethodCall_hashSuccessful_SHA384) {
+ Mso::FutureWait(m_builderMock.Call2(
+ L"hash",
+ std::function([](std::string value) noexcept { TestCheck(value == "ca729e5416a95d4acaf31d398824e782d085283a1fd776a188bb6340904f2205cf5c1e6849e7acfbb7271b2e8135d96f"); }),
+ std::function(
+ [](React::JSValue const& error) noexcept { TestCheck(error["message"] == "Failed to get checksum from file."); }),
+ testLocation + "toHash.txt", "sha384"));
+ TestCheck(m_builderMock.IsResolveCallbackCalled());
+ }
+
+ TEST_METHOD(TestMethodCall_hashSuccessful_SHA512) {
+ Mso::FutureWait(m_builderMock.Call2(
+ L"hash",
+ std::function([](std::string value) noexcept { TestCheck(value == "0bd4e1ac2101124ca5efa102c2be200a2573f627c5bc926d0105c0a98fb24064ebed206b47deca5c4d0005c8796fbdc5e256f5f75f603fedc5bf5d4e3d40e79f"); }),
+ std::function(
+ [](React::JSValue const& error) noexcept { TestCheck(error["message"] == "Failed to get checksum from file."); }),
+ testLocation + "toHash.txt", "sha512"));
+ TestCheck(m_builderMock.IsResolveCallbackCalled());
+ }
+
+ TEST_METHOD(TestMethodCall_hashUnsuccessful_SHA224) {
+ Mso::FutureWait(m_builderMock.Call2(
+ L"hash",
+ std::function([](std::string value) noexcept { TestCheck(true); }),
+ std::function(
+ [](React::JSValue const& error) noexcept { TestCheck(true); }),
+ testLocation + "toHash.txt", "sha224"));
+ TestCheck(m_builderMock.IsRejectCallbackCalled());
+ }
+
+ TEST_METHOD(TestMethodCall_hashUnsuccessful_NonexistantHash) {
+ Mso::FutureWait(m_builderMock.Call2(
+ L"hash",
+ std::function([](std::string value) noexcept { TestCheck(true); }),
+ std::function(
+ [](React::JSValue const& error) noexcept { TestCheck(true); }),
+ testLocation + "toHash.txt", "squirrels"));
+ TestCheck(m_builderMock.IsRejectCallbackCalled());
+ }
+
+ TEST_METHOD(TestMethodCall_hashUnsuccessful_InvalidFile) {
+ Mso::FutureWait(m_builderMock.Call2(
+ L"hash",
+ std::function([](std::string value) noexcept { TestCheck(true); }),
+ std::function(
+ [](React::JSValue const& error) noexcept { TestCheck(true); }),
+ testLocation, "sha256"));
+ TestCheck(m_builderMock.IsRejectCallbackCalled());
+ }
+
+ /*
+ unlink() tests
+ */
+ TEST_METHOD(TestMethodCall_unlinkSuccessful) {
+ Mso::FutureWait(m_builderMock.Call2(
+ L"unlink",
+ std::function([]() noexcept { TestCheck(true); }),
+ std::function(
+ [](React::JSValue const& error) noexcept { TestCheck(error["message"] == "Failed to unlink."); }),
+ testLocation + "Hello"));
+ TestCheck(m_builderMock.IsResolveCallbackCalled());
+ }
+
+ TEST_METHOD(TestMethodCall_unlinkUnsuccessful) {
+ Mso::FutureWait(m_builderMock.Call2(
+ L"unlink",
+ std::function([]() noexcept { TestCheck(true); }),
+ std::function(
+ [](React::JSValue const& error) noexcept { TestCheck(true); }),
+ testLocation + "Helloasdfasdfasdf"));
+ TestCheck(m_builderMock.IsRejectCallbackCalled());
+ }
+
+ TEST_METHOD(TestMethodCall_unlinkSuccessful2) {
+ Mso::FutureWait(m_builderMock.Call2(
+ L"unlink",
+ std::function([]() noexcept { TestCheck(true); }),
+ std::function(
+ [](React::JSValue const& error) noexcept { TestCheck(error["message"] == "Failed to unlink."); }),
+ testLocation));
+ TestCheck(m_builderMock.IsResolveCallbackCalled());
+ }
+ };
+}
\ No newline at end of file
diff --git a/windows/RNFS.Tests/RNFSWinUnitTest.vcxproj b/windows/RNFS.Tests/RNFSWinUnitTest.vcxproj
new file mode 100644
index 00000000..bd1fdbbf
--- /dev/null
+++ b/windows/RNFS.Tests/RNFSWinUnitTest.vcxproj
@@ -0,0 +1,217 @@
+
+
+
+
+ true
+ true
+ true
+ 16.0
+ {97b91d7b-4ac7-44f8-b7d3-7c7346eaf646}
+ Win32Proj
+ Microsoft.ReactNative
+ 10.0.19041.0
+ 10.0.16299.0
+ 2
+
+
+
+ Debug
+ Win32
+
+
+ Release
+ Win32
+
+
+ Debug
+ x64
+
+
+ Release
+ x64
+
+
+
+
+ $([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), 'node_modules\react-native-windows\package.json'))\node_modules\react-native-windows\
+ ReactNativeCxxTests\
+
+
+ Application
+ true
+ v142
+ Unicode
+
+
+ Application
+ false
+ v142
+ true
+ Unicode
+
+
+ Application
+ true
+ v142
+ Unicode
+
+
+ Application
+ false
+ v142
+ true
+ Unicode
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+
+
+ false
+
+
+ true
+
+
+ false
+
+
+
+ Use
+ pch.h
+ $(IntDir)pch.pch
+ pch.h
+
+ $(MSBuildThisFileDirectory);
+ $(ReactNativeCxxTestsDir);
+ ..\RNFS;
+ %(AdditionalIncludeDirectories)
+
+ /await %(AdditionalOptions) /bigobj
+
+
+ $(ReactNativeWindowsDir)Microsoft.ReactNative;%(AdditionalIncludeDirectories)
+
+
+
+
+ Level3
+ true
+ WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ true
+
+
+ Console
+ true
+
+
+
+
+ Level3
+ true
+ true
+ true
+ WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ true
+
+
+ Console
+ true
+ true
+ true
+
+
+
+
+ Level3
+ true
+ _DEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ true
+
+
+ Console
+ true
+
+
+
+
+ Level3
+ true
+ true
+ true
+ NDEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ true
+
+
+ Console
+ true
+ true
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Create
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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}.
+
+
+
+
+
+
\ No newline at end of file
diff --git a/windows/RNFS.Tests/RNFSWinUnitTest.vcxproj.filters b/windows/RNFS.Tests/RNFSWinUnitTest.vcxproj.filters
new file mode 100644
index 00000000..4584b660
--- /dev/null
+++ b/windows/RNFS.Tests/RNFSWinUnitTest.vcxproj.filters
@@ -0,0 +1,92 @@
+
+
+
+
+ {4FC737F1-C7A5-4376-A066-2A32D752A2FF}
+ cpp;c;cc;cxx;c++;def;odl;idl;hpj;bat;asm;asmx
+
+
+ {93995380-89BD-4b04-88EB-625FBE52EBFB}
+ h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd
+
+
+ {67DA6AB6-F800-4c08-8B7A-83BB121AAD01}
+ rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms
+
+
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+
+
+
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+
\ No newline at end of file
diff --git a/windows/RNFS.Tests/ReactNativeCxxTests/JsonJSValueReader.cpp b/windows/RNFS.Tests/ReactNativeCxxTests/JsonJSValueReader.cpp
new file mode 100644
index 00000000..4783d7b6
--- /dev/null
+++ b/windows/RNFS.Tests/ReactNativeCxxTests/JsonJSValueReader.cpp
@@ -0,0 +1,160 @@
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+
+#include "pch.h"
+#include "JsonJSValueReader.h"
+
+namespace winrt::Microsoft::ReactNative {
+
+//===========================================================================
+// JsonJSValueReader implementation
+//===========================================================================
+
+JsonJSValueReader::JsonJSValueReader(std::wstring &&jsonText) noexcept
+ : m_jsonText{std::move(jsonText)}, m_jsonReader{JsonSource{m_jsonText}} {
+ SetCurrentValue(m_jsonReader.ReadNext());
+}
+
+JSValueType JsonJSValueReader::ValueType() noexcept {
+ return m_valueType;
+}
+
+bool JsonJSValueReader::GetNextObjectProperty(hstring &propertyName) noexcept {
+ if (!m_isIterating) {
+ if (m_valueType == JSValueType::Object) {
+ if (m_jsonReader.ReadNext() == JsonParseState::Name) {
+ m_stack.push_back(JSValueType::Object);
+ propertyName = GetHString();
+ SetCurrentValue(m_jsonReader.ReadNext());
+ return true;
+ } else {
+ m_isIterating = !m_stack.empty();
+ }
+ }
+ } else if (!m_stack.empty()) {
+ JSValueType valueType = m_stack.back();
+ if (valueType == JSValueType::Object) {
+ if (m_jsonReader.ReadNext() == JsonParseState::Name) {
+ propertyName = GetHString();
+ SetCurrentValue(m_jsonReader.ReadNext());
+ return true;
+ } else {
+ m_valueType = valueType;
+ m_stack.pop_back();
+ m_isIterating = !m_stack.empty();
+ }
+ }
+ }
+
+ propertyName = to_hstring(L"");
+ return false;
+}
+
+bool JsonJSValueReader::GetNextArrayItem() noexcept {
+ if (!m_isIterating) {
+ if (m_valueType == JSValueType::Array) {
+ JsonParseState parseState = m_jsonReader.ReadNext();
+ if (IsContainerOrValue(parseState)) {
+ m_stack.push_back(JSValueType::Array);
+ SetCurrentValue(parseState);
+ return true;
+ } else {
+ m_isIterating = !m_stack.empty();
+ }
+ }
+ } else if (!m_stack.empty()) {
+ JSValueType valueType = m_stack.back();
+ if (valueType == JSValueType::Array) {
+ JsonParseState parseState = m_jsonReader.ReadNext();
+ if (IsContainerOrValue(parseState)) {
+ SetCurrentValue(parseState);
+ return true;
+ } else {
+ m_valueType = valueType;
+ m_stack.pop_back();
+ m_isIterating = !m_stack.empty();
+ }
+ }
+ }
+
+ return false;
+}
+
+void JsonJSValueReader::SetCurrentValue(JsonParseState parseState) noexcept {
+ switch (parseState) {
+ case JsonParseState::StartObject:
+ m_valueType = JSValueType::Object;
+ m_isIterating = false;
+ break;
+
+ case JsonParseState::StartArray:
+ m_valueType = JSValueType::Array;
+ m_isIterating = false;
+ break;
+
+ case JsonParseState::Value: {
+ m_isIterating = true;
+
+ if (m_jsonReader.IsString()) {
+ m_valueType = JSValueType::String;
+ m_stringValue = GetHString();
+ break;
+ }
+
+ if (m_jsonReader.GetInt64(&m_int64Value)) {
+ m_valueType = JSValueType::Int64;
+ break;
+ }
+
+ if (m_jsonReader.GetDouble(&m_doubleValue)) {
+ m_valueType = JSValueType::Double;
+ break;
+ }
+
+ if (m_jsonReader.GetBool(&m_boolValue)) {
+ m_valueType = JSValueType::Boolean;
+ break;
+ }
+
+ m_valueType = JSValueType::Null;
+ break;
+ }
+
+ default:
+ m_valueType = JSValueType::Null;
+ break;
+ }
+}
+
+hstring JsonJSValueReader::GetString() noexcept {
+ return (m_valueType == JSValueType::String) ? m_stringValue : hstring(L"");
+}
+
+bool JsonJSValueReader::GetBoolean() noexcept {
+ return (m_valueType == JSValueType::Boolean) ? m_boolValue : false;
+}
+
+int64_t JsonJSValueReader::GetInt64() noexcept {
+ return (m_valueType == JSValueType::Int64) ? m_int64Value : 0;
+}
+
+double JsonJSValueReader::GetDouble() noexcept {
+ return (m_valueType == JSValueType::Double) ? m_doubleValue : 0;
+}
+
+hstring JsonJSValueReader::GetHString() noexcept {
+ const wchar_t *data;
+ size_t length;
+ if (m_jsonReader.GetString(&data, &length)) {
+ return hstring(data, static_cast(length));
+ } else {
+ return hstring(L"");
+ }
+}
+
+bool JsonJSValueReader::IsContainerOrValue(JsonParseState parseState) noexcept {
+ return parseState == JsonParseState::StartArray || parseState == JsonParseState::StartObject ||
+ parseState == JsonParseState::Value;
+}
+
+} // namespace winrt::Microsoft::ReactNative
diff --git a/windows/RNFS.Tests/ReactNativeCxxTests/JsonJSValueReader.h b/windows/RNFS.Tests/ReactNativeCxxTests/JsonJSValueReader.h
new file mode 100644
index 00000000..9f3485c1
--- /dev/null
+++ b/windows/RNFS.Tests/ReactNativeCxxTests/JsonJSValueReader.h
@@ -0,0 +1,42 @@
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+
+#pragma once
+
+#include "JsonReader.h"
+#include "winrt/Microsoft.ReactNative.h"
+
+namespace winrt::Microsoft::ReactNative {
+
+struct JsonJSValueReader : implements {
+ JsonJSValueReader(std::wstring &&jsonText) noexcept;
+
+ public: // IJSValueReader
+ JSValueType ValueType() noexcept;
+ bool GetNextObjectProperty(hstring &propertyName) noexcept;
+ bool GetNextArrayItem() noexcept;
+ hstring GetString() noexcept;
+ bool GetBoolean() noexcept;
+ int64_t GetInt64() noexcept;
+ double GetDouble() noexcept;
+
+ private:
+ void SetCurrentValue(JsonParseState parseState) noexcept;
+ hstring GetHString() noexcept;
+ static bool IsContainerOrValue(JsonParseState parseState) noexcept;
+
+ private:
+ const std::wstring m_jsonText;
+ JsonReader m_jsonReader;
+ JSValueType m_valueType{JSValueType::Null};
+ std::vector m_stack;
+ bool m_isIterating{false};
+ hstring m_stringValue;
+ union {
+ bool m_boolValue;
+ int64_t m_int64Value;
+ double m_doubleValue;
+ };
+};
+
+} // namespace winrt::Microsoft::ReactNative
diff --git a/windows/RNFS.Tests/ReactNativeCxxTests/JsonReader.cpp b/windows/RNFS.Tests/ReactNativeCxxTests/JsonReader.cpp
new file mode 100644
index 00000000..17f313d0
--- /dev/null
+++ b/windows/RNFS.Tests/ReactNativeCxxTests/JsonReader.cpp
@@ -0,0 +1,379 @@
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+
+// Terms used in here:
+// Container: represents a [] or {}
+// isStringContent: is the current value a string? Either a name or quoted value
+
+#include "pch.h"
+#include "JsonReader.h"
+#include "Crash.h"
+
+namespace winrt::Microsoft::ReactNative {
+
+static bool IsSimpleWhitespace(wchar_t c) noexcept {
+ return (c == ' ' || c == '\t' || c == '\r' || c == '\n');
+}
+
+// Main processing loop: reads tokens until end of stream, error, or
+// a valid state transition is reached.
+JsonParseState JsonReader::ReadNext() noexcept {
+ for (;; m_source.Inc()) {
+ if (m_source.IsEndOfData())
+ return JsonParseState::ErrorEndOfData;
+
+ wchar_t ch = m_source.PeekChar();
+
+ if (m_isAllowed.Option.StringChar) {
+ if (m_isAllowed.Option.EscapeChar) {
+ if (HandleEscapeChar(ch))
+ continue;
+ return HandleInvalidData();
+ }
+
+ if (m_isAllowed.Option.EscapeCharHex) {
+ if (HandleEscapeCharHex(ch))
+ continue;
+ return HandleInvalidData();
+ }
+
+ if (ch == '\\') {
+ m_isAllowed.Option.EscapeChar = 1;
+ continue;
+ }
+
+ if (ch == '\"') {
+ if (HandleEndName()) {
+ m_source.Inc();
+ return JsonParseState::Name;
+ }
+
+ if (HandleEndContainerOrValue(JsonParseState::Value)) {
+ m_source.Inc();
+ return JsonParseState::Value;
+ }
+
+ VerifyElseCrashSz(false, "This should be impossible to hit");
+ }
+
+ // Regular string character
+ m_textBuffer += ch;
+ continue;
+ }
+
+ // All whitespace outside of strings is ignored
+ if (IsSimpleWhitespace(ch))
+ continue;
+
+ switch (ch) {
+ case '[':
+ return HandleStartContainer(JsonParseState::StartArray);
+ case ']':
+ return HandleEndContainer(JsonParseState::StartArray, JsonParseState::EndArray);
+ case '{':
+ return HandleStartContainer(JsonParseState::StartObject);
+ case '}':
+ return HandleEndContainer(JsonParseState::StartObject, JsonParseState::EndObject);
+
+ case ',': {
+ if (m_isAllowed.Option.EndComma) {
+ if (HandleEndContainerOrValue(JsonParseState::Value))
+ return JsonParseState::Value;
+
+ ResetContainerState();
+ continue;
+ }
+ break;
+ }
+
+ case '"': {
+ if (HandleBeginString())
+ continue;
+ break;
+ }
+
+ case ':': {
+ if (m_isAllowed.Option.NameDelim) {
+ m_isAllowed.All = 0;
+ OnValueExpected();
+ continue;
+ }
+ break;
+ }
+
+ default: {
+ // Regular non-string character
+ if (HandleNonStringChar(ch))
+ continue;
+
+ break;
+ }
+ }
+
+ return HandleInvalidData();
+ }
+}
+
+// Called when a new Container is started
+// Called after each item in a Container
+void JsonReader::ResetContainerState() noexcept {
+ m_isAllowed.All = 0;
+
+ if (m_states.top() == JsonParseState::StartArray) {
+ OnValueExpected();
+ } else {
+ m_isAllowed.Option.BeginName = 1;
+ m_isStringContent = false;
+ m_textBuffer.clear();
+ }
+}
+
+// Called after '[', ':', ','
+void JsonReader::OnValueExpected() noexcept {
+ m_isAllowed.Option.StartContainer = 1;
+ m_isAllowed.Option.BeginValue = 1;
+ m_isStringContent = false;
+ m_textBuffer.clear();
+}
+
+// Handle the start of a new Container: [ {
+JsonParseState JsonReader::HandleStartContainer(JsonParseState state) noexcept {
+ if (!m_isAllowed.Option.StartContainer)
+ return HandleInvalidData();
+
+ m_states.push(state);
+ ResetContainerState();
+ m_isAllowed.Option.EndContainer = 1;
+
+ m_source.Inc();
+ return state;
+}
+
+// Handle the end of a Container: } ]
+JsonParseState JsonReader::HandleEndContainer(JsonParseState oldState, JsonParseState newState) noexcept {
+ if (!m_isAllowed.Option.EndContainer)
+ return HandleInvalidData();
+
+ // Check for previously ended value first
+ if (HandleEndContainerOrValue(JsonParseState::Value))
+ return JsonParseState::Value;
+
+ if (HandleEndContainerOrValue(oldState)) {
+ m_isStringContent = false;
+ m_textBuffer.clear();
+
+ m_source.Inc();
+ return newState;
+ }
+
+ return HandleInvalidData();
+}
+
+// Handle starting a new string: "
+bool JsonReader::HandleBeginString() noexcept {
+ if (m_isAllowed.Option.BeginName || m_isAllowed.Option.BeginValue) {
+ m_states.push(m_isAllowed.Option.BeginName ? JsonParseState::Name : JsonParseState::Value);
+
+ m_isAllowed.All = 0;
+ m_isAllowed.Option.StringChar = 1;
+ m_isStringContent = true;
+ return true;
+ }
+
+ return false;
+}
+
+// Handle value characters: numbers, true, false, null
+bool JsonReader::HandleNonStringChar(wchar_t ch) noexcept {
+ // FUTURE: could add more validation here
+
+ if (m_isAllowed.Option.NonStringChar) {
+ m_textBuffer += ch;
+ return true;
+ }
+
+ if (m_isAllowed.Option.BeginValue) {
+ m_isAllowed.All = 0;
+ m_isAllowed.Option.NonStringChar = 1;
+ m_isAllowed.Option.EndComma = 1;
+ m_isAllowed.Option.EndContainer = 1;
+ m_states.push(JsonParseState::Value);
+ m_textBuffer.clear();
+
+ m_textBuffer += ch;
+ return true;
+ }
+
+ return false;
+}
+
+// Handle an escaped string character
+bool JsonReader::HandleEscapeChar(wchar_t ch) noexcept {
+ switch (ch) {
+ case '\"':
+ case '\\':
+ case '/':
+ break;
+ case 'b':
+ ch = '\b';
+ break;
+ case 'f':
+ ch = '\f';
+ break;
+ case 'n':
+ ch = '\n';
+ break;
+ case 'r':
+ ch = '\r';
+ break;
+ case 't':
+ ch = '\t';
+ break;
+ case 'v':
+ ch = '\v';
+ break;
+
+ case 'u':
+ // Switch to hex-mode
+ m_isAllowed.Option.EscapeChar = 0;
+ m_isAllowed.Option.EscapeCharHex = 1;
+ m_hexStartIndex = m_textBuffer.length();
+ return true;
+
+ default:
+ return false;
+ }
+
+ m_textBuffer += ch;
+
+ m_isAllowed.Option.EscapeChar = 0;
+ return true;
+}
+
+// Appends the current char into the buffer
+// If all hex characters have been collected, try converting to wchar
+bool JsonReader::HandleEscapeCharHex(wchar_t ch) noexcept {
+ constexpr size_t HexCharCount = 4;
+
+ m_textBuffer += ch;
+ if (m_textBuffer.length() < m_hexStartIndex + HexCharCount)
+ return true;
+
+ const wchar_t *hexStart = m_textBuffer.c_str() + m_hexStartIndex;
+ wchar_t *hexEnd = nullptr;
+ ch = static_cast(wcstoul(hexStart, &hexEnd, 16 /*base*/));
+
+ if (hexStart + HexCharCount != hexEnd)
+ return false;
+
+ m_textBuffer.resize(m_hexStartIndex);
+ m_textBuffer += ch;
+
+ m_isAllowed.Option.EscapeCharHex = 0;
+ return true;
+}
+
+// Helper for handling the end of a Container or value: , ] }
+bool JsonReader::HandleEndContainerOrValue(JsonParseState state) noexcept {
+ if (m_states.top() == state) {
+ m_states.pop();
+
+ m_isAllowed.All = 0;
+ if (m_states.size() > 0) {
+ m_isAllowed.Option.EndComma = 1;
+ m_isAllowed.Option.EndContainer = 1;
+ }
+
+ return true;
+ }
+
+ return false;
+}
+
+// Handle the end of a name: "
+bool JsonReader::HandleEndName() noexcept {
+ if (m_states.top() == JsonParseState::Name) {
+ m_states.pop();
+ m_isAllowed.All = 0;
+ m_isAllowed.Option.NameDelim = 1;
+ return true;
+ }
+
+ return false;
+}
+
+// Return the current string literal
+bool JsonReader::GetString(const wchar_t **value, size_t *valueLength) noexcept {
+ if (m_isStringContent) {
+ *value = m_textBuffer.c_str();
+ *valueLength = m_textBuffer.length();
+ return true;
+ }
+
+ *value = nullptr;
+ *valueLength = 0;
+ return false;
+}
+
+// Return the current value as a bool
+bool JsonReader::GetBool(bool *value) noexcept {
+ if (!m_isStringContent) {
+ if (m_textBuffer.compare(L"true") == 0) {
+ *value = true;
+ return true;
+ }
+
+ if (m_textBuffer.compare(L"false") == 0) {
+ *value = false;
+ return true;
+ }
+ }
+
+ *value = false;
+ return false;
+}
+
+// Return the current value as an Int64
+bool JsonReader::GetInt64(int64_t *value) noexcept {
+ if (!m_isStringContent && m_textBuffer.length()) {
+ wchar_t *end = nullptr;
+ auto iValue = _wcstoi64(m_textBuffer.c_str(), &end, 10 /*base*/);
+ if (end == m_textBuffer.c_str() + m_textBuffer.size()) {
+ *value = iValue;
+ return true;
+ }
+
+ // Didn't read enough characters, fall through and fail
+ }
+
+ *value = 0;
+ return false;
+}
+
+// Return the current value as a Double
+bool JsonReader::GetDouble(double *value) noexcept {
+ if (!m_isStringContent && m_textBuffer.length()) {
+ wchar_t *end = nullptr;
+ auto dvalue = wcstod(m_textBuffer.c_str(), &end);
+ if (end == m_textBuffer.c_str() + m_textBuffer.size()) {
+ *value = dvalue;
+ return true;
+ }
+
+ // Didn't read enough characters, fall through and fail
+ }
+
+ *value = 0;
+ return false;
+}
+
+// Return true if the current value is the null value
+bool JsonReader::IsNull() noexcept {
+ if (!m_isStringContent) {
+ return (m_textBuffer.compare(L"null") == 0);
+ }
+
+ return false;
+}
+
+} // namespace winrt::Microsoft::ReactNative
diff --git a/windows/RNFS.Tests/ReactNativeCxxTests/JsonReader.h b/windows/RNFS.Tests/ReactNativeCxxTests/JsonReader.h
new file mode 100644
index 00000000..3ec2a199
--- /dev/null
+++ b/windows/RNFS.Tests/ReactNativeCxxTests/JsonReader.h
@@ -0,0 +1,144 @@
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+
+// Simple JsonReader
+
+#include
+#include
+#include
+
+namespace winrt::Microsoft::ReactNative {
+
+struct JsonSource {
+ static_assert(sizeof(wchar_t) == 2, "This code expects 2-byte wchars");
+
+ JsonSource(std::wstring_view buffer) noexcept : m_current{buffer.data()}, m_end{buffer.data() + buffer.size()} {}
+
+ // Caller is responsible for checking IsEndOfData() before calling PeekChar()
+ wchar_t PeekChar() const noexcept {
+ return *m_current;
+ }
+
+ // Caller is responsible for checking IsEndOfData() before calling Inc()
+ void Inc() noexcept {
+ ++m_current;
+ }
+
+ bool IsEndOfData() const noexcept {
+ return m_current == m_end;
+ }
+
+ private:
+ const wchar_t *m_current = nullptr;
+ const wchar_t *m_end = nullptr;
+};
+
+enum class JsonParseState {
+ StartArray,
+ StartObject,
+ Name,
+ Value,
+ EndObject,
+ EndArray,
+
+ // Returned for invalid data
+ ErrorInvalidData,
+
+ // End of input reached before end of Json.
+ ErrorEndOfData,
+};
+
+struct JsonReader {
+ public:
+ JsonReader(JsonSource source) : m_source{source} {
+ m_isAllowed.All = 0;
+ m_isAllowed.Option.StartContainer = 1;
+ }
+
+ JsonReader(const JsonReader &) = delete;
+ JsonReader &operator=(const JsonReader &) = delete;
+
+ JsonParseState ReadNext() noexcept;
+ bool GetString(_Deref_post_count_(*valueLength) const wchar_t **value, _Out_ size_t *valueLength) noexcept;
+ bool GetBool(_Out_ bool *value) noexcept;
+ bool GetInt64(_Out_ std::int64_t *value) noexcept;
+ bool GetDouble(_Out_ double *value) noexcept;
+ bool IsNull() noexcept;
+ bool IsString() noexcept {
+ return m_isStringContent;
+ }
+
+ private:
+ void ResetContainerState() noexcept;
+ void OnValueExpected() noexcept;
+
+ JsonParseState HandleStartContainer(JsonParseState state) noexcept;
+ JsonParseState HandleEndContainer(JsonParseState oldState, JsonParseState newState) noexcept;
+
+ bool HandleBeginString() noexcept;
+ bool HandleNonStringChar(wchar_t wch) noexcept;
+ bool HandleEscapeChar(wchar_t wch) noexcept;
+ bool HandleEscapeCharHex(wchar_t wch) noexcept;
+ bool HandleEndContainerOrValue(JsonParseState state) noexcept;
+ bool HandleEndName() noexcept;
+
+ JsonParseState HandleInvalidData() noexcept {
+ m_isAllowed.All = 0;
+ return JsonParseState::ErrorInvalidData;
+ }
+
+ private:
+ JsonSource m_source;
+
+ // Tracks the next allowed state(s)
+ union {
+ struct {
+ // [ or {
+ uint32_t StartContainer : 1;
+
+ // "
+ uint32_t BeginName : 1;
+
+ // :
+ uint32_t NameDelim : 1;
+
+ // " or value char
+ uint32_t BeginValue : 1;
+
+ // valid name or value char
+ uint32_t NonStringChar : 1;
+
+ // valid string character
+ uint32_t StringChar : 1;
+
+ // valid escape char
+ uint32_t EscapeChar : 1;
+
+ // 4 hex digits
+ uint32_t EscapeCharHex : 1;
+
+ // ] or }
+ uint32_t EndContainer : 1;
+
+ // ,
+ uint32_t EndComma : 1;
+ } Option;
+
+ uint32_t All;
+
+ } m_isAllowed;
+
+ // Stores the current name / value text
+ std::wstring m_textBuffer;
+
+ // Stack of parse states (Array, Object, Name, Value)
+ std::stack m_states;
+
+ // Used when decoding \uHHHH values
+ size_t m_hexStartIndex = 0;
+
+ // True when m_textBuffer contains a name or value string
+ bool m_isStringContent = false;
+};
+
+} // namespace winrt::Microsoft::ReactNative
diff --git a/windows/RNFS.Tests/ReactNativeCxxTests/README.md b/windows/RNFS.Tests/ReactNativeCxxTests/README.md
new file mode 100644
index 00000000..f42573ff
--- /dev/null
+++ b/windows/RNFS.Tests/ReactNativeCxxTests/README.md
@@ -0,0 +1,2 @@
+Files in this folder are copied from the Microsoft.ReactNative.Cxx.UnitTests project.
+In future we will removed them in favor of better approach when it will be provided by react-native-windows project.
\ No newline at end of file
diff --git a/windows/RNFS.Tests/ReactNativeCxxTests/ReactModuleBuilderMock.cpp b/windows/RNFS.Tests/ReactNativeCxxTests/ReactModuleBuilderMock.cpp
new file mode 100644
index 00000000..c1ac6e2b
--- /dev/null
+++ b/windows/RNFS.Tests/ReactNativeCxxTests/ReactModuleBuilderMock.cpp
@@ -0,0 +1,163 @@
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+
+#include "pch.h"
+#include "ReactModuleBuilderMock.h"
+#include "JSValue.h"
+#include "JSValueTreeWriter.h"
+
+namespace winrt::Microsoft::ReactNative {
+
+//===========================================================================
+// ReactModuleBuilderMock implementation
+//===========================================================================
+
+ReactModuleBuilderMock::ReactModuleBuilderMock() noexcept : m_reactContext{make(this)} {}
+
+void ReactModuleBuilderMock::ExpectEvent(
+ std::wstring_view eventEmitterName,
+ std::wstring_view eventName,
+ Mso::Functor &&checkValues) noexcept {
+ m_jsEventHandler = [
+ expectedEventEmitterName = std::wstring{eventEmitterName},
+ expectedEventName = std::wstring{eventName},
+ checkValues = std::move(checkValues)
+ ](std::wstring_view eventEmitterName, std::wstring_view eventName, JSValue const &value) noexcept {
+ TestCheck(expectedEventEmitterName == eventEmitterName);
+ TestCheck(expectedEventName == eventName);
+ TestCheck(value.Type() == JSValueType::Array);
+ checkValues(value.AsArray());
+ };
+}
+
+void ReactModuleBuilderMock::ExpectFunction(
+ std::wstring_view moduleName,
+ std::wstring_view functionName,
+ Mso::Functor &&checkValues) noexcept {
+ m_jsFunctionHandler = [
+ expectedModuleName = std::wstring{moduleName},
+ expectedFuncName = std::wstring{functionName},
+ checkValues = std::move(checkValues)
+ ](std::wstring_view moduleName, std::wstring_view funcName, JSValue const &value) noexcept {
+ TestCheck(expectedModuleName == moduleName);
+ TestCheck(expectedFuncName == funcName);
+ TestCheck(value.Type() == JSValueType::Array);
+ checkValues(value.AsArray());
+ };
+}
+
+void ReactModuleBuilderMock::CallJSFunction(
+ std::wstring_view moduleName,
+ std::wstring_view functionName,
+ JSValueArgWriter const ¶msArgWriter) noexcept {
+ auto writer = MakeJSValueTreeWriter();
+ paramsArgWriter(writer);
+ m_jsFunctionHandler(moduleName, functionName, TakeJSValue(writer));
+}
+
+void ReactModuleBuilderMock::EmitJSEvent(
+ std::wstring_view eventEmitterName,
+ std::wstring_view eventName,
+ JSValueArgWriter const ¶msArgWriter) noexcept {
+ auto writer = MakeJSValueTreeWriter();
+ writer.WriteArrayBegin();
+ paramsArgWriter(writer);
+ writer.WriteArrayEnd();
+ m_jsEventHandler(eventEmitterName, eventName, TakeJSValue(writer));
+}
+
+void ReactModuleBuilderMock::AddInitializer(InitializerDelegate const &initializer) noexcept {
+ m_initializers.push_back(initializer);
+}
+
+void ReactModuleBuilderMock::AddConstantProvider(ConstantProviderDelegate const &constantProvider) noexcept {
+ m_constantProviders.push_back(constantProvider);
+}
+
+void ReactModuleBuilderMock::AddMethod(
+ hstring const &name,
+ MethodReturnType returnType,
+ MethodDelegate const &method) noexcept {
+ m_methods.emplace(name, std::tuple{returnType, method});
+}
+
+void ReactModuleBuilderMock::AddSyncMethod(hstring const &name, SyncMethodDelegate const &method) noexcept {
+ m_syncMethods.emplace(name, method);
+}
+
+JSValueObject ReactModuleBuilderMock::GetConstants() noexcept {
+ auto constantWriter = MakeJSValueTreeWriter();
+ constantWriter.WriteObjectBegin();
+ for (const auto &constantProvider : m_constantProviders) {
+ constantProvider(constantWriter);
+ }
+
+ constantWriter.WriteObjectEnd();
+ return TakeJSValue(constantWriter).MoveObject();
+}
+
+MethodDelegate ReactModuleBuilderMock::GetMethod0(std::wstring const &methodName) const noexcept {
+ auto it = m_methods.find(methodName);
+ return (it != m_methods.end() && std::get<0>(it->second) == MethodReturnType::Void) ? std::get<1>(it->second)
+ : nullptr;
+}
+
+MethodDelegate ReactModuleBuilderMock::GetMethod1(std::wstring const &methodName) const noexcept {
+ auto it = m_methods.find(methodName);
+ return (it != m_methods.end() && std::get<0>(it->second) == MethodReturnType::Callback) ? std::get<1>(it->second)
+ : nullptr;
+}
+
+MethodDelegate ReactModuleBuilderMock::GetMethod2(std::wstring const &methodName) const noexcept {
+ auto it = m_methods.find(methodName);
+ return (it != m_methods.end() &&
+ (std::get<0>(it->second) == MethodReturnType::TwoCallbacks ||
+ std::get<0>(it->second) == MethodReturnType::Promise))
+ ? std::get<1>(it->second)
+ : nullptr;
+}
+
+SyncMethodDelegate ReactModuleBuilderMock::GetSyncMethod(std::wstring const &methodName) const noexcept {
+ auto it = m_syncMethods.find(methodName);
+ return (it != m_syncMethods.end()) ? it->second : nullptr;
+}
+
+/*static*/ IJSValueWriter ReactModuleBuilderMock::ArgWriter() noexcept {
+ return MakeJSValueTreeWriter();
+}
+
+/*static*/ IJSValueReader ReactModuleBuilderMock::CreateArgReader(
+ std::function const &argWriter) noexcept {
+ auto writer = MakeJSValueTreeWriter();
+ argWriter(writer);
+ return MakeJSValueTreeReader(TakeJSValue(writer));
+}
+
+Windows::Foundation::IInspectable ReactModuleBuilderMock::CreateModule(
+ ReactModuleProvider const &provider,
+ IReactModuleBuilder const &moduleBuilder) noexcept {
+ auto result = provider(moduleBuilder);
+ for (auto &initializer : m_initializers) {
+ initializer(m_reactContext);
+ }
+
+ return result;
+}
+
+ReactContextMock::ReactContextMock(ReactModuleBuilderMock *builderMock) noexcept : m_builderMock{builderMock} {}
+
+void ReactContextMock::CallJSFunction(
+ hstring const &moduleName,
+ hstring const &functionName,
+ JSValueArgWriter const ¶msArgWriter) noexcept {
+ m_builderMock->CallJSFunction(moduleName, functionName, paramsArgWriter);
+}
+
+void ReactContextMock::EmitJSEvent(
+ hstring const &eventEmitterName,
+ hstring const &eventName,
+ JSValueArgWriter const ¶msArgWriter) noexcept {
+ m_builderMock->EmitJSEvent(eventEmitterName, eventName, paramsArgWriter);
+}
+
+} // namespace winrt::Microsoft::ReactNative
diff --git a/windows/RNFS.Tests/ReactNativeCxxTests/ReactModuleBuilderMock.h b/windows/RNFS.Tests/ReactNativeCxxTests/ReactModuleBuilderMock.h
new file mode 100644
index 00000000..d0a4e9d1
--- /dev/null
+++ b/windows/RNFS.Tests/ReactNativeCxxTests/ReactModuleBuilderMock.h
@@ -0,0 +1,292 @@
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+
+#pragma once
+
+// It must go first because of VerifyElseCrash macro definition
+#include "future/future.h"
+
+#include
+#include "CppWinRTIncludes.h"
+#include "JSValue.h"
+#include "NativeModules.h"
+
+#undef GetCurrentTime
+
+using namespace winrt;
+
+namespace winrt::Microsoft::ReactNative {
+
+struct ReactModuleBuilderMock {
+ ReactModuleBuilderMock() noexcept;
+
+ template
+ void Call0(std::wstring const &methodName, TArgs &&... args) noexcept;
+
+ template
+ Mso::Future
+ Call1(std::wstring const &methodName, std::function &&resolve, TArgs &&... args) noexcept;
+
+ template
+ Mso::Future Call2(
+ std::wstring const &methodName,
+ std::function const &resolve,
+ std::function const &reject,
+ TArgs &&... args) noexcept;
+
+ template
+ void CallSync(std::wstring const &methodName, TResult &result, TArgs &&... args) noexcept;
+
+ JSValueObject GetConstants() noexcept;
+
+ bool IsResolveCallbackCalled() const noexcept;
+ void IsResolveCallbackCalled(bool value) noexcept;
+ bool IsRejectCallbackCalled() const noexcept;
+ void IsRejectCallbackCalled(bool value) noexcept;
+
+ void ExpectEvent(
+ std::wstring_view eventEmitterName,
+ std::wstring_view eventName,
+ Mso::Functor &&checkValues) noexcept;
+
+ void ExpectFunction(
+ std::wstring_view moduleName,
+ std::wstring_view functionName,
+ Mso::Functor &&checkValues) noexcept;
+
+ void CallJSFunction(
+ std::wstring_view moduleName,
+ std::wstring_view functionName,
+ JSValueArgWriter const ¶msArgWriter) noexcept;
+
+ void EmitJSEvent(
+ std::wstring_view eventEmitterName,
+ std::wstring_view eventName,
+ JSValueArgWriter const ¶msArgWriter) noexcept;
+
+ Windows::Foundation::IInspectable CreateModule(
+ ReactModuleProvider const &provider,
+ IReactModuleBuilder const &moduleBuilder) noexcept;
+
+ public: // IReactModuleBuilder
+ void AddInitializer(InitializerDelegate const &initializer) noexcept;
+ void AddConstantProvider(ConstantProviderDelegate const &constantProvider) noexcept;
+ void AddMethod(hstring const &name, MethodReturnType returnType, MethodDelegate const &method) noexcept;
+ void AddSyncMethod(hstring const &name, SyncMethodDelegate const &method) noexcept;
+
+ private:
+ MethodDelegate GetMethod0(std::wstring const &methodName) const noexcept;
+ MethodDelegate GetMethod1(std::wstring const &methodName) const noexcept;
+ MethodDelegate GetMethod2(std::wstring const &methodName) const noexcept;
+ SyncMethodDelegate GetSyncMethod(std::wstring const &methodName) const noexcept;
+
+ static IJSValueWriter ArgWriter() noexcept;
+ template
+ static IJSValueReader ArgReader(TArgs &&... args) noexcept;
+ static IJSValueReader CreateArgReader(std::function const &argWriter) noexcept;
+
+ template
+ MethodResultCallback ResolveCallback(
+ std::function const &resolve,
+ std::index_sequence,
+ Mso::Promise const &promise) noexcept;
+ template
+ MethodResultCallback RejectCallback(
+ std::function const &reject,
+ std::index_sequence,
+ Mso::Promise const &promise) noexcept;
+
+ private:
+ IReactContext m_reactContext{nullptr};
+ std::vector m_initializers;
+ std::vector m_constantProviders;
+ std::map> m_methods;
+ std::map m_syncMethods;
+ bool m_isResolveCallbackCalled{false};
+ bool m_isRejectCallbackCalled{false};
+ Mso::Functor m_jsFunctionHandler;
+ Mso::Functor m_jsEventHandler;
+};
+
+struct ReactContextMock : implements {
+ ReactContextMock(ReactModuleBuilderMock *builderMock) noexcept;
+
+ IReactPropertyBag Properties() noexcept {
+ VerifyElseCrashSz(false, "Not implemented");
+ }
+
+ IReactNotificationService Notifications() noexcept {
+ VerifyElseCrashSz(false, "Not implemented");
+ }
+
+ IReactDispatcher UIDispatcher() noexcept {
+ VerifyElseCrashSz(false, "Not implemented");
+ }
+
+ IReactDispatcher JSDispatcher() noexcept {
+ VerifyElseCrashSz(false, "Not implemented");
+ }
+
+ void DispatchEvent(
+ xaml::FrameworkElement const & /*view*/,
+ hstring const & /*eventName*/,
+ JSValueArgWriter const & /*eventDataArgWriter*/) noexcept {}
+
+ void CallJSFunction(
+ hstring const &moduleName,
+ hstring const &functionName,
+ JSValueArgWriter const ¶msArgWriter) noexcept;
+
+ void EmitJSEvent(
+ hstring const &eventEmitterName,
+ hstring const &eventName,
+ JSValueArgWriter const ¶msArgWriter) noexcept;
+
+ private:
+ ReactModuleBuilderMock *m_builderMock;
+};
+
+struct ReactModuleBuilderImpl : implements {
+ ReactModuleBuilderImpl(ReactModuleBuilderMock &mock) noexcept;
+
+ public: // IReactModuleBuilder
+ void AddInitializer(InitializerDelegate const &initializer) noexcept;
+ void AddConstantProvider(ConstantProviderDelegate const &constantProvider) noexcept;
+ void AddMethod(hstring const &name, MethodReturnType returnType, MethodDelegate const &method) noexcept;
+ void AddSyncMethod(hstring const &name, SyncMethodDelegate const &method) noexcept;
+
+ private:
+ ReactModuleBuilderMock &m_mock;
+};
+
+//===========================================================================
+// ReactModuleBuilderMock inline implementation
+//===========================================================================
+
+template
+inline void ReactModuleBuilderMock::Call0(std::wstring const &methodName, TArgs &&... args) noexcept {
+ if (auto method = GetMethod0(methodName)) {
+ method(ArgReader(std::forward(args)...), ArgWriter(), nullptr, nullptr);
+ }
+}
+
+template
+inline Mso::Future ReactModuleBuilderMock::Call1(
+ std::wstring const &methodName,
+ std::function &&resolve,
+ TArgs &&... args) noexcept {
+ Mso::Promise promise;
+ if (auto method = GetMethod1(methodName)) {
+ method(
+ ArgReader(std::forward(args)...),
+ ArgWriter(),
+ ResolveCallback(resolve, std::make_index_sequence{}, promise),
+ nullptr);
+ }
+ return promise.AsFuture();
+}
+
+template
+inline Mso::Future ReactModuleBuilderMock::Call2(
+ std::wstring const &methodName,
+ std::function const &resolve,
+ std::function