From 3823f06945b511e1230c62c7aae8c0a104848947 Mon Sep 17 00:00:00 2001 From: tobrun Date: Tue, 23 Apr 2019 16:04:19 +0200 Subject: [android] - initial render test module setup --- .../mapbox/mapboxsdk/http/LocalRequestTask.java | 8 +- .../test/resources/mobile-event-schemas.jsonl.gz | Bin 0 -> 3038 bytes .../MapboxGLAndroidSDKRenderTest/.gitignore | 7 + .../android/MapboxGLAndroidSDKRenderTest/README.md | 29 + .../MapboxGLAndroidSDKRenderTest/build.gradle | 38 + .../config/ignores.json | 136 ++ .../config/supported-operations.json | 1 + .../config/supported-properties.json | 1 + .../MapboxGLAndroidSDKRenderTest/package.json | 35 + .../scripts/definitions/globals.js | 37 + .../scripts/generators.js | 17 + .../scripts/generators/java.js | 126 ++ .../MapboxGLAndroidSDKRenderTest/scripts/index.js | 2 + .../MapboxGLAndroidSDKRenderTest/scripts/main.js | 18 + .../scripts/pixelmatch.js | 18 + .../src/main/AndroidManifest.xml | 26 + .../mapbox/mapboxsdk/test/render/FileUtils.java | 94 ++ .../mapbox/mapboxsdk/test/render/MainActivity.java | 13 + .../test/render/RenderTestApplication.java | 14 + .../res/drawable-v24/ic_launcher_foreground.xml | 34 + .../main/res/drawable/ic_launcher_background.xml | 74 + .../src/main/res/layout/activity_main.xml | 11 + .../src/main/res/mipmap-anydpi-v26/ic_launcher.xml | 5 + .../res/mipmap-anydpi-v26/ic_launcher_round.xml | 5 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 2963 bytes .../src/main/res/mipmap-hdpi/ic_launcher_round.png | Bin 0 -> 4905 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2060 bytes .../src/main/res/mipmap-mdpi/ic_launcher_round.png | Bin 0 -> 2783 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4490 bytes .../main/res/mipmap-xhdpi/ic_launcher_round.png | Bin 0 -> 6895 bytes .../src/main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 6387 bytes .../main/res/mipmap-xxhdpi/ic_launcher_round.png | Bin 0 -> 10413 bytes .../src/main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 9128 bytes .../main/res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 0 -> 15132 bytes .../src/main/res/values/colors.xml | 6 + .../src/main/res/values/developer-config.xml | 4 + .../src/main/res/values/strings.xml | 3 + .../src/main/res/values/styles.xml | 11 + .../templates/render-test.java.ejs | 135 ++ .../android/MapboxGLAndroidSDKRenderTest/yarn.lock | 1633 ++++++++++++++++++++ .../java/com/mapbox/mapboxsdk/SnapshotterTest.java | 4 + platform/android/settings.gradle | 2 +- 42 files changed, 2542 insertions(+), 5 deletions(-) create mode 100644 platform/android/MapboxGLAndroidSDK/src/test/resources/mobile-event-schemas.jsonl.gz create mode 100644 platform/android/MapboxGLAndroidSDKRenderTest/.gitignore create mode 100644 platform/android/MapboxGLAndroidSDKRenderTest/README.md create mode 100644 platform/android/MapboxGLAndroidSDKRenderTest/build.gradle create mode 100644 platform/android/MapboxGLAndroidSDKRenderTest/config/ignores.json create mode 100644 platform/android/MapboxGLAndroidSDKRenderTest/config/supported-operations.json create mode 100644 platform/android/MapboxGLAndroidSDKRenderTest/config/supported-properties.json create mode 100644 platform/android/MapboxGLAndroidSDKRenderTest/package.json create mode 100644 platform/android/MapboxGLAndroidSDKRenderTest/scripts/definitions/globals.js create mode 100644 platform/android/MapboxGLAndroidSDKRenderTest/scripts/generators.js create mode 100644 platform/android/MapboxGLAndroidSDKRenderTest/scripts/generators/java.js create mode 100644 platform/android/MapboxGLAndroidSDKRenderTest/scripts/index.js create mode 100644 platform/android/MapboxGLAndroidSDKRenderTest/scripts/main.js create mode 100644 platform/android/MapboxGLAndroidSDKRenderTest/scripts/pixelmatch.js create mode 100644 platform/android/MapboxGLAndroidSDKRenderTest/src/main/AndroidManifest.xml create mode 100644 platform/android/MapboxGLAndroidSDKRenderTest/src/main/java/com/mapbox/mapboxsdk/test/render/FileUtils.java create mode 100644 platform/android/MapboxGLAndroidSDKRenderTest/src/main/java/com/mapbox/mapboxsdk/test/render/MainActivity.java create mode 100644 platform/android/MapboxGLAndroidSDKRenderTest/src/main/java/com/mapbox/mapboxsdk/test/render/RenderTestApplication.java create mode 100644 platform/android/MapboxGLAndroidSDKRenderTest/src/main/res/drawable-v24/ic_launcher_foreground.xml create mode 100644 platform/android/MapboxGLAndroidSDKRenderTest/src/main/res/drawable/ic_launcher_background.xml create mode 100644 platform/android/MapboxGLAndroidSDKRenderTest/src/main/res/layout/activity_main.xml create mode 100644 platform/android/MapboxGLAndroidSDKRenderTest/src/main/res/mipmap-anydpi-v26/ic_launcher.xml create mode 100644 platform/android/MapboxGLAndroidSDKRenderTest/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml create mode 100644 platform/android/MapboxGLAndroidSDKRenderTest/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 platform/android/MapboxGLAndroidSDKRenderTest/src/main/res/mipmap-hdpi/ic_launcher_round.png create mode 100644 platform/android/MapboxGLAndroidSDKRenderTest/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 platform/android/MapboxGLAndroidSDKRenderTest/src/main/res/mipmap-mdpi/ic_launcher_round.png create mode 100644 platform/android/MapboxGLAndroidSDKRenderTest/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 platform/android/MapboxGLAndroidSDKRenderTest/src/main/res/mipmap-xhdpi/ic_launcher_round.png create mode 100644 platform/android/MapboxGLAndroidSDKRenderTest/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 platform/android/MapboxGLAndroidSDKRenderTest/src/main/res/mipmap-xxhdpi/ic_launcher_round.png create mode 100644 platform/android/MapboxGLAndroidSDKRenderTest/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 platform/android/MapboxGLAndroidSDKRenderTest/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png create mode 100644 platform/android/MapboxGLAndroidSDKRenderTest/src/main/res/values/colors.xml create mode 100644 platform/android/MapboxGLAndroidSDKRenderTest/src/main/res/values/developer-config.xml create mode 100644 platform/android/MapboxGLAndroidSDKRenderTest/src/main/res/values/strings.xml create mode 100644 platform/android/MapboxGLAndroidSDKRenderTest/src/main/res/values/styles.xml create mode 100644 platform/android/MapboxGLAndroidSDKRenderTest/templates/render-test.java.ejs create mode 100644 platform/android/MapboxGLAndroidSDKRenderTest/yarn.lock create mode 100644 platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/SnapshotterTest.java diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/http/LocalRequestTask.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/http/LocalRequestTask.java index 2d9fe43ad6..b579a925fb 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/http/LocalRequestTask.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/http/LocalRequestTask.java @@ -26,7 +26,8 @@ class LocalRequestTask extends AsyncTask { @Override protected byte[] doInBackground(String... strings) { return loadFile(Mapbox.getApplicationContext().getAssets(), - "integration/" + strings[0] + strings[0] + //remove `local://` from resource uri .substring(8) .replaceAll("%20", " ") .replaceAll("%2c", ",")); @@ -64,9 +65,8 @@ class LocalRequestTask extends AsyncTask { } private static void logFileError(Exception exception) { - String message = "Load file failed"; - Logger.e(TAG, message, exception); - MapStrictMode.strictModeViolation(message, exception); + Logger.e(TAG, exception.toString()); + MapStrictMode.strictModeViolation(exception.getMessage(), exception); } public interface OnLocalRequestResponse { diff --git a/platform/android/MapboxGLAndroidSDK/src/test/resources/mobile-event-schemas.jsonl.gz b/platform/android/MapboxGLAndroidSDK/src/test/resources/mobile-event-schemas.jsonl.gz new file mode 100644 index 0000000000..6c94ca2f81 Binary files /dev/null and b/platform/android/MapboxGLAndroidSDK/src/test/resources/mobile-event-schemas.jsonl.gz differ diff --git a/platform/android/MapboxGLAndroidSDKRenderTest/.gitignore b/platform/android/MapboxGLAndroidSDKRenderTest/.gitignore new file mode 100644 index 0000000000..1fc1e84621 --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKRenderTest/.gitignore @@ -0,0 +1,7 @@ +/build +src/main/res/values/developer-config.xml +scripts/main.list +src/androidTest/assets +src/main/assets +src/androidTest/java +/node_modules diff --git a/platform/android/MapboxGLAndroidSDKRenderTest/README.md b/platform/android/MapboxGLAndroidSDKRenderTest/README.md new file mode 100644 index 0000000000..f59134c0d5 --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKRenderTest/README.md @@ -0,0 +1,29 @@ +# Install + +Run `yarn install` from the root of this module to pull in external dependencies. + +# Generate + +Generate tests with `yarn gen`: + - copies style.json, expected image to `src/main/assets` + - generates instrumentation tests in `src/androidTest` + +# Build + +Build tests with `yarn build`, this generates 2 apks files that can be uploaded to cloud testing services in `build/outputs/apk`. + +# Run + +Run tests locally on a device with `yarn test`. + +# Retrieve test results + +Use `yarn pull` to retrieve test results stored in `sdcard/mapbox/render` from the test device and store them in `build/outputs/render`. + +# Pixelmatch + +Use `yarn pixelmatch` to run [pixelmatch](https://github.com/mapbox/pixelmatch) on `build/outputs/render` subdirectories. + +# Clean + +Run `yarn clean` to cleanup build, tests and assets. \ No newline at end of file diff --git a/platform/android/MapboxGLAndroidSDKRenderTest/build.gradle b/platform/android/MapboxGLAndroidSDKRenderTest/build.gradle new file mode 100644 index 0000000000..d8ae3b8828 --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKRenderTest/build.gradle @@ -0,0 +1,38 @@ +apply plugin: 'com.android.application' + +android { + compileSdkVersion androidVersions.compileSdkVersion + + defaultConfig { + applicationId "com.mapbox.mapboxsdk.test.render" + minSdkVersion androidVersions.minSdkVersion + targetSdkVersion androidVersions.targetSdkVersion + versionCode 1 + versionName "1.0" + testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + } + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + + dexOptions { + maxProcessCount 8 + javaMaxHeapSize "2g" + preDexLibraries true + } +} + +dependencies { + implementation project(':MapboxGLAndroidSDK') + implementation dependenciesList.supportAppcompatV7 + implementation dependenciesList.supportConstraintLayout + testImplementation dependenciesList.junit + androidTestImplementation dependenciesList.supportAnnotations + androidTestImplementation dependenciesList.testRunner + androidTestImplementation dependenciesList.testRules + androidTestImplementation dependenciesList.testEspressoCore + androidTestImplementation dependenciesList.testEspressoIntents + androidTestImplementation dependenciesList.testEspressoContrib +} diff --git a/platform/android/MapboxGLAndroidSDKRenderTest/config/ignores.json b/platform/android/MapboxGLAndroidSDKRenderTest/config/ignores.json new file mode 100644 index 0000000000..c6146c903b --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKRenderTest/config/ignores.json @@ -0,0 +1,136 @@ +{ + "render-tests/raster-rotation/0": "numeric test names not supported", + "render-tests/raster-rotation/45": "numeric test names not supported", + "render-tests/raster-rotation/90": "numeric test names not supported", + "render-tests/raster-rotation/180": "numeric test names not supported", + "render-tests/raster-rotation/270": "numeric test names not supported", + "render-tests/line-pattern/@2x": "@2x test names not supported", + "render-tests/fill-pattern/@2x": "@2x test names not supported", + "render-tests/background-pattern/@2x": "@2x test names not supported", + "render-tests/fill-extrusion-pattern/@2x": "@2x test names not supported", + "render-tests/extent/1024-line": "numeric test names not supported", + "render-tests/extent/1024-symbol": "numeric test names not supported", + "render-tests/extent/1024-fill": "numeric test names not supported", + "render-tests/extent/1024-circle": "numeric test names not supported", + "render-tests/sprites/1x-screen-1x-pattern": "numeric test names not supported", + "render-tests/sprites/1x-screen-2x-pattern": "numeric test names not supported", + "render-tests/sprites/2x-screen-2x-pattern": "numeric test names not supported", + "render-tests/sprites/2x-screen-1x-pattern": "numeric test names not supported", + "render-tests/sprites/1x-screen-1x-icon": "numeric test names not supported", + "render-tests/sprites/2x-screen-1x-icon": "numeric test names not supported", + "render-tests/sprites/2x-screen-2x-icon": "numeric test names not supported", + "render-tests/sprites/1x-screen-2x-icon": "numeric test names not supported", + "render-tests/runtime-styling/image-add-1.5x-image-1x-screen": "numeric test names not supported", + "render-tests/runtime-styling/image-add-1x-image-1x-screen": "numeric test names not supported", + "render-tests/runtime-styling/image-add-1x-image-2x-screen": "numeric test names not supported", + "render-tests/runtime-styling/image-add-2x-image-1x-screen": "numeric test names not supported", + "render-tests/runtime-styling/image-add-2x-image-2x-screen": "numeric test names not supported", + "render-tests/runtime-styling/image-add-1.5x-image-2x-screen": "numeric test names not supported", + "render-tests/regressions/mapbox-gl-js#2305": "regressions test not supported", + "render-tests/regressions/mapbox-gl-js#3614": "regressions test not supported", + "render-tests/regressions/mapbox-gl-js#4564": "regressions test not supported", + "render-tests/regressions/mapbox-gl-js#5740": "regressions test not supported", + "render-tests/regressions/mapbox-gl-js#7066": "regressions test not supported", + "render-tests/regressions/mapbox-gl-native#7357": "regressions test not supported", + "render-tests/regressions/mapbox-gl-js#2467": "regressions test not supported", + "render-tests/regressions/mapbox-gl-js#3623": "regressions test not supported", + "render-tests/regressions/mapbox-gl-js#4573": "regressions test not supported", + "render-tests/regressions/mapbox-gl-js#5776": "regressions test not supported", + "render-tests/regressions/mapbox-gl-js#7172": "regressions test not supported", + "render-tests/regressions/mapbox-gl-native#7572": "regressions test not supported", + "render-tests/regressions/mapbox-gl-js#2523": "regressions test not supported", + "render-tests/regressions/mapbox-gl-js#3633": "regressions test not supported", + "render-tests/regressions/mapbox-gl-js#4579": "regressions test not supported", + "render-tests/regressions/mapbox-gl-js#5911": "regressions test not supported", + "render-tests/regressions/mapbox-gl-js#7271": "regressions test not supported", + "render-tests/regressions/mapbox-gl-native#7714": "regressions test not supported", + "render-tests/regressions/mapbox-gl-js#2533": "regressions test not supported", + "render-tests/regressions/mapbox-gl-js#3682": "regressions test not supported", + "render-tests/regressions/mapbox-gl-js#4605": "regressions test not supported", + "render-tests/regressions/mapbox-gl-js#5911a": "regressions test not supported", + "render-tests/regressions/mapbox-gl-js#7302": "regressions test not supported", + "render-tests/regressions/mapbox-gl-native#7792": "regressions test not supported", + "render-tests/regressions/mapbox-gl-js#2534": "regressions test not supported", + "render-tests/regressions/mapbox-gl-js#3702": "regressions test not supported", + "render-tests/regressions/mapbox-gl-js#4617": "regressions test not supported", + "render-tests/regressions/mapbox-gl-js#5947": "regressions test not supported", + "render-tests/regressions/mapbox-gl-js#7708": "regressions test not supported", + "render-tests/regressions/mapbox-gl-native#8078": "regressions test not supported", + "render-tests/regressions/mapbox-gl-js#2762": "regressions test not supported", + "render-tests/regressions/mapbox-gl-js#3723": "regressions test not supported", + "render-tests/regressions/mapbox-gl-js#4647": "regressions test not supported", + "render-tests/regressions/mapbox-gl-js#5953": "regressions test not supported", + "render-tests/regressions/mapbox-gl-native#10849": "regressions test not supported", + "render-tests/regressions/mapbox-gl-native#8303": "regressions test not supported", + "render-tests/regressions/mapbox-gl-js#2769": "regressions test not supported", + "render-tests/regressions/mapbox-gl-js#3819": "regressions test not supported", + "render-tests/regressions/mapbox-gl-js#4651": "regressions test not supported", + "render-tests/regressions/mapbox-gl-js#5978": "regressions test not supported", + "render-tests/regressions/mapbox-gl-native#11451": "regressions test not supported", + "render-tests/regressions/mapbox-gl-native#8460": "regressions test not supported", + "render-tests/regressions/mapbox-gl-js#2787": "regressions test not supported", + "render-tests/regressions/mapbox-gl-js#3903": "regressions test not supported", + "render-tests/regressions/mapbox-gl-js#4860": "regressions test not supported", + "render-tests/regressions/mapbox-gl-js#5982": "regressions test not supported", + "render-tests/regressions/mapbox-gl-native#11729": "regressions test not supported", + "render-tests/regressions/mapbox-gl-native#8505": "regressions test not supported", + "render-tests/regressions/mapbox-gl-js#2846": "regressions test not supported", + "render-tests/regressions/mapbox-gl-js#3910": "regressions test not supported", + "render-tests/regressions/mapbox-gl-js#4928": "regressions test not supported", + "render-tests/regressions/mapbox-gl-js#6160": "regressions test not supported", + "render-tests/regressions/mapbox-gl-native#12812": "regressions test not supported", + "render-tests/regressions/mapbox-gl-native#8871": "regressions test not supported", + "render-tests/regressions/mapbox-gl-js#2929": "regressions test not supported", + "render-tests/regressions/mapbox-gl-js#3949": "regressions test not supported", + "render-tests/regressions/mapbox-gl-js#5370": "regressions test not supported", + "render-tests/regressions/mapbox-gl-js#6238": "regressions test not supported", + "render-tests/regressions/mapbox-gl-native#3292": "regressions test not supported", + "render-tests/regressions/mapbox-gl-native#8952": "regressions test not supported", + "render-tests/regressions/mapbox-gl-js#3010": "regressions test not supported", + "render-tests/regressions/mapbox-gl-js#4124": "regressions test not supported", + "render-tests/regressions/mapbox-gl-js#5466": "regressions test not supported", + "render-tests/regressions/mapbox-gl-js#6548": "regressions test not supported", + "render-tests/regressions/mapbox-gl-native#5648": "regressions test not supported", + "render-tests/regressions/mapbox-gl-native#9406": "regressions test not supported", + "render-tests/regressions/mapbox-gl-js#3107": "regressions test not supported", + "render-tests/regressions/mapbox-gl-js#4144": "regressions test not supported", + "render-tests/regressions/mapbox-gl-js#5496": "regressions test not supported", + "render-tests/regressions/mapbox-gl-js#6649": "regressions test not supported", + "render-tests/regressions/mapbox-gl-native#5701": "regressions test not supported", + "render-tests/regressions/mapbox-gl-native#9557": "regressions test not supported", + "render-tests/regressions/mapbox-gl-js#3320": "regressions test not supported", + "render-tests/regressions/mapbox-gl-js#4146": "regressions test not supported", + "render-tests/regressions/mapbox-gl-js#5544": "regressions test not supported", + "render-tests/regressions/mapbox-gl-js#6655": "regressions test not supported", + "render-tests/regressions/mapbox-gl-native#5754": "regressions test not supported", + "render-tests/regressions/mapbox-gl-native#9792": "regressions test not supported", + "render-tests/regressions/mapbox-gl-js#3365": "regressions test not supported", + "render-tests/regressions/mapbox-gl-js#4150": "regressions test not supported", + "render-tests/regressions/mapbox-gl-js#5546": "regressions test not supported", + "render-tests/regressions/mapbox-gl-js#6660": "regressions test not supported", + "render-tests/regressions/mapbox-gl-native#6063": "regressions test not supported", + "render-tests/regressions/mapbox-gl-native#9900": "regressions test not supported", + "render-tests/regressions/mapbox-gl-js#3394": "regressions test not supported", + "render-tests/regressions/mapbox-gl-js#4172": "regressions test not supported", + "render-tests/regressions/mapbox-gl-js#5576": "regressions test not supported", + "render-tests/regressions/mapbox-gl-js#6706": "regressions test not supported", + "render-tests/regressions/mapbox-gl-native#6233": "regressions test not supported", + "render-tests/regressions/mapbox-gl-native#9976": "regressions test not supported", + "render-tests/regressions/mapbox-gl-js#3426": "regressions test not supported", + "render-tests/regressions/mapbox-gl-js#4235": "regressions test not supported", + "render-tests/regressions/mapbox-gl-js#5599": "regressions test not supported", + "render-tests/regressions/mapbox-gl-js#6806": "regressions test not supported", + "render-tests/regressions/mapbox-gl-native#6820": "regressions test not supported", + "render-tests/regressions/mapbox-gl-native#9979": "regressions test not supported", + "render-tests/regressions/mapbox-gl-js#3548": "regressions test not supported", + "render-tests/regressions/mapbox-gl-js#4550": "regressions test not supported", + "render-tests/regressions/mapbox-gl-js#5631": "regressions test not supported", + "render-tests/regressions/mapbox-gl-js#6919": "regressions test not supported", + "render-tests/regressions/mapbox-gl-native#6903": "regressions test not supported", + "render-tests/regressions/mapbox-gl-shaders#37": "regressions test not supported", + "render-tests/regressions/mapbox-gl-js#3612": "regressions test not supported", + "render-tests/regressions/mapbox-gl-js#4551": "regressions test not supported", + "render-tests/regressions/mapbox-gl-js#5642": "regressions test not supported", + "render-tests/regressions/mapbox-gl-js#7032": "regressions test not supported", + "render-tests/regressions/mapbox-gl-native#7241": "regressions test not supported" +} diff --git a/platform/android/MapboxGLAndroidSDKRenderTest/config/supported-operations.json b/platform/android/MapboxGLAndroidSDKRenderTest/config/supported-operations.json new file mode 100644 index 0000000000..e7e39e2878 --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKRenderTest/config/supported-operations.json @@ -0,0 +1 @@ +{"setBearing": [[90]], "setZoom": [[1]], "wait": [[], [0]]} \ No newline at end of file diff --git a/platform/android/MapboxGLAndroidSDKRenderTest/config/supported-properties.json b/platform/android/MapboxGLAndroidSDKRenderTest/config/supported-properties.json new file mode 100644 index 0000000000..2f8fe0b162 --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKRenderTest/config/supported-properties.json @@ -0,0 +1 @@ +["width", "zoom", "center", "height", "description", "pixelRatio"] \ No newline at end of file diff --git a/platform/android/MapboxGLAndroidSDKRenderTest/package.json b/platform/android/MapboxGLAndroidSDKRenderTest/package.json new file mode 100644 index 0000000000..601dc70a5d --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKRenderTest/package.json @@ -0,0 +1,35 @@ +{ + "name": "@mapbox/mapbox-rendertest", + "version": "0.1.0", + "description": "Generates render tests for Mapbox GL Native", + "bin": "bin/mapbox-rendertest", + "repository": "https://github.com/mapbox/mapbox-gl-native", + "author": "Tobrun Van Nuland ", + "license": "ISC", + "dependencies": { + "@mapbox/flow-remove-types": "^1.3.0-await.upstream.2", + "array.prototype.flatmap": "^1.2.1", + "ejs": "2.6.1", + "es": "^0.7.3", + "esm": "^3.0.9", + "fs-extra": "^5.0.0", + "parsimmon": "^1.7.2", + "yargs": "^11.0.0" + }, + "devDependencies": { + "babel-eslint": "^8.2.2", + "eslint": "^4.19.1", + "eslint-plugin-flowtype": "^2.46.1", + "flow-bin": "^0.71.0", + "npm-run-all": "^4.1.2" + }, + "scripts": { + "gen": "node -r esm scripts/main.js", + "clean": "rm -rf src/androidTest/java/com/mapbox/mapboxsdk/test/render/* && rm -rf src/main/assets/* && rm -rf build/* && adb shell rm -rf /sdcard/mapbox/render/*", + "build": "cd .. && ./gradlew -Pmapbox.abis=arm64-v8a :MapboxGLAndroidSDKRenderTest:assembleDebug :MapboxGLAndroidSDKRenderTest:assembleAndroidTest", + "test": "cd .. && ./gradlew -Pmapbox.abis=arm64-v8a :MapboxGLAndroidSDKRenderTest:connectedAndroidTest", + "pull": "adb pull /sdcard/mapbox/render/ build/outputs/", + "pixelmatch": "node scripts/pixelmatch.js" + }, + "main": "index.js" +} diff --git a/platform/android/MapboxGLAndroidSDKRenderTest/scripts/definitions/globals.js b/platform/android/MapboxGLAndroidSDKRenderTest/scripts/definitions/globals.js new file mode 100644 index 0000000000..6b215ea84d --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKRenderTest/scripts/definitions/globals.js @@ -0,0 +1,37 @@ +import fs from 'fs'; +import path from 'path'; + +// Write out a list of files that this script is modifying so that we can check +var files = []; +process.on('exit', function() { + const list = path.join(path.dirname(process.argv[1]), path.basename(process.argv[1], '.js') + '.list'); + fs.writeFileSync(list, files.join('\n')); +}); + +export function writeIfModified(filename, newContent) { + ensureDirectoryExistence(filename); + files.push(filename); + try { + const oldContent = fs.readFileSync(filename, 'utf8'); + if (oldContent == newContent) { + console.warn(`* Skipping file '${filename}' because it is up-to-date`); + return; + } + } catch(err) { + console.log(err); + } + + if (['0', 'false'].indexOf(process.env.DRY_RUN || '0') !== -1) { + fs.writeFileSync(filename, newContent); + } + console.warn(`* Updating outdated file '${filename}'`); +} + +function ensureDirectoryExistence(filePath) { + var dirname = path.dirname(filePath); + if (fs.existsSync(dirname)) { + return true; + } + ensureDirectoryExistence(dirname); + fs.mkdirSync(dirname); +} \ No newline at end of file diff --git a/platform/android/MapboxGLAndroidSDKRenderTest/scripts/generators.js b/platform/android/MapboxGLAndroidSDKRenderTest/scripts/generators.js new file mode 100644 index 0000000000..f66aa2e332 --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKRenderTest/scripts/generators.js @@ -0,0 +1,17 @@ +import java from './generators/java'; + +export function generators(type) { + let fs = require('fs'); + + console.log('Generating tests for '+ type + ':'); + var api = { + 'operations' : JSON.parse(fs.readFileSync('config/supported-operations.json', 'utf8')), + 'properties' : JSON.parse(fs.readFileSync('config/supported-properties.json', 'utf8')), + 'java-ignores' : JSON.parse(fs.readFileSync('config/ignores.json', 'utf8')), + 'node-ignores' : JSON.parse(fs.readFileSync('../../node/test/ignores.json', 'utf8')) + }; + if (type === 'android') { + java(api, type); + } + console.log(''); +} diff --git a/platform/android/MapboxGLAndroidSDKRenderTest/scripts/generators/java.js b/platform/android/MapboxGLAndroidSDKRenderTest/scripts/generators/java.js new file mode 100644 index 0000000000..285bdbbee8 --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKRenderTest/scripts/generators/java.js @@ -0,0 +1,126 @@ +import { writeIfModified } from '../definitions/globals.js'; + +let fs = require('fs'); +let ejs = require('ejs'); +let path = require('path'); + +var totalCount = 0; +var javaIgnoreCount = 0; +var nodeIgnoreCount = 0; +var relativePath = ''; +var pathToFile = ''; + +export default function(api, type) { + // Copy gl-js integration test folder to android assets + copyFolderSync('../../../mapbox-gl-js/test/integration/', 'src/main/assets/', 'node_modules'); + + // Walk through render-test directory and generate tests + recursiveDirectoryWalk('../../../mapbox-gl-js/test/integration/render-tests/', type, api['java-ignores'], api['node-ignores']); + + // Print code gen result output + console.log('\nFinished generating render tests for ' + type + ': \ngenerated: ' + totalCount + '\njava-ignored: ' + javaIgnoreCount+ '\nnode-ignored: ' + nodeIgnoreCount); + return {}; +} + +function recursiveDirectoryWalk(dir, type, javaIgnores, nodeIgnores) { + let testSubDir = "test/integration/render-tests/"; + const files = fs.readdirSync(dir); + for (const file of files) { + pathToFile = path.join(dir, file); + const isDirectory = fs.statSync(pathToFile).isDirectory(); + if (isDirectory) { + recursiveDirectoryWalk(pathToFile, type, javaIgnores, nodeIgnores); + } else if (file.endsWith('style.json')) { + relativePath = pathToFile.split(testSubDir)[1].slice(0, -11); + let testPath = 'render-tests/' + relativePath; + if (javaIgnores.hasOwnProperty(testPath)) { + // This test is ignored due to the ignores files for android + javaIgnoreCount++; + continue; + } + + if (nodeIgnores.hasOwnProperty(testPath)) { + // This test is ignored due to the ignores files for node + nodeIgnoreCount++; + continue; + } + + // TODO add ignore for unsupported operations and properties + + totalCount++; + + generateTestFiles(dir); + } + } +} + +function generateTestFiles(dir) { + // read style definition, optimise test metadata + const style_json = JSON.parse(fs.readFileSync(pathToFile, 'utf8')); + const test_metadata = createTestMetadata(style_json, pathToFile, relativePath); + + // generate test + const template = ejs.compile(fs.readFileSync('templates/render-test.java.ejs', 'utf8'), {strict: true}); + writeIfModified('src/androidTest/java/com/mapbox/mapboxsdk/test/render/' + test_metadata['test']['package'] + '/'+ test_metadata['test']['name'] + '.java', template(test_metadata)); +} + +function createTestMetadata(style_json) { + var test_metadata = style_json['metadata']; + + // ensure metadata availability + if (!test_metadata) { + test_metadata = {}; + } + if (!test_metadata['test']) { + test_metadata['test'] = {}; + } + + // optimize test data for java language conventions + const pathElements = santizePathForJavaConventions(pathToFile).split('/'); + const javaPath = pathElements[pathElements.length - 3].replace(/-/g,'_'); + test_metadata['test']['package'] = javaPath; + test_metadata['test']['asset_path'] = 'render-tests/' + relativePath; + test_metadata['test']['result'] = relativePath; + var testName = camelize(relativePath.split("/")[1]).replace("-",""); + test_metadata['test']['name'] = testName; + return test_metadata; +} + +function copyFolderSync(from, to, ignoreDir) { + try { + ensureDirSync(to) + } catch (err) { + } + fs.readdirSync(from).forEach(element => { + if (fs.lstatSync(path.join(from, element)).isFile()) { + fs.copyFileSync(path.join(from, element), path.join(to, element)); + } else { + if (!from.endsWith(ignoreDir)) { + copyFolderSync(path.join(from, element), path.join(to, element), ignoreDir); + } + } + }); +} + +function ensureDirSync (dirpath) { + try { + fs.mkdirSync(dirpath, { recursive: true }) + } catch (err) { + if (err.code !== 'EEXIST') throw err + } +} + +global.camelize = function (str) { + return str.replace(/(?:^|-)(.)/g, function (_, x) { + return x.toUpperCase(); + }); +} + +global.santizePathForJavaConventions = function (str) { + return str.replace(/\/$/, '') + .replace('default','defaux') + .replace('#',"_") + .replace('@','at') + .replace('false', 'faux'); +} + diff --git a/platform/android/MapboxGLAndroidSDKRenderTest/scripts/index.js b/platform/android/MapboxGLAndroidSDKRenderTest/scripts/index.js new file mode 100644 index 0000000000..e17577982e --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKRenderTest/scripts/index.js @@ -0,0 +1,2 @@ +require = require("esm")(module) +module.exports = require("./src/main.js)") \ No newline at end of file diff --git a/platform/android/MapboxGLAndroidSDKRenderTest/scripts/main.js b/platform/android/MapboxGLAndroidSDKRenderTest/scripts/main.js new file mode 100644 index 0000000000..293a5305a9 --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKRenderTest/scripts/main.js @@ -0,0 +1,18 @@ +import yargs from 'yargs'; +import { generators } from './generators'; + +function parser(language) { + generators(language) +} + +function builder(yargs) { + return yargs.boolean('list'); +} + +yargs + .command('[android]', 'generate Android render tests', builder, parser('android')) + .parse(); + + + + diff --git a/platform/android/MapboxGLAndroidSDKRenderTest/scripts/pixelmatch.js b/platform/android/MapboxGLAndroidSDKRenderTest/scripts/pixelmatch.js new file mode 100644 index 0000000000..21758b99b2 --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKRenderTest/scripts/pixelmatch.js @@ -0,0 +1,18 @@ +// TODO: support multiple test cases +var testCase = 'background-color/function' + +var fs = require('fs'), + PNG = require('pngjs').PNG, + pixelmatch = require('pixelmatch'); + +var img1 = fs.createReadStream('build/outputs/' + testCase + '/expected.png').pipe(new PNG()).on('parsed', doneReading), + img2 = fs.createReadStream('build/outputs/' + testCase + '/actual.png').pipe(new PNG()).on('parsed', doneReading), + filesRead = 0; + +function doneReading() { + if (++filesRead < 2) return; + var diff = new PNG({width: img1.width, height: img1.height}); + var numberMismatchPixels = pixelmatch(img1.data, img2.data, diff.data, img1.width, img1.height, {threshold: 0.1}); + console.log("PixelMatching: " + testCase + ": " + numberMismatchPixels + " mismatched pixels."); + diff.pack().pipe(fs.createWriteStream('build/outputs/' + testCase + '/diff.png')); +} \ No newline at end of file diff --git a/platform/android/MapboxGLAndroidSDKRenderTest/src/main/AndroidManifest.xml b/platform/android/MapboxGLAndroidSDKRenderTest/src/main/AndroidManifest.xml new file mode 100644 index 0000000000..ecc2527049 --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKRenderTest/src/main/AndroidManifest.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/platform/android/MapboxGLAndroidSDKRenderTest/src/main/java/com/mapbox/mapboxsdk/test/render/FileUtils.java b/platform/android/MapboxGLAndroidSDKRenderTest/src/main/java/com/mapbox/mapboxsdk/test/render/FileUtils.java new file mode 100644 index 0000000000..5792a84472 --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKRenderTest/src/main/java/com/mapbox/mapboxsdk/test/render/FileUtils.java @@ -0,0 +1,94 @@ +package com.mapbox.mapboxsdk.test.render; + +import android.content.res.AssetManager; +import android.graphics.Bitmap; +import android.os.Environment; +import android.util.Log; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; + +public class FileUtils { + + public static File createTestResultRootFolder() { + File testResultDir = new File(getRoot()); + if (testResultDir.exists()) { + // cleanup old files + deleteRecursive(testResultDir); + } + + if (!testResultDir.mkdirs()) { + throw new RuntimeException("can't create root test directory"); + } + return testResultDir; + } + + private static String getRoot(){ + return Environment.getExternalStorageDirectory() + + File.separator + "mapbox" + File.separator + "render"; + } + + public static void deleteRecursive(File fileOrDirectory) { + if (fileOrDirectory.isDirectory()) { + File[] files = fileOrDirectory.listFiles(); + if (files != null) { + for (File file : files) { + deleteRecursive(file); + } + } + } + + if (!fileOrDirectory.delete()) { + Log.e("TAG", "can't delete directory"); + } + } + + public static String createTestDirectory(String testName) { + File testDir = new File(getRoot() + File.separator + testName); + if (!testDir.exists()) { + if (!testDir.mkdirs()) { + throw new RuntimeException("can't create sub directory for " + testName); + } + } + return testDir.getAbsolutePath(); + } + + public static void writeTestResultToDisk(String testPath, Bitmap testResult) { + String filePath = testPath + "/actual.png"; + try (FileOutputStream out = new FileOutputStream(filePath)) { + testResult.compress(Bitmap.CompressFormat.PNG, 100, out); + } catch (IOException exception) { + Log.e("TAG", "exception", exception); + } + } + + public static boolean copyAsset(AssetManager assetManager, + String fromAssetPath, String toPath) { + InputStream in; + OutputStream out; + try { + in = assetManager.open(fromAssetPath); + new File(toPath).createNewFile(); + out = new FileOutputStream(toPath); + copyFile(in, out); + in.close(); + out.flush(); + out.close(); + return true; + } catch(Exception e) { + e.printStackTrace(); + return false; + } + } + + private static void copyFile(InputStream in, OutputStream out) throws IOException { + byte[] buffer = new byte[1024]; + int read; + while((read = in.read(buffer)) != -1){ + out.write(buffer, 0, read); + } + } +} \ No newline at end of file diff --git a/platform/android/MapboxGLAndroidSDKRenderTest/src/main/java/com/mapbox/mapboxsdk/test/render/MainActivity.java b/platform/android/MapboxGLAndroidSDKRenderTest/src/main/java/com/mapbox/mapboxsdk/test/render/MainActivity.java new file mode 100644 index 0000000000..dbb453f935 --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKRenderTest/src/main/java/com/mapbox/mapboxsdk/test/render/MainActivity.java @@ -0,0 +1,13 @@ +package com.mapbox.mapboxsdk.test.render; + +import android.support.v7.app.AppCompatActivity; +import android.os.Bundle; + +public class MainActivity extends AppCompatActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + } +} diff --git a/platform/android/MapboxGLAndroidSDKRenderTest/src/main/java/com/mapbox/mapboxsdk/test/render/RenderTestApplication.java b/platform/android/MapboxGLAndroidSDKRenderTest/src/main/java/com/mapbox/mapboxsdk/test/render/RenderTestApplication.java new file mode 100644 index 0000000000..54922ed594 --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKRenderTest/src/main/java/com/mapbox/mapboxsdk/test/render/RenderTestApplication.java @@ -0,0 +1,14 @@ +package com.mapbox.mapboxsdk.test.render; + +import android.app.Application; +import com.mapbox.mapboxsdk.Mapbox; + +public class RenderTestApplication extends Application { + + @Override + public void onCreate() { + super.onCreate(); + FileUtils.createTestResultRootFolder(); + Mapbox.getInstance(getApplicationContext(), getResources().getString(R.string.mapbox_access_token)); + } +} \ No newline at end of file diff --git a/platform/android/MapboxGLAndroidSDKRenderTest/src/main/res/drawable-v24/ic_launcher_foreground.xml b/platform/android/MapboxGLAndroidSDKRenderTest/src/main/res/drawable-v24/ic_launcher_foreground.xml new file mode 100644 index 0000000000..6348baae39 --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKRenderTest/src/main/res/drawable-v24/ic_launcher_foreground.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + diff --git a/platform/android/MapboxGLAndroidSDKRenderTest/src/main/res/drawable/ic_launcher_background.xml b/platform/android/MapboxGLAndroidSDKRenderTest/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 0000000000..a0ad202f9e --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKRenderTest/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/platform/android/MapboxGLAndroidSDKRenderTest/src/main/res/layout/activity_main.xml b/platform/android/MapboxGLAndroidSDKRenderTest/src/main/res/layout/activity_main.xml new file mode 100644 index 0000000000..af26c4c323 --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKRenderTest/src/main/res/layout/activity_main.xml @@ -0,0 +1,11 @@ + + + + + \ No newline at end of file diff --git a/platform/android/MapboxGLAndroidSDKRenderTest/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/platform/android/MapboxGLAndroidSDKRenderTest/src/main/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 0000000000..bbd3e02123 --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKRenderTest/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/platform/android/MapboxGLAndroidSDKRenderTest/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/platform/android/MapboxGLAndroidSDKRenderTest/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 0000000000..bbd3e02123 --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKRenderTest/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/platform/android/MapboxGLAndroidSDKRenderTest/src/main/res/mipmap-hdpi/ic_launcher.png b/platform/android/MapboxGLAndroidSDKRenderTest/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000..898f3ed59a Binary files /dev/null and b/platform/android/MapboxGLAndroidSDKRenderTest/src/main/res/mipmap-hdpi/ic_launcher.png differ diff --git a/platform/android/MapboxGLAndroidSDKRenderTest/src/main/res/mipmap-hdpi/ic_launcher_round.png b/platform/android/MapboxGLAndroidSDKRenderTest/src/main/res/mipmap-hdpi/ic_launcher_round.png new file mode 100644 index 0000000000..dffca3601e Binary files /dev/null and b/platform/android/MapboxGLAndroidSDKRenderTest/src/main/res/mipmap-hdpi/ic_launcher_round.png differ diff --git a/platform/android/MapboxGLAndroidSDKRenderTest/src/main/res/mipmap-mdpi/ic_launcher.png b/platform/android/MapboxGLAndroidSDKRenderTest/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000..64ba76f75e Binary files /dev/null and b/platform/android/MapboxGLAndroidSDKRenderTest/src/main/res/mipmap-mdpi/ic_launcher.png differ diff --git a/platform/android/MapboxGLAndroidSDKRenderTest/src/main/res/mipmap-mdpi/ic_launcher_round.png b/platform/android/MapboxGLAndroidSDKRenderTest/src/main/res/mipmap-mdpi/ic_launcher_round.png new file mode 100644 index 0000000000..dae5e08234 Binary files /dev/null and b/platform/android/MapboxGLAndroidSDKRenderTest/src/main/res/mipmap-mdpi/ic_launcher_round.png differ diff --git a/platform/android/MapboxGLAndroidSDKRenderTest/src/main/res/mipmap-xhdpi/ic_launcher.png b/platform/android/MapboxGLAndroidSDKRenderTest/src/main/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000000..e5ed46597e Binary files /dev/null and b/platform/android/MapboxGLAndroidSDKRenderTest/src/main/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/platform/android/MapboxGLAndroidSDKRenderTest/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/platform/android/MapboxGLAndroidSDKRenderTest/src/main/res/mipmap-xhdpi/ic_launcher_round.png new file mode 100644 index 0000000000..14ed0af350 Binary files /dev/null and b/platform/android/MapboxGLAndroidSDKRenderTest/src/main/res/mipmap-xhdpi/ic_launcher_round.png differ diff --git a/platform/android/MapboxGLAndroidSDKRenderTest/src/main/res/mipmap-xxhdpi/ic_launcher.png b/platform/android/MapboxGLAndroidSDKRenderTest/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000..b0907cac3b Binary files /dev/null and b/platform/android/MapboxGLAndroidSDKRenderTest/src/main/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/platform/android/MapboxGLAndroidSDKRenderTest/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/platform/android/MapboxGLAndroidSDKRenderTest/src/main/res/mipmap-xxhdpi/ic_launcher_round.png new file mode 100644 index 0000000000..d8ae031549 Binary files /dev/null and b/platform/android/MapboxGLAndroidSDKRenderTest/src/main/res/mipmap-xxhdpi/ic_launcher_round.png differ diff --git a/platform/android/MapboxGLAndroidSDKRenderTest/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/platform/android/MapboxGLAndroidSDKRenderTest/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000..2c18de9e66 Binary files /dev/null and b/platform/android/MapboxGLAndroidSDKRenderTest/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/platform/android/MapboxGLAndroidSDKRenderTest/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/platform/android/MapboxGLAndroidSDKRenderTest/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png new file mode 100644 index 0000000000..beed3cdd2c Binary files /dev/null and b/platform/android/MapboxGLAndroidSDKRenderTest/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png differ diff --git a/platform/android/MapboxGLAndroidSDKRenderTest/src/main/res/values/colors.xml b/platform/android/MapboxGLAndroidSDKRenderTest/src/main/res/values/colors.xml new file mode 100644 index 0000000000..69b22338c6 --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKRenderTest/src/main/res/values/colors.xml @@ -0,0 +1,6 @@ + + + #008577 + #00574B + #D81B60 + diff --git a/platform/android/MapboxGLAndroidSDKRenderTest/src/main/res/values/developer-config.xml b/platform/android/MapboxGLAndroidSDKRenderTest/src/main/res/values/developer-config.xml new file mode 100644 index 0000000000..dc9d8564f1 --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKRenderTest/src/main/res/values/developer-config.xml @@ -0,0 +1,4 @@ + + + @null + \ No newline at end of file diff --git a/platform/android/MapboxGLAndroidSDKRenderTest/src/main/res/values/strings.xml b/platform/android/MapboxGLAndroidSDKRenderTest/src/main/res/values/strings.xml new file mode 100644 index 0000000000..1c9a16d691 --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKRenderTest/src/main/res/values/strings.xml @@ -0,0 +1,3 @@ + + RenderTest + diff --git a/platform/android/MapboxGLAndroidSDKRenderTest/src/main/res/values/styles.xml b/platform/android/MapboxGLAndroidSDKRenderTest/src/main/res/values/styles.xml new file mode 100644 index 0000000000..5885930df6 --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKRenderTest/src/main/res/values/styles.xml @@ -0,0 +1,11 @@ + + + + + + diff --git a/platform/android/MapboxGLAndroidSDKRenderTest/templates/render-test.java.ejs b/platform/android/MapboxGLAndroidSDKRenderTest/templates/render-test.java.ejs new file mode 100644 index 0000000000..21f2b9a72e --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKRenderTest/templates/render-test.java.ejs @@ -0,0 +1,135 @@ +<% + const data = locals.test; +-%> +// This file is generated. +package com.mapbox.mapboxsdk.test.render.<%- data['package'] %>; + +import android.graphics.Bitmap; +import android.support.test.rule.ActivityTestRule; +import android.view.ViewGroup; +import android.view.Gravity; +import android.widget.FrameLayout; +import com.mapbox.mapboxsdk.camera.CameraPosition; +import com.mapbox.mapboxsdk.geometry.LatLng; +import com.mapbox.mapboxsdk.maps.MapView; +import com.mapbox.mapboxsdk.maps.MapboxMap; +import com.mapbox.mapboxsdk.maps.MapboxMapOptions; +import com.mapbox.mapboxsdk.maps.Style; +import com.mapbox.mapboxsdk.test.render.FileUtils; +import com.mapbox.mapboxsdk.test.render.MainActivity; +import com.mapbox.mapboxsdk.test.render.R; +import org.junit.Rule; +import org.junit.Test; + +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; + +/** + * Render test <%- data['description'] %> + */ +public class <%- data['name'] %> { + + @Rule + public ActivityTestRule rule = new ActivityTestRule<>(MainActivity.class); + + private MapView mapView; + private MapboxMap mapboxMap; + private final CountDownLatch latch = new CountDownLatch(1); + + @Test + public void testRender() throws Throwable { + rule.runOnUiThread(() -> { + ViewGroup container = rule.getActivity().findViewById(R.id.container); + MapboxMapOptions mapboxMapOptions = new MapboxMapOptions(); + mapboxMapOptions.logoEnabled(false); + mapboxMapOptions.compassEnabled(false); + mapboxMapOptions.attributionEnabled(false); +<% if (data['pixelratio'] != null) { -%> + float pixelRatio = <%- data['pixelratio'] %>; + mapboxMapOptions.pixelRatio(pixelRatio); +<% } -%> + + mapView = new MapView(container.getContext(), mapboxMapOptions); + mapView.onCreate(null); +<% if (data['width'] != null) { -%> + int width = <%- data['width'] %>; +<% } else {-%> + int width = 512; +<% } -%> +<% if (data['height'] != null) { -%> + int height = <%- data['height'] %>; +<% } else {-%> + int height = 512; +<% } -%> + mapView.setLayoutParams(new FrameLayout.LayoutParams(width, height, Gravity.CENTER)); + container.addView(mapView); + +<% if (data['zoom'] != null) { -%> + double zoom = <%- data['zoom'] %>; +<% } else {-%> + double zoom = 0; +<% } -%> +<% if (data['tilt'] != null) { -%> + double tilt = <%- data['tilt'] %>; +<% } else {-%> + double tilt = 0; +<% } -%> +<% if (data['bearing'] != null) { -%> + double bearing = <%- data['bearing'] %>; +<% } else {-%> + double bearing = 0; +<% } -%> +<% if (data['latitude'] != null) { -%> + double latitude = <%- data['latitude'] %>; +<% } else {-%> + double latitude = 0; +<% } -%> +<% if (data['longitude'] != null) { -%> + double longitude = <%- data['longitude'] %>; +<% } else {-%> + double longitude = 0; +<% } -%> + final CameraPosition.Builder cameraBuilder = new CameraPosition.Builder(); + cameraBuilder.bearing(bearing); + cameraBuilder.target(new LatLng(latitude, longitude)); + cameraBuilder.tilt(tilt); + cameraBuilder.zoom(zoom); + + String stylePath = "asset://<%- data['asset_path'] %>/style.json"; + mapView.addOnDidFinishRenderingMapListener(fully -> { + if (fully) { + mapboxMap.snapshot(this::saveResults); + } + }); + mapView.getMapAsync(mapboxMap -> { + this.mapboxMap = mapboxMap; + mapboxMap.setCameraPosition(cameraBuilder.build()); + mapboxMap.setStyle(new Style.Builder().fromUrl(stylePath), style -> { + // operation + }); + }); + + mapView.onStart(); + mapView.onResume(); + + }); + if (!latch.await(5000, TimeUnit.MILLISECONDS)) { + throw new RuntimeException(); + } + } + + private void saveResults(Bitmap snapshot) { + String path = FileUtils.createTestDirectory("<%- data['result'] %>"); + FileUtils.writeTestResultToDisk(path, snapshot); + FileUtils.copyAsset(rule.getActivity().getAssets(), "<%- data['asset_path'] %>/expected.png",path +"/expected.png"); + FileUtils.copyAsset(rule.getActivity().getAssets(), "<%- data['asset_path'] %>/style.json",path +"/style.json"); + finishTest(); + } + + private void finishTest() { + mapView.onPause(); + mapView.onStop(); + mapView.onDestroy(); + latch.countDown(); + } +} \ No newline at end of file diff --git a/platform/android/MapboxGLAndroidSDKRenderTest/yarn.lock b/platform/android/MapboxGLAndroidSDKRenderTest/yarn.lock new file mode 100644 index 0000000000..c838b1411f --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKRenderTest/yarn.lock @@ -0,0 +1,1633 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/code-frame@7.0.0-beta.44": + version "7.0.0-beta.44" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.44.tgz#2a02643368de80916162be70865c97774f3adbd9" + integrity sha512-cuAuTTIQ9RqcFRJ/Y8PvTh+paepNcaGxwQwjIDRWPXmzzyAeCO4KqS9ikMvq0MCbRk6GlYKwfzStrcP3/jSL8g== + dependencies: + "@babel/highlight" "7.0.0-beta.44" + +"@babel/generator@7.0.0-beta.44": + version "7.0.0-beta.44" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.0.0-beta.44.tgz#c7e67b9b5284afcf69b309b50d7d37f3e5033d42" + integrity sha512-5xVb7hlhjGcdkKpMXgicAVgx8syK5VJz193k0i/0sLP6DzE6lRrU1K3B/rFefgdo9LPGMAOOOAWW4jycj07ShQ== + dependencies: + "@babel/types" "7.0.0-beta.44" + jsesc "^2.5.1" + lodash "^4.2.0" + source-map "^0.5.0" + trim-right "^1.0.1" + +"@babel/helper-function-name@7.0.0-beta.44": + version "7.0.0-beta.44" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.44.tgz#e18552aaae2231100a6e485e03854bc3532d44dd" + integrity sha512-MHRG2qZMKMFaBavX0LWpfZ2e+hLloT++N7rfM3DYOMUOGCD8cVjqZpwiL8a0bOX3IYcQev1ruciT0gdFFRTxzg== + dependencies: + "@babel/helper-get-function-arity" "7.0.0-beta.44" + "@babel/template" "7.0.0-beta.44" + "@babel/types" "7.0.0-beta.44" + +"@babel/helper-get-function-arity@7.0.0-beta.44": + version "7.0.0-beta.44" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.44.tgz#d03ca6dd2b9f7b0b1e6b32c56c72836140db3a15" + integrity sha512-w0YjWVwrM2HwP6/H3sEgrSQdkCaxppqFeJtAnB23pRiJB5E/O9Yp7JAAeWBl+gGEgmBFinnTyOv2RN7rcSmMiw== + dependencies: + "@babel/types" "7.0.0-beta.44" + +"@babel/helper-split-export-declaration@7.0.0-beta.44": + version "7.0.0-beta.44" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0-beta.44.tgz#c0b351735e0fbcb3822c8ad8db4e583b05ebd9dc" + integrity sha512-aQ7QowtkgKKzPGf0j6u77kBMdUFVBKNHw2p/3HX/POt5/oz8ec5cs0GwlgM8Hz7ui5EwJnzyfRmkNF1Nx1N7aA== + dependencies: + "@babel/types" "7.0.0-beta.44" + +"@babel/highlight@7.0.0-beta.44": + version "7.0.0-beta.44" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0-beta.44.tgz#18c94ce543916a80553edcdcf681890b200747d5" + integrity sha512-Il19yJvy7vMFm8AVAh6OZzaFoAd0hbkeMZiX3P5HGD+z7dyI7RzndHB0dg6Urh/VAFfHtpOIzDUSxmY6coyZWQ== + dependencies: + chalk "^2.0.0" + esutils "^2.0.2" + js-tokens "^3.0.0" + +"@babel/runtime-corejs2@^7.3.1": + version "7.4.3" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs2/-/runtime-corejs2-7.4.3.tgz#40271fc260e570fb356da984e42e5990bd275860" + integrity sha512-anTLTF7IK8Hd5f73zpPzt875I27UaaTWARJlfMGgnmQhvEe1uNHQRKBUbXL0Gc0VEYiVzsHsTPso5XdK8NGvFg== + dependencies: + core-js "^2.6.5" + regenerator-runtime "^0.13.2" + +"@babel/template@7.0.0-beta.44": + version "7.0.0-beta.44" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.0.0-beta.44.tgz#f8832f4fdcee5d59bf515e595fc5106c529b394f" + integrity sha512-w750Sloq0UNifLx1rUqwfbnC6uSUk0mfwwgGRfdLiaUzfAOiH0tHJE6ILQIUi3KYkjiCDTskoIsnfqZvWLBDng== + dependencies: + "@babel/code-frame" "7.0.0-beta.44" + "@babel/types" "7.0.0-beta.44" + babylon "7.0.0-beta.44" + lodash "^4.2.0" + +"@babel/traverse@7.0.0-beta.44": + version "7.0.0-beta.44" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.0.0-beta.44.tgz#a970a2c45477ad18017e2e465a0606feee0d2966" + integrity sha512-UHuDz8ukQkJCDASKHf+oDt3FVUzFd+QYfuBIsiNu/4+/ix6pP/C+uQZJ6K1oEfbCMv/IKWbgDEh7fcsnIE5AtA== + dependencies: + "@babel/code-frame" "7.0.0-beta.44" + "@babel/generator" "7.0.0-beta.44" + "@babel/helper-function-name" "7.0.0-beta.44" + "@babel/helper-split-export-declaration" "7.0.0-beta.44" + "@babel/types" "7.0.0-beta.44" + babylon "7.0.0-beta.44" + debug "^3.1.0" + globals "^11.1.0" + invariant "^2.2.0" + lodash "^4.2.0" + +"@babel/types@7.0.0-beta.44": + version "7.0.0-beta.44" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0-beta.44.tgz#6b1b164591f77dec0a0342aca995f2d046b3a757" + integrity sha512-5eTV4WRmqbaFM3v9gHAIljEQJU4Ssc6fxL61JN+Oe2ga/BwyjzjamwkCVVAQjHGuAX8i0BWo42dshL8eO5KfLQ== + dependencies: + esutils "^2.0.2" + lodash "^4.2.0" + to-fast-properties "^2.0.0" + +"@mapbox/flow-remove-types@^1.3.0-await.upstream.2": + version "1.3.0-await.upstream.2" + resolved "https://registry.yarnpkg.com/@mapbox/flow-remove-types/-/flow-remove-types-1.3.0-await.upstream.2.tgz#bb8613e5cfd3f69d764658c5084d7f5d501097a2" + integrity sha512-OYVWXwkluP+9Jz2uenNSeum7U2Hp6RncPAS8iz3qnJ37kE/acae5dD1207BFqWsJ2JsBqULG8g2wB+hUQzPeYg== + dependencies: + babylon "^7.0.0-beta.41" + node-modules-regexp "^1.0.0" + pirates "^3.0.2" + vlq "^0.2.1" + +acorn-jsx@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" + integrity sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s= + dependencies: + acorn "^3.0.4" + +acorn@^3.0.4: + version "3.3.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" + integrity sha1-ReN/s56No/JbruP/U2niu18iAXo= + +acorn@^5.5.0: + version "5.7.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279" + integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw== + +ajv-keywords@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762" + integrity sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I= + +ajv@^5.2.3, ajv@^5.3.0: + version "5.5.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" + integrity sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU= + dependencies: + co "^4.6.0" + fast-deep-equal "^1.0.0" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.3.0" + +ansi-escapes@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" + integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +array-filter@~0.0.0: + version "0.0.1" + resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec" + integrity sha1-fajPLiZijtcygDWB/SH2fKzS7uw= + +array-map@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662" + integrity sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI= + +array-reduce@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b" + integrity sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys= + +array.prototype.flatmap@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.2.1.tgz#3103cd4826ef90019c9b0a4839b2535fa6faf4e9" + integrity sha512-i18e2APdsiezkcqDyZor78Pbfjfds3S94dG6dgIV2ZASJaUf1N0dz2tGdrmwrmlZuNUgxH+wz6Z0zYVH2c5xzQ== + dependencies: + define-properties "^1.1.2" + es-abstract "^1.10.0" + function-bind "^1.1.1" + +babel-code-frame@^6.22.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" + integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= + dependencies: + chalk "^1.1.3" + esutils "^2.0.2" + js-tokens "^3.0.2" + +babel-eslint@^8.2.2: + version "8.2.6" + resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-8.2.6.tgz#6270d0c73205628067c0f7ae1693a9e797acefd9" + integrity sha512-aCdHjhzcILdP8c9lej7hvXKvQieyRt20SF102SIGyY4cUIiw6UaAtK4j2o3dXX74jEmy0TJ0CEhv4fTIM3SzcA== + dependencies: + "@babel/code-frame" "7.0.0-beta.44" + "@babel/traverse" "7.0.0-beta.44" + "@babel/types" "7.0.0-beta.44" + babylon "7.0.0-beta.44" + eslint-scope "3.7.1" + eslint-visitor-keys "^1.0.0" + +babylon@7.0.0-beta.44: + version "7.0.0-beta.44" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.44.tgz#89159e15e6e30c5096e22d738d8c0af8a0e8ca1d" + integrity sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g== + +babylon@^7.0.0-beta.41: + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.47.tgz#6d1fa44f0abec41ab7c780481e62fd9aafbdea80" + integrity sha512-+rq2cr4GDhtToEzKFD6KZZMDBXhjFAr9JjPw9pAppZACeEWqNM294j+NdBzkSHYXwzzBmVjZ3nEVJlOhbR2gOQ== + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + +caller-path@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" + integrity sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8= + dependencies: + callsites "^0.2.0" + +callsites@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" + integrity sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo= + +camelcase@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" + integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= + +chalk@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= + dependencies: + 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" + +chalk@^2.0.0, chalk@^2.1.0, chalk@^2.4.1: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chardet@^0.4.0: + version "0.4.2" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" + integrity sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I= + +circular-json@^0.3.1: + version "0.3.3" + resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" + integrity sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A== + +cli-cursor@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" + integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= + dependencies: + restore-cursor "^2.0.0" + +cli-width@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" + integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= + +cliui@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" + integrity sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ== + dependencies: + string-width "^2.1.1" + strip-ansi "^4.0.0" + wrap-ansi "^2.0.0" + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +concat-stream@^1.6.0: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +core-js@^2.6.5: + version "2.6.5" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.5.tgz#44bc8d249e7fb2ff5d00e0341a7ffb94fbf67895" + integrity sha512-klh/kDpwX8hryYL14M9w/xei6vrv6sE8gTHDG7/T/+SEovB/G4ejwcfE/CBzO6Edsu+OETZMZ3wcX/EjUkrl5A== + +core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +cross-spawn@^5.0.1, cross-spawn@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= + dependencies: + lru-cache "^4.0.1" + shebang-command "^1.2.0" + which "^1.2.9" + +cross-spawn@^6.0.5: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +debug@^3.1.0: + version "3.2.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" + integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== + dependencies: + ms "^2.1.1" + +decamelize@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + +deep-is@~0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= + +define-properties@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + dependencies: + object-keys "^1.0.12" + +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== + dependencies: + esutils "^2.0.2" + +ejs@2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.6.1.tgz#498ec0d495655abc6f23cd61868d926464071aa0" + integrity sha512-0xy4A/twfrRCnkhfk8ErDi5DqdAsAqeGxht4xkCUrsvhhbQNs7E+4jV0CN7+NKIY0aHE72+XvqtBIXzD31ZbXQ== + +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +es-abstract@^1.10.0, es-abstract@^1.4.3: + version "1.13.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.13.0.tgz#ac86145fdd5099d8dd49558ccba2eaf9b88e24e9" + integrity sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg== + dependencies: + es-to-primitive "^1.2.0" + function-bind "^1.1.1" + has "^1.0.3" + is-callable "^1.1.4" + is-regex "^1.0.4" + object-keys "^1.0.12" + +es-to-primitive@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377" + integrity sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +es@^0.7.3: + version "0.7.3" + resolved "https://registry.yarnpkg.com/es/-/es-0.7.3.tgz#1e8e5e4aa06395ff1d68e2edbc2b14c6eeca1972" + integrity sha512-Czaxj9Kil06Ryh2JqcR941Jx816oWBZOhRSB/JKHvn+PSh+aUYGZc9TPgwePQCIId8dkAXNATDDQv3XW/cB8eA== + dependencies: + "@babel/runtime-corejs2" "^7.3.1" + reqlib "^1.0.8" + +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +eslint-plugin-flowtype@^2.46.1: + version "2.50.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-2.50.3.tgz#61379d6dce1d010370acd6681740fd913d68175f" + integrity sha512-X+AoKVOr7Re0ko/yEXyM5SSZ0tazc6ffdIOocp2fFUlWoDt7DV0Bz99mngOkAFLOAWjqRA5jPwqUCbrx13XoxQ== + dependencies: + lodash "^4.17.10" + +eslint-scope@3.7.1: + version "3.7.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8" + integrity sha1-PWPD7f2gLgbgGkUq2IyqzHzctug= + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-scope@^3.7.1: + version "3.7.3" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.3.tgz#bb507200d3d17f60247636160b4826284b108535" + integrity sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA== + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-visitor-keys@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d" + integrity sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ== + +eslint@^4.19.1: + version "4.19.1" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.19.1.tgz#32d1d653e1d90408854bfb296f076ec7e186a300" + integrity sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ== + dependencies: + ajv "^5.3.0" + babel-code-frame "^6.22.0" + chalk "^2.1.0" + concat-stream "^1.6.0" + cross-spawn "^5.1.0" + debug "^3.1.0" + doctrine "^2.1.0" + eslint-scope "^3.7.1" + eslint-visitor-keys "^1.0.0" + espree "^3.5.4" + esquery "^1.0.0" + esutils "^2.0.2" + file-entry-cache "^2.0.0" + functional-red-black-tree "^1.0.1" + glob "^7.1.2" + globals "^11.0.1" + ignore "^3.3.3" + imurmurhash "^0.1.4" + inquirer "^3.0.6" + is-resolvable "^1.0.0" + js-yaml "^3.9.1" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.3.0" + lodash "^4.17.4" + minimatch "^3.0.2" + mkdirp "^0.5.1" + natural-compare "^1.4.0" + optionator "^0.8.2" + path-is-inside "^1.0.2" + pluralize "^7.0.0" + progress "^2.0.0" + regexpp "^1.0.1" + require-uncached "^1.0.3" + semver "^5.3.0" + strip-ansi "^4.0.0" + strip-json-comments "~2.0.1" + table "4.0.2" + text-table "~0.2.0" + +esm@^3.0.9: + version "3.2.22" + resolved "https://registry.yarnpkg.com/esm/-/esm-3.2.22.tgz#5062c2e22fee3ccfee4e8f20da768330da90d6e3" + integrity sha512-z8YG7U44L82j1XrdEJcqZOLUnjxco8pO453gKOlaMD1/md1n/5QrscAmYG+oKUspsmDLuBFZrpbxI6aQ67yRxA== + +espree@^3.5.4: + version "3.5.4" + resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.4.tgz#b0f447187c8a8bed944b815a660bddf5deb5d1a7" + integrity sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A== + dependencies: + acorn "^5.5.0" + acorn-jsx "^3.0.0" + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esquery@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708" + integrity sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA== + dependencies: + estraverse "^4.0.0" + +esrecurse@^4.1.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" + integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ== + dependencies: + estraverse "^4.1.0" + +estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1: + version "4.2.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" + integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM= + +esutils@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" + integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs= + +execa@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" + integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c= + dependencies: + 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" + +external-editor@^2.0.4: + version "2.2.0" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5" + integrity sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A== + dependencies: + chardet "^0.4.0" + iconv-lite "^0.4.17" + tmp "^0.0.33" + +fast-deep-equal@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614" + integrity sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ= + +fast-json-stable-stringify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" + integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= + +fast-levenshtein@~2.0.4: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + +figures@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" + integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= + dependencies: + escape-string-regexp "^1.0.5" + +file-entry-cache@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" + integrity sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E= + dependencies: + flat-cache "^1.2.1" + object-assign "^4.0.1" + +find-up@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= + dependencies: + locate-path "^2.0.0" + +flat-cache@^1.2.1: + version "1.3.4" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.4.tgz#2c2ef77525cc2929007dfffa1dd314aa9c9dee6f" + integrity sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg== + dependencies: + circular-json "^0.3.1" + graceful-fs "^4.1.2" + rimraf "~2.6.2" + write "^0.2.1" + +flow-bin@^0.71.0: + version "0.71.0" + resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.71.0.tgz#fd1b27a6458c3ebaa5cb811853182ed631918b70" + integrity sha512-xGGsRBs3OPzzP2wE6i09BpeDmIBROmikEHoeV6SFgwZPEQ2hWUi+lcVN8BfUStmjdpC/l4XZqLOsLhWHsgZngw== + +fs-extra@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-5.0.0.tgz#414d0110cdd06705734d055652c5411260c31abd" + integrity sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +function-bind@^1.0.2, function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= + +get-caller-file@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" + integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== + +get-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" + integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= + +glob@^7.1.2, glob@^7.1.3: + version "7.1.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" + integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== + dependencies: + 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" + +globals@^11.0.1, globals@^11.1.0: + version "11.11.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.11.0.tgz#dcf93757fa2de5486fbeed7118538adf789e9c2e" + integrity sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw== + +graceful-fs@^4.1.2, graceful-fs@^4.1.6: + version "4.1.15" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" + integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA== + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= + dependencies: + ansi-regex "^2.0.0" + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +has-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" + integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q= + +has@^1.0.1, has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +hosted-git-info@^2.1.4: + version "2.7.1" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047" + integrity sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w== + +iconv-lite@^0.4.17: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +ignore@^3.3.3: + version "3.3.10" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" + integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug== + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@^2.0.3, inherits@~2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= + +inquirer@^3.0.6: + version "3.3.0" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9" + integrity sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ== + dependencies: + 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" + +invariant@^2.2.0: + version "2.2.4" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== + dependencies: + loose-envify "^1.0.0" + +invert-kv@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" + integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + +is-callable@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" + integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== + +is-date-object@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" + integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY= + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + +is-promise@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" + integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= + +is-regex@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" + integrity sha1-VRdIm1RwkbCTDglWVM7SXul+lJE= + dependencies: + has "^1.0.1" + +is-resolvable@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" + integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== + +is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + +is-symbol@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38" + integrity sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw== + dependencies: + has-symbols "^1.0.0" + +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +js-tokens@^3.0.0, js-tokens@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" + integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= + +"js-tokens@^3.0.0 || ^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^3.9.1: + version "3.13.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" + integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +json-parse-better-errors@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + +json-schema-traverse@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" + integrity sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A= + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + optionalDependencies: + graceful-fs "^4.1.6" + +jsonify@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" + integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM= + +lcid@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" + integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU= + dependencies: + invert-kv "^1.0.0" + +levn@^0.3.0, levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +load-json-file@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" + integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= + dependencies: + graceful-fs "^4.1.2" + parse-json "^4.0.0" + pify "^3.0.0" + strip-bom "^3.0.0" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +lodash@^4.17.10, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.3.0: + version "4.17.11" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" + integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg== + +loose-envify@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +lru-cache@^4.0.1: + version "4.1.5" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" + integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + +mem@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" + integrity sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y= + dependencies: + mimic-fn "^1.0.0" + +memorystream@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" + integrity sha1-htcJCzDORV1j+64S3aUaR93K+bI= + +mimic-fn@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" + integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== + +minimatch@^3.0.2, minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimist@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= + +mkdirp@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= + dependencies: + minimist "0.0.8" + +ms@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== + +mute-stream@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" + integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + +node-modules-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" + integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= + +normalize-package-data@^2.3.2: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +npm-run-all@^4.1.2: + version "4.1.5" + resolved "https://registry.yarnpkg.com/npm-run-all/-/npm-run-all-4.1.5.tgz#04476202a15ee0e2e214080861bff12a51d98fba" + integrity sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ== + dependencies: + ansi-styles "^3.2.1" + chalk "^2.4.1" + cross-spawn "^6.0.5" + memorystream "^0.3.1" + minimatch "^3.0.4" + pidtree "^0.3.0" + read-pkg "^3.0.0" + shell-quote "^1.6.1" + string.prototype.padend "^3.0.0" + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= + dependencies: + path-key "^2.0.0" + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= + +object-assign@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + +object-keys@^1.0.12: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +onetime@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" + integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= + dependencies: + mimic-fn "^1.0.0" + +optionator@^0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" + integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q= + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.4" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + wordwrap "~1.0.0" + +os-locale@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" + integrity sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA== + dependencies: + execa "^0.7.0" + lcid "^1.0.0" + mem "^1.1.0" + +os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= + +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== + dependencies: + p-try "^1.0.0" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= + dependencies: + p-limit "^1.1.0" + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= + +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + +parsimmon@^1.7.2: + version "1.12.0" + resolved "https://registry.yarnpkg.com/parsimmon/-/parsimmon-1.12.0.tgz#886a442fb30b5fc3c8e7c4994050f5cdcfe0ea90" + integrity sha512-uC/BjuSfb4jfaWajKCp1mVncXXq+V1twbcYChbTxN3GM7fn+8XoHwUdvUz+PTaFtDSCRQxU8+Rnh+iMhAkVwdw== + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-is-inside@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= + +path-key@^2.0.0, path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + +path-parse@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + +path-type@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" + integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== + dependencies: + pify "^3.0.0" + +pidtree@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.3.0.tgz#f6fada10fccc9f99bf50e90d0b23d72c9ebc2e6b" + integrity sha512-9CT4NFlDcosssyg8KVFltgokyKZIFjoBxw8CTGy+5F38Y1eQWrt8tRayiUOXE+zVKQnYu5BR8JjCtvK3BcnBhg== + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= + +pirates@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-3.0.2.tgz#7e6f85413fd9161ab4e12b539b06010d85954bb9" + integrity sha512-c5CgUJq6H2k6MJz72Ak1F5sN9n9wlSlJyEnwvpm9/y3WB4E3pHBDT2c6PEiS1vyJvq2bUxUAIu0EGf8Cx4Ic7Q== + dependencies: + node-modules-regexp "^1.0.0" + +pluralize@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" + integrity sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow== + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= + +process-nextick-args@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" + integrity sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw== + +progress@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= + +read-pkg@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" + integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= + dependencies: + load-json-file "^4.0.0" + normalize-package-data "^2.3.2" + path-type "^3.0.0" + +readable-stream@^2.2.2: + version "2.3.6" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" + integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== + dependencies: + 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" + +regenerator-runtime@^0.13.2: + version "0.13.2" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz#32e59c9a6fb9b1a4aff09b4930ca2d4477343447" + integrity sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA== + +regexpp@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-1.1.0.tgz#0e3516dd0b7904f413d2d4193dce4618c3a689ab" + integrity sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw== + +reqlib@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/reqlib/-/reqlib-1.0.8.tgz#9377d56b4a15fb9e69b408f9f23663dbc3efb3a3" + integrity sha512-hyYsDwUliJxIdbLi7UcI8rwIlKA8NyPa/POOt4+n/1SdcfzAH/YVQreDutj+XC+vFzhk+TW7HWpPYC4dRDPRGQ== + dependencies: + "@babel/runtime-corejs2" "^7.3.1" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + +require-main-filename@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" + integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= + +require-uncached@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" + integrity sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM= + dependencies: + caller-path "^0.1.0" + resolve-from "^1.0.0" + +resolve-from@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" + integrity sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY= + +resolve@^1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.10.0.tgz#3bdaaeaf45cc07f375656dfd2e54ed0810b101ba" + integrity sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg== + dependencies: + path-parse "^1.0.6" + +restore-cursor@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" + integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= + dependencies: + onetime "^2.0.0" + signal-exit "^3.0.2" + +rimraf@~2.6.2: + version "2.6.3" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" + integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== + dependencies: + glob "^7.1.3" + +run-async@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" + integrity sha1-A3GrSuC91yDUFm19/aZP96RFpsA= + dependencies: + is-promise "^2.1.0" + +rx-lite-aggregates@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be" + integrity sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74= + dependencies: + rx-lite "*" + +rx-lite@*, rx-lite@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" + integrity sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ= + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +"safer-buffer@>= 2.1.2 < 3": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.5.0: + version "5.7.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" + integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA== + +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + dependencies: + shebang-regex "^1.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + +shell-quote@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.6.1.tgz#f4781949cce402697127430ea3b3c5476f481767" + integrity sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c= + dependencies: + array-filter "~0.0.0" + array-map "~0.0.0" + array-reduce "~0.0.0" + jsonify "~0.0.0" + +signal-exit@^3.0.0, signal-exit@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" + integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= + +slice-ansi@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d" + integrity sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg== + dependencies: + is-fullwidth-code-point "^2.0.0" + +source-map@^0.5.0: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + +spdx-correct@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" + integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977" + integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA== + +spdx-expression-parse@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" + integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.4.tgz#75ecd1a88de8c184ef015eafb51b5b48bfd11bb1" + integrity sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA== + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + +string-width@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string.prototype.padend@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.0.0.tgz#f3aaef7c1719f170c5eab1c32bf780d96e21f2f0" + integrity sha1-86rvfBcZ8XDF6rHDK/eA2W4h8vA= + dependencies: + define-properties "^1.1.2" + es-abstract "^1.4.3" + function-bind "^1.0.2" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= + dependencies: + ansi-regex "^3.0.0" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= + +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +table@4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/table/-/table-4.0.2.tgz#a33447375391e766ad34d3486e6e2aedc84d2e36" + integrity sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA== + dependencies: + ajv "^5.2.3" + ajv-keywords "^2.1.0" + chalk "^2.1.0" + lodash "^4.17.4" + slice-ansi "1.0.0" + string-width "^2.1.1" + +text-table@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + +through@^2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + +trim-right@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" + integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= + dependencies: + prelude-ls "~1.1.2" + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +vlq@^0.2.1: + version "0.2.3" + resolved "https://registry.yarnpkg.com/vlq/-/vlq-0.2.3.tgz#8f3e4328cf63b1540c0d67e1b2778386f8975b26" + integrity sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow== + +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + +which@^1.2.9: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +wordwrap@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= + +wrap-ansi@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" + integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU= + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +write@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" + integrity sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c= + dependencies: + mkdirp "^0.5.1" + +y18n@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" + integrity sha1-bRX7qITAhnnA136I53WegR4H+kE= + +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= + +yargs-parser@^9.0.2: + version "9.0.2" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-9.0.2.tgz#9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077" + integrity sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc= + dependencies: + camelcase "^4.1.0" + +yargs@^11.0.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-11.1.0.tgz#90b869934ed6e871115ea2ff58b03f4724ed2d77" + integrity sha512-NwW69J42EsCSanF8kyn5upxvjp5ds+t3+udGBeTbFnERA+lF541DDpMawzo4z6W/QrzNM18D+BPMiOBibnFV5A== + dependencies: + cliui "^4.0.0" + decamelize "^1.1.1" + find-up "^2.1.0" + get-caller-file "^1.0.1" + os-locale "^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 "^9.0.2" diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/SnapshotterTest.java b/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/SnapshotterTest.java new file mode 100644 index 0000000000..096d96c4a7 --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/SnapshotterTest.java @@ -0,0 +1,4 @@ +package com.mapbox.mapboxsdk; + +public class SnapshotterTest { +} diff --git a/platform/android/settings.gradle b/platform/android/settings.gradle index c0315fed04..191232bfa5 100644 --- a/platform/android/settings.gradle +++ b/platform/android/settings.gradle @@ -1 +1 @@ -include ':MapboxGLAndroidSDK', ':MapboxGLAndroidSDKTestApp', ':MapboxGLAndroidSDKLint' \ No newline at end of file +include ':MapboxGLAndroidSDK', ':MapboxGLAndroidSDKTestApp', ':MapboxGLAndroidSDKLint', ':MapboxGLAndroidSDKRenderTest' \ No newline at end of file -- cgit v1.2.1