From 01d646558c9f3aafbbaaf76e521a0a8f57c70725 Mon Sep 17 00:00:00 2001 From: Daniel Griesser Date: Wed, 12 Feb 2020 08:57:19 +0100 Subject: [PATCH] feat: Use new Android SDK (#749) * feat: Capture Envelope, new Android SDK * fix: BeforeSend * ref: Checks in Java * fix: Release identifer fix: Native crash handling on android ref: Remove extraUpdated * fix: Re-enable breacrumbs integration * meta: Bump dependecies * ref: Remove example, Remove travis tests * ci: Update * meta: Changelog --- .gitmodules | 3 - .travis.yml | 67 +-- CHANGELOG.md | 7 + android/build.gradle | 14 +- android/src/main/AndroidManifest.xml | 3 + .../src/main/java/io/sentry/ArrayUtil.java | 128 ----- android/src/main/java/io/sentry/MapUtil.java | 134 ----- .../main/java/io/sentry/RNSentryModule.java | 467 +++------------- appium/Gemfile | 10 - appium/Gemfile.lock | 159 ------ appium/Makefile | 46 -- appium/check_run_failues.rb | 73 --- appium/conftest.py | 96 ---- appium/example | 1 - appium/fastlane/Appfile | 7 - appium/fastlane/Fastfile | 105 ---- appium/fastlane/Pluginfile | 5 - appium/fastlane/release.keystore | Bin 2246 -> 0 bytes appium/requirements.txt | 10 - appium/tests/test_android.py | 82 --- appium/tests/test_ios.py | 117 ---- examples | 1 - ios/RNSentry.m | 10 - package.json | 18 +- sentry.gradle | 2 +- src/js/backend.ts | 9 +- src/js/integrations/release.ts | 2 +- src/js/sdk.ts | 28 +- src/js/transports/native.ts | 8 +- src/js/wrapper.ts | 22 +- yarn.lock | 521 ++++++++++-------- 31 files changed, 461 insertions(+), 1694 deletions(-) delete mode 100644 android/src/main/java/io/sentry/ArrayUtil.java delete mode 100644 android/src/main/java/io/sentry/MapUtil.java delete mode 100644 appium/Gemfile delete mode 100644 appium/Gemfile.lock delete mode 100644 appium/Makefile delete mode 100644 appium/check_run_failues.rb delete mode 100644 appium/conftest.py delete mode 120000 appium/example delete mode 100644 appium/fastlane/Appfile delete mode 100644 appium/fastlane/Fastfile delete mode 100644 appium/fastlane/Pluginfile delete mode 100644 appium/fastlane/release.keystore delete mode 100644 appium/requirements.txt delete mode 100644 appium/tests/test_android.py delete mode 100644 appium/tests/test_ios.py delete mode 160000 examples diff --git a/.gitmodules b/.gitmodules index 9dc854294f..ecc90a91db 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +1,3 @@ -[submodule "examples"] - path = examples - url = https://github.com/getsentry/examples [submodule "ios/Sentry"] path = ios/Sentry url=https://github.com/getsentry/sentry-cocoa diff --git a/.travis.yml b/.travis.yml index d6494a64ca..8f7a86c525 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,64 +7,25 @@ before_install: - curl -o- -L https://yarnpkg.com/install.sh | bash - export PATH="$HOME/.yarn/bin:$PATH" -matrix: - include: - # - language: node_js - # node_js: 8 - # env: LANE='node' - # cache: - # yarn: true - # script: .travis/run.sh +install: yarn --ignore-engines +os: linux + +language: node_js +node_js: "12" +dist: bionic - - name: "Android" - language: android - sudo: required - jdk: oraclejdk8 - before_cache: - - rm -f $HOME/.gradle/caches/modules-2/modules-2.lock - - rm -rf $HOME/.gradle/caches/*/plugin-resolution/ - cache: - directories: - - $HOME/.yarn-cache - - $HOME/.gradle/caches/ - - $HOME/.gradle/wrapper/ - before_install: - - nvm install 8 - - .travis/before_install.sh - - echo yes | sdkmanager "platforms;android-26" - android: - components: - - tools - - platform-tools - - build-tools-28.0.3 - - tools - env: LANE='android' - script: .travis/run.sh +cache: + yarn: true + directories: + - node_modules - - name: "iOS" - language: objective-c - os: osx - osx_image: xcode9.4 - node_js: 8 - cache: - - bundler - - pip - - yarn - env: LANE='ios' - before_install: - - .travis/before_install.sh - before_script: - - nvm install 8 - - sudo easy_install virtualenv - - virtualenv ~/virtualenv - - source ~/virtualenv/bin/activate - script: .travis/run.sh +matrix: + include: + - name: "Test" + script: yarn test - name: "Deploy" - language: node_js - node_js: 8 script: .travis/deploy.sh - env: LANE='Deploy' after_success: - npm install -g @zeus-ci/cli - zeus upload -t "application/tar+npm" *.tgz diff --git a/CHANGELOG.md b/CHANGELOG.md index af09273b8d..dd2dbf16d0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## 1.3.0 + +- Bump `io.sentry:sentry-android:2.0.0-rc04` +- Added support for Hermes runtime!! +- Fixed a lot of issues on Android +- NDK support + ## 1.2.2 - fix(android): Crash if stacktrace.frames is empty (#742) diff --git a/android/build.gradle b/android/build.gradle index a005474c0c..a46a34cfac 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -5,7 +5,7 @@ def safeExtGet(prop, fallback) { apply plugin: 'com.android.library' android { - compileSdkVersion safeExtGet('compileSdkVersion', 26) + compileSdkVersion safeExtGet('compileSdkVersion', 28) buildToolsVersion safeExtGet('buildToolsVersion', '28.0.3') defaultConfig { @@ -14,13 +14,19 @@ android { defaultConfig { minSdkVersion safeExtGet('minSdkVersion', 16) - targetSdkVersion safeExtGet('targetSdkVersion', 26) + targetSdkVersion safeExtGet('targetSdkVersion', 28) versionCode 1 versionName "1.0" ndk { - abiFilters "armeabi-v7a", "x86" + abiFilters "x86", "armeabi-v7a", "x86_64", "arm64-v8a" } } + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + lintOptions { warning 'InvalidPackage' } @@ -28,5 +34,5 @@ android { dependencies { implementation 'com.facebook.react:react-native:+' - implementation 'io.sentry:sentry-android:1.7.29' + implementation 'io.sentry:sentry-android:2.0.0-rc04' } diff --git a/android/src/main/AndroidManifest.xml b/android/src/main/AndroidManifest.xml index 4151e0d094..3c3f37d46d 100644 --- a/android/src/main/AndroidManifest.xml +++ b/android/src/main/AndroidManifest.xml @@ -2,4 +2,7 @@ package="io.sentry"> + + + diff --git a/android/src/main/java/io/sentry/ArrayUtil.java b/android/src/main/java/io/sentry/ArrayUtil.java deleted file mode 100644 index a917a54111..0000000000 --- a/android/src/main/java/io/sentry/ArrayUtil.java +++ /dev/null @@ -1,128 +0,0 @@ -package io.sentry; - -import com.facebook.react.bridge.Arguments; -import com.facebook.react.bridge.ReadableArray; -import com.facebook.react.bridge.ReadableType; -import com.facebook.react.bridge.WritableArray; - -import java.util.Map; - -import org.json.JSONArray; -import org.json.JSONObject; -import org.json.JSONException; - -public class ArrayUtil { - - public static JSONArray toJSONArray(ReadableArray readableArray) throws JSONException { - JSONArray jsonArray = new JSONArray(); - - for (int i = 0; i < readableArray.size(); i++) { - ReadableType type = readableArray.getType(i); - - switch (type) { - case Null: - jsonArray.put(i, null); - break; - case Boolean: - jsonArray.put(i, readableArray.getBoolean(i)); - break; - case Number: - jsonArray.put(i, readableArray.getDouble(i)); - break; - case String: - jsonArray.put(i, readableArray.getString(i)); - break; - case Map: - jsonArray.put(i, MapUtil.toJSONObject(readableArray.getMap(i))); - break; - case Array: - jsonArray.put(i, ArrayUtil.toJSONArray(readableArray.getArray(i))); - break; - } - } - - return jsonArray; - } - - public static Object[] toArray(JSONArray jsonArray) throws JSONException { - Object[] array = new Object[jsonArray.length()]; - - for (int i = 0; i < jsonArray.length(); i++) { - Object value = jsonArray.get(i); - - if (value instanceof JSONObject) { - value = MapUtil.toMap((JSONObject) value); - } - if (value instanceof JSONArray) { - value = ArrayUtil.toArray((JSONArray) value); - } - - array[i] = value; - } - - return array; - } - - public static Object[] toArray(ReadableArray readableArray) { - Object[] array = new Object[readableArray.size()]; - - for (int i = 0; i < readableArray.size(); i++) { - ReadableType type = readableArray.getType(i); - - switch (type) { - case Null: - array[i] = null; - break; - case Boolean: - array[i] = readableArray.getBoolean(i); - break; - case Number: - array[i] = readableArray.getDouble(i); - break; - case String: - array[i] = readableArray.getString(i); - break; - case Map: - array[i] = MapUtil.toMap(readableArray.getMap(i)); - break; - case Array: - array[i] = ArrayUtil.toArray(readableArray.getArray(i)); - break; - } - } - - return array; - } - - public static WritableArray toWritableArray(Object[] array) { - WritableArray writableArray = Arguments.createArray(); - - for (int i = 0; i < array.length; i++) { - Object value = array[i]; - - if (value == null) { - writableArray.pushNull(); - } - if (value instanceof Boolean) { - writableArray.pushBoolean((Boolean) value); - } - if (value instanceof Double) { - writableArray.pushDouble((Double) value); - } - if (value instanceof Integer) { - writableArray.pushInt((Integer) value); - } - if (value instanceof String) { - writableArray.pushString((String) value); - } - if (value instanceof Map) { - writableArray.pushMap(MapUtil.toWritableMap((Map) value)); - } - if (value.getClass().isArray()) { - writableArray.pushArray(ArrayUtil.toWritableArray((Object[]) value)); - } - } - - return writableArray; - } -} diff --git a/android/src/main/java/io/sentry/MapUtil.java b/android/src/main/java/io/sentry/MapUtil.java deleted file mode 100644 index 4d75abc742..0000000000 --- a/android/src/main/java/io/sentry/MapUtil.java +++ /dev/null @@ -1,134 +0,0 @@ -package io.sentry; - -import com.facebook.react.bridge.Arguments; -import com.facebook.react.bridge.ReadableMap; -import com.facebook.react.bridge.ReadableMapKeySetIterator; -import com.facebook.react.bridge.ReadableType; -import com.facebook.react.bridge.WritableMap; - -import java.util.Map; -import java.util.HashMap; -import java.util.Iterator; - -import org.json.JSONArray; -import org.json.JSONObject; -import org.json.JSONException; - -public class MapUtil { - - public static JSONObject toJSONObject(ReadableMap readableMap) throws JSONException { - JSONObject jsonObject = new JSONObject(); - - ReadableMapKeySetIterator iterator = readableMap.keySetIterator(); - - while (iterator.hasNextKey()) { - String key = iterator.nextKey(); - ReadableType type = readableMap.getType(key); - - switch (type) { - case Null: - jsonObject.put(key, null); - break; - case Boolean: - jsonObject.put(key, readableMap.getBoolean(key)); - break; - case Number: - jsonObject.put(key, readableMap.getDouble(key)); - break; - case String: - jsonObject.put(key, readableMap.getString(key)); - break; - case Map: - jsonObject.put(key, MapUtil.toJSONObject(readableMap.getMap(key))); - break; - case Array: - jsonObject.put(key, ArrayUtil.toJSONArray(readableMap.getArray(key))); - break; - } - } - - return jsonObject; - } - - public static Map toMap(JSONObject jsonObject) throws JSONException { - Map map = new HashMap<>(); - Iterator iterator = jsonObject.keys(); - - while (iterator.hasNext()) { - String key = iterator.next(); - Object value = jsonObject.get(key); - - if (value instanceof JSONObject) { - value = MapUtil.toMap((JSONObject) value); - } - if (value instanceof JSONArray) { - value = ArrayUtil.toArray((JSONArray) value); - } - - map.put(key, value); - } - - return map; - } - - public static Map toMap(ReadableMap readableMap) { - Map map = new HashMap<>(); - ReadableMapKeySetIterator iterator = readableMap.keySetIterator(); - - while (iterator.hasNextKey()) { - String key = iterator.nextKey(); - ReadableType type = readableMap.getType(key); - - switch (type) { - case Null: - map.put(key, null); - break; - case Boolean: - map.put(key, readableMap.getBoolean(key)); - break; - case Number: - map.put(key, readableMap.getDouble(key)); - break; - case String: - map.put(key, readableMap.getString(key)); - break; - case Map: - map.put(key, MapUtil.toMap(readableMap.getMap(key))); - break; - case Array: - map.put(key, ArrayUtil.toArray(readableMap.getArray(key))); - break; - } - } - - return map; - } - - public static WritableMap toWritableMap(Map map) { - WritableMap writableMap = Arguments.createMap(); - Iterator iterator = map.entrySet().iterator(); - - while (iterator.hasNext()) { - Map.Entry pair = (Map.Entry)iterator.next(); - Object value = pair.getValue(); - - if (value == null) { - writableMap.putNull((String) pair.getKey()); - } else if (value instanceof Boolean) { - writableMap.putBoolean((String) pair.getKey(), (Boolean) value); - } else if (value instanceof Double) { - writableMap.putDouble((String) pair.getKey(), (Double) value); - } else if (value instanceof Integer) { - writableMap.putInt((String) pair.getKey(), (Integer) value); - } else if (value instanceof String) { - writableMap.putString((String) pair.getKey(), (String) value); - } else if (value instanceof Map) { - writableMap.putMap((String) pair.getKey(), MapUtil.toWritableMap((Map) value)); - } else if (value.getClass() != null && value.getClass().isArray()) { - writableMap.putArray((String) pair.getKey(), ArrayUtil.toWritableArray((Object[]) value)); - } - } - - return writableMap; - } -} diff --git a/android/src/main/java/io/sentry/RNSentryModule.java b/android/src/main/java/io/sentry/RNSentryModule.java index 1023bb0b52..5e5be51026 100644 --- a/android/src/main/java/io/sentry/RNSentryModule.java +++ b/android/src/main/java/io/sentry/RNSentryModule.java @@ -9,58 +9,38 @@ import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.bridge.ReactContextBaseJavaModule; import com.facebook.react.bridge.ReactMethod; -import com.facebook.react.bridge.ReadableArray; import com.facebook.react.bridge.ReadableMap; -import com.facebook.react.bridge.ReadableNativeArray; -import com.facebook.react.bridge.ReadableNativeMap; -import com.facebook.react.bridge.ReadableType; -import com.facebook.react.bridge.UnexpectedNativeTypeException; import com.facebook.react.bridge.WritableMap; import com.facebook.react.module.annotations.ReactModule; -import java.util.UUID; - -import java.util.ArrayDeque; -import java.util.ArrayList; -import java.util.Deque; +import java.io.File; +import java.io.FileOutputStream; +import java.nio.charset.Charset; import java.util.HashMap; -import java.util.HashSet; import java.util.Iterator; import java.util.Map; -import java.util.Set; +import java.util.UUID; import java.util.logging.Level; import java.util.logging.Logger; -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import io.sentry.android.AndroidSentryClientFactory; -import io.sentry.android.event.helper.AndroidEventBuilderHelper; -import io.sentry.event.Breadcrumb; -import io.sentry.event.BreadcrumbBuilder; -import io.sentry.event.Event; -import io.sentry.event.EventBuilder; -import io.sentry.event.Sdk; -import io.sentry.event.User; -import io.sentry.event.UserBuilder; -import io.sentry.event.helper.ShouldSendEventCallback; -import io.sentry.event.interfaces.ExceptionInterface; -import io.sentry.event.interfaces.SentryException; -import io.sentry.event.interfaces.SentryStackTraceElement; -import io.sentry.event.interfaces.StackTraceInterface; -import io.sentry.event.interfaces.UserInterface; +import io.sentry.android.core.AnrIntegration; +import io.sentry.android.core.NdkIntegration; +import io.sentry.android.core.SentryAndroid; +import io.sentry.core.Integration; +import io.sentry.core.SentryOptions; +import io.sentry.core.UncaughtExceptionHandlerIntegration; +import io.sentry.core.protocol.SentryException; + @ReactModule(name = RNSentryModule.NAME) public class RNSentryModule extends ReactContextBaseJavaModule { public static final String NAME = "RNSentry"; - private static final Pattern mJsModuleIdPattern = Pattern.compile("(?:^|[/\\\\])(\\d+\\.js)$"); - - private static AndroidEventBuilderHelper androidHelper; - final static Logger logger = Logger.getLogger("react-native-sentry"); - private static SentryClient sentryClient; + private static PackageInfo packageInfo; + private SentryOptions sentryOptions; public RNSentryModule(ReactApplicationContext reactContext) { super(reactContext); @@ -81,46 +61,55 @@ public Map getConstants() { } @ReactMethod - public void startWithDsnString(String dsnString, final ReadableMap options, Promise promise) { - if (sentryClient != null) { - logger.info(String.format("Already started, use existing client '%s'", dsnString)); - promise.resolve(false); - return; - } + public void startWithDsnString(String dsnString, final ReadableMap rnOptions, Promise promise) { + SentryAndroid.init(this.getReactApplicationContext(), options -> { + options.setDsn(dsnString); - try { - sentryClient = Sentry.init(dsnString, new AndroidSentryClientFactory(this.getReactApplicationContext())); - } catch (Exception e) { - logger.info(String.format("Catching on startWithDsnString, calling callback" + e.getMessage())); - promise.reject("SentryError", "Error during init", e); - return; - } - - androidHelper = new AndroidEventBuilderHelper(this.getReactApplicationContext()); + if (rnOptions.hasKey("debug") && rnOptions.getBoolean("debug")) { + options.setDebug(true); + } + if (rnOptions.hasKey("environment") && rnOptions.getString("environment") != null) { + options.setEnvironment(rnOptions.getString("environment")); + } + if (rnOptions.hasKey("release") && rnOptions.getString("release") != null) { + options.setRelease(rnOptions.getString("release")); + } + if (rnOptions.hasKey("dist") && rnOptions.getString("dist") != null) { + options.setDist(rnOptions.getString("dist")); + } - sentryClient.addShouldSendEventCallback(new ShouldSendEventCallback() { - @Override - public boolean shouldSend(Event event) { - // We don't want to send events that are from ExceptionsManagerModule. - // Because we sent it already from raven. - if (event.getSentryInterfaces().containsKey(ExceptionInterface.EXCEPTION_INTERFACE)) { - ExceptionInterface exceptionInterface = ((ExceptionInterface)event.getSentryInterfaces().get(ExceptionInterface.EXCEPTION_INTERFACE)); - if (exceptionInterface.getExceptions().getFirst().getExceptionClassName().contains("JavascriptException")) { - return false; + options.setBeforeSend((event, hint) -> { + // React native internally throws a JavascriptException + // Since we catch it before that, we don't want to send this one + // because we would send it twice + try { + SentryException ex = event.getExceptions().get(0); + if (null != ex && ex.getType().contains("JavascriptException")) { + return null; + } + } catch (Exception e) { + // We do nothing + } + return event; + }); + + + for (Iterator iterator = options.getIntegrations().iterator(); iterator.hasNext(); ) { + Integration integration = iterator.next(); + if (rnOptions.hasKey("enableNativeCrashHandling") && + !rnOptions.getBoolean("enableNativeCrashHandling")) { + if (integration instanceof UncaughtExceptionHandlerIntegration || + integration instanceof AnrIntegration || + integration instanceof NdkIntegration) { + iterator.remove(); } } - return true; } + + logger.info(String.format("Native Integrations '%s'", options.getIntegrations().toString())); + sentryOptions = options; }); - if (options.hasKey("environment") && options.getString("environment") != null) { - sentryClient.environment = options.getString("environment"); - } - if (options.hasKey("release") && options.getString("release") != null) { - sentryClient.release = options.getString("release"); - } - if (options.hasKey("dist") && options.getString("dist") != null) { - sentryClient.dist = options.getString("dist"); - } + logger.info(String.format("startWithDsnString '%s'", dsnString)); promise.resolve(true); } @@ -132,7 +121,7 @@ public void setLogLevel(int level) { @ReactMethod public void crash() { - throw new RuntimeException("TEST - Sentry Client Crash"); + throw new RuntimeException("TEST - Sentry Client Crash (only works in release mode)"); } @ReactMethod @@ -145,325 +134,18 @@ public void fetchRelease(Promise promise) { } @ReactMethod - public void deviceContexts(Promise promise) { - EventBuilder eventBuilder = new EventBuilder(); - androidHelper.helpBuildingEvent(eventBuilder); - Event event = eventBuilder.build(); - - WritableMap params = Arguments.createMap(); - - for (Map.Entry> data : event.getContexts().entrySet()) { - params.putMap(data.getKey(), MapUtil.toWritableMap(data.getValue())); - } - - promise.resolve(params); - } - - @ReactMethod - public void extraUpdated(ReadableMap extra) { - if (extra.hasKey("__sentry_release")) { - sentryClient.release = extra.getString("__sentry_release"); - } - if (extra.hasKey("__sentry_dist")) { - sentryClient.dist = extra.getString("__sentry_dist"); - } - } - - @ReactMethod - public void sendEvent(ReadableMap event, Promise promise) { - ReadableNativeMap castEvent = (ReadableNativeMap)event; - -// EventBuilder eventBuilder = new EventBuilder() -// .withLevel(eventLevel(castEvent)); - - EventBuilder eventBuilder; - if (event.hasKey("event_id")) { - UUID eventId = UUID.fromString(event.getString("event_id").replaceFirst( - "(\\p{XDigit}{8})(\\p{XDigit}{4})(\\p{XDigit}{4})(\\p{XDigit}{4})(\\p{XDigit}+)", - "$1-$2-$3-$4-$5")); - eventBuilder = new EventBuilder(eventId).withLevel(eventLevel(castEvent)); - } else { - logger.info("Event has no event_id"); - eventBuilder = new EventBuilder().withLevel(eventLevel(castEvent)); - } - - androidHelper.helpBuildingEvent(eventBuilder); - - if (event.hasKey("breadcrumbs")) { - ReadableNativeArray breadcrumbs = (ReadableNativeArray)event.getArray("breadcrumbs"); - ArrayList eventBreadcrumbs = new ArrayList(); - for (int i = 0; i < breadcrumbs.size(); i++) { - ReadableNativeMap breadcrumb = breadcrumbs.getMap(i); - BreadcrumbBuilder breadcrumbBuilder = new BreadcrumbBuilder(); - if (breadcrumb.hasKey("category")) { - breadcrumbBuilder.setCategory(breadcrumb.getString("category")); - } - - if (breadcrumb.hasKey("type") && breadcrumb.getString("type") != null) { - String typeString = breadcrumb.getString("type").toUpperCase(); - try { - breadcrumbBuilder.setType(Breadcrumb.Type.valueOf(typeString)); - } catch (IllegalArgumentException e) { - //don't copy over invalid breadcrumb 'type' value - } - } - - if (breadcrumb.hasKey("level") && breadcrumb.getString("level") != null) { - String levelString = breadcrumb.getString("level").toUpperCase(); - try { - breadcrumbBuilder.setLevel(Breadcrumb.Level.valueOf(levelString)); - } catch (IllegalArgumentException e) { - //don't copy over invalid breadcrumb 'level' value - } - } - - try { - if (breadcrumb.hasKey("data") && breadcrumb.getMap("data") != null) { - Map newData = new HashMap<>(); - for (Map.Entry data : breadcrumb.getMap("data").toHashMap().entrySet()) { - newData.put(data.getKey(), data.getValue() != null ? data.getValue().toString() : null); - } - - // in case a `status_code` entry got accidentally stringified as a float - if (newData.containsKey("status_code")) { - String value = newData.get("status_code"); - newData.put( - "status_code", - value.endsWith(".0") ? value.replace(".0", "") : value - ); - } - - breadcrumbBuilder.setData(newData); - } - } catch (UnexpectedNativeTypeException e) { - logger.warning("Discarded breadcrumb.data since it was not an object"); - } catch (ClassCastException e) { // This needs to be here for RN < 0.60 - logger.warning("Discarded breadcrumb.data since it was not an object"); - } - - if (breadcrumb.hasKey("message")) { - breadcrumbBuilder.setMessage(breadcrumb.getString("message")); - } else { - breadcrumbBuilder.setMessage(""); - } - eventBreadcrumbs.add(i, breadcrumbBuilder.build()); - } - if (eventBreadcrumbs.size() > 0) { - eventBuilder.withBreadcrumbs(eventBreadcrumbs); - } - } - - if (event.hasKey("message")) { - String message = ""; - try { - message = event.getString("message"); - } catch (UnexpectedNativeTypeException e) { - // Do nothing - } catch (ClassCastException e) { // This needs to be here for RN < 0.60 - // Do nothing - } finally { - try { - message = event.getMap("message").toString(); - } catch (UnexpectedNativeTypeException e) { - // Do nothing - } catch (ClassCastException e) { // This needs to be here for RN < 0.60 - // Do nothing - } - } - eventBuilder.withMessage(message); - } - - if (event.hasKey("logger")) { - eventBuilder.withLogger(event.getString("logger")); - } - - if (event.hasKey("user")) { - UserBuilder userBuilder = getUserBuilder(event.getMap("user")); - User builtUser = userBuilder.build(); - UserInterface userInterface = new UserInterface( - builtUser.getId(), - builtUser.getUsername(), - null, - builtUser.getEmail(), - builtUser.getData() - ); - eventBuilder.withSentryInterface(userInterface); - } - - if (castEvent.hasKey("extra")) { - for (Map.Entry entry : castEvent.getMap("extra").toHashMap().entrySet()) { - eventBuilder.withExtra(entry.getKey(), entry.getValue()); - } - } - - if (event.hasKey("fingerprint")) { - ReadableArray fingerprint = event.getArray("fingerprint"); - ArrayList print = new ArrayList(fingerprint.size()); - for(int i = 0; i < fingerprint.size(); ++i) { - print.add(i, fingerprint.getString(i)); - } - eventBuilder.withFingerprint(print); - } - - if (castEvent.hasKey("tags")) { - for (Map.Entry entry : castEvent.getMap("tags").toHashMap().entrySet()) { - String tagValue = entry.getValue() != null ? entry.getValue().toString() : "INVALID_TAG"; - eventBuilder.withTag(entry.getKey(), tagValue); - } - } - - if (event.hasKey("exception")) { - ReadableNativeArray exceptionValues = (ReadableNativeArray)event.getMap("exception").getArray("values"); - ReadableNativeMap exception = exceptionValues.getMap(0); - if (exception.hasKey("stacktrace")) { - ReadableNativeMap stacktrace = exception.getMap("stacktrace"); - // temporary solution until final fix - // https://github.com/getsentry/sentry-react-native/issues/742 - if (stacktrace.hasKey("frames")) { - ReadableNativeArray frames = (ReadableNativeArray)stacktrace.getArray("frames"); - if (exception.hasKey("value")) { - addExceptionInterface(eventBuilder, exception.getString("type"), exception.getString("value"), frames); - } else { - // We use type/type here since this indicates an Unhandled Promise Rejection - // https://github.com/getsentry/react-native-sentry/issues/353 - addExceptionInterface(eventBuilder, exception.getString("type"), exception.getString("type"), frames); - } - } - } - } - - if (event.hasKey("environment")) { - eventBuilder.withEnvironment(event.getString("environment")); - } - - - if (event.hasKey("release")) { - eventBuilder.withRelease(event.getString("release")); - } else { - eventBuilder.withRelease(null); - } - - if (event.hasKey("dist")) { - eventBuilder.withDist(event.getString("dist")); - } else { - eventBuilder.withDist(null); - } - - Event builtEvent = eventBuilder.build(); - - if (event.hasKey("sdk")) { - ReadableNativeMap sdk = (ReadableNativeMap)event.getMap("sdk"); - Set sdkIntegrations = new HashSet<>(); - if (sdk.hasKey("integrations")) { - ReadableNativeArray integrations = (ReadableNativeArray)sdk.getArray("integrations"); - for(int i = 0; i < integrations.size(); ++i) { - sdkIntegrations.add(integrations.getString(i)); - } + public void captureEnvelope(String envelope, Promise promise) { + try { + File installation = new File(sentryOptions.getOutboxPath(), UUID.randomUUID().toString()); + try(FileOutputStream out = new FileOutputStream(installation)) { + out.write(envelope.getBytes(Charset.forName("UTF-8"))); } - builtEvent.setSdk(new Sdk(sdk.getString("name"), sdk.getString("version"), sdkIntegrations)); + } catch (Exception e) { + logger.info("Error reading envelope"); } - - - Sentry.capture(builtEvent); promise.resolve(true); } - private UserBuilder getUserBuilder(ReadableMap user) { - UserBuilder userBuilder = new UserBuilder(); - if (user.hasKey("email")) { - userBuilder.setEmail(user.getString("email")); - } - if (user.hasKey("userID")) { - userBuilder.setId(user.getString("userID")); - } else if (user.hasKey("userId")) { - userBuilder.setId(user.getString("userId")); - } else if (user.hasKey("id")) { - userBuilder.setId(user.getString("id")); - } - if (user.hasKey("username")) { - userBuilder.setUsername(user.getString("username")); - } - if (user.hasKey("extra")) { - userBuilder.setData(user.getMap("extra").toHashMap()); - } - return userBuilder; - } - - private static void addExceptionInterface(EventBuilder eventBuilder, String type, String value, ReadableNativeArray stack) { - StackTraceInterface stackTraceInterface = new StackTraceInterface(convertToNativeStacktrace(stack)); - Deque exceptions = new ArrayDeque<>(); - - exceptions.push(new SentryException(value, type, "", stackTraceInterface)); - - eventBuilder.withSentryInterface(new ExceptionInterface(exceptions)); - } - - private static SentryStackTraceElement[] convertToNativeStacktrace(ReadableNativeArray stack) { - Deque frames = new ArrayDeque<>(); - for (int i = 0; i < stack.size(); i++) { - ReadableNativeMap frame = stack.getMap(i); - - String fileName = ""; - if (frame.hasKey("file")) { - fileName = frame.getString("file"); - } else if (frame.hasKey("filename")) { - fileName = frame.getString("filename"); - } - - String methodName = ""; - if (frame.hasKey("methodName")) { - methodName = frame.getString("methodName"); - } else if (frame.hasKey("function")) { - methodName = frame.getString("function"); - } - - int lineNumber = 0; - if (frame.hasKey("lineNumber") && - !frame.isNull("lineNumber") && - frame.getType("lineNumber") == ReadableType.Number) { - lineNumber = frame.getInt("lineNumber"); - } else if (frame.hasKey("lineno") && - !frame.isNull("lineno") && - frame.getType("lineno") == ReadableType.Number) { - lineNumber = frame.getInt("lineno"); - } - - int column = 0; - if (frame.hasKey("column") && - !frame.isNull("column") && - frame.getType("column") == ReadableType.Number) { - column = frame.getInt("column"); - } else if (frame.hasKey("colno") && - !frame.isNull("colno") && - frame.getType("colno") == ReadableType.Number) { - column = frame.getInt("colno"); - } - - SentryStackTraceElement stackFrame = new SentryStackTraceElement("", methodName, stackFrameToModuleId(frame), lineNumber, column, fileName, "javascript"); - frames.add(stackFrame); - } - SentryStackTraceElement[] synthStackTrace = new SentryStackTraceElement[frames.size()]; - Iterator iterator = frames.descendingIterator(); - int i = 0; - while (iterator.hasNext()) { - synthStackTrace[i] = iterator.next(); - i++; - } - return synthStackTrace; - } - - private static String stackFrameToModuleId(ReadableMap frame) { - if (frame.hasKey("file") && - !frame.isNull("file") && - frame.getType("file") == ReadableType.String) { - final Matcher matcher = mJsModuleIdPattern.matcher(frame.getString("file")); - if (matcher.find()) { - return matcher.group(1) + ":"; - } - } - return ""; - } - private static PackageInfo getPackageInfo(Context ctx) { try { return ctx.getPackageManager().getPackageInfo(ctx.getPackageName(), 0); @@ -473,25 +155,6 @@ private static PackageInfo getPackageInfo(Context ctx) { } } - private Event.Level eventLevel(ReadableNativeMap event) { - String level = ""; - if (event.hasKey("level")) { - level = event.getString("level"); - } - switch (level) { - case "fatal": - return Event.Level.FATAL; - case "warning": - return Event.Level.WARNING; - case "info": - return Event.Level.INFO; - case "debug": - return Event.Level.DEBUG; - default: - return Event.Level.ERROR; - } - } - private Level logLevel(int level) { switch (level) { case 1: diff --git a/appium/Gemfile b/appium/Gemfile deleted file mode 100644 index 2f81420443..0000000000 --- a/appium/Gemfile +++ /dev/null @@ -1,10 +0,0 @@ -# Autogenerated by fastlane -# -# Ensure this file is checked in to source control! - -source "https://rubygems.org" - -gem 'fastlane', '>= 2.131.0' - -plugins_path = File.join(File.dirname(__FILE__), 'fastlane', 'Pluginfile') -eval_gemfile(plugins_path) if File.exist?(plugins_path) diff --git a/appium/Gemfile.lock b/appium/Gemfile.lock deleted file mode 100644 index e92b0bbb26..0000000000 --- a/appium/Gemfile.lock +++ /dev/null @@ -1,159 +0,0 @@ -GEM - remote: https://rubygems.org/ - specs: - CFPropertyList (3.0.2) - addressable (2.7.0) - public_suffix (>= 2.0.2, < 5.0) - atomos (0.1.3) - babosa (1.0.3) - claide (1.0.3) - colored (1.2) - colored2 (3.1.2) - commander-fastlane (4.4.6) - highline (~> 1.7.2) - declarative (0.0.10) - declarative-option (0.1.0) - digest-crc (0.4.1) - domain_name (0.5.20190701) - unf (>= 0.0.5, < 1.0.0) - dotenv (2.7.5) - emoji_regex (1.0.1) - excon (0.71.1) - faraday (0.17.1) - multipart-post (>= 1.2, < 3) - faraday-cookie_jar (0.0.6) - faraday (>= 0.7.4) - http-cookie (~> 1.0.0) - faraday_middleware (0.13.1) - faraday (>= 0.7.4, < 1.0) - fastimage (2.1.7) - fastlane (2.138.0) - CFPropertyList (>= 2.3, < 4.0.0) - addressable (>= 2.3, < 3.0.0) - babosa (>= 1.0.2, < 2.0.0) - bundler (>= 1.12.0, < 3.0.0) - colored - commander-fastlane (>= 4.4.6, < 5.0.0) - dotenv (>= 2.1.1, < 3.0.0) - emoji_regex (>= 0.1, < 2.0) - excon (>= 0.71.0, < 1.0.0) - faraday (~> 0.17) - faraday-cookie_jar (~> 0.0.6) - faraday_middleware (~> 0.13.1) - fastimage (>= 2.1.0, < 3.0.0) - gh_inspector (>= 1.1.2, < 2.0.0) - google-api-client (>= 0.21.2, < 0.24.0) - google-cloud-storage (>= 1.15.0, < 2.0.0) - highline (>= 1.7.2, < 2.0.0) - json (< 3.0.0) - jwt (~> 2.1.0) - mini_magick (>= 4.9.4, < 5.0.0) - multi_xml (~> 0.5) - multipart-post (~> 2.0.0) - plist (>= 3.1.0, < 4.0.0) - public_suffix (~> 2.0.0) - rubyzip (>= 1.3.0, < 2.0.0) - security (= 0.1.3) - simctl (~> 1.6.3) - slack-notifier (>= 2.0.0, < 3.0.0) - terminal-notifier (>= 2.0.0, < 3.0.0) - terminal-table (>= 1.4.5, < 2.0.0) - tty-screen (>= 0.6.3, < 1.0.0) - tty-spinner (>= 0.8.0, < 1.0.0) - word_wrap (~> 1.0.0) - xcodeproj (>= 1.13.0, < 2.0.0) - xcpretty (~> 0.3.0) - xcpretty-travis-formatter (>= 0.0.3) - gh_inspector (1.1.3) - google-api-client (0.23.9) - addressable (~> 2.5, >= 2.5.1) - googleauth (>= 0.5, < 0.7.0) - httpclient (>= 2.8.1, < 3.0) - mime-types (~> 3.0) - representable (~> 3.0) - retriable (>= 2.0, < 4.0) - signet (~> 0.9) - google-cloud-core (1.4.1) - google-cloud-env (~> 1.0) - google-cloud-env (1.3.0) - faraday (~> 0.11) - google-cloud-storage (1.16.0) - digest-crc (~> 0.4) - google-api-client (~> 0.23) - google-cloud-core (~> 1.2) - googleauth (>= 0.6.2, < 0.10.0) - googleauth (0.6.7) - faraday (~> 0.12) - jwt (>= 1.4, < 3.0) - memoist (~> 0.16) - multi_json (~> 1.11) - os (>= 0.9, < 2.0) - signet (~> 0.7) - highline (1.7.10) - http-cookie (1.0.3) - domain_name (~> 0.5) - httpclient (2.8.3) - json (2.3.0) - jwt (2.1.0) - memoist (0.16.2) - mime-types (3.3) - mime-types-data (~> 3.2015) - mime-types-data (3.2019.1009) - mini_magick (4.9.5) - multi_json (1.14.1) - multi_xml (0.6.0) - multipart-post (2.0.0) - nanaimo (0.2.6) - naturally (2.2.0) - os (1.0.1) - plist (3.5.0) - public_suffix (2.0.5) - representable (3.0.4) - declarative (< 0.1.0) - declarative-option (< 0.2.0) - uber (< 0.2.0) - retriable (3.1.2) - rouge (2.0.7) - rubyzip (1.3.0) - security (0.1.3) - signet (0.12.0) - addressable (~> 2.3) - faraday (~> 0.9) - jwt (>= 1.5, < 3.0) - multi_json (~> 1.10) - simctl (1.6.7) - CFPropertyList - naturally - slack-notifier (2.3.2) - terminal-notifier (2.0.0) - terminal-table (1.8.0) - unicode-display_width (~> 1.1, >= 1.1.1) - tty-cursor (0.7.0) - tty-screen (0.7.0) - tty-spinner (0.9.2) - tty-cursor (~> 0.7) - uber (0.1.0) - unf (0.1.4) - unf_ext - unf_ext (0.0.7.6) - unicode-display_width (1.6.0) - word_wrap (1.0.0) - xcodeproj (1.14.0) - CFPropertyList (>= 2.3.3, < 4.0) - atomos (~> 0.1.3) - claide (>= 1.0.2, < 2.0) - colored2 (~> 3.1) - nanaimo (~> 0.2.6) - xcpretty (0.3.0) - rouge (~> 2.0.7) - xcpretty-travis-formatter (1.0.0) - xcpretty (~> 0.2, >= 0.0.7) - -PLATFORMS - ruby - -DEPENDENCIES - fastlane (>= 2.131.0) - -BUNDLED WITH - 1.17.3 diff --git a/appium/Makefile b/appium/Makefile deleted file mode 100644 index 25ad620881..0000000000 --- a/appium/Makefile +++ /dev/null @@ -1,46 +0,0 @@ -create-test-bundle: - rm test_bundle.zip | true - zip -r test_bundle.zip tests/test_ios.py wheelhouse/ requirements.txt conftest.py - -create-android-test-bundle: - rm test_bundle.zip | true - zip -r test_bundle.zip tests/test_android.py wheelhouse/ requirements.txt conftest.py - -new-demo-project: - cd ../examples/react-native; make clean-project - -copy-local-files-to-example: - rm -rf example/node_modules/react-native-sentry/lib/* - find example/node_modules/react-native-sentry/ios -name 'RN*.[h|m]' -exec rm {} \; - rm -rf example/node_modules/react-native-sentry/ios/Sentry/Sources/Sentry/* - rm -rf example/node_modules/react-native-sentry/android/* - rm -rf example/node_modules/react-native-sentry/scripts/* - rm -rf example/node_modules/react-native-sentry/sentry.gradle - cp -r ../lib/* example/node_modules/react-native-sentry/lib/ - cp ../sentry.gradle example/node_modules/react-native-sentry/sentry.gradle - cp -r ../scripts/* example/node_modules/react-native-sentry/scripts/ - find ../ios -name 'RN*.[h|m]' -exec cp {} example/node_modules/react-native-sentry/ios/ \; - cp -r ../android/* example/node_modules/react-native-sentry/android/ - cp -r ../ios/Sentry/Sources/Sentry/* example/node_modules/react-native-sentry/ios/Sentry/Sources/Sentry/ - rm -rf example/node_modules/react-native-sentry/ios/Sentry/Sentry.xcodeproj - cp -r ../ios/Sentry/Sentry.xcodeproj example/node_modules/react-native-sentry/ios/Sentry/Sentry.xcodeproj - -install: new-demo-project copy-local-files-to-example - -test: create-test-bundle install - fastlane build_for_device_farm - fastlane aws_ios_upload_and_run - ruby check_run_failues.rb - -test-android: create-android-test-bundle install - fastlane build_android_for_device_farm - fastlane aws_android_upload_and_run - ANDROID=1 ruby check_run_failues.rb - -local-android-test: create-android-test-bundle install - fastlane build_android_for_device_farm - ANDROID=1 pytest -vv tests/test_android.py - -local-test: create-test-bundle install - fastlane build_for_local_appium - pytest -vv tests/test_ios.py diff --git a/appium/check_run_failues.rb b/appium/check_run_failues.rb deleted file mode 100644 index d3d43115a5..0000000000 --- a/appium/check_run_failues.rb +++ /dev/null @@ -1,73 +0,0 @@ -require 'aws-sdk' -require 'open-uri' - -arn = File.read('./fastlane/.aws.run.arn') -arn.strip! - -@client = ::Aws::DeviceFarm::Client.new - -@problems = @client.list_unique_problems({ - arn: arn -}) - - -def android_check - @problems.unique_problems.each do |up| - raise RuntimeError, "No failed tests: #{up.inspect}" unless up.length == 2 - up[1].each do |p| - if p.problems[0].test.name == 'test_throw_error' - artifacts = @client.list_artifacts({ - type: "FILE", - arn: p.problems[0].test.arn - }) - artifacts.artifacts.each do |a| - if a.name == 'Logcat' - content = open(a.url).read - raise RuntimeError, "Missing value raven: #{p.inspect}" unless content.scan(/Raven about to send:/).size == 1 - raise RuntimeError, "Missing value: #{p.inspect}" unless content.scan(/value: 'Sentry: Test throw error'/).size == 1 - end - end - end - if p.problems[0].test.name == 'test_native_crash' - artifacts = @client.list_artifacts({ - type: "FILE", - arn: p.problems[0].test.arn - }) - artifacts.artifacts.each do |a| - if a.name == 'Logcat' - content = open(a.url).read - raise RuntimeError, "Missing native crash: #{p.inspect}" unless content.scan(/java.lang.RuntimeException: TEST - Sentry Client Crash/).size == 1 - end - end - end - end - end -end - -def ios_check - @problems.unique_problems.each do |up| - raise RuntimeError, "No failed tests: #{up.inspect}" unless up.length == 2 - up[1].each do |p| - if p.problems[0].test.name == 'test_throw_error' || p.problems[0].test.name == 'test_native_crash' - artifacts = @client.list_artifacts({ - type: "FILE", - arn: p.problems[0].test.arn - }) - artifacts.artifacts.each do |a| - if a.name == 'Syslog' - content = open(a.url).read - raise RuntimeError, "test_throw_error Sentry should start twice: #{p.inspect}" unless content.scan(/Sentry Started -- Version/).size == 2 - raise RuntimeError, "test_throw_error No JSON SENT: #{p.inspect}" unless content.scan(/Sentry - Debug:: Request status: 200/).size == 1 - end - end - end - end - end -end - - -if ENV['ANDROID'] == '1' - android_check -else - ios_check -end diff --git a/appium/conftest.py b/appium/conftest.py deleted file mode 100644 index 8d96602724..0000000000 --- a/appium/conftest.py +++ /dev/null @@ -1,96 +0,0 @@ -import os -import sys -import pytest -import traceback - -from appium import webdriver - -DEBUG_DRIVER = os.environ.get('DEBUG_DRIVER') == '1' - - -def hook_driver(driver): - real_execute = driver.command_executor.execute - def execute_proxy(*args, **kwargs): - print 'calling remote', args, kwargs - traceback.print_stack(file=sys.stdout, limit=4) - return real_execute(*args, **kwargs) - driver.command_executor.execute = execute_proxy - - -class DriverProxy(object): - - def __init__(self, make_driver): - self._make_driver = make_driver - self._driver = None - - def quit(self): - if self._driver is None: - return - - # this fails but actually succeeds - try: - self._driver.quit() - except Exception: - pass - self._driver = None - - def relaunch_app(self): - #self.quit() if we quit here, we loose connection to the app - - # this fails but actually succeeds - try: - self.launch_app() - except Exception: - pass - - def _get_driver(self): - if self._driver is None: - self._driver = self._make_driver() - if DEBUG_DRIVER: - hook_driver(self._driver) - return self._driver - - def __getattr__(self, name): - return getattr(self._get_driver(), name) - - -@pytest.fixture(scope='function') -def driver(request): - def make_driver(): - return webdriver.Remote( - command_executor='http://127.0.0.1:4723/wd/hub', - desired_capabilities=default_capabilities()) - - driver = DriverProxy(make_driver) - request.addfinalizer(driver.quit) - - return driver - - -@pytest.fixture(scope='function') -def on_aws(): - return runs_on_aws() - - -def runs_on_aws(): - return os.getenv('SCREENSHOT_PATH', False) - - -def default_capabilities(): - desired_caps = {} - - desired_caps['noReset'] = True - desired_caps['showIOSLog'] = True - if not runs_on_aws(): - if os.environ.get('ANDROID') == '1': - desired_caps['app'] = os.path.abspath('example/android/app/build/outputs/apk/app-full-release-unsigned.apk') - desired_caps['platformName'] = 'Android' - desired_caps['deviceName'] = 'Android' - else: - desired_caps['app'] = os.path.abspath('aws/Build/Products/Release-iphonesimulator/AwesomeProject.app') - desired_caps['platformName'] = 'iOS' - desired_caps['platformVersion'] = '11.0' - desired_caps['deviceName'] = 'iPhone Simulator' - - - return desired_caps diff --git a/appium/example b/appium/example deleted file mode 120000 index 425f3b5787..0000000000 --- a/appium/example +++ /dev/null @@ -1 +0,0 @@ -../examples/react-native/AwesomeProject \ No newline at end of file diff --git a/appium/fastlane/Appfile b/appium/fastlane/Appfile deleted file mode 100644 index f372081824..0000000000 --- a/appium/fastlane/Appfile +++ /dev/null @@ -1,7 +0,0 @@ -app_identifier "org.reactjs.native.example.AwesomeProject" # The bundle identifier of your app -apple_id "" # Your Apple email address - -team_id "" # Developer Portal Team ID - -# you can even provide different app identifiers, Apple IDs and team names per lane: -# More information: https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Appfile.md diff --git a/appium/fastlane/Fastfile b/appium/fastlane/Fastfile deleted file mode 100644 index 0dfaf57a43..0000000000 --- a/appium/fastlane/Fastfile +++ /dev/null @@ -1,105 +0,0 @@ -fastlane_version "2.48.0" -opt_out_crash_reporting - -default_platform :ios - -def validate_android_build_output(output) - UI.user_error!("1 Missing output in log") unless output.scan(/POST \/api\/0\/projects\/sentry-test\/react-native\/releases\/com.awesomeproject.full-1.0-full\/files\//).size >= 1 - UI.user_error!("2 Missing output in log") unless output.scan(/POST \/api\/0\/projects\/sentry-test\/react-native\/releases\/com.awesomeproject.demo-1.0-demo\/files\//).size >= 1 - UI.user_error!("3 Missing output in log") unless output.scan(/"dist": "4", "name": "~\/index.android.bundle"/).size >= 1 - UI.user_error!("4 Missing output in log") unless output.scan(/"dist": "3", "name": "~\/index.android.bundle"/).size >= 1 - UI.user_error!("5 Missing output in log") unless output.scan(/"dist": "4", "name": "~\/index.android.bundle.map"/).size >= 1 - UI.user_error!("6 Missing output in log") unless output.scan(/"dist": "3", "name": "~\/index.android.bundle.map"/).size >= 1 - UI.success("Android build output validated") -end - -platform :ios do - before_all do - # ENV["SLACK_URL"] = "https://hooks.slack.com/services/..." - - end - - lane :build_for_local_appium do - xcodebuild( - scheme: "AwesomeProject", - project: "example/ios/AwesomeProject.xcodeproj", - destination: "generic/platform=iOS Simulator", - configuration: "Release", - derivedDataPath: "aws", - xcargs: "GCC_PREPROCESSOR_DEFINITIONS='AWS_UI_TEST' ENABLE_BITCODE=NO CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO build-for-testing" - ) - end - - lane :build_for_device_farm do - xcodebuild( - scheme: "AwesomeProject", - project: "example/ios/AwesomeProject.xcodeproj", - destination: "generic/platform=iOS", - configuration: "Release", - derivedDataPath: "aws", - xcargs: "GCC_PREPROCESSOR_DEFINITIONS='AWS_UI_TEST' ENABLE_BITCODE=NO CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO build-for-testing" - ) - end - - lane :aws_ios_upload_and_run do - # ENV['AWS_ACCESS_KEY_ID'] = '' - # ENV['AWS_SECRET_ACCESS_KEY'] = '' - # ENV['AWS_REGION'] = 'us-west-2' - - # Transform .app into AWS compatible IPA - aws_device_farm_package( - derrived_data_path: "aws", - configuration: "Release" - ) - - # RUN tests on AWS Device Farm - aws_device_farm( - name: "react-native", - test_binary_path: "test_bundle.zip", - test_package_type: "APPIUM_PYTHON_TEST_PACKAGE", - test_type: 'APPIUM_PYTHON', - allow_failed_tests: true - ) - - store_run_arn - end - - lane :build_android_for_device_farm do - android_build_output = sh("cd ../example/android/; ./gradlew assembleRelease --stacktrace") - validate_android_build_output(android_build_output) - sh("jarsigner -verbose -digestalg SHA1 -sigalg MD5withRSA -keystore release.keystore -storepass 123456 ../example/android/app/build/outputs/apk/app-full-release-unsigned.apk release") - end - - lane :aws_android_upload_and_run do - aws_device_farm( - name: "react-native", - binary_path: "example/android/app/build/outputs/apk/app-full-release-unsigned.apk", - device_pool: "Android", - test_binary_path: "test_bundle.zip", - test_package_type: "APPIUM_PYTHON_TEST_PACKAGE", - test_type: 'APPIUM_PYTHON', - allow_failed_tests: true - ) - - store_run_arn - end - - lane :store_run_arn do - sh("echo #{ENV['AWS_DEVICE_FARM_RUN_ARN']} > .aws.run.arn") - end - - after_all do |lane| - # This block is called, only if the executed lane was successful - - # slack( - # message: "Successfully deployed new App Update." - # ) - end - - error do |lane, exception| - # slack( - # message: exception.message, - # success: false - # ) - end -end diff --git a/appium/fastlane/Pluginfile b/appium/fastlane/Pluginfile deleted file mode 100644 index 49dd54635b..0000000000 --- a/appium/fastlane/Pluginfile +++ /dev/null @@ -1,5 +0,0 @@ -# Autogenerated by fastlane -# -# Ensure this file is checked in to source control! - -gem 'fastlane-plugin-aws_device_farm', :git => 'git://github.com/HazAT/fastlane-plugin-aws_device_farm.git' diff --git a/appium/fastlane/release.keystore b/appium/fastlane/release.keystore deleted file mode 100644 index e7dd22b21910af5721dd2bcb08f5979e05390c63..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2246 zcmchYc{J1uAI9f5GxmKa%UCYO7=~f&q-e;##wb%XwltO^yNt08(%7>^me9=-x>9K* z6@^OCSTeSl5z3NX*SY6?-*eCD|M!pQkLUB(_dMr0&-Y;IUVsPN-4o60SGtiM!b(U^+|Ot+a`yM$U* zM6)cn_BY^GpIHgdU~L)ca|pY-(rZq@T&5(wjpGwU+nhfu(Iv7L5yG@d3n}BSu9GJv z*oY4oS*nQaU@wg9Np;o=SW^9nl=u;LwylVYI zzj;4py_?CFt|{giP31D1cpTop)K^srmk8rDdKK;{@U3}tbk$*dGHQg+Bi|#{bL?w_ zLm*YZ(n8;P+lWnT7t~-k?pXYC#ara* z7;nD~cULG&#fQQ_C|47k;XUx@^ab9*?)fLh3mr6OlV}twi;{rY>ySgiCKhQlYI&T{ zOT~!W_$4eRsmU?-UD}^RehHNu)nxEuHBB7(#o~)WK+8{tLUbwqoZMI zl8#7hn`!^fX;iFg?z%2fA!8$|^qpA{N}3Di2~0MNX6KS3^yZB7+iHV{z7T0o#-4YZ z(PE-Ej*wIeO)V6H42g z*U6yCYbNd|PMu(Y^E+wl4MvgJ7hKq*+AZFH@T%R0<2b&An1C@__A6eJZk59LP zvqe`3C&qUGIuP5X(dD}B&ys%aSr6m5Kwws*68&W81oe5{k90*jJHuOWFQ440yvScS z!w^3&-C5vZceM1z44fwI3G&bFchg70*E-6`*iqVjxA1;Rc?A`bjfzu?m}<7jp5se? z6n9G6QLjI&a+ECe!s)91xxKeqpF%?E=I~h?UvCn%FyF*U69*{wz4sXCijT9e+&C96 zPnHdnHP8`{Su1KH22_y91nK{cE!)ensm7Ie7?{X%~o3i&9_Y~Z+I)nxcx zC{yfIxoaIFhCYM9T*xm}HQ6|tX4sH9QX5dSCpK5YeE=#0MoGH94J$cK#w{qGQmU4- z(riX$ok1@apRRlNo=Eb}<>`m+YAPX14c*L!Y_3k4~t> zzG12y;$HxuFlWffv`AzUH^T_gOL zu>VHbej}W}5w70|B zAVh!#*mP+LtrR|6sCJ z{s}GQ+s__T40u`kkn`@KV@(CjT|XNZSIa#t5aCl$QD;Ka?xzpSi6%KuLM+2h)tiN2~D?HX~RDQ74n`+d$yuf|m zp+pV`vm0Pn215W4P$`FmA*Bx+BFzgGg$iFRU&~>N`*Nx(wxMJTN*v>LI8FW?;$f!_ zLj*vP(YpC5Ik@BLlwI_&uG$7q&<9DYZ#d+}GQ^=R^Yue*1(Uc|aNnob!&+%o?Z)&s zww=*A(3+6|Z3g0vubq}qWLx`ZgUer@&82NJQ-XcSK38s>uG=!Z+?G@<1J7EX0PWe` z$kR`!ff#UPvFX9|^ajOhkq@}~M0Bm>OK z3<{zT@{Xv6U4psA)rX^A$m(exIK$(7ol;ZbgGmg&vu8Xbn|DT2#7aKB%8N3JVVC_( XFw@7C_ML2MaJFU4`<*Ocv@rh$?D62( diff --git a/appium/requirements.txt b/appium/requirements.txt deleted file mode 100644 index deb6f90c92..0000000000 --- a/appium/requirements.txt +++ /dev/null @@ -1,10 +0,0 @@ -Appium-Python-Client==0.24 -pbr==3.1.1 -py==1.4.34 -pytest==3.1.3 -selenium==3.4.3 -six==1.10.0 -stevedore==1.24.0 -virtualenv==15.1.0 -virtualenv-clone==0.2.6 -virtualenvwrapper==4.7.2 diff --git a/appium/tests/test_android.py b/appium/tests/test_android.py deleted file mode 100644 index 6f66782600..0000000000 --- a/appium/tests/test_android.py +++ /dev/null @@ -1,82 +0,0 @@ -import os -import json - -from time import sleep - - -def extractText(driver): - return driver.find_elements_by_xpath('//android.widget.EditText')[0].text - -def wait(driver, duration): - sleep(duration) - driver.implicitly_wait(duration * 1000) - -def test_send_message(driver): - wait(driver, 3) - driver.find_element_by_accessibility_id('send message').click() - wait(driver, 3) - value = extractText(driver) - - assert value != None - event = json.loads(value) - - assert event['event_id'] != None - assert event['level'] == 'warning' - assert event['message'] == 'TEST message' - assert event['extra']['react'] - assert event['tags']['react'] - -# def test_throw_error(driver): -# driver.implicitly_wait(5000) -# driver.find_element_by_accessibility_id('throw error').click() -# driver.relaunch_app() -# value = extractText(driver) -# driver.implicitly_wait(5000) -# # the crash should have been already sent -# assert value is None - -# def test_native_crash(driver): -# driver.implicitly_wait(5000) -# driver.find_element_by_accessibility_id('native crash').click() -# driver.relaunch_app() -# wait(5) -# driver.implicitly_wait(5000) -# value = extractText(driver) - -# assert value != None -# event = json.loads(value) - -# assert event['event_id'] != None -# assert event['level'] == 'fatal' - -def test_version(driver): - wait(driver, 3) - driver.find_element_by_accessibility_id('set version').click() - driver.find_element_by_accessibility_id('send message').click() - wait(driver, 3) - value = extractText(driver) - assert value != None - event = json.loads(value) - assert event['release'] == 'com.awesomeproject.full-1337' - - -def test_release(driver): - wait(driver, 3) - driver.find_element_by_accessibility_id('set release').click() - driver.find_element_by_accessibility_id('send message').click() - wait(driver, 3) - value = extractText(driver) - assert value != None - event = json.loads(value) - assert event['release'] == 'myversion' - - -def test_dist(driver): - wait(driver, 3) - driver.find_element_by_accessibility_id('set dist').click() - driver.find_element_by_accessibility_id('send message').click() - wait(driver, 3) - value = extractText(driver) - assert value != None - event = json.loads(value) - assert event['dist'] == '500' diff --git a/appium/tests/test_ios.py b/appium/tests/test_ios.py deleted file mode 100644 index c2302b9d8e..0000000000 --- a/appium/tests/test_ios.py +++ /dev/null @@ -1,117 +0,0 @@ -import os -import json - -from time import sleep - - -def extractText(driver): - return driver.find_elements_by_xpath('//XCUIElementTypeTextField[@name="status"]')[0].text - - -def test_send_message(driver): - driver.find_element_by_accessibility_id('send message').click() - sleep(3) - value = extractText(driver) - assert value != None - event = json.loads(value) - assert len(event['breadcrumbs']) > 0 - assert len(event['contexts']) > 0 - assert event['message'] == 'TEST message' - assert event['extra']['react'] - assert event['tags']['react'] == '1' - assert event['sdk']['integrations'][0] == 'sentry-cocoa' - assert event['sdk']['name'] == 'sentry-react-native' - assert len(event['user']) > 0 - - -def test_version(driver): - driver.find_element_by_accessibility_id('set version').click() - driver.find_element_by_accessibility_id('send message').click() - sleep(3) - value = extractText(driver) - assert value != None - event = json.loads(value) - assert event['release'] == 'org.reactjs.native.example.AwesomeProject-1337' - - -def test_release(driver): - driver.find_element_by_accessibility_id('set release').click() - driver.find_element_by_accessibility_id('send message').click() - sleep(3) - value = extractText(driver) - assert value != None - event = json.loads(value) - assert event['release'] == 'myversion' - - -def test_dist(driver): - driver.find_element_by_accessibility_id('set dist').click() - driver.find_element_by_accessibility_id('send message').click() - sleep(3) - value = extractText(driver) - assert value != None - event = json.loads(value) - assert event['dist'] == '500' - - -def test_throw_error(driver): - driver.find_element_by_accessibility_id('throw error').click() - driver.relaunch_app() - sleep(3) - value = extractText(driver) - assert value != None - event = json.loads(value) - - assert len(event['breadcrumbs']) > 0 - assert len(event['contexts']) > 0 - for thread in event['exception']['values']: - assert len(thread['stacktrace']['frames']) > 0 - cocoa_frames = 0 - js_frames = 0 - for frame in thread['stacktrace']['frames']: - if frame.get('package', None): - cocoa_frames += 1 - if frame.get('platform', None) == 'javascript': - js_frames += 1 - assert js_frames > 0 - assert len(event['exception']['values']) > 0 - assert event['exception']['values'][0]['value'] == "Sentry: Test throw error" - assert event['exception']['values'][0]['type'] == "Error" - assert event['platform'] == 'cocoa' - assert event['level'] == 'fatal' - assert event['extra']['react'] - assert event['tags']['react'] == '1' - assert len(event['user']) > 0 - -def test_native_crash(driver): - sleep(2) - driver.find_element_by_accessibility_id('native crash').click() - driver.relaunch_app() - sleep(3) - value = extractText(driver) - # the crash should have been already sent - assert value != None - event = json.loads(value) - - assert len(event['breadcrumbs']) > 0 - assert len(event['contexts']) > 0 - assert len(event['threads']['values']) > 0 - for thread in event['exception']['values']: - assert len(thread['stacktrace']['frames']) > 0 - cocoa_frames = 0 - js_frames = 0 - for frame in thread['stacktrace']['frames']: - if frame.get('package', None): - cocoa_frames += 1 - if frame.get('platform', None) == 'javascript': - js_frames += 1 - assert cocoa_frames > 0 - assert js_frames > 0 - assert len(event['exception']['values']) > 0 - assert len(event['debug_meta']['images']) > 0 - assert event['exception']['values'][0]['value'] != None - assert event['platform'] == 'cocoa' - assert event['level'] == 'fatal' - assert event['extra']['react'] - assert event['tags']['react'] == '1' - assert len(event['user']) > 0 diff --git a/examples b/examples deleted file mode 160000 index 4ce1e6fd44..0000000000 --- a/examples +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 4ce1e6fd44586ce3a173bc0d8ff110c7fbc57951 diff --git a/ios/RNSentry.m b/ios/RNSentry.m index ec11635ab5..16d144246c 100644 --- a/ios/RNSentry.m +++ b/ios/RNSentry.m @@ -129,14 +129,4 @@ + (BOOL)requiresMainQueueSetup { [SentryClient.sharedClient crash]; } -RCT_EXPORT_METHOD(extraUpdated:(NSDictionary * _Nonnull)extra) -{ - if (nil != [extra objectForKey:@"__sentry_release"]) { - SentryClient.sharedClient.releaseName = [extra objectForKey:@"__sentry_release"]; - } - if (nil != [extra objectForKey:@"__sentry_dist"]) { - SentryClient.sharedClient.dist = [extra objectForKey:@"__sentry_dist"]; - } -} - @end diff --git a/package.json b/package.json index 821abaeec6..eb49fbc18d 100644 --- a/package.json +++ b/package.json @@ -34,22 +34,22 @@ "react-native": ">=0.56.0" }, "dependencies": { - "@sentry/browser": "^5.11.1", - "@sentry/core": "^5.11.1", - "@sentry/integrations": "^5.11.1", - "@sentry/types": "^5.11.0", - "@sentry/utils": "^5.11.1", - "@sentry/wizard": "^1.0.2" + "@sentry/browser": "^5.12.1", + "@sentry/core": "^5.12.0", + "@sentry/integrations": "^5.12.0", + "@sentry/types": "^5.12.0", + "@sentry/utils": "^5.12.0", + "@sentry/wizard": "^1.1.0" }, "devDependencies": { "@sentry/typescript": "5.10.0", - "@types/jest": "^24.0.25", - "@types/react-native": "^0.60.23", + "@types/jest": "^25.1.2", + "@types/react-native": "^0.61.12", "jest": "^24.9.0", "prettier": "^1.19.1", "replace-in-file": "^4.2.0", "rimraf": "^3.0.0", - "snyk": "^1.256.0", + "snyk": "^1.290.2", "ts-jest": "^24.3.0", "tslint": "^5.20.1", "typescript": "^3.4.5" diff --git a/sentry.gradle b/sentry.gradle index 3d3602ea84..a0c8c1bbcb 100644 --- a/sentry.gradle +++ b/sentry.gradle @@ -156,10 +156,10 @@ def extractReleasesInfo() { def releases = [:] android.applicationVariants.each { variant -> - def releaseName = "${variant.getApplicationId()}-${variant.getVersionName()}" variant.outputs.each { output -> def versionCode = output.getVersionCode() + def releaseName = "${variant.getApplicationId()}@${variant.getVersionName()}+${versionCode}" def variantName = variant.getName() def outputName = output.getName() if (releases[variantName] == null) { diff --git a/src/js/backend.ts b/src/js/backend.ts index 46c44f02e8..f1ba469f62 100644 --- a/src/js/backend.ts +++ b/src/js/backend.ts @@ -1,6 +1,6 @@ import { BrowserOptions, Transports } from "@sentry/browser"; import { BrowserBackend } from "@sentry/browser/dist/backend"; -import { BaseBackend, getCurrentHub, NoopTransport } from "@sentry/core"; +import { BaseBackend, NoopTransport } from "@sentry/core"; import { Event, EventHint, Severity, Transport } from "@sentry/types"; import { Alert, NativeModules, YellowBox } from "react-native"; @@ -55,13 +55,6 @@ export class ReactNativeBackend extends BaseBackend { RNSentry.startWithDsnString(_options.dsn, _options).then(() => { RNSentry.setLogLevel(_options.debug ? 2 : 1); }); - // Workaround for setting release/dist on native - const scope = getCurrentHub().getScope(); - if (scope) { - scope.addScopeListener(internalScope => - RNSentry.extraUpdated((internalScope as any)._extra) - ); - } } else { if (__DEV__ && _options.enableNativeNagger) { Alert.alert( diff --git a/src/js/integrations/release.ts b/src/js/integrations/release.ts index f59d6d0cd5..aa299e36e5 100644 --- a/src/js/integrations/release.ts +++ b/src/js/integrations/release.ts @@ -33,7 +33,7 @@ export class Release implements Integration { version: string; }; if (release) { - event.release = `${release.id}-${release.version}`; + event.release = `${release.id}@${release.version}+${release.build}`; event.dist = `${release.build}`; } } catch (_Oo) { diff --git a/src/js/sdk.ts b/src/js/sdk.ts index fe8308df74..c01d38135c 100644 --- a/src/js/sdk.ts +++ b/src/js/sdk.ts @@ -6,6 +6,8 @@ import { import { initAndBind, setExtra } from "@sentry/core"; import { RewriteFrames } from "@sentry/integrations"; import { StackFrame } from "@sentry/types"; +import { getGlobalObject } from "@sentry/utils"; +// import { NativeModules } from "react-native"; import { ReactNativeOptions } from "./backend"; import { ReactNativeClient } from "./client"; @@ -16,6 +18,8 @@ import { Release } from "./integrations"; +// const { RNSentry } = NativeModules; + const IGNORED_DEFAULT_INTEGRATIONS = [ "GlobalHandlers", // We will use the react-native internal handlers "Breadcrumbs", // We add it later, just not patching fetch @@ -39,10 +43,7 @@ export function init( ...defaultIntegrations.filter( i => !IGNORED_DEFAULT_INTEGRATIONS.includes(i.name) ), - new Integrations.Breadcrumbs({ - console: false, // If this in enabled it causes problems to native calls on >= RN 0.60 - fetch: false - }) + new Integrations.Breadcrumbs() ]; if (__DEV__) { options.defaultIntegrations.push(new DebugSymbolicator()); @@ -56,6 +57,10 @@ export function init( .replace(/^address at /, "") .replace(/^.*\/[^\.]+(\.app|CodePush|.*(?=\/))/, ""); + if (frame.filename === "native") { + frame.in_app = false; + } + const appPrefix = "app://"; // We always want to have a tripple slash frame.filename = @@ -80,6 +85,21 @@ export function init( } // tslint:enable: strict-comparisons initAndBind(ReactNativeClient, options); + + // TODO: Regist scope syncing here + // Workaround for setting release/dist on native + // const scope = getCurrentHub().getScope(); + // if (scope) { + // scope.addScopeListener(internalScope => { + // console.log(internalScope); + // // RNSentry.extraUpdated((internalScope as any)._extra) + // }); + // } + + // tslint:disable-next-line: no-unsafe-any + if (getGlobalObject().HermesInternal) { + getCurrentHub().setTag("hermes", "true"); + } } /** diff --git a/src/js/transports/native.ts b/src/js/transports/native.ts index 2adf81db03..18999df9ba 100644 --- a/src/js/transports/native.ts +++ b/src/js/transports/native.ts @@ -1,5 +1,5 @@ import { Event, Response, Transport } from "@sentry/types"; -import { PromiseBuffer } from "@sentry/utils"; +import { PromiseBuffer, SentryError } from "@sentry/utils"; import { NATIVE } from "../wrapper"; @@ -12,7 +12,11 @@ export class NativeTransport implements Transport { * @inheritDoc */ public sendEvent(event: Event): PromiseLike { - // TODO check if buffer is full like in node + if (!this._buffer.isReady()) { + return Promise.reject( + new SentryError("Not adding Promise due to buffer limit reached.") + ); + } return this._buffer.add(NATIVE.sendEvent(event)); } diff --git a/src/js/wrapper.ts b/src/js/wrapper.ts index b97916b8ad..b65a432ccf 100644 --- a/src/js/wrapper.ts +++ b/src/js/wrapper.ts @@ -1,5 +1,5 @@ import { Event, Response } from "@sentry/types"; -import { NativeModules } from "react-native"; +import { NativeModules, Platform } from "react-native"; const { RNSentry } = NativeModules; @@ -12,7 +12,25 @@ export const NATIVE = { * @param event Event */ sendEvent(event: Event): PromiseLike { + if (NATIVE.platform === "android") { + const header = JSON.stringify({ event_id: event.event_id }); + + (event as any).message = { + message: event.message + }; + const payload = JSON.stringify(event); + const item = JSON.stringify({ + content_type: "application/json", + length: payload.length, + type: "event" + }); + const envelope = `${header}\n${item}\n${payload}`; + // tslint:disable-next-line: no-unsafe-any + return RNSentry.captureEnvelope(envelope); + } // tslint:disable-next-line: no-unsafe-any return RNSentry.sendEvent(event); - } + }, + + platform: Platform.OS }; diff --git a/yarn.lock b/yarn.lock index 7fece049e9..c15a0edf6b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -305,70 +305,80 @@ "@types/istanbul-reports" "^1.1.1" "@types/yargs" "^13.0.0" -"@sentry/browser@^5.11.1": - version "5.11.1" - resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-5.11.1.tgz#337ffcb52711b23064c847a07629e966f54a5ebb" - integrity sha512-oqOX/otmuP92DEGRyZeBuQokXdeT9HQRxH73oqIURXXNLMP3PWJALSb4HtT4AftEt/2ROGobZLuA4TaID6My/Q== - dependencies: - "@sentry/core" "5.11.1" - "@sentry/types" "5.11.0" - "@sentry/utils" "5.11.1" +"@jest/types@^25.1.0": + version "25.1.0" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-25.1.0.tgz#b26831916f0d7c381e11dbb5e103a72aed1b4395" + integrity sha512-VpOtt7tCrgvamWZh1reVsGADujKigBUFTi19mlRjqEGsE8qH4r3s+skY33dNdXOwyZIvuftZ5tqdF1IgsMejMA== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^1.1.1" + "@types/yargs" "^15.0.0" + chalk "^3.0.0" + +"@sentry/browser@^5.12.1": + version "5.12.1" + resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-5.12.1.tgz#dc1f268595269fb7277f55eb625c7e92d76dc01b" + integrity sha512-Zl7VdppUxctyaoqMSEhnDJp2rrupx8n8N2n3PSooH74yhB2Z91nt84mouczprBsw3JU1iggGyUw9seRFzDI1hw== + dependencies: + "@sentry/core" "5.12.0" + "@sentry/types" "5.12.0" + "@sentry/utils" "5.12.0" tslib "^1.9.3" -"@sentry/cli@^1.48.0": - version "1.49.0" - resolved "https://registry.yarnpkg.com/@sentry/cli/-/cli-1.49.0.tgz#174152978acbe6023986a8fb0b247cf58b4653d8" - integrity sha512-Augz7c42Cxz/xWQ/NOVjUGePKVA370quvskWbCICMUwxcTvKnCLI+7KDdzEoCexj4MSuxFfBzLnrrn4w2+c9TQ== +"@sentry/cli@^1.50.0": + version "1.50.0" + resolved "https://registry.yarnpkg.com/@sentry/cli/-/cli-1.50.0.tgz#724e47be46abd4ba14359d2b7f49372adf4f407c" + integrity sha512-2E2O09subNt+S8LkDRk19keS+1ww/VT3BdfTdqwNC5+Aq09Ee0y4MbuurZRHk0J1DD8fVSJA6V7Sq04PSaHSQA== dependencies: fs-copy-file-sync "^1.1.1" - https-proxy-agent "^3.0.0" + https-proxy-agent "^4.0.0" mkdirp "^0.5.1" node-fetch "^2.1.2" progress "2.0.0" proxy-from-env "^1.0.0" -"@sentry/core@5.11.1", "@sentry/core@^5.11.1": - version "5.11.1" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-5.11.1.tgz#9e2da485e196ae32971545c1c49ee6fe719930e2" - integrity sha512-BpvPosVNT20Xso4gAV54Lu3KqDmD20vO63HYwbNdST5LUi8oYV4JhvOkoBraPEM2cbBwQvwVcFdeEYKk4tin9A== +"@sentry/core@5.12.0", "@sentry/core@^5.12.0": + version "5.12.0" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-5.12.0.tgz#d6380c4ef7beee5f418ac1d0e5be86a2de2af449" + integrity sha512-wY4rsoX71QsGpcs9tF+OxKgDPKzIFMRvFiSRcJoPMfhFsTilQ/CBMn/c3bDtWQd9Bnr/ReQIL6NbnIjUsPHA4Q== dependencies: - "@sentry/hub" "5.11.1" - "@sentry/minimal" "5.11.1" - "@sentry/types" "5.11.0" - "@sentry/utils" "5.11.1" + "@sentry/hub" "5.12.0" + "@sentry/minimal" "5.12.0" + "@sentry/types" "5.12.0" + "@sentry/utils" "5.12.0" tslib "^1.9.3" -"@sentry/hub@5.11.1": - version "5.11.1" - resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-5.11.1.tgz#ddcb865563fae53852d405885c46b4c6de68a91b" - integrity sha512-ucKprYCbGGLLjVz4hWUqHN9KH0WKUkGf5ZYfD8LUhksuobRkYVyig0ZGbshECZxW5jcDTzip4Q9Qimq/PkkXBg== +"@sentry/hub@5.12.0": + version "5.12.0" + resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-5.12.0.tgz#5e8c8f249f5bdbeb8cc4ec02c2ccc53a67f2cc02" + integrity sha512-3k7yE8BEVJsKx8mR4LcI4IN0O8pngmq44OcJ/fRUUBAPqsT38jsJdP2CaWhdlM1jiNUzUDB1ktBv6/lY+VgcoQ== dependencies: - "@sentry/types" "5.11.0" - "@sentry/utils" "5.11.1" + "@sentry/types" "5.12.0" + "@sentry/utils" "5.12.0" tslib "^1.9.3" -"@sentry/integrations@^5.11.1": - version "5.11.1" - resolved "https://registry.yarnpkg.com/@sentry/integrations/-/integrations-5.11.1.tgz#6612efc620c187ba85a57c6e70e69d9474af7fb6" - integrity sha512-zubOE9zQ4qSutS0ZTnAteDnzbVcHSI2bXD/0nTD3t3ljY+OWgcluBXYCAeAp8vOv2qCoef5ySdQa1DBCW7NQ3Q== +"@sentry/integrations@^5.12.0": + version "5.12.0" + resolved "https://registry.yarnpkg.com/@sentry/integrations/-/integrations-5.12.0.tgz#4d735abf2989049ef860e3eaad0883b63d8274e6" + integrity sha512-4G/TvCEP9M6xgY61r46UE4ruSgF42rZnvO0ZfIBI/240DNYMTpHLvjU3Xvrv3wDl3emCvy4QgAIceI/zj8nPjw== dependencies: - "@sentry/types" "5.11.0" - "@sentry/utils" "5.11.1" + "@sentry/types" "5.12.0" + "@sentry/utils" "5.12.0" tslib "^1.9.3" -"@sentry/minimal@5.11.1": - version "5.11.1" - resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-5.11.1.tgz#0e705d01a567282d8fbbda2aed848b4974cc3cec" - integrity sha512-HK8zs7Pgdq7DsbZQTThrhQPrJsVWzz7MaluAbQA0rTIAJ3TvHKQpsVRu17xDpjZXypqWcKCRsthDrC4LxDM1Bg== +"@sentry/minimal@5.12.0": + version "5.12.0" + resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-5.12.0.tgz#2611e2aa520c1edb7999e6de51bd65ec66341757" + integrity sha512-fk73meyz4k4jCg9yzbma+WkggsfEIQWI2e2TWfYsRGcrV3RnlSrXyM4D91/A8Bjx10SNezHPUFHjasjlHXOkyA== dependencies: - "@sentry/hub" "5.11.1" - "@sentry/types" "5.11.0" + "@sentry/hub" "5.12.0" + "@sentry/types" "5.12.0" tslib "^1.9.3" -"@sentry/types@5.11.0", "@sentry/types@^5.11.0": - version "5.11.0" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-5.11.0.tgz#40f0f3174362928e033ddd9725d55e7c5cb7c5b6" - integrity sha512-1Uhycpmeo1ZK2GLvrtwZhTwIodJHcyIS6bn+t4IMkN9MFoo6ktbAfhvexBDW/IDtdLlCGJbfm8nIZerxy0QUpg== +"@sentry/types@5.12.0", "@sentry/types@^5.12.0": + version "5.12.0" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-5.12.0.tgz#5367e53c74261beea01502e3f7b6f3d822682a31" + integrity sha512-aZbBouBLrKB8wXlztriIagZNmsB+wegk1Jkl6eprqRW/w24Sl/47tiwH8c5S4jYTxdAiJk+SAR10AAuYmIN3zg== "@sentry/typescript@5.10.0": version "5.10.0" @@ -378,20 +388,20 @@ tslint-config-prettier "^1.18.0" tslint-consistent-codestyle "^1.15.1" -"@sentry/utils@5.11.1", "@sentry/utils@^5.11.1": - version "5.11.1" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-5.11.1.tgz#aa19fcc234cf632257b2281261651d2fac967607" - integrity sha512-O0Zl4R2JJh8cTkQ8ZL2cDqGCmQdpA5VeXpuBbEl1v78LQPkBDISi35wH4mKmLwMsLBtTVpx2UeUHBj0KO5aLlA== +"@sentry/utils@5.12.0", "@sentry/utils@^5.12.0": + version "5.12.0" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-5.12.0.tgz#62967f934a3ee6d21472eac0219084e37225933e" + integrity sha512-fYUadGLbfTCbs4OG5hKCOtv2jrNE4/8LHNABy9DwNJ/t5DVtGqWAZBnxsC+FG6a3nVqCpxjFI9AHlYsJ2wsf7Q== dependencies: - "@sentry/types" "5.11.0" + "@sentry/types" "5.12.0" tslib "^1.9.3" -"@sentry/wizard@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@sentry/wizard/-/wizard-1.0.2.tgz#346d1ecbeef7b765120ec8627053443456660f0d" - integrity sha512-/mS9SWcgc8uqrOhiwyGqusGnWXf4hvIiYpUGJGw4vxL8gZ3k+UMSKaEw46p+ND1X8y2RRgFJh7h7q2dtXa8QvQ== +"@sentry/wizard@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@sentry/wizard/-/wizard-1.1.0.tgz#e70636f8fbb916004ccb81ff441fbc6c48061f62" + integrity sha512-IBipl2ldDSwBYdiipBLNMfxjN7eC4H5yyVHeBFWeKIYw9voCdnvMW8TfYFlmKMZdXjW/vMS2Jak4qV5AcvAOkQ== dependencies: - "@sentry/cli" "^1.48.0" + "@sentry/cli" "^1.50.0" chalk "^2.4.1" glob "^7.1.3" inquirer "^6.2.0" @@ -423,6 +433,13 @@ dependencies: tslib "^1.9.3" +"@snyk/cli-interface@2.3.1": + version "2.3.1" + resolved "https://registry.yarnpkg.com/@snyk/cli-interface/-/cli-interface-2.3.1.tgz#73f2f4bd717b9f03f096ede3ff5830eb8d2f3716" + integrity sha512-JZvsmhDXSyjv1dkc12lPI3tNTNYlIaOiIQMYFg2RgqF3QmWjTyBUgRZcF7LoKyufHtS4dIudM6k1aHBpSaDrhw== + dependencies: + tslib "^1.9.3" + "@snyk/cocoapods-lockfile-parser@3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@snyk/cocoapods-lockfile-parser/-/cocoapods-lockfile-parser-3.0.0.tgz#514b744cedd9d3d3efb2a5d06fce1662fec2ff1a" @@ -443,6 +460,18 @@ dependencies: lodash "^4.17.13" +"@snyk/configstore@3.2.0-rc1", "@snyk/configstore@^3.2.0-rc1": + version "3.2.0-rc1" + resolved "https://registry.yarnpkg.com/@snyk/configstore/-/configstore-3.2.0-rc1.tgz#385c050d11926a26d0335a4b3be9e55f90f6e0ac" + integrity sha512-CV3QggFY8BY3u8PdSSlUGLibqbqCG1zJRmGM2DhnhcxQDRRPTGTP//l7vJphOVsUP1Oe23+UQsj7KRWpRUZiqg== + dependencies: + dot-prop "^5.2.0" + graceful-fs "^4.1.2" + make-dir "^1.0.0" + unique-string "^1.0.0" + write-file-atomic "^2.0.0" + xdg-basedir "^3.0.0" + "@snyk/dep-graph@1.13.1": version "1.13.1" resolved "https://registry.yarnpkg.com/@snyk/dep-graph/-/dep-graph-1.13.1.tgz#45721f7e21136b62d1cdd99b3319e717d9071dfb" @@ -490,6 +519,22 @@ source-map-support "^0.5.7" tslib "^1.9.3" +"@snyk/update-notifier@^2.5.1-rc2": + version "2.5.1-rc2" + resolved "https://registry.yarnpkg.com/@snyk/update-notifier/-/update-notifier-2.5.1-rc2.tgz#14bf816114b5698a255289d7170157f254202fad" + integrity sha512-dlled3mfpnAt3cQb5hxkFiqfPCj4Yk0xV8Yl5P8PeVv1pUmO7vI4Ka4Mjs4r6CYM5f9kZhviFPQQcWOIDlMRcw== + dependencies: + "@snyk/configstore" "3.2.0-rc1" + boxen "^1.3.0" + chalk "^2.3.2" + import-lazy "^2.1.0" + is-ci "^1.0.10" + is-installed-globally "^0.1.0" + is-npm "^1.0.0" + latest-version "^3.1.0" + semver-diff "^2.0.0" + xdg-basedir "^3.0.0" + "@types/agent-base@^4.2.0": version "4.2.0" resolved "https://registry.yarnpkg.com/@types/agent-base/-/agent-base-4.2.0.tgz#00644e8b395b40e1bf50aaf1d22cabc1200d5051" @@ -538,6 +583,11 @@ dependencies: "@types/node" "*" +"@types/color-name@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" + integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== + "@types/debug@^4.1.4": version "4.1.4" resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.4.tgz#56eec47706f0fd0b7c694eae2f3172e6b0b769da" @@ -568,12 +618,13 @@ "@types/istanbul-lib-coverage" "*" "@types/istanbul-lib-report" "*" -"@types/jest@^24.0.25": - version "24.0.25" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-24.0.25.tgz#2aba377824ce040114aa906ad2cac2c85351360f" - integrity sha512-hnP1WpjN4KbGEK4dLayul6lgtys6FPz0UfxMeMQCv0M+sTnzN3ConfiO72jHgLxl119guHgI8gLqDOrRLsyp2g== +"@types/jest@^25.1.2": + version "25.1.2" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-25.1.2.tgz#1c4c8770c27906c7d8def5d2033df9dbd39f60da" + integrity sha512-EsPIgEsonlXmYV7GzUqcvORsSS9Gqxw/OvkGwHfAdpjduNRxMlhsav0O5Kb0zijc/eXSO/uW6SJt9nwull8AUQ== dependencies: - jest-diff "^24.3.0" + jest-diff "^25.1.0" + pretty-format "^25.1.0" "@types/js-yaml@^3.12.1": version "3.12.1" @@ -600,12 +651,11 @@ resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.1.tgz#f1a11e7babb0c3cad68100be381d1e064c68f1f6" integrity sha512-CFzn9idOEpHrgdw8JsoTkaDDyRWk1jrzIV8djzcgpq0y9tG4B4lFT+Nxh52DVpDXV+n4+NPNv7M1Dj5uMp6XFg== -"@types/react-native@^0.60.23": - version "0.60.23" - resolved "https://registry.yarnpkg.com/@types/react-native/-/react-native-0.60.23.tgz#9270f91bbff822a1571feece56cd260f0a1b2831" - integrity sha512-hLRCWKNni/e6KEXSNtexXCg0u7CnHla6G6yeZYTMOlyG/bLE41GeLxP4dXJw1hyDsXJYN00Wc3Apr2XQ2TW1LA== +"@types/react-native@^0.61.12": + version "0.61.12" + resolved "https://registry.yarnpkg.com/@types/react-native/-/react-native-0.61.12.tgz#058c80f5aadb99b6cac1cf648e996b7795ca0fab" + integrity sha512-9Do0pTN9H3hnon0LUCTqIC5fCmFpKU5V8rJEH2iAAsCRm8+2Q7zPUMKuCaSRbO5zhXMW5oC8IE0nCfg1kqyXvw== dependencies: - "@types/prop-types" "*" "@types/react" "*" "@types/react@*": @@ -654,6 +704,13 @@ dependencies: "@types/yargs-parser" "*" +"@types/yargs@^15.0.0": + version "15.0.3" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.3.tgz#41453a0bc7ab393e995d1f5451455638edbd2baf" + integrity sha512-XCMQRK6kfpNBixHLyHUsGmXrpEmFFxzMrcnSXFMziHd8CoNJo8l16FkHyQq4x+xbM7E2XL83/O78OD8u+iZTdQ== + dependencies: + "@types/yargs-parser" "*" + "@yarnpkg/lockfile@^1.0.2": version "1.1.0" resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" @@ -699,6 +756,11 @@ agent-base@4, agent-base@^4.2.0, agent-base@^4.3.0: dependencies: es6-promisify "^5.0.0" +agent-base@5: + version "5.1.1" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-5.1.1.tgz#e8fb3f242959db44d63be665db7a8e739537a32c" + integrity sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g== + agent-base@~4.2.1: version "4.2.1" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9" @@ -745,6 +807,11 @@ ansi-regex@^4.0.0, ansi-regex@^4.1.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== +ansi-regex@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" + integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== + ansi-styles@^3.1.0, ansi-styles@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.0.tgz#c159b8d5be0f9e5a6f346dab94f16ce022161b88" @@ -757,6 +824,14 @@ ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359" + integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA== + dependencies: + "@types/color-name" "^1.1.1" + color-convert "^2.0.1" + ansicolors@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.3.2.tgz#665597de86a9ffe3aa9bfbe6cae5c6ea426b4979" @@ -954,7 +1029,7 @@ bl@^3.0.0: dependencies: readable-stream "^3.0.1" -boxen@^1.2.1: +boxen@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.3.0.tgz#55c6c39a8ba58d9c61ad22cd877532deb665a20b" integrity sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw== @@ -1105,7 +1180,7 @@ chalk@^2.0.0: escape-string-regexp "^1.0.5" supports-color "^4.0.0" -chalk@^2.0.1, chalk@^2.3.0, chalk@^2.4.2: +chalk@^2.0.1, chalk@^2.3.0, chalk@^2.3.2, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -1122,6 +1197,14 @@ chalk@^2.4.1: escape-string-regexp "^1.0.5" supports-color "^5.3.0" +chalk@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" + integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + chardet@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" @@ -1192,16 +1275,6 @@ cliui@^5.0.0: strip-ansi "^5.2.0" wrap-ansi "^5.1.0" -clone-deep@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-0.3.0.tgz#348c61ae9cdbe0edfe053d91ff4cc521d790ede8" - integrity sha1-NIxhrpzb4O3+BT2R/0zFIdeQ7eg= - dependencies: - for-own "^1.0.0" - is-plain-object "^2.0.1" - kind-of "^3.2.2" - shallow-clone "^0.1.2" - co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" @@ -1225,10 +1298,22 @@ color-convert@^1.9.0: dependencies: color-name "^1.1.1" +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + color-name@^1.1.1: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + combined-stream@^1.0.6, combined-stream@~1.0.6: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" @@ -1255,18 +1340,6 @@ concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" -configstore@^3.0.0, configstore@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.2.tgz#c6f25defaeef26df12dd33414b001fe81a543f8f" - integrity sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw== - dependencies: - dot-prop "^4.1.0" - graceful-fs "^4.1.2" - make-dir "^1.0.0" - unique-string "^1.0.0" - write-file-atomic "^2.0.0" - xdg-basedir "^3.0.0" - convert-source-map@^1.4.0, convert-source-map@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" @@ -1471,15 +1544,20 @@ diff-sequences@^24.9.0: resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-24.9.0.tgz#5715d6244e2aa65f48bba0bc972db0b0b11e95b5" integrity sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew== +diff-sequences@^25.1.0: + version "25.1.0" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-25.1.0.tgz#fd29a46f1c913fd66c22645dc75bffbe43051f32" + integrity sha512-nFIfVk5B/NStCsJ+zaPO4vYuLjlzQ6uFvPxzYyHlejNZ/UGa7G/n7peOXVrVNvRuyfstt+mZQYGpjxg9Z6N8Kw== + diff@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.1.tgz#0c667cb467ebbb5cea7f14f135cc2dba7780a8ff" integrity sha512-s2+XdvhPCOF01LRQBC8hf4vhbVmI2CGS5aZnxLJlT5FtdhPCDFq80q++zK2KlrVorVDdL5BOGZ/VfLrVtYNF+Q== -dockerfile-ast@0.0.16: - version "0.0.16" - resolved "https://registry.yarnpkg.com/dockerfile-ast/-/dockerfile-ast-0.0.16.tgz#10b329d343329dab1de70375833495f85ad65913" - integrity sha512-+HZToHjjiLPl46TqBrok5dMrg5oCkZFPSROMQjRmvin0zG4FxK0DJXTpV/CUPYY2zpmEvVza55XLwSHFx/xZMw== +dockerfile-ast@0.0.18: + version "0.0.18" + resolved "https://registry.yarnpkg.com/dockerfile-ast/-/dockerfile-ast-0.0.18.tgz#94a0ba84eb9b3e9fb7bd6beae0ea7eb6dcbca75a" + integrity sha512-SEp95qCox1KAzf8BBtjHoBDD0a7/eNlZJ6fgDf9RxqeSEDwLuEN9YjdZ/tRlkrYLxXR4i+kqZzS4eDRSqs8VKQ== dependencies: vscode-languageserver-types "^3.5.0" @@ -1490,22 +1568,22 @@ domexception@^1.0.1: dependencies: webidl-conversions "^4.0.2" -dot-prop@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" - integrity sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ== +dot-prop@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.2.0.tgz#c34ecc29556dc45f1f4c22697b6f4904e0cc4fcb" + integrity sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A== dependencies: - is-obj "^1.0.0" + is-obj "^2.0.0" -dotnet-deps-parser@4.5.2: - version "4.5.2" - resolved "https://registry.yarnpkg.com/dotnet-deps-parser/-/dotnet-deps-parser-4.5.2.tgz#f3223fa2b9d0d247c3e855d6b5a292904c2c8109" - integrity sha512-bk5Q1luEwQ10rrBwZbtTxUNadaLz2dM6xzOLoTK+oUBcaq6saCeELmkIgdG+Fwkn58XRgLQvOySVS0gp4OG6RA== +dotnet-deps-parser@4.9.0: + version "4.9.0" + resolved "https://registry.yarnpkg.com/dotnet-deps-parser/-/dotnet-deps-parser-4.9.0.tgz#d14f9f92ae9a64062cd215c8863d1e77e80236f0" + integrity sha512-V0O+7pI7Ei+iL5Kgy6nYq1UTwzrpqci5K/zf8cXyP5RWBSQBUl/JOE9I67zLUkKiwOdfPhbMQgcRj/yGA+NL1A== dependencies: "@types/xml2js" "0.4.3" lodash "^4.17.11" source-map-support "^0.5.7" - tslib "^1.9.3" + tslib "^1.10.0" xml2js "0.4.19" duplexer3@^0.1.4: @@ -1636,6 +1714,13 @@ esutils@^2.0.2: resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs= +event-loop-spinner@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/event-loop-spinner/-/event-loop-spinner-1.1.0.tgz#96de9c70e6e2b0b3e257b0901e25e792e3c9c8d0" + integrity sha512-YVFs6dPpZIgH665kKckDktEVvSBccSYJmoZUfhNUdv5d3Xv+Q+SKF4Xis1jolq9aBzuW1ZZhQh/m/zU/TPdDhw== + dependencies: + tslib "^1.10.0" + exec-sh@^0.3.2: version "0.3.4" resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.4.tgz#3a018ceb526cc6f6df2bb504b2bfe8e3a4934ec5" @@ -1819,23 +1904,11 @@ find-up@^3.0.0: dependencies: locate-path "^3.0.0" -for-in@^0.1.3: - version "0.1.8" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.8.tgz#d8773908e31256109952b1fdb9b3fa867d2775e1" - integrity sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE= - -for-in@^1.0.1, for-in@^1.0.2: +for-in@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= -for-own@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/for-own/-/for-own-1.0.0.tgz#c63332f415cedc4b04dbfe70cf836494c53cb44b" - integrity sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs= - dependencies: - for-in "^1.0.1" - forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" @@ -2069,6 +2142,11 @@ has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + has-symbols@^1.0.0, has-symbols@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" @@ -2165,6 +2243,14 @@ https-proxy-agent@^3.0.0: agent-base "^4.3.0" debug "^3.1.0" +https-proxy-agent@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz#702b71fb5520a132a66de1f67541d9e62154d82b" + integrity sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg== + dependencies: + agent-base "5" + debug "4" + iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" @@ -2297,7 +2383,7 @@ is-arrayish@^0.2.1: resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= -is-buffer@^1.0.2, is-buffer@^1.1.5: +is-buffer@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== @@ -2405,10 +2491,10 @@ is-number@^3.0.0: dependencies: kind-of "^3.0.2" -is-obj@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" - integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= +is-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== is-path-inside@^1.0.0: version "1.0.1" @@ -2417,7 +2503,7 @@ is-path-inside@^1.0.0: dependencies: path-is-inside "^1.0.1" -is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: +is-plain-object@^2.0.3, is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== @@ -2603,7 +2689,7 @@ jest-config@^24.9.0: pretty-format "^24.9.0" realpath-native "^1.1.0" -jest-diff@^24.3.0, jest-diff@^24.9.0: +jest-diff@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-24.9.0.tgz#931b7d0d5778a1baf7452cb816e325e3724055da" integrity sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ== @@ -2613,6 +2699,16 @@ jest-diff@^24.3.0, jest-diff@^24.9.0: jest-get-type "^24.9.0" pretty-format "^24.9.0" +jest-diff@^25.1.0: + version "25.1.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-25.1.0.tgz#58b827e63edea1bc80c1de952b80cec9ac50e1ad" + integrity sha512-nepXgajT+h017APJTreSieh4zCqnSHEJ1iT8HDlewu630lSJ4Kjjr9KNzm+kzGwwcpsDE6Snx1GJGzzsefaEHw== + dependencies: + chalk "^3.0.0" + diff-sequences "^25.1.0" + jest-get-type "^25.1.0" + pretty-format "^25.1.0" + jest-docblock@^24.3.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-24.9.0.tgz#7970201802ba560e1c4092cc25cbedf5af5a8ce2" @@ -2659,6 +2755,11 @@ jest-get-type@^24.9.0: resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-24.9.0.tgz#1684a0c8a50f2e4901b6644ae861f579eed2ef0e" integrity sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q== +jest-get-type@^25.1.0: + version "25.1.0" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-25.1.0.tgz#1cfe5fc34f148dc3a8a3b7275f6b9ce9e2e8a876" + integrity sha512-yWkBnT+5tMr8ANB6V+OjmrIJufHtCAqI5ic2H40v+tRqxDmE0PGnIiTyvRWFOMtmVHYpwRqyazDbTnhpjsGvLw== + jest-haste-map@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-24.9.0.tgz#b38a5d64274934e21fa417ae9a9fbeb77ceaac7d" @@ -3008,14 +3109,7 @@ jszip@^3.1.5: readable-stream "~2.3.6" set-immediate-shim "~1.0.1" -kind-of@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-2.0.1.tgz#018ec7a4ce7e3a86cb9141be519d24c8faa981b5" - integrity sha1-AY7HpM5+OobLkUG+UZ0kyPqpgbU= - dependencies: - is-buffer "^1.0.2" - -kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0, kind-of@^3.2.2: +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= @@ -3044,18 +3138,13 @@ kleur@^3.0.3: resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== -latest-version@^3.0.0: +latest-version@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-3.1.0.tgz#a205383fea322b33b5ae3b18abee0dc2f356ee15" integrity sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU= dependencies: package-json "^4.0.0" -lazy-cache@^0.2.3: - version "0.2.7" - resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-0.2.7.tgz#7feddf2dcb6edb77d11ef1d117ab5ffdf0ab1b65" - integrity sha1-f+3fLctu23fRHvHRF6tf/fCrG2U= - lcid@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" @@ -3324,14 +3413,6 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" -mixin-object@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/mixin-object/-/mixin-object-2.0.1.tgz#4fb949441dab182540f1fe035ba60e1947a5e57e" - integrity sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4= - dependencies: - for-in "^0.1.3" - is-extendable "^0.1.1" - mkdirp@0.x, mkdirp@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" @@ -3642,6 +3723,11 @@ p-locate@^3.0.0: dependencies: p-limit "^2.0.0" +p-map@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" + integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== + p-reduce@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa" @@ -3829,6 +3915,16 @@ pretty-format@^24.9.0: ansi-styles "^3.2.0" react-is "^16.8.4" +pretty-format@^25.1.0: + version "25.1.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-25.1.0.tgz#ed869bdaec1356fc5ae45de045e2c8ec7b07b0c8" + integrity sha512-46zLRSGLd02Rp+Lhad9zzuNZ+swunitn8zIpfD2B4OPCRLXbM87RJT2aBLBWYOznNUML/2l/ReMyWNC80PJBUQ== + dependencies: + "@jest/types" "^25.1.0" + ansi-regex "^5.0.0" + ansi-styles "^4.0.0" + react-is "^16.12.0" + process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" @@ -3937,7 +4033,7 @@ rc@^1.0.1, rc@^1.1.6: minimist "^1.2.0" strip-json-comments "~2.0.1" -react-is@^16.8.4: +react-is@^16.12.0, react-is@^16.8.4: version "16.12.0" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.12.0.tgz#2cc0fe0fba742d97fd527c42a13bec4eeb06241c" integrity sha512-rPCkf/mWBtKc97aLL9/txD8DZdemK0vkA3JMLShjlJB3Pj3s+lpf1KaBzMfQrAmhMQB0n1cU/SUGgKKBCe837Q== @@ -4305,16 +4401,6 @@ setprototypeof@1.1.1: resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== -shallow-clone@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-0.1.2.tgz#5909e874ba77106d73ac414cfec1ffca87d97060" - integrity sha1-WQnodLp3EG1zrEFM/sH/yofZcGA= - dependencies: - is-extendable "^0.1.1" - kind-of "^2.0.1" - lazy-cache "^0.2.3" - mixin-object "^2.0.1" - shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" @@ -4397,13 +4483,14 @@ snyk-config@^2.2.1: lodash "^4.17.11" nconf "^0.10.0" -snyk-docker-plugin@1.33.1: - version "1.33.1" - resolved "https://registry.yarnpkg.com/snyk-docker-plugin/-/snyk-docker-plugin-1.33.1.tgz#9fe0acf9964ed3bc49721163ed88de32b212ed05" - integrity sha512-xfs3DN1tPMTh6J8x2341wGK4HRr+pI5+i/YRuRmsslnBnwk/DkKYcbt8zOIWk6kzMoW8vo+9LqqXBQO/24szKg== +snyk-docker-plugin@1.38.0: + version "1.38.0" + resolved "https://registry.yarnpkg.com/snyk-docker-plugin/-/snyk-docker-plugin-1.38.0.tgz#afe0ac316e461b200bcd0063295a3f8bd3655e93" + integrity sha512-43HbJj6QatuL2BNG+Uq2Taa73wdfSQSID8FJWW4q5/LYgd9D+RtdiE4lAMwxqYYbvThU9uuza4epuF/B1CAlYw== dependencies: debug "^4.1.1" - dockerfile-ast "0.0.16" + dockerfile-ast "0.0.18" + event-loop-spinner "^1.1.0" semver "^6.1.0" tar-stream "^2.1.0" tslib "^1" @@ -4427,15 +4514,14 @@ snyk-go-plugin@1.11.1: tmp "0.0.33" tslib "^1.10.0" -snyk-gradle-plugin@3.2.2: - version "3.2.2" - resolved "https://registry.yarnpkg.com/snyk-gradle-plugin/-/snyk-gradle-plugin-3.2.2.tgz#703484bec39390d8bd9ca89a408deb77fd63122a" - integrity sha512-ijIWsypbtpdTuRcYTFsnEWbaBnhCc7q0iIg0A4OcOW/xLyInPwyfBMnip4ubNfHAS/PrvzgfwwwJhttcQD0ZaQ== +snyk-gradle-plugin@3.2.4: + version "3.2.4" + resolved "https://registry.yarnpkg.com/snyk-gradle-plugin/-/snyk-gradle-plugin-3.2.4.tgz#c1ff1dfbbe3c1a254d0da54a91c3f59c1b5582ca" + integrity sha512-XmS1gl7uZNHP9HP5RaPuRXW3VjkbdWe+EgSOlvmspztkubIOIainqc87k7rIJ6u3tLBhqsZK8b5ru0/E9Q69hQ== dependencies: - "@snyk/cli-interface" "2.2.0" + "@snyk/cli-interface" "2.3.0" "@types/debug" "^4.1.4" chalk "^2.4.2" - clone-deep "^0.3.0" debug "^4.1.1" tmp "0.0.33" tslib "^1.9.3" @@ -4448,37 +4534,38 @@ snyk-module@1.9.1, snyk-module@^1.6.0, snyk-module@^1.9.1: debug "^3.1.0" hosted-git-info "^2.7.1" -snyk-mvn-plugin@2.7.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/snyk-mvn-plugin/-/snyk-mvn-plugin-2.7.0.tgz#39996df2a878b16a7e3cbe5b63a7c43855031d49" - integrity sha512-DLBt+6ZvtoleXE7Si3wAa6gdPSWsXdIQEY6m2zW2InN9WiaRwIEKMCY822eFmRPZVNNmZNRUIeQsoHZwv/slqQ== +snyk-mvn-plugin@2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/snyk-mvn-plugin/-/snyk-mvn-plugin-2.8.0.tgz#20c4201debd99928ade099fd426d13bd17b2cc85" + integrity sha512-Jt6lsVOFOYj7rp0H2IWz/BZS9xxaO0jEFTAoafLCocJIWWuGhPpVocCqmh/hrYAdKY9gS4gVOViMJ3EvcC1r1Q== dependencies: - "@snyk/cli-interface" "2.2.0" + "@snyk/cli-interface" "2.3.1" debug "^4.1.1" lodash "^4.17.15" needle "^2.4.0" tmp "^0.1.0" tslib "1.9.3" -snyk-nodejs-lockfile-parser@1.16.1: - version "1.16.1" - resolved "https://registry.yarnpkg.com/snyk-nodejs-lockfile-parser/-/snyk-nodejs-lockfile-parser-1.16.1.tgz#4a4b38b92dbb7e8935dcce61976a69a00b6747b6" - integrity sha512-MEQImB2XU35D66wYve6g1RcDuD9vyoxGvYtM+ngSd5ItujzjIpyF26W7niqHwBRGLamqjsKF5cOlbmHs+wsx/Q== +snyk-nodejs-lockfile-parser@1.17.0: + version "1.17.0" + resolved "https://registry.yarnpkg.com/snyk-nodejs-lockfile-parser/-/snyk-nodejs-lockfile-parser-1.17.0.tgz#709e1d8c83faccae3bfdac5c10620dcedbf8c4ac" + integrity sha512-i4GAYFj9TJLOQ8F+FbIJuJWdGymi8w/XcrEX0FzXk7DpYUCY3mWibyKhw8RasfYBx5vLwUzEvRMaQuc2EwlyfA== dependencies: "@yarnpkg/lockfile" "^1.0.2" graphlib "^2.1.5" lodash "^4.17.14" + p-map "2.1.0" source-map-support "^0.5.7" tslib "^1.9.3" uuid "^3.3.2" -snyk-nuget-plugin@1.13.1: - version "1.13.1" - resolved "https://registry.yarnpkg.com/snyk-nuget-plugin/-/snyk-nuget-plugin-1.13.1.tgz#e94f6b129b62f7c0134851be233deab5a472518b" - integrity sha512-2AQVeahBK7Rt38p0Acl1fMsFQu3dsqoRODPoRaS0IM/bOBzVdAkDF9pCb5yKMREGpMZcyRFkt8Q+hGiUk0Nlfg== +snyk-nuget-plugin@1.16.0: + version "1.16.0" + resolved "https://registry.yarnpkg.com/snyk-nuget-plugin/-/snyk-nuget-plugin-1.16.0.tgz#241c6c8a417429c124c3ebf6db314a14eb8eed89" + integrity sha512-OEusK3JKKpR4Yto5KwuqjQGgb9wAhmDqBWSQomWdtKQVFrzn5B6BMzOFikUzmeMTnUGGON7gurQBLXeZZLhRqg== dependencies: debug "^3.1.0" - dotnet-deps-parser "4.5.2" + dotnet-deps-parser "4.9.0" jszip "^3.1.5" lodash "^4.17.14" snyk-paket-parser "1.5.0" @@ -4516,10 +4603,10 @@ snyk-policy@1.13.5: snyk-try-require "^1.3.1" then-fs "^2.0.0" -snyk-python-plugin@^1.14.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/snyk-python-plugin/-/snyk-python-plugin-1.14.1.tgz#ca512cce83757b2231b9aea6caa3590ac7775bef" - integrity sha512-76u10VrYJp0tz7eD7DC5/Q3fBMPlLieOqoUbN67u0OqF1nF7BLnFBnakZ9VbOqYeJyBoloL9+HIMJ5Nma9qLCQ== +snyk-python-plugin@1.17.0: + version "1.17.0" + resolved "https://registry.yarnpkg.com/snyk-python-plugin/-/snyk-python-plugin-1.17.0.tgz#9bc38ba3c799c3cbef7676a1081f52608690d254" + integrity sha512-EKdVOUlvhiVpXA5TeW8vyxYVqbITAfT+2AbL2ZRiiUNLP5ae+WiNYaPy7aB5HAS9IKBKih+IH8Ag65Xu1IYSYA== dependencies: "@snyk/cli-interface" "^2.0.3" tmp "0.0.33" @@ -4555,14 +4642,15 @@ snyk-resolve@1.0.1, snyk-resolve@^1.0.0, snyk-resolve@^1.0.1: debug "^3.1.0" then-fs "^2.0.0" -snyk-sbt-plugin@2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/snyk-sbt-plugin/-/snyk-sbt-plugin-2.9.0.tgz#cdbc3047b8749f71c51522c6cc908f0a5525e129" - integrity sha512-R8jfRDkqlSsiSHYNAItKBUKUwb0n5z304Ko8ply/eoNAJMkXbFASDKHRto1v4F4wryJb4Rl1j/vFvIwytqZrww== +snyk-sbt-plugin@2.11.0: + version "2.11.0" + resolved "https://registry.yarnpkg.com/snyk-sbt-plugin/-/snyk-sbt-plugin-2.11.0.tgz#f5469dcf5589e34575fc901e2064475582cc3e48" + integrity sha512-wUqHLAa3MzV6sVO+05MnV+lwc+T6o87FZZaY+43tQPytBI2Wq23O3j4POREM4fa2iFfiQJoEYD6c7xmhiEUsSA== dependencies: + debug "^4.1.1" semver "^6.1.2" tmp "^0.1.0" - tree-kill "^1.2.1" + tree-kill "^1.2.2" tslib "^1.10.0" snyk-tree@^1.0.0: @@ -4582,22 +4670,23 @@ snyk-try-require@1.3.1, snyk-try-require@^1.1.1, snyk-try-require@^1.3.1: lru-cache "^4.0.0" then-fs "^2.0.0" -snyk@^1.256.0: - version "1.256.0" - resolved "https://registry.yarnpkg.com/snyk/-/snyk-1.256.0.tgz#b04dd4a2d97e3c9b6086c47836ee70ea067438ee" - integrity sha512-wG6eTSZ6f4hH3cIOl4F9JE//a6eIv6O4K786/JgFDuf3XPM+zEGoY5dC+Q5yliPAarWcI1CeF1akPpyStiCkoA== +snyk@^1.290.2: + version "1.290.2" + resolved "https://registry.yarnpkg.com/snyk/-/snyk-1.290.2.tgz#a5e36e735a8083464263abdb266b6c9b3d46de7f" + integrity sha512-siieHkSY/b3Yw1Gf84L07j65m2Bht1PamAbX3cmZ1zAzsUxfXpqZq5W9PlAp5z1d0Tp1vxsQmXw6UGW0K1Tq1Q== dependencies: "@snyk/cli-interface" "2.3.0" + "@snyk/configstore" "^3.2.0-rc1" "@snyk/dep-graph" "1.13.1" "@snyk/gemfile" "1.2.0" "@snyk/snyk-cocoapods-plugin" "2.0.1" + "@snyk/update-notifier" "^2.5.1-rc2" "@types/agent-base" "^4.2.0" "@types/restify" "^4.3.6" abbrev "^1.1.1" ansi-escapes "3.2.0" chalk "^2.4.2" cli-spinner "0.2.10" - configstore "^3.1.2" debug "^3.1.0" diff "^4.0.1" git-url-parse "11.1.2" @@ -4611,26 +4700,25 @@ snyk@^1.256.0: proxy-from-env "^1.0.0" semver "^6.0.0" snyk-config "^2.2.1" - snyk-docker-plugin "1.33.1" + snyk-docker-plugin "1.38.0" snyk-go-plugin "1.11.1" - snyk-gradle-plugin "3.2.2" + snyk-gradle-plugin "3.2.4" snyk-module "1.9.1" - snyk-mvn-plugin "2.7.0" - snyk-nodejs-lockfile-parser "1.16.1" - snyk-nuget-plugin "1.13.1" + snyk-mvn-plugin "2.8.0" + snyk-nodejs-lockfile-parser "1.17.0" + snyk-nuget-plugin "1.16.0" snyk-php-plugin "1.7.0" snyk-policy "1.13.5" - snyk-python-plugin "^1.14.0" + snyk-python-plugin "1.17.0" snyk-resolve "1.0.1" snyk-resolve-deps "4.4.0" - snyk-sbt-plugin "2.9.0" + snyk-sbt-plugin "2.11.0" snyk-tree "^1.0.0" snyk-try-require "1.3.1" source-map-support "^0.5.11" strip-ansi "^5.2.0" tempfile "^2.0.0" then-fs "^2.0.0" - update-notifier "^2.5.0" uuid "^3.3.2" wrap-ansi "^5.1.0" @@ -4891,6 +4979,13 @@ supports-color@^6.1.0: dependencies: has-flag "^3.0.0" +supports-color@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1" + integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g== + dependencies: + has-flag "^4.0.0" + symbol-tree@^3.2.2: version "3.2.4" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" @@ -5044,10 +5139,10 @@ tr46@^1.0.1: dependencies: punycode "^2.1.0" -tree-kill@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.1.tgz#5398f374e2f292b9dcc7b2e71e30a5c3bb6c743a" - integrity sha512-4hjqbObwlh2dLyW4tcz0Ymw0ggoaVDMveUB9w8kFSQScdRLo0gxO9J7WFcUBo+W3C1TLdFIEwNOWebgZZ0RH9Q== +tree-kill@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" + integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== ts-jest@^24.3.0: version "24.3.0" @@ -5194,22 +5289,6 @@ unzip-response@^2.0.1: resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" integrity sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c= -update-notifier@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.5.0.tgz#d0744593e13f161e406acb1d9408b72cad08aff6" - integrity sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw== - dependencies: - boxen "^1.2.1" - chalk "^2.0.1" - configstore "^3.0.0" - import-lazy "^2.1.0" - is-ci "^1.0.10" - is-installed-globally "^0.1.0" - is-npm "^1.0.0" - latest-version "^3.0.0" - semver-diff "^2.0.0" - xdg-basedir "^3.0.0" - uri-js@^4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0"