├── .eslintrc
├── .gitattributes
├── .gitignore
├── .npmignore
├── LICENSE
├── README.md
├── android
├── build.gradle
├── gradle
│ └── wrapper
│ │ ├── gradle-wrapper.jar
│ │ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
└── src
│ └── main
│ ├── AndroidManifest.xml
│ ├── java
│ └── com
│ │ └── masteratul
│ │ └── downloadmanager
│ │ ├── Downloader.java
│ │ ├── ReactNativeDownloadManagerModule.java
│ │ └── ReactNativeDownloadManagerPackage.java
│ └── res
│ └── values
│ └── strings.xml
├── index.js
├── package.json
└── yarn.lock
/.eslintrc:
--------------------------------------------------------------------------------
1 | # "off" or 0 - turn the rule off
2 | # "warn" or 1 - turn the rule on as a warning(doesn’ t affect exit code)
3 | # "error" or 2 - turn the rule on as an error(exit code is 1 when triggered)
4 | {
5 | "parser": "babel-eslint",
6 | "env": {
7 | "browser": true
8 | },
9 | "plugins": [
10 | "react",
11 | "react-native"
12 | ],
13 | "parserOptions": {
14 | "ecmaFeatures": {
15 | "jsx": true
16 | },
17 | "sourceType": "module"
18 | },
19 | "extends": ["eslint:recommended", "plugin:react/recommended"],
20 | "rules": {
21 | "react/no-did-mount-set-state": 2,
22 | "react/no-did-update-set-state": 2,
23 | "react/no-direct-mutation-state": 2,
24 | "react/jsx-uses-vars": 2,
25 | "no-unused-vars": ["error", {
26 | "varsIgnorePattern": "React"
27 | }],
28 | "comma-spacing": ["error", {
29 | "before": false,
30 | "after": true }],
31 | "no-undef": 2,
32 | "semi": 2,
33 | "react/prop-types": 2,
34 | "react/jsx-no-bind": 2,
35 | "react/jsx-no-duplicate-props": 2,
36 | "space-before-blocks": 2,
37 | "space-before-function-paren": 2,
38 | "space-in-parens": 2,
39 | "space-infix-ops": 2,
40 | "space-unary-ops": 2,
41 | "spaced-comment": 2,
42 | "rest-spread-spacing": 2,
43 | "semi-spacing": 2,
44 | "no-unneeded-ternary": 2,
45 | "eqeqeq": 2,
46 | "dot-location": 2,
47 | "no-extra-bind": 2,
48 | "keyword-spacing": 2,
49 | "key-spacing": 2,
50 | "indent": ["error", 2],
51 | "react/jsx-indent": [2, 2],
52 | "func-call-spacing": 2,
53 | "array-bracket-spacing": 2,
54 | "block-spacing": 2,
55 | "brace-style": 2,
56 | "arrow-body-style": 2,
57 | "arrow-parens": 2,
58 | "arrow-spacing": 2,
59 | "react/self-closing-comp": 2,
60 | "jsx-quotes": ["error", "prefer-single"],
61 | "object-curly-spacing": 2,
62 | "quotes": ["error", "single"],
63 | "no-console": 0
64 | },
65 | "globals": {
66 | "global": false,
67 | "it": false,
68 | "xit": false,
69 | "expect": false,
70 | "describe": false,
71 | "require": false,
72 | "module": false,
73 | "Promise": false,
74 | "__DEV__": false
75 | }
76 | }
77 |
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | *.pbxproj -text
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 |
2 | # OSX
3 | #
4 | .DS_Store
5 |
6 | # node.js
7 | #
8 | node_modules/
9 | npm-debug.log
10 | yarn-error.log
11 |
12 |
13 | # Xcode
14 | #
15 | build/
16 | *.pbxuser
17 | !default.pbxuser
18 | *.mode1v3
19 | !default.mode1v3
20 | *.mode2v3
21 | !default.mode2v3
22 | *.perspectivev3
23 | !default.perspectivev3
24 | xcuserdata
25 | *.xccheckout
26 | *.moved-aside
27 | DerivedData
28 | *.hmap
29 | *.ipa
30 | *.xcuserstate
31 | project.xcworkspace
32 |
33 |
34 | # Android/IntelliJ
35 | #
36 | build/
37 | .idea
38 | .gradle
39 | local.properties
40 | *.iml
41 |
42 | # BUCK
43 | buck-out/
44 | \.buckd/
45 | *.keystore
46 |
47 |
48 | node_modules
49 | .git
50 | cache
51 | npm-debug.log
52 | coverage
53 | .DS_Store
54 |
--------------------------------------------------------------------------------
/.npmignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | .git
3 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2017 Atul
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # react-native-simple-download-manager
2 |
3 | A simple straightforward react native module that lets you schedule downloads onto your download manager for android.
4 |
5 | - Support custom headers for authentication
6 | - File download scheduler
7 | - Cancel file downlaod
8 | - Check status of the download
9 |
10 | TODO - ios module
11 |
12 | ### Installation:
13 |
14 | `yarn add react-native-simple-download-manager`
15 |
16 | or
17 |
18 | `npm i react-native-simple-download-manager --save`
19 |
20 | ### Mostly automatic installation
21 |
22 | `react-native link react-native-simple-download-manager`
23 |
24 | ### Manual installation
25 |
26 | #### Android
27 |
28 | 1. Open up `android/app/src/main/java/[...]/MainApplication.java`
29 |
30 | - Add `import com.masteratul.downloadmanager.ReactNativeDownloadManagerPackage;` to the imports at the top of the file
31 | - Add `new ReactNativeDownloadManagerPackage()` to the list returned by the `getPackages()` method
32 |
33 | 2. Append the following lines to `android/settings.gradle`:
34 | ```
35 | include ':react-native-simple-download-manager'
36 | project(':react-native-simple-download-manager').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-simple-download-manager/android')
37 | ```
38 | 3. Insert the following lines inside the dependencies block in `android/app/build.gradle`:
39 | ```
40 | compile project(':react-native-simple-download-manager')
41 | ```
42 |
43 | ### Usage
44 |
45 | ```js
46 | const downloadManager = require("react-native-simple-download-manager");
47 |
48 | const url = "http://url/to/file.ext?query=parmas";
49 | const headers = { Authorization: "Bearer abcsdsjkdjskjdkskjd" };
50 | const config = {
51 | downloadTitle: "Title that should appear in Native Download manager",
52 | downloadDescription:
53 | "Description that should appear in Native Download manager",
54 | saveAsName: "File name to save",
55 | allowedInRoaming: true,
56 | allowedInMetered: true,
57 | showInDownloads: true,
58 | external: false, //when false basically means use the default Download path (version ^1.3)
59 | path: "Download/" //if "external" is true then use this path (version ^1.3)
60 | };
61 |
62 | downloadManager
63 | .download((url = ""), (headers = {}), (config = {}))
64 | .then(response => {
65 | console.log("Download success!");
66 | })
67 | .catch(err => {
68 | console.log("Download failed!");
69 | });
70 | ```
71 |
72 | ### Advanced Usage
73 |
74 | The module currently supports
75 |
76 | - download,
77 | - queueDownload,
78 | - attachOnCompleteListener,
79 | - cancel,
80 | - checkStatus
81 |
82 | You can check https://github.com/master-atul/react-native-simple-download-manager/blob/master/index.js
83 |
84 | ### Contributors
85 |
86 | - [Atul R](https://github.com/master-atul)
87 | - [Shivam Barsaley](https://github.com/shivambarsaley)
88 | - [ibrahimtelman](https://github.com/ibrahimtelman)
89 | - [KingDark](https://github.com/kingdark1234)
90 |
91 | Peace ! ✌🏻🌮
92 |
--------------------------------------------------------------------------------
/android/build.gradle:
--------------------------------------------------------------------------------
1 |
2 | buildscript {
3 | repositories {
4 | jcenter()
5 | }
6 |
7 | dependencies {
8 | classpath 'com.android.tools.build:gradle:1.3.1'
9 | }
10 | }
11 |
12 | apply plugin: 'com.android.library'
13 |
14 | android {
15 | compileSdkVersion 23
16 | buildToolsVersion "23.0.1"
17 |
18 | defaultConfig {
19 | minSdkVersion 16
20 | targetSdkVersion 22
21 | versionCode 1
22 | versionName "1.0"
23 | }
24 | lintOptions {
25 | abortOnError false
26 | }
27 | }
28 |
29 | repositories {
30 | mavenCentral()
31 | }
32 |
33 | dependencies {
34 | implementation 'com.facebook.react:react-native:+'
35 | }
36 |
37 |
--------------------------------------------------------------------------------
/android/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/a7ul/react-native-simple-download-manager/032170d235a14d83558027b4f44deece95ae3754/android/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/android/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Fri Dec 08 22:03:56 IST 2017
2 | distributionBase=GRADLE_USER_HOME
3 | distributionPath=wrapper/dists
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 | distributionUrl=https\://services.gradle.org/distributions/gradle-2.2-all.zip
7 |
--------------------------------------------------------------------------------
/android/gradlew:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | ##############################################################################
4 | ##
5 | ## Gradle start up script for UN*X
6 | ##
7 | ##############################################################################
8 |
9 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
10 | DEFAULT_JVM_OPTS=""
11 |
12 | APP_NAME="Gradle"
13 | APP_BASE_NAME=`basename "$0"`
14 |
15 | # Use the maximum available, or set MAX_FD != -1 to use that value.
16 | MAX_FD="maximum"
17 |
18 | warn ( ) {
19 | echo "$*"
20 | }
21 |
22 | die ( ) {
23 | echo
24 | echo "$*"
25 | echo
26 | exit 1
27 | }
28 |
29 | # OS specific support (must be 'true' or 'false').
30 | cygwin=false
31 | msys=false
32 | darwin=false
33 | case "`uname`" in
34 | CYGWIN* )
35 | cygwin=true
36 | ;;
37 | Darwin* )
38 | darwin=true
39 | ;;
40 | MINGW* )
41 | msys=true
42 | ;;
43 | esac
44 |
45 | # Attempt to set APP_HOME
46 | # Resolve links: $0 may be a link
47 | PRG="$0"
48 | # Need this for relative symlinks.
49 | while [ -h "$PRG" ] ; do
50 | ls=`ls -ld "$PRG"`
51 | link=`expr "$ls" : '.*-> \(.*\)$'`
52 | if expr "$link" : '/.*' > /dev/null; then
53 | PRG="$link"
54 | else
55 | PRG=`dirname "$PRG"`"/$link"
56 | fi
57 | done
58 | SAVED="`pwd`"
59 | cd "`dirname \"$PRG\"`/" >/dev/null
60 | APP_HOME="`pwd -P`"
61 | cd "$SAVED" >/dev/null
62 |
63 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
64 |
65 | # Determine the Java command to use to start the JVM.
66 | if [ -n "$JAVA_HOME" ] ; then
67 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
68 | # IBM's JDK on AIX uses strange locations for the executables
69 | JAVACMD="$JAVA_HOME/jre/sh/java"
70 | else
71 | JAVACMD="$JAVA_HOME/bin/java"
72 | fi
73 | if [ ! -x "$JAVACMD" ] ; then
74 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
75 |
76 | Please set the JAVA_HOME variable in your environment to match the
77 | location of your Java installation."
78 | fi
79 | else
80 | JAVACMD="java"
81 | which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
82 |
83 | Please set the JAVA_HOME variable in your environment to match the
84 | location of your Java installation."
85 | fi
86 |
87 | # Increase the maximum file descriptors if we can.
88 | if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
89 | MAX_FD_LIMIT=`ulimit -H -n`
90 | if [ $? -eq 0 ] ; then
91 | if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
92 | MAX_FD="$MAX_FD_LIMIT"
93 | fi
94 | ulimit -n $MAX_FD
95 | if [ $? -ne 0 ] ; then
96 | warn "Could not set maximum file descriptor limit: $MAX_FD"
97 | fi
98 | else
99 | warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
100 | fi
101 | fi
102 |
103 | # For Darwin, add options to specify how the application appears in the dock
104 | if $darwin; then
105 | GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
106 | fi
107 |
108 | # For Cygwin, switch paths to Windows format before running java
109 | if $cygwin ; then
110 | APP_HOME=`cygpath --path --mixed "$APP_HOME"`
111 | CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
112 | JAVACMD=`cygpath --unix "$JAVACMD"`
113 |
114 | # We build the pattern for arguments to be converted via cygpath
115 | ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
116 | SEP=""
117 | for dir in $ROOTDIRSRAW ; do
118 | ROOTDIRS="$ROOTDIRS$SEP$dir"
119 | SEP="|"
120 | done
121 | OURCYGPATTERN="(^($ROOTDIRS))"
122 | # Add a user-defined pattern to the cygpath arguments
123 | if [ "$GRADLE_CYGPATTERN" != "" ] ; then
124 | OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
125 | fi
126 | # Now convert the arguments - kludge to limit ourselves to /bin/sh
127 | i=0
128 | for arg in "$@" ; do
129 | CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
130 | CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
131 |
132 | if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
133 | eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
134 | else
135 | eval `echo args$i`="\"$arg\""
136 | fi
137 | i=$((i+1))
138 | done
139 | case $i in
140 | (0) set -- ;;
141 | (1) set -- "$args0" ;;
142 | (2) set -- "$args0" "$args1" ;;
143 | (3) set -- "$args0" "$args1" "$args2" ;;
144 | (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
145 | (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
146 | (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
147 | (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
148 | (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
149 | (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
150 | esac
151 | fi
152 |
153 | # Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
154 | function splitJvmOpts() {
155 | JVM_OPTS=("$@")
156 | }
157 | eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
158 | JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
159 |
160 | exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
161 |
--------------------------------------------------------------------------------
/android/gradlew.bat:
--------------------------------------------------------------------------------
1 | @if "%DEBUG%" == "" @echo off
2 | @rem ##########################################################################
3 | @rem
4 | @rem Gradle startup script for Windows
5 | @rem
6 | @rem ##########################################################################
7 |
8 | @rem Set local scope for the variables with windows NT shell
9 | if "%OS%"=="Windows_NT" setlocal
10 |
11 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
12 | set DEFAULT_JVM_OPTS=
13 |
14 | set DIRNAME=%~dp0
15 | if "%DIRNAME%" == "" set DIRNAME=.
16 | set APP_BASE_NAME=%~n0
17 | set APP_HOME=%DIRNAME%
18 |
19 | @rem Find java.exe
20 | if defined JAVA_HOME goto findJavaFromJavaHome
21 |
22 | set JAVA_EXE=java.exe
23 | %JAVA_EXE% -version >NUL 2>&1
24 | if "%ERRORLEVEL%" == "0" goto init
25 |
26 | echo.
27 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
28 | echo.
29 | echo Please set the JAVA_HOME variable in your environment to match the
30 | echo location of your Java installation.
31 |
32 | goto fail
33 |
34 | :findJavaFromJavaHome
35 | set JAVA_HOME=%JAVA_HOME:"=%
36 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe
37 |
38 | if exist "%JAVA_EXE%" goto init
39 |
40 | echo.
41 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
42 | echo.
43 | echo Please set the JAVA_HOME variable in your environment to match the
44 | echo location of your Java installation.
45 |
46 | goto fail
47 |
48 | :init
49 | @rem Get command-line arguments, handling Windowz variants
50 |
51 | if not "%OS%" == "Windows_NT" goto win9xME_args
52 | if "%@eval[2+2]" == "4" goto 4NT_args
53 |
54 | :win9xME_args
55 | @rem Slurp the command line arguments.
56 | set CMD_LINE_ARGS=
57 | set _SKIP=2
58 |
59 | :win9xME_args_slurp
60 | if "x%~1" == "x" goto execute
61 |
62 | set CMD_LINE_ARGS=%*
63 | goto execute
64 |
65 | :4NT_args
66 | @rem Get arguments from the 4NT Shell from JP Software
67 | set CMD_LINE_ARGS=%$
68 |
69 | :execute
70 | @rem Setup the command line
71 |
72 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
73 |
74 | @rem Execute Gradle
75 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
76 |
77 | :end
78 | @rem End local scope for the variables with windows NT shell
79 | if "%ERRORLEVEL%"=="0" goto mainEnd
80 |
81 | :fail
82 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
83 | rem the _cmd.exe /c_ return code!
84 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
85 | exit /b 1
86 |
87 | :mainEnd
88 | if "%OS%"=="Windows_NT" endlocal
89 |
90 | :omega
91 |
--------------------------------------------------------------------------------
/android/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/android/src/main/java/com/masteratul/downloadmanager/Downloader.java:
--------------------------------------------------------------------------------
1 | package com.masteratul.downloadmanager;
2 |
3 | import android.app.DownloadManager;
4 | import android.content.Context;
5 | import android.database.Cursor;
6 | import android.net.Uri;
7 | import android.os.Environment;
8 |
9 | import com.facebook.react.bridge.ReadableMap;
10 | import com.facebook.react.bridge.ReadableMapKeySetIterator;
11 | import com.facebook.react.bridge.WritableMap;
12 | import com.facebook.react.bridge.WritableNativeMap;
13 |
14 | import java.util.HashMap;
15 |
16 | import static android.content.Context.DOWNLOAD_SERVICE;
17 |
18 | public class Downloader {
19 |
20 | private DownloadManager downloadManager;
21 | private Context context;
22 |
23 | public Downloader(Context ctx) {
24 | context = ctx;
25 | downloadManager = (DownloadManager) ctx.getSystemService(DOWNLOAD_SERVICE);
26 | }
27 |
28 | public DownloadManager.Request createRequest(String url, ReadableMap headers, ReadableMap requestConfig) {
29 | String downloadTitle = requestConfig.getString("downloadTitle");
30 | String downloadDescription = requestConfig.getString("downloadTitle");
31 | String saveAsName = requestConfig.getString("saveAsName");
32 |
33 | Boolean external = requestConfig.getBoolean("external");
34 | String external_path = requestConfig.getString("path");
35 |
36 | Boolean allowedInRoaming = requestConfig.getBoolean("allowedInRoaming");
37 | Boolean allowedInMetered = requestConfig.getBoolean("allowedInMetered");
38 | Boolean showInDownloads = requestConfig.getBoolean("showInDownloads");
39 |
40 | Uri downloadUri = Uri.parse(url);
41 | DownloadManager.Request request = new DownloadManager.Request(downloadUri);
42 |
43 | ReadableMapKeySetIterator iterator = headers.keySetIterator();
44 | while (iterator.hasNextKey()) {
45 | String key = iterator.nextKey();
46 | request.addRequestHeader(key, headers.getString(key));
47 | }
48 |
49 |
50 |
51 | if(external){
52 | request.setDestinationInExternalPublicDir(external_path, saveAsName);
53 |
54 | }else{
55 | request.setDestinationInExternalFilesDir(context, Environment.DIRECTORY_DOWNLOADS, saveAsName);
56 |
57 | }
58 |
59 | request.setTitle(downloadTitle);
60 | request.setDescription(downloadDescription);
61 | request.setAllowedOverRoaming(allowedInRoaming);
62 | request.setAllowedOverMetered(allowedInMetered);
63 | request.setVisibleInDownloadsUi(showInDownloads);
64 | request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_MOBILE | DownloadManager.Request.NETWORK_WIFI);
65 | request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
66 | return request;
67 | }
68 |
69 | public long queueDownload(DownloadManager.Request request) {
70 | return downloadManager.enqueue(request);
71 | }
72 |
73 | public WritableMap checkDownloadStatus(long downloadId) {
74 |
75 | DownloadManager.Query downloadQuery = new DownloadManager.Query();
76 | downloadQuery.setFilterById(downloadId);
77 | Cursor cursor = downloadManager.query(downloadQuery);
78 | HashMap result = new HashMap<>();
79 | if (cursor.moveToFirst()) {
80 | result = getDownloadStatus(cursor, downloadId);
81 | } else {
82 | result.put("status", "UNKNOWN");
83 | result.put("reason", "COULD_NOT_FIND");
84 | result.put("downloadId", String.valueOf(downloadId));
85 | }
86 | WritableMap wmap = new WritableNativeMap();
87 | for (HashMap.Entry entry : result.entrySet()) {
88 | wmap.putString(entry.getKey(), entry.getValue());
89 | }
90 | return wmap;
91 | }
92 |
93 | public int cancelDownload(long downloadId) {
94 | return downloadManager.remove(downloadId);
95 | }
96 |
97 |
98 | private HashMap getDownloadStatus(Cursor cursor, long downloadId) {
99 |
100 | int columnStatusIndex = cursor.getColumnIndex(DownloadManager.COLUMN_STATUS);
101 | int STATUS = cursor.getInt(columnStatusIndex);
102 | int columnReasonIndex = cursor.getColumnIndex(DownloadManager.COLUMN_REASON);
103 | int REASON = cursor.getInt(columnReasonIndex);
104 | int filenameIndex = cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI);
105 | String filename = cursor.getString(filenameIndex);
106 |
107 | String statusText = "";
108 | String reasonText = "";
109 |
110 | switch (STATUS) {
111 | case DownloadManager.STATUS_FAILED:
112 | statusText = "STATUS_FAILED";
113 | switch (REASON) {
114 | case DownloadManager.ERROR_CANNOT_RESUME:
115 | reasonText = "ERROR_CANNOT_RESUME";
116 | break;
117 | case DownloadManager.ERROR_DEVICE_NOT_FOUND:
118 | reasonText = "ERROR_DEVICE_NOT_FOUND";
119 | break;
120 | case DownloadManager.ERROR_FILE_ALREADY_EXISTS:
121 | reasonText = "ERROR_FILE_ALREADY_EXISTS";
122 | break;
123 | case DownloadManager.ERROR_FILE_ERROR:
124 | reasonText = "ERROR_FILE_ERROR";
125 | break;
126 | case DownloadManager.ERROR_HTTP_DATA_ERROR:
127 | reasonText = "ERROR_HTTP_DATA_ERROR";
128 | break;
129 | case DownloadManager.ERROR_INSUFFICIENT_SPACE:
130 | reasonText = "ERROR_INSUFFICIENT_SPACE";
131 | break;
132 | case DownloadManager.ERROR_TOO_MANY_REDIRECTS:
133 | reasonText = "ERROR_TOO_MANY_REDIRECTS";
134 | break;
135 | case DownloadManager.ERROR_UNHANDLED_HTTP_CODE:
136 | reasonText = "ERROR_UNHANDLED_HTTP_CODE";
137 | break;
138 | default:
139 | reasonText = "ERROR_UNKNOWN";
140 | break;
141 | }
142 | break;
143 | case DownloadManager.STATUS_PAUSED:
144 | statusText = "STATUS_PAUSED";
145 | switch (REASON) {
146 | case DownloadManager.PAUSED_QUEUED_FOR_WIFI:
147 | reasonText = "PAUSED_QUEUED_FOR_WIFI";
148 | break;
149 | case DownloadManager.PAUSED_UNKNOWN:
150 | reasonText = "PAUSED_UNKNOWN";
151 | break;
152 | case DownloadManager.PAUSED_WAITING_FOR_NETWORK:
153 | reasonText = "PAUSED_WAITING_FOR_NETWORK";
154 | break;
155 | case DownloadManager.PAUSED_WAITING_TO_RETRY:
156 | reasonText = "PAUSED_WAITING_TO_RETRY";
157 | break;
158 | default:
159 | reasonText = "UNKNOWN";
160 | }
161 | break;
162 | case DownloadManager.STATUS_PENDING:
163 | statusText = "STATUS_PENDING";
164 | break;
165 | case DownloadManager.STATUS_RUNNING:
166 | statusText = "STATUS_RUNNING";
167 | break;
168 | case DownloadManager.STATUS_SUCCESSFUL:
169 | statusText = "STATUS_SUCCESSFUL";
170 | reasonText = filename;
171 | break;
172 | default:
173 | statusText = "STATUS_UNKNOWN";
174 | reasonText = String.valueOf(STATUS);
175 | break;
176 | }
177 |
178 | HashMap result = new HashMap<>();
179 | result.put("status", statusText);
180 | result.put("reason", reasonText);
181 | result.put("downloadId", String.valueOf(downloadId));
182 | return result;
183 | }
184 | }
--------------------------------------------------------------------------------
/android/src/main/java/com/masteratul/downloadmanager/ReactNativeDownloadManagerModule.java:
--------------------------------------------------------------------------------
1 | package com.masteratul.downloadmanager;
2 |
3 | import android.app.DownloadManager;
4 | import android.content.BroadcastReceiver;
5 | import android.content.Context;
6 | import android.content.Intent;
7 | import android.content.IntentFilter;
8 | import android.support.v4.util.LongSparseArray;
9 | import android.util.Log;
10 |
11 | import com.facebook.react.bridge.Callback;
12 | import com.facebook.react.bridge.ReactApplicationContext;
13 | import com.facebook.react.bridge.ReactContextBaseJavaModule;
14 | import com.facebook.react.bridge.ReactMethod;
15 | import com.facebook.react.bridge.ReadableMap;
16 | import com.facebook.react.bridge.WritableMap;
17 |
18 | import java.util.ArrayList;
19 | import java.util.Arrays;
20 |
21 | public class ReactNativeDownloadManagerModule extends ReactContextBaseJavaModule {
22 | private Downloader downloader;
23 | private LongSparseArray appDownloads;
24 | BroadcastReceiver downloadReceiver = new BroadcastReceiver() {
25 | @Override
26 | public void onReceive(Context context, Intent intent) {
27 | try {
28 | long downloadId = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1);
29 | if (appDownloads.indexOfKey(downloadId) >= 0) {
30 | WritableMap downloadStatus = downloader.checkDownloadStatus(downloadId);
31 | Callback downloadOnDoneCb = appDownloads.get(downloadId);
32 |
33 | if (downloadStatus.getString("status").equalsIgnoreCase("STATUS_SUCCESSFUL")) {
34 | downloadOnDoneCb.invoke(null, downloadStatus);
35 | } else {
36 | downloadOnDoneCb.invoke(downloadStatus, null);
37 | }
38 | appDownloads.remove(downloadId);
39 | }
40 |
41 | } catch (Exception e) {
42 | Log.e("RN_DOWNLOAD_MANAGER", Log.getStackTraceString(e));
43 | }
44 | }
45 | };
46 |
47 | public ReactNativeDownloadManagerModule(ReactApplicationContext reactContext) {
48 | super(reactContext);
49 | downloader = new Downloader(reactContext);
50 | appDownloads = new LongSparseArray<>();
51 | IntentFilter filter = new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE);
52 | reactContext.registerReceiver(downloadReceiver, filter);
53 | }
54 |
55 | @Override
56 | public String getName() {
57 | return "ReactNativeDownloadManager";
58 | }
59 |
60 | @ReactMethod
61 | public void download(String url, ReadableMap headers, ReadableMap config, Callback onDone) {
62 | try {
63 | DownloadManager.Request request = downloader.createRequest(url, headers, config);
64 | long downloadId = downloader.queueDownload(request);
65 | appDownloads.put(downloadId, onDone);
66 | } catch (Exception e) {
67 | onDone.invoke(e.getMessage(), null);
68 | }
69 | }
70 |
71 | @ReactMethod
72 | public void queueDownload(String url, ReadableMap headers, ReadableMap config, Callback onStart) {
73 | try {
74 | DownloadManager.Request request = downloader.createRequest(url, headers, config);
75 | long downloadId = downloader.queueDownload(request);
76 | onStart.invoke(null, String.valueOf(downloadId));
77 | } catch (Exception e) {
78 | onStart.invoke(e.getMessage(), null);
79 | }
80 | }
81 |
82 | @ReactMethod
83 | public void attachOnCompleteListener(String downloadId, Callback onComplete) {
84 | try {
85 | long dloadId = Long.parseLong(downloadId);
86 | appDownloads.put(dloadId, onComplete);
87 | WritableMap status = downloader.checkDownloadStatus(Long.parseLong(downloadId));
88 | ArrayList alreadyDoneStatuses = new ArrayList<>(Arrays.asList("STATUS_SUCCESSFUL", "STATUS_FAILED"));
89 | String currentStatus = status.getString("status");
90 | if (alreadyDoneStatuses.contains(currentStatus)) {
91 | appDownloads.remove(dloadId);
92 | onComplete.invoke(null, status);
93 | }
94 | } catch (Exception e) {
95 | onComplete.invoke(e.getMessage(), null);
96 | }
97 | }
98 |
99 |
100 | @ReactMethod
101 | public void cancel(String downloadId, Callback onCancel) {
102 | try {
103 | downloader.cancelDownload(Long.parseLong(downloadId));
104 | onCancel.invoke(null, downloadId);
105 | } catch (Exception e) {
106 | onCancel.invoke(e.getMessage(), null);
107 | }
108 | }
109 |
110 | @ReactMethod
111 | public void checkStatus(String downloadId, Callback onStatus) {
112 | try {
113 | WritableMap status = downloader.checkDownloadStatus(Long.parseLong(downloadId));
114 | onStatus.invoke(null, status);
115 | } catch (Exception e) {
116 | onStatus.invoke(e.getMessage(), null);
117 | }
118 | }
119 |
120 | }
121 |
--------------------------------------------------------------------------------
/android/src/main/java/com/masteratul/downloadmanager/ReactNativeDownloadManagerPackage.java:
--------------------------------------------------------------------------------
1 |
2 | package com.masteratul.downloadmanager;
3 |
4 | import com.facebook.react.ReactPackage;
5 | import com.facebook.react.bridge.JavaScriptModule;
6 | import com.facebook.react.bridge.NativeModule;
7 | import com.facebook.react.bridge.ReactApplicationContext;
8 | import com.facebook.react.uimanager.ViewManager;
9 |
10 | import java.util.Arrays;
11 | import java.util.Collections;
12 | import java.util.List;
13 |
14 | public class ReactNativeDownloadManagerPackage implements ReactPackage {
15 | @Override
16 | public List createNativeModules(ReactApplicationContext reactContext) {
17 | return Arrays.asList(new ReactNativeDownloadManagerModule(reactContext));
18 | }
19 |
20 | public List> createJSModules() {
21 | return Collections.emptyList();
22 | }
23 |
24 | @Override
25 | public List createViewManagers(ReactApplicationContext reactContext) {
26 | return Collections.emptyList();
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/android/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/index.js:
--------------------------------------------------------------------------------
1 | import {NativeModules} from 'react-native';
2 |
3 | const {ReactNativeDownloadManager} = NativeModules;
4 |
5 | const getRequestConfig = (config, url) => Object.assign({}, {
6 | downloadTitle: 'File Download',
7 | downloadDescription: url,
8 | saveAsName: 'Downloaded File - ' + new Date(),
9 | allowedInRoaming: true,
10 | allowedInMetered: true,
11 | showInDownloads: true,
12 | external: false,
13 | path: "Download/"
14 | }, config);
15 |
16 | const download = (url = '', headers = {}, config = {}) => {
17 | const downloadRequestConfig = getRequestConfig(config, url);
18 | return new Promise((resolve, reject) => {
19 | ReactNativeDownloadManager.download(url, headers, downloadRequestConfig, (err, data) => {
20 | if (err) {
21 | return reject(err);
22 | }
23 | return resolve(data);
24 | });
25 | });
26 | };
27 |
28 | const queueDownload = (url = '', headers = {}, config = {}) => {
29 | const downloadRequestConfig = getRequestConfig(config, url);
30 | return new Promise((resolve, reject) => {
31 | ReactNativeDownloadManager.queueDownload(url, headers, downloadRequestConfig, (err, data) => {
32 | if (err) {
33 | return reject(err);
34 | }
35 | return resolve(data);
36 | });
37 | });
38 | };
39 |
40 | const attachOnCompleteListener = (downloadId = '') => new Promise((resolve, reject) => {
41 | ReactNativeDownloadManager.attachOnCompleteListener(downloadId, (err, data) => {
42 | if (err) {
43 | return reject(err);
44 | }
45 | return resolve(data);
46 | });
47 | });
48 |
49 | const cancel = (downloadId = '') => new Promise((resolve, reject) => {
50 | ReactNativeDownloadManager.cancel(downloadId, (err, data) => {
51 | if (err) {
52 | return reject(err);
53 | }
54 | return resolve(data);
55 | });
56 | });
57 |
58 | const checkStatus = (downloadId = '') => new Promise((resolve, reject) => {
59 | ReactNativeDownloadManager.checkStatus(downloadId, (err, data) => {
60 | if (err) {
61 | return reject(err);
62 | }
63 | return resolve(data);
64 | });
65 | });
66 |
67 | module.exports = {
68 | download,
69 | queueDownload,
70 | attachOnCompleteListener,
71 | cancel,
72 | checkStatus
73 | };
74 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "react-native-simple-download-manager",
3 | "version": "1.4.1",
4 | "description": "A react native module that lets you download files using the native download manager.",
5 | "main": "index.js",
6 | "scripts": {
7 | "test": "echo no tests && exit 1",
8 | "lint": "eslint app/",
9 | "lint:fix": "eslint app/ --fix"
10 | },
11 | "repository": {
12 | "type": "git",
13 | "url": "git+https://github.com/master-atul/react-native-download-manager"
14 | },
15 | "keywords": [
16 | "modal",
17 | "react",
18 | "native",
19 | "download",
20 | "manager",
21 | "ios",
22 | "android"
23 | ],
24 | "peerDependencies": {
25 | "react": "*",
26 | "react-native": "*"
27 | },
28 | "author": "master-atul",
29 | "license": "MIT",
30 | "bugs": {
31 | "url": "https://github.com/master-atul/react-native-download-manager/issues"
32 | },
33 | "homepage": "https://github.com/master-atul/react-native-download-manager",
34 | "devDependencies": {
35 | "babel-eslint": "^7.2.3",
36 | "eslint": "^4.0.0",
37 | "eslint-plugin-react": "^7.1.0",
38 | "eslint-plugin-react-native": "^2.3.2"
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | acorn-jsx@^3.0.0:
6 | version "3.0.1"
7 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b"
8 | dependencies:
9 | acorn "^3.0.4"
10 |
11 | acorn@^3.0.4:
12 | version "3.3.0"
13 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a"
14 |
15 | acorn@^5.0.1:
16 | version "5.0.3"
17 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.0.3.tgz#c460df08491463f028ccb82eab3730bf01087b3d"
18 |
19 | ajv-keywords@^1.0.0:
20 | version "1.5.1"
21 | resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c"
22 |
23 | ajv@^4.7.0:
24 | version "4.11.8"
25 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536"
26 | dependencies:
27 | co "^4.6.0"
28 | json-stable-stringify "^1.0.1"
29 |
30 | ansi-escapes@^2.0.0:
31 | version "2.0.0"
32 | resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-2.0.0.tgz#5bae52be424878dd9783e8910e3fc2922e83c81b"
33 |
34 | ansi-regex@^2.0.0:
35 | version "2.1.1"
36 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
37 |
38 | ansi-styles@^2.2.1:
39 | version "2.2.1"
40 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
41 |
42 | argparse@^1.0.7:
43 | version "1.0.9"
44 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86"
45 | dependencies:
46 | sprintf-js "~1.0.2"
47 |
48 | array-union@^1.0.1:
49 | version "1.0.2"
50 | resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39"
51 | dependencies:
52 | array-uniq "^1.0.1"
53 |
54 | array-uniq@^1.0.1:
55 | version "1.0.3"
56 | resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6"
57 |
58 | arrify@^1.0.0:
59 | version "1.0.1"
60 | resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
61 |
62 | babel-code-frame@^6.22.0:
63 | version "6.22.0"
64 | resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.22.0.tgz#027620bee567a88c32561574e7fd0801d33118e4"
65 | dependencies:
66 | chalk "^1.1.0"
67 | esutils "^2.0.2"
68 | js-tokens "^3.0.0"
69 |
70 | babel-eslint@^7.2.3:
71 | version "7.2.3"
72 | resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-7.2.3.tgz#b2fe2d80126470f5c19442dc757253a897710827"
73 | dependencies:
74 | babel-code-frame "^6.22.0"
75 | babel-traverse "^6.23.1"
76 | babel-types "^6.23.0"
77 | babylon "^6.17.0"
78 |
79 | babel-messages@^6.23.0:
80 | version "6.23.0"
81 | resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e"
82 | dependencies:
83 | babel-runtime "^6.22.0"
84 |
85 | babel-runtime@^6.22.0:
86 | version "6.23.0"
87 | resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.23.0.tgz#0a9489f144de70efb3ce4300accdb329e2fc543b"
88 | dependencies:
89 | core-js "^2.4.0"
90 | regenerator-runtime "^0.10.0"
91 |
92 | babel-traverse@^6.23.1:
93 | version "6.25.0"
94 | resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.25.0.tgz#2257497e2fcd19b89edc13c4c91381f9512496f1"
95 | dependencies:
96 | babel-code-frame "^6.22.0"
97 | babel-messages "^6.23.0"
98 | babel-runtime "^6.22.0"
99 | babel-types "^6.25.0"
100 | babylon "^6.17.2"
101 | debug "^2.2.0"
102 | globals "^9.0.0"
103 | invariant "^2.2.0"
104 | lodash "^4.2.0"
105 |
106 | babel-types@^6.23.0, babel-types@^6.25.0:
107 | version "6.25.0"
108 | resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.25.0.tgz#70afb248d5660e5d18f811d91c8303b54134a18e"
109 | dependencies:
110 | babel-runtime "^6.22.0"
111 | esutils "^2.0.2"
112 | lodash "^4.2.0"
113 | to-fast-properties "^1.0.1"
114 |
115 | babylon@^6.17.0, babylon@^6.17.2:
116 | version "6.17.4"
117 | resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.17.4.tgz#3e8b7402b88d22c3423e137a1577883b15ff869a"
118 |
119 | balanced-match@^1.0.0:
120 | version "1.0.0"
121 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
122 |
123 | brace-expansion@^1.1.7:
124 | version "1.1.8"
125 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292"
126 | dependencies:
127 | balanced-match "^1.0.0"
128 | concat-map "0.0.1"
129 |
130 | caller-path@^0.1.0:
131 | version "0.1.0"
132 | resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f"
133 | dependencies:
134 | callsites "^0.2.0"
135 |
136 | callsites@^0.2.0:
137 | version "0.2.0"
138 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca"
139 |
140 | chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3:
141 | version "1.1.3"
142 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
143 | dependencies:
144 | ansi-styles "^2.2.1"
145 | escape-string-regexp "^1.0.2"
146 | has-ansi "^2.0.0"
147 | strip-ansi "^3.0.0"
148 | supports-color "^2.0.0"
149 |
150 | circular-json@^0.3.1:
151 | version "0.3.1"
152 | resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.1.tgz#be8b36aefccde8b3ca7aa2d6afc07a37242c0d2d"
153 |
154 | cli-cursor@^2.1.0:
155 | version "2.1.0"
156 | resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5"
157 | dependencies:
158 | restore-cursor "^2.0.0"
159 |
160 | cli-width@^2.0.0:
161 | version "2.1.0"
162 | resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.1.0.tgz#b234ca209b29ef66fc518d9b98d5847b00edf00a"
163 |
164 | co@^4.6.0:
165 | version "4.6.0"
166 | resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
167 |
168 | concat-map@0.0.1:
169 | version "0.0.1"
170 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
171 |
172 | concat-stream@^1.6.0:
173 | version "1.6.0"
174 | resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7"
175 | dependencies:
176 | inherits "^2.0.3"
177 | readable-stream "^2.2.2"
178 | typedarray "^0.0.6"
179 |
180 | core-js@^2.4.0:
181 | version "2.4.1"
182 | resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e"
183 |
184 | core-util-is@~1.0.0:
185 | version "1.0.2"
186 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
187 |
188 | debug@^2.2.0, debug@^2.6.8:
189 | version "2.6.8"
190 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc"
191 | dependencies:
192 | ms "2.0.0"
193 |
194 | deep-is@~0.1.3:
195 | version "0.1.3"
196 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
197 |
198 | del@^2.0.2:
199 | version "2.2.2"
200 | resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8"
201 | dependencies:
202 | globby "^5.0.0"
203 | is-path-cwd "^1.0.0"
204 | is-path-in-cwd "^1.0.0"
205 | object-assign "^4.0.1"
206 | pify "^2.0.0"
207 | pinkie-promise "^2.0.0"
208 | rimraf "^2.2.8"
209 |
210 | doctrine@^2.0.0:
211 | version "2.0.0"
212 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.0.0.tgz#c73d8d2909d22291e1a007a395804da8b665fe63"
213 | dependencies:
214 | esutils "^2.0.2"
215 | isarray "^1.0.0"
216 |
217 | escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
218 | version "1.0.5"
219 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
220 |
221 | eslint-plugin-react-native@^2.3.2:
222 | version "2.3.2"
223 | resolved "https://registry.yarnpkg.com/eslint-plugin-react-native/-/eslint-plugin-react-native-2.3.2.tgz#e1b2ba2d97fb46b16fe2dbb5bd4d0f47419f2859"
224 |
225 | eslint-plugin-react@^7.1.0:
226 | version "7.1.0"
227 | resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.1.0.tgz#27770acf39f5fd49cd0af4083ce58104eb390d4c"
228 | dependencies:
229 | doctrine "^2.0.0"
230 | has "^1.0.1"
231 | jsx-ast-utils "^1.4.1"
232 |
233 | eslint-scope@^3.7.1:
234 | version "3.7.1"
235 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8"
236 | dependencies:
237 | esrecurse "^4.1.0"
238 | estraverse "^4.1.1"
239 |
240 | eslint@^4.0.0:
241 | version "4.0.0"
242 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.0.0.tgz#7277c01437fdf41dccd168d5aa0e49b75ca1f260"
243 | dependencies:
244 | babel-code-frame "^6.22.0"
245 | chalk "^1.1.3"
246 | concat-stream "^1.6.0"
247 | debug "^2.6.8"
248 | doctrine "^2.0.0"
249 | eslint-scope "^3.7.1"
250 | espree "^3.4.3"
251 | esquery "^1.0.0"
252 | estraverse "^4.2.0"
253 | esutils "^2.0.2"
254 | file-entry-cache "^2.0.0"
255 | glob "^7.1.2"
256 | globals "^9.17.0"
257 | ignore "^3.3.3"
258 | imurmurhash "^0.1.4"
259 | inquirer "^3.0.6"
260 | is-my-json-valid "^2.16.0"
261 | is-resolvable "^1.0.0"
262 | js-yaml "^3.8.4"
263 | json-stable-stringify "^1.0.1"
264 | levn "^0.3.0"
265 | lodash "^4.17.4"
266 | mkdirp "^0.5.1"
267 | natural-compare "^1.4.0"
268 | optionator "^0.8.2"
269 | path-is-inside "^1.0.2"
270 | pluralize "^4.0.0"
271 | progress "^2.0.0"
272 | require-uncached "^1.0.3"
273 | strip-json-comments "~2.0.1"
274 | table "^4.0.1"
275 | text-table "~0.2.0"
276 |
277 | espree@^3.4.3:
278 | version "3.4.3"
279 | resolved "https://registry.yarnpkg.com/espree/-/espree-3.4.3.tgz#2910b5ccd49ce893c2ffffaab4fd8b3a31b82374"
280 | dependencies:
281 | acorn "^5.0.1"
282 | acorn-jsx "^3.0.0"
283 |
284 | esprima@^3.1.1:
285 | version "3.1.3"
286 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633"
287 |
288 | esquery@^1.0.0:
289 | version "1.0.0"
290 | resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.0.tgz#cfba8b57d7fba93f17298a8a006a04cda13d80fa"
291 | dependencies:
292 | estraverse "^4.0.0"
293 |
294 | esrecurse@^4.1.0:
295 | version "4.2.0"
296 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.0.tgz#fa9568d98d3823f9a41d91e902dcab9ea6e5b163"
297 | dependencies:
298 | estraverse "^4.1.0"
299 | object-assign "^4.0.1"
300 |
301 | estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0:
302 | version "4.2.0"
303 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13"
304 |
305 | esutils@^2.0.2:
306 | version "2.0.2"
307 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
308 |
309 | external-editor@^2.0.4:
310 | version "2.0.4"
311 | resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.0.4.tgz#1ed9199da9cbfe2ef2f7a31b2fde8b0d12368972"
312 | dependencies:
313 | iconv-lite "^0.4.17"
314 | jschardet "^1.4.2"
315 | tmp "^0.0.31"
316 |
317 | fast-levenshtein@~2.0.4:
318 | version "2.0.6"
319 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
320 |
321 | figures@^2.0.0:
322 | version "2.0.0"
323 | resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962"
324 | dependencies:
325 | escape-string-regexp "^1.0.5"
326 |
327 | file-entry-cache@^2.0.0:
328 | version "2.0.0"
329 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361"
330 | dependencies:
331 | flat-cache "^1.2.1"
332 | object-assign "^4.0.1"
333 |
334 | flat-cache@^1.2.1:
335 | version "1.2.2"
336 | resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.2.2.tgz#fa86714e72c21db88601761ecf2f555d1abc6b96"
337 | dependencies:
338 | circular-json "^0.3.1"
339 | del "^2.0.2"
340 | graceful-fs "^4.1.2"
341 | write "^0.2.1"
342 |
343 | fs.realpath@^1.0.0:
344 | version "1.0.0"
345 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
346 |
347 | function-bind@^1.0.2:
348 | version "1.1.0"
349 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.0.tgz#16176714c801798e4e8f2cf7f7529467bb4a5771"
350 |
351 | generate-function@^2.0.0:
352 | version "2.0.0"
353 | resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74"
354 |
355 | generate-object-property@^1.1.0:
356 | version "1.2.0"
357 | resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0"
358 | dependencies:
359 | is-property "^1.0.0"
360 |
361 | glob@^7.0.3, glob@^7.0.5, glob@^7.1.2:
362 | version "7.1.2"
363 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15"
364 | dependencies:
365 | fs.realpath "^1.0.0"
366 | inflight "^1.0.4"
367 | inherits "2"
368 | minimatch "^3.0.4"
369 | once "^1.3.0"
370 | path-is-absolute "^1.0.0"
371 |
372 | globals@^9.0.0, globals@^9.17.0:
373 | version "9.18.0"
374 | resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a"
375 |
376 | globby@^5.0.0:
377 | version "5.0.0"
378 | resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d"
379 | dependencies:
380 | array-union "^1.0.1"
381 | arrify "^1.0.0"
382 | glob "^7.0.3"
383 | object-assign "^4.0.1"
384 | pify "^2.0.0"
385 | pinkie-promise "^2.0.0"
386 |
387 | graceful-fs@^4.1.2:
388 | version "4.1.11"
389 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
390 |
391 | has-ansi@^2.0.0:
392 | version "2.0.0"
393 | resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
394 | dependencies:
395 | ansi-regex "^2.0.0"
396 |
397 | has@^1.0.1:
398 | version "1.0.1"
399 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28"
400 | dependencies:
401 | function-bind "^1.0.2"
402 |
403 | iconv-lite@^0.4.17:
404 | version "0.4.18"
405 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.18.tgz#23d8656b16aae6742ac29732ea8f0336a4789cf2"
406 |
407 | ignore@^3.3.3:
408 | version "3.3.3"
409 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.3.tgz#432352e57accd87ab3110e82d3fea0e47812156d"
410 |
411 | imurmurhash@^0.1.4:
412 | version "0.1.4"
413 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
414 |
415 | inflight@^1.0.4:
416 | version "1.0.6"
417 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
418 | dependencies:
419 | once "^1.3.0"
420 | wrappy "1"
421 |
422 | inherits@2, inherits@^2.0.3, inherits@~2.0.3:
423 | version "2.0.3"
424 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
425 |
426 | inquirer@^3.0.6:
427 | version "3.1.1"
428 | resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.1.1.tgz#87621c4fba4072f48a8dd71c9f9df6f100b2d534"
429 | dependencies:
430 | ansi-escapes "^2.0.0"
431 | chalk "^1.0.0"
432 | cli-cursor "^2.1.0"
433 | cli-width "^2.0.0"
434 | external-editor "^2.0.4"
435 | figures "^2.0.0"
436 | lodash "^4.3.0"
437 | mute-stream "0.0.7"
438 | run-async "^2.2.0"
439 | rx-lite "^4.0.8"
440 | rx-lite-aggregates "^4.0.8"
441 | string-width "^2.0.0"
442 | strip-ansi "^3.0.0"
443 | through "^2.3.6"
444 |
445 | invariant@^2.2.0:
446 | version "2.2.2"
447 | resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360"
448 | dependencies:
449 | loose-envify "^1.0.0"
450 |
451 | is-fullwidth-code-point@^2.0.0:
452 | version "2.0.0"
453 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
454 |
455 | is-my-json-valid@^2.16.0:
456 | version "2.16.0"
457 | resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.16.0.tgz#f079dd9bfdae65ee2038aae8acbc86ab109e3693"
458 | dependencies:
459 | generate-function "^2.0.0"
460 | generate-object-property "^1.1.0"
461 | jsonpointer "^4.0.0"
462 | xtend "^4.0.0"
463 |
464 | is-path-cwd@^1.0.0:
465 | version "1.0.0"
466 | resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d"
467 |
468 | is-path-in-cwd@^1.0.0:
469 | version "1.0.0"
470 | resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz#6477582b8214d602346094567003be8a9eac04dc"
471 | dependencies:
472 | is-path-inside "^1.0.0"
473 |
474 | is-path-inside@^1.0.0:
475 | version "1.0.0"
476 | resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.0.tgz#fc06e5a1683fbda13de667aff717bbc10a48f37f"
477 | dependencies:
478 | path-is-inside "^1.0.1"
479 |
480 | is-promise@^2.1.0:
481 | version "2.1.0"
482 | resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa"
483 |
484 | is-property@^1.0.0:
485 | version "1.0.2"
486 | resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84"
487 |
488 | is-resolvable@^1.0.0:
489 | version "1.0.0"
490 | resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.0.0.tgz#8df57c61ea2e3c501408d100fb013cf8d6e0cc62"
491 | dependencies:
492 | tryit "^1.0.1"
493 |
494 | isarray@^1.0.0, isarray@~1.0.0:
495 | version "1.0.0"
496 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
497 |
498 | js-tokens@^3.0.0:
499 | version "3.0.1"
500 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.1.tgz#08e9f132484a2c45a30907e9dc4d5567b7f114d7"
501 |
502 | js-yaml@^3.8.4:
503 | version "3.8.4"
504 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.8.4.tgz#520b4564f86573ba96662af85a8cafa7b4b5a6f6"
505 | dependencies:
506 | argparse "^1.0.7"
507 | esprima "^3.1.1"
508 |
509 | jschardet@^1.4.2:
510 | version "1.4.2"
511 | resolved "https://registry.yarnpkg.com/jschardet/-/jschardet-1.4.2.tgz#2aa107f142af4121d145659d44f50830961e699a"
512 |
513 | json-stable-stringify@^1.0.1:
514 | version "1.0.1"
515 | resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af"
516 | dependencies:
517 | jsonify "~0.0.0"
518 |
519 | jsonify@~0.0.0:
520 | version "0.0.0"
521 | resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73"
522 |
523 | jsonpointer@^4.0.0:
524 | version "4.0.1"
525 | resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9"
526 |
527 | jsx-ast-utils@^1.4.1:
528 | version "1.4.1"
529 | resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz#3867213e8dd79bf1e8f2300c0cfc1efb182c0df1"
530 |
531 | levn@^0.3.0, levn@~0.3.0:
532 | version "0.3.0"
533 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
534 | dependencies:
535 | prelude-ls "~1.1.2"
536 | type-check "~0.3.2"
537 |
538 | lodash@^4.0.0, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.3.0:
539 | version "4.17.4"
540 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae"
541 |
542 | loose-envify@^1.0.0:
543 | version "1.3.1"
544 | resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848"
545 | dependencies:
546 | js-tokens "^3.0.0"
547 |
548 | mimic-fn@^1.0.0:
549 | version "1.1.0"
550 | resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.1.0.tgz#e667783d92e89dbd342818b5230b9d62a672ad18"
551 |
552 | minimatch@^3.0.4:
553 | version "3.0.4"
554 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
555 | dependencies:
556 | brace-expansion "^1.1.7"
557 |
558 | minimist@0.0.8:
559 | version "0.0.8"
560 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
561 |
562 | mkdirp@^0.5.1:
563 | version "0.5.1"
564 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
565 | dependencies:
566 | minimist "0.0.8"
567 |
568 | ms@2.0.0:
569 | version "2.0.0"
570 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
571 |
572 | mute-stream@0.0.7:
573 | version "0.0.7"
574 | resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab"
575 |
576 | natural-compare@^1.4.0:
577 | version "1.4.0"
578 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
579 |
580 | object-assign@^4.0.1:
581 | version "4.1.1"
582 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
583 |
584 | once@^1.3.0:
585 | version "1.4.0"
586 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
587 | dependencies:
588 | wrappy "1"
589 |
590 | onetime@^2.0.0:
591 | version "2.0.1"
592 | resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4"
593 | dependencies:
594 | mimic-fn "^1.0.0"
595 |
596 | optionator@^0.8.2:
597 | version "0.8.2"
598 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64"
599 | dependencies:
600 | deep-is "~0.1.3"
601 | fast-levenshtein "~2.0.4"
602 | levn "~0.3.0"
603 | prelude-ls "~1.1.2"
604 | type-check "~0.3.2"
605 | wordwrap "~1.0.0"
606 |
607 | os-tmpdir@~1.0.1:
608 | version "1.0.2"
609 | resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
610 |
611 | path-is-absolute@^1.0.0:
612 | version "1.0.1"
613 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
614 |
615 | path-is-inside@^1.0.1, path-is-inside@^1.0.2:
616 | version "1.0.2"
617 | resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53"
618 |
619 | pify@^2.0.0:
620 | version "2.3.0"
621 | resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
622 |
623 | pinkie-promise@^2.0.0:
624 | version "2.0.1"
625 | resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
626 | dependencies:
627 | pinkie "^2.0.0"
628 |
629 | pinkie@^2.0.0:
630 | version "2.0.4"
631 | resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
632 |
633 | pluralize@^4.0.0:
634 | version "4.0.0"
635 | resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-4.0.0.tgz#59b708c1c0190a2f692f1c7618c446b052fd1762"
636 |
637 | prelude-ls@~1.1.2:
638 | version "1.1.2"
639 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
640 |
641 | process-nextick-args@~1.0.6:
642 | version "1.0.7"
643 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3"
644 |
645 | progress@^2.0.0:
646 | version "2.0.0"
647 | resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f"
648 |
649 | readable-stream@^2.2.2:
650 | version "2.3.2"
651 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.2.tgz#5a04df05e4f57fe3f0dc68fdd11dc5c97c7e6f4d"
652 | dependencies:
653 | core-util-is "~1.0.0"
654 | inherits "~2.0.3"
655 | isarray "~1.0.0"
656 | process-nextick-args "~1.0.6"
657 | safe-buffer "~5.1.0"
658 | string_decoder "~1.0.0"
659 | util-deprecate "~1.0.1"
660 |
661 | regenerator-runtime@^0.10.0:
662 | version "0.10.5"
663 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658"
664 |
665 | require-uncached@^1.0.3:
666 | version "1.0.3"
667 | resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3"
668 | dependencies:
669 | caller-path "^0.1.0"
670 | resolve-from "^1.0.0"
671 |
672 | resolve-from@^1.0.0:
673 | version "1.0.1"
674 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226"
675 |
676 | restore-cursor@^2.0.0:
677 | version "2.0.0"
678 | resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf"
679 | dependencies:
680 | onetime "^2.0.0"
681 | signal-exit "^3.0.2"
682 |
683 | rimraf@^2.2.8:
684 | version "2.6.1"
685 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d"
686 | dependencies:
687 | glob "^7.0.5"
688 |
689 | run-async@^2.2.0:
690 | version "2.3.0"
691 | resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0"
692 | dependencies:
693 | is-promise "^2.1.0"
694 |
695 | rx-lite-aggregates@^4.0.8:
696 | version "4.0.8"
697 | resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be"
698 | dependencies:
699 | rx-lite "*"
700 |
701 | rx-lite@*, rx-lite@^4.0.8:
702 | version "4.0.8"
703 | resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444"
704 |
705 | safe-buffer@~5.1.0:
706 | version "5.1.1"
707 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853"
708 |
709 | signal-exit@^3.0.2:
710 | version "3.0.2"
711 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
712 |
713 | slice-ansi@0.0.4:
714 | version "0.0.4"
715 | resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35"
716 |
717 | sprintf-js@~1.0.2:
718 | version "1.0.3"
719 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
720 |
721 | string-width@^2.0.0:
722 | version "2.0.0"
723 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.0.0.tgz#635c5436cc72a6e0c387ceca278d4e2eec52687e"
724 | dependencies:
725 | is-fullwidth-code-point "^2.0.0"
726 | strip-ansi "^3.0.0"
727 |
728 | string_decoder@~1.0.0:
729 | version "1.0.3"
730 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab"
731 | dependencies:
732 | safe-buffer "~5.1.0"
733 |
734 | strip-ansi@^3.0.0:
735 | version "3.0.1"
736 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
737 | dependencies:
738 | ansi-regex "^2.0.0"
739 |
740 | strip-json-comments@~2.0.1:
741 | version "2.0.1"
742 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
743 |
744 | supports-color@^2.0.0:
745 | version "2.0.0"
746 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
747 |
748 | table@^4.0.1:
749 | version "4.0.1"
750 | resolved "https://registry.yarnpkg.com/table/-/table-4.0.1.tgz#a8116c133fac2c61f4a420ab6cdf5c4d61f0e435"
751 | dependencies:
752 | ajv "^4.7.0"
753 | ajv-keywords "^1.0.0"
754 | chalk "^1.1.1"
755 | lodash "^4.0.0"
756 | slice-ansi "0.0.4"
757 | string-width "^2.0.0"
758 |
759 | text-table@~0.2.0:
760 | version "0.2.0"
761 | resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
762 |
763 | through@^2.3.6:
764 | version "2.3.8"
765 | resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
766 |
767 | tmp@^0.0.31:
768 | version "0.0.31"
769 | resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.31.tgz#8f38ab9438e17315e5dbd8b3657e8bfb277ae4a7"
770 | dependencies:
771 | os-tmpdir "~1.0.1"
772 |
773 | to-fast-properties@^1.0.1:
774 | version "1.0.3"
775 | resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47"
776 |
777 | tryit@^1.0.1:
778 | version "1.0.3"
779 | resolved "https://registry.yarnpkg.com/tryit/-/tryit-1.0.3.tgz#393be730a9446fd1ead6da59a014308f36c289cb"
780 |
781 | type-check@~0.3.2:
782 | version "0.3.2"
783 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
784 | dependencies:
785 | prelude-ls "~1.1.2"
786 |
787 | typedarray@^0.0.6:
788 | version "0.0.6"
789 | resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
790 |
791 | util-deprecate@~1.0.1:
792 | version "1.0.2"
793 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
794 |
795 | wordwrap@~1.0.0:
796 | version "1.0.0"
797 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
798 |
799 | wrappy@1:
800 | version "1.0.2"
801 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
802 |
803 | write@^0.2.1:
804 | version "0.2.1"
805 | resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757"
806 | dependencies:
807 | mkdirp "^0.5.1"
808 |
809 | xtend@^4.0.0:
810 | version "4.0.1"
811 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
812 |
--------------------------------------------------------------------------------