diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000000..e5f13e9fda --- /dev/null +++ b/.editorconfig @@ -0,0 +1,19 @@ +root = true + +[*] +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true +charset = utf-8 + +[*.json] +indent_style = space +indent_size = 4 + +[*.js,*.jsx,*.ts] +indent_style = space +indent_size = 2 + +[{package.json,.travis.yml}] +indent_style = space +indent_size = 2 diff --git a/.travis.yml b/.travis.yml index 5eac390d38..3979c7f953 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,6 +3,15 @@ branches: - master matrix: include: + - language: node_js + node_js: + - "8" + env: + - LANE='node' + cache: + yarn: true + script: + - .travis/run.sh - language: android os: linux jdk: oraclejdk8 @@ -30,6 +39,8 @@ matrix: - extra-google-google_play_services - extra-google-m2repository - addon-google_apis-google-16 + env: + - LANE='android' script: - .travis/run.sh - language: objective-c diff --git a/.travis/run.sh b/.travis/run.sh index 79dbfd24a6..50df3194d8 100755 --- a/.travis/run.sh +++ b/.travis/run.sh @@ -1,12 +1,27 @@ #!/bin/sh + +if [ "$LANE" = "node" ]; +then +yarn install +npm run test-typescript +cd appium +npm install -g react-native-cli +make install +cd example +npm run test +else + cd appium bundle install pip wheel --wheel-dir wheelhouse -r requirements.txt npm install -g react-native-cli react-native -v + if [ "$LANE" = "ios" ]; then make test else make test-android fi + +fi diff --git a/appium/Makefile b/appium/Makefile index eaf6536463..0a5c9b3e76 100644 --- a/appium/Makefile +++ b/appium/Makefile @@ -23,20 +23,22 @@ copy-local-files-to-example: 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/ -test: create-test-bundle new-demo-project copy-local-files-to-example +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 new-demo-project copy-local-files-to-example +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 new-demo-project copy-local-files-to-example +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 new-demo-project copy-local-files-to-example +local-test: create-test-bundle install fastlane build_for_local_appium pytest -vv tests/test_ios.py diff --git a/lib/NativeClient.js b/lib/NativeClient.js index 065100cb38..1d59492c54 100644 --- a/lib/NativeClient.js +++ b/lib/NativeClient.js @@ -90,8 +90,8 @@ export class NativeClient { RNSentry.addExtra(key, value); } - captureBreadcrumb(crumb) { - RNSentry.captureBreadcrumb(crumb); + captureBreadcrumb(breadcrumb) { + RNSentry.captureBreadcrumb(breadcrumb); } clearContext() { diff --git a/lib/RavenClient.js b/lib/RavenClient.js index 4b805faad1..ad1e9642db 100644 --- a/lib/RavenClient.js +++ b/lib/RavenClient.js @@ -65,8 +65,8 @@ export class RavenClient { Raven.captureException(ex, options); } - captureBreadcrumb(msg, options) { - Raven.captureBreadcrumb(msg, options); + captureBreadcrumb(breadcrumb) { + Raven.captureBreadcrumb(breadcrumb); } captureMessage(message, options) { diff --git a/lib/Sentry.d.ts b/lib/Sentry.d.ts new file mode 100644 index 0000000000..19f2ea4307 --- /dev/null +++ b/lib/Sentry.d.ts @@ -0,0 +1,96 @@ +// Type definitions for react-native-sentry +// Project: https://sentry.io +// Definitions by: Daniel Griesser +// Definitions: https://github.com/getsentry/react-native-sentry +// TypeScript Version: 2.3 + +type SentryBreadcrumbType = "navigation" | "http"; + +interface SentryBreadcrumb { + message?: string; + category?: string; + level?: SentrySeverity; + data?: object; + type?: SentryBreadcrumbType; +} + +export enum SentrySeverity { + Fatal = "fatal", + Error = "error", + Warning = "warning", + Info = "info", + Debug = "debug", + Critical = "critical" +} + +export enum SentryLog { + None = 0, + Error = 1, + Debug = 2, + Verbose = 3 +} + +interface SentryOptions { + logLevel?: SentryLog; + instrument?: boolean; + disableNativeIntegration?: boolean; + ignoreModulesExclude?: [string]; + ignoreModulesInclude?: [string]; +} + +export default Sentry; + +export class Sentry { + install(): void; + + static config(dsn: string, options?: SentryOptions): Sentry; + + static isNativeClientAvailable(): boolean; + + static crash(): void; + + static nativeCrash(): void; + + static setEventSentSuccessfully(callback: Function): void; + + static setDataCallback(callback: Function): void; + + static setUserContext(user: { + id?: string; + username?: string; + email?: string; + extra?: object; + }): void; + + static setTagsContext(tags: Object): void; + + static setExtraContext(extra: Object): void; + + static captureMessage(message: string, options?: object): void; + + static captureException(ex: Error, options?: object): void; + + static captureBreadcrumb(breadcrumb: SentryBreadcrumb): void; + + static clearContext(): Promise; + + static context(func: Function, ...args: any[]): void; + static context(options: object, func: Function, ...args: any[]): void; + + static wrap(func: Function): Function; + static wrap(options: object, func: Function): Function; + static wrap(func: T): T; + static wrap(options: object, func: T): T; + + static lastException(): object; + static lastException(): null; + + static lastEventId(): object; + static lastEventId(): null; + + static setRelease(release: string): void; + + static setDist(dist: string): void; + + static setVersion(version: string): void; +} diff --git a/lib/Sentry.js b/lib/Sentry.js index bd9251b687..13ba5a0f79 100644 --- a/lib/Sentry.js +++ b/lib/Sentry.js @@ -20,8 +20,8 @@ export const SentryLog = { Verbose: 3 }; -export class Sentry { - static install() { +export const Sentry = { + install() { if ( RNSentry && RNSentry.nativeClientAvailable && @@ -41,9 +41,9 @@ export class Sentry { }); } Sentry._ravenClient = new RavenClient(Sentry._dsn, Sentry.options); - } + }, - static config(dsn, options) { + config(dsn, options) { if (dsn.constructor !== String) { throw new Error('Sentry: A DSN must be provided'); } @@ -55,117 +55,117 @@ export class Sentry { }; Object.assign(Sentry.options, options); return Sentry; - } + }, - static isNativeClientAvailable() { + isNativeClientAvailable() { return ( Sentry._nativeClient !== undefined && Sentry.options.disableNativeIntegration === false ); - } + }, - static _log(...args) { + _log(...args) { if (Sentry.options.logLevel >= 2) { // eslint-disable-next-line console.log.apply(null, args); } - } + }, - static crash() { + crash() { throw new Error('Sentry: TEST crash'); - } + }, - static nativeCrash() { + nativeCrash() { if (Sentry.isNativeClientAvailable()) Sentry._nativeClient.nativeCrash(); - } + }, - static setEventSentSuccessfully(callback) { + setEventSentSuccessfully(callback) { Sentry._eventSentSuccessfully = callback; - } + }, - static setDataCallback(callback) { + setDataCallback(callback) { Sentry._log('react-native-sentry (setDataCallback):', callback); if (Sentry._ravenClient) Sentry._ravenClient.setDataCallback(callback); - } + }, - static setUserContext(user) { + setUserContext(user) { Sentry._log('react-native-sentry (setUserContext):', user); if (Sentry._ravenClient) Sentry._ravenClient.setUserContext(user); if (Sentry.isNativeClientAvailable()) Sentry._nativeClient.setUserContext(user); - } + }, - static setTagsContext(tags) { + setTagsContext(tags) { Sentry._log('react-native-sentry (setTagsContext):', tags); if (Sentry._ravenClient) Sentry._ravenClient.setTagsContext(tags); if (Sentry.isNativeClientAvailable()) Sentry._nativeClient.setTagsContext(tags); - } + }, - static setExtraContext(extra) { + setExtraContext(extra) { Sentry._log('react-native-sentry (setExtraContext):', extra); if (Sentry._ravenClient) Sentry._ravenClient.setExtraContext(extra); if (Sentry.isNativeClientAvailable()) Sentry._nativeClient.setExtraContext(extra); - } + }, - static captureMessage(message, options) { + captureMessage(message, options) { Sentry._log('react-native-sentry (captureMessage):', message, options); if (Sentry._ravenClient) Sentry._ravenClient.captureMessage(message, options); - } + }, - static captureException(ex, options) { - Sentry._log('react-native-sentry (captureMessage):', ex, options); + captureException(ex, options) { + Sentry._log('react-native-sentry (captureException):', ex, options); if (Sentry._ravenClient) Sentry._ravenClient.captureException(ex, options); - } + }, - static captureBreadcrumb(msg, options) { - Sentry._log('react-native-sentry (captureMessage):', msg, options); - if (Sentry._ravenClient) Sentry._ravenClient.captureBreadcrumb(msg, options); - } + captureBreadcrumb(breadcrumb) { + Sentry._log('react-native-sentry (captureBreadcrumb):', breadcrumb); + if (Sentry._ravenClient) Sentry._ravenClient.captureBreadcrumb(breadcrumb); + }, - static clearContext = async () => { + async clearContext() { Sentry._log('react-native-sentry (clearContext)'); if (Sentry.isNativeClientAvailable()) Sentry._nativeClient.clearContext(); if (Sentry._ravenClient) Sentry._ravenClient.clearContext(); - }; + }, - static context(options, func, args) { + context(options, func, args) { Sentry._log('react-native-sentry (context)'); if (Sentry._ravenClient) return Sentry._ravenClient.context(options, func, args); return this; - } + }, - static wrap(options, func, _before) { + wrap(options, func, _before) { Sentry._log('react-native-sentry (wrap)'); if (Sentry._ravenClient) return Sentry._ravenClient.wrap(options, func, _before); return this; - } + }, - static lastException() { + lastException() { if (Sentry._lastEvent) return Sentry._lastEvent; return null; - } + }, - static lastEventId() { + lastEventId() { if (Sentry._lastEvent) return Sentry._lastEvent.event_id; return null; - } + }, - static setRelease(release) { + setRelease(release) { Sentry._log('react-native-sentry (setRelease)'); Sentry._setInternalOption('release', release); if (Sentry._ravenClient) Sentry._ravenClient.setRelease(release); - } + }, - static setDist(dist) { + setDist(dist) { Sentry._setInternalOption('dist', dist); - } + }, - static setVersion(version) { + setVersion(version) { Sentry._setInternalOption('version', version); - } + }, // Private helpers - static _setInternalOption(key, value) { + _setInternalOption(key, value) { if (Sentry.isNativeClientAvailable()) { Sentry._nativeClient.addExtraContext('__sentry_' + key, value); } @@ -173,21 +173,23 @@ export class Sentry { Sentry.options.internal = {}; } Sentry.options.internal[key] = value; - } + }, - static _getInternalOption(key) { + _getInternalOption(key) { return Sentry.options.internal[key]; - } + }, - static _breadcrumbCallback(crumb) { + _breadcrumbCallback(crumb) { if (Sentry.isNativeClientAvailable()) Sentry._nativeClient.captureBreadcrumb(crumb); - } + }, - static _captureEvent(event) { + _captureEvent(event) { if (Sentry.isNativeClientAvailable()) Sentry._nativeClient.captureEvent(event); - } + }, - static _setInternalEventStored(callback) { + _setInternalEventStored(callback) { Sentry._internalEventStored = callback; } -} +}; + +export default Sentry; diff --git a/package.json b/package.json index 490ebf7f09..daa0888d71 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,8 @@ "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "version": "node ./scripts/version-bump.js && git add -A", - "precommit": "lint-staged" + "precommit": "lint-staged", + "test-typescript": "node_modules/typescript/bin/tsc --noImplicitAny --allowJs typescript/Sentry-tests.ts" }, "keywords": [ "react-native", @@ -42,7 +43,8 @@ "husky": "^0.13.4", "lint-staged": "^3.6.0", "prettier": "^1.4.2", - "replace-in-file": "^2.5.3" + "replace-in-file": "^2.5.3", + "typescript": "^2.5.2" }, "lint-staged": { "*.js": [ diff --git a/typescript/Sentry-tests.ts b/typescript/Sentry-tests.ts new file mode 100644 index 0000000000..7ff3980f94 --- /dev/null +++ b/typescript/Sentry-tests.ts @@ -0,0 +1,16 @@ +import Sentry, {SentryLog, SentrySeverity} from '../lib/Sentry'; + +Sentry.config(null).install(); + +var options = { + logLevel: SentryLog.Verbose +}; +Sentry.config('https://public@sentry.io/1', options).install(); + +Sentry.captureMessage("test"); + +Sentry.clearContext(); + +Sentry.captureBreadcrumb({ + message: 'Message' +}); diff --git a/yarn.lock b/yarn.lock index a2ed3847a8..36c088995b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -14,6 +14,12 @@ ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" +ansi-styles@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.0.tgz#c159b8d5be0f9e5a6f346dab94f16ce022161b88" + dependencies: + color-convert "^1.9.0" + app-root-path@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-2.0.1.tgz#cd62dcf8e4fd5a417efc664d2e5b10653c651b46" @@ -55,6 +61,14 @@ brace-expansion@^1.1.7: balanced-match "^0.4.1" concat-map "0.0.1" +builtin-modules@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" + +camelcase@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" + chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" @@ -65,6 +79,14 @@ chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" +chalk@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.1.0.tgz#ac5becf14fa21b99c6c92ca7a7d7cfd5b17e743e" + dependencies: + ansi-styles "^3.1.0" + escape-string-regexp "^1.0.5" + supports-color "^4.0.0" + ci-info@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.0.0.tgz#dc5285f2b4e251821683681c381c3388f46ec534" @@ -96,10 +118,28 @@ cli-width@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.1.0.tgz#b234ca209b29ef66fc518d9b98d5847b00edf00a" +cliui@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + wrap-ansi "^2.0.0" + code-point-at@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" +color-convert@^1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.0.tgz#1accf97dd739b983bf994d56fec8f95853641b7a" + dependencies: + color-name "^1.1.1" + +color-name@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + commander@^2.9.0: version "2.9.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" @@ -135,6 +175,10 @@ date-fns@^1.27.2: version "1.28.5" resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.28.5.tgz#257cfc45d322df45ef5658665967ee841cd73faf" +decamelize@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + elegant-spinner@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" @@ -165,6 +209,18 @@ execa@^0.6.0: signal-exit "^3.0.0" strip-eof "^1.0.0" +execa@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" + dependencies: + cross-spawn "^5.0.1" + get-stream "^3.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + exit-hook@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" @@ -194,10 +250,20 @@ find-parent-dir@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/find-parent-dir/-/find-parent-dir-0.3.0.tgz#33c44b429ab2b2f0646299c5f9f718f376ff8d54" +find-up@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + dependencies: + locate-path "^2.0.0" + fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" +get-caller-file@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" + get-stream@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" @@ -213,6 +279,17 @@ glob@7.1.1: once "^1.3.0" path-is-absolute "^1.0.0" +glob@^7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + graceful-fs@^4.1.2: version "4.1.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" @@ -227,6 +304,14 @@ has-ansi@^2.0.0: dependencies: ansi-regex "^2.0.0" +has-flag@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" + +hosted-git-info@^2.1.4: + version "2.5.0" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.5.0.tgz#6d60e34b3abbc8313062c3b798ef8d901a07af3c" + husky@^0.13.4: version "0.13.4" resolved "https://registry.yarnpkg.com/husky/-/husky-0.13.4.tgz#48785c5028de3452a51c48c12c4f94b2124a1407" @@ -279,10 +364,20 @@ inquirer@3.0.6: strip-ansi "^3.0.0" through "^2.3.6" +invert-kv@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" + is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" +is-builtin-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" + dependencies: + builtin-modules "^1.0.0" + is-ci@^1.0.9: version "1.0.10" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.0.10.tgz#f739336b2632365061a9d48270cd56ae3369318e" @@ -328,6 +423,12 @@ jschardet@^1.4.2: version "1.4.2" resolved "https://registry.yarnpkg.com/jschardet/-/jschardet-1.4.2.tgz#2aa107f142af4121d145659d44f50830961e699a" +lcid@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" + dependencies: + invert-kv "^1.0.0" + lint-staged@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-3.6.0.tgz#cda8f0bef16e7928cc14b735186ae12cd662599c" @@ -389,6 +490,22 @@ listr@^0.12.0: stream-to-observable "^0.1.0" strip-ansi "^3.0.1" +load-json-file@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + strip-bom "^3.0.0" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + lodash.chunk@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/lodash.chunk/-/lodash.chunk-4.2.0.tgz#66e5ce1f76ed27b4303d8c6512e8d1216e8106bc" @@ -417,11 +534,17 @@ lru-cache@^4.0.1: pseudomap "^1.0.1" yallist "^2.0.0" +mem@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" + dependencies: + mimic-fn "^1.0.0" + mimic-fn@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.1.0.tgz#e667783d92e89dbd342818b5230b9d62a672ad18" -minimatch@^3.0.0, minimatch@^3.0.2: +minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" dependencies: @@ -435,6 +558,15 @@ mute-stream@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" +normalize-package-data@^2.3.2: + version "2.4.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" + dependencies: + hosted-git-info "^2.1.4" + is-builtin-module "^1.0.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + normalize-path@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-1.0.0.tgz#32d0e472f91ff345701c15a8311018d3b0a90379" @@ -496,6 +628,14 @@ os-homedir@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" +os-locale@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" + dependencies: + execa "^0.7.0" + lcid "^1.0.0" + mem "^1.1.0" + os-tmpdir@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" @@ -504,6 +644,16 @@ p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" +p-limit@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.1.0.tgz#b07ff2d9a5d88bec806035895a2bab66a27988bc" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + dependencies: + p-limit "^1.1.0" + p-map@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.1.1.tgz#05f5e4ae97a068371bc2a5cc86bfbdbc19c4ae7a" @@ -514,6 +664,10 @@ parse-json@^2.2.0: dependencies: error-ex "^1.2.0" +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" @@ -522,10 +676,20 @@ path-key@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" +path-type@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" + dependencies: + pify "^2.0.0" + pegjs@^0.10.0: version "0.10.0" resolved "https://registry.yarnpkg.com/pegjs/-/pegjs-0.10.0.tgz#cf8bafae6eddff4b5a7efb185269eaaf4610ddbd" +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + pinkie-promise@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" @@ -556,9 +720,24 @@ pseudomap@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" -raven-js@^3.16.1: - version "3.16.1" - resolved "https://registry.yarnpkg.com/raven-js/-/raven-js-3.16.1.tgz#4aab8ba7c57bc261604db970c41c49137340c450" +raven-js@^3.17.0: + version "3.17.0" + resolved "https://registry.yarnpkg.com/raven-js/-/raven-js-3.17.0.tgz#779457ac7910512c3c2cc9bb6d0a9eeb59a969ec" + +read-pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" + dependencies: + find-up "^2.0.0" + read-pkg "^2.0.0" + +read-pkg@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" + dependencies: + load-json-file "^2.0.0" + normalize-package-data "^2.3.2" + path-type "^2.0.0" repeating@^2.0.0: version "2.0.1" @@ -566,10 +745,26 @@ repeating@^2.0.0: dependencies: is-finite "^1.0.0" +replace-in-file@^2.5.3: + version "2.6.4" + resolved "https://registry.yarnpkg.com/replace-in-file/-/replace-in-file-2.6.4.tgz#a80e25c5c0e0efe9d04afe01a4a57ff98e8b6461" + dependencies: + chalk "^2.1.0" + glob "^7.1.2" + yargs "^8.0.2" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + require-from-string@^1.1.0: version "1.2.1" resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-1.2.1.tgz#529c9ccef27380adfec9a2f965b649bbee636418" +require-main-filename@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" + restore-cursor@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541" @@ -600,12 +795,20 @@ rxjs@^5.0.0-beta.11: dependencies: symbol-observable "^1.0.1" -sentry-cli-binary@^1.16.0: - version "1.16.0" - resolved "https://registry.yarnpkg.com/sentry-cli-binary/-/sentry-cli-binary-1.16.0.tgz#10fbdde9e6e86d8a864c96f8adeb97b0064ea427" +"semver@2 || 3 || 4 || 5": + version "5.4.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" + +sentry-cli-binary@^1.19.1: + version "1.19.1" + resolved "https://registry.yarnpkg.com/sentry-cli-binary/-/sentry-cli-binary-1.19.1.tgz#0abc210ed7f35d7ec0680963e612b15bd2bc14c0" dependencies: progress "2.0.0" +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" @@ -632,6 +835,20 @@ slice-ansi@0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" +spdx-correct@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40" + dependencies: + spdx-license-ids "^1.0.2" + +spdx-expression-parse@~1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c" + +spdx-license-ids@^1.0.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57" + sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" @@ -669,6 +886,10 @@ strip-ansi@^3.0.0, strip-ansi@^3.0.1: dependencies: ansi-regex "^2.0.0" +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + strip-eof@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" @@ -677,6 +898,12 @@ supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" +supports-color@^4.0.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.4.0.tgz#883f7ddabc165142b2a61427f3352ded195d1a3e" + dependencies: + has-flag "^2.0.0" + symbol-observable@^1.0.1: version "1.0.4" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.4.tgz#29bf615d4aa7121bdd898b22d4b3f9bc4e2aa03d" @@ -691,16 +918,38 @@ tmp@^0.0.31: dependencies: os-tmpdir "~1.0.1" +typescript@^2.5.2: + version "2.5.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.5.2.tgz#038a95f7d9bbb420b1bf35ba31d4c5c1dd3ffe34" + uuid@3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1" +validate-npm-package-license@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc" + dependencies: + spdx-correct "~1.0.0" + spdx-expression-parse "~1.0.0" + +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + which@^1.2.10, which@^1.2.9: version "1.2.14" resolved "https://registry.yarnpkg.com/which/-/which-1.2.14.tgz#9a87c4378f03e827cecaf1acdf56c736c01c14e5" dependencies: isexe "^2.0.0" +wrap-ansi@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" @@ -721,6 +970,34 @@ xmldom@0.1.x: version "0.1.27" resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.1.27.tgz#d501f97b3bdb403af8ef9ecc20573187aadac0e9" +y18n@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" + yallist@^2.0.0: version "2.1.2" resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + +yargs-parser@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9" + dependencies: + camelcase "^4.1.0" + +yargs@^8.0.2: + version "8.0.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-8.0.2.tgz#6299a9055b1cefc969ff7e79c1d918dceb22c360" + dependencies: + camelcase "^4.1.0" + cliui "^3.2.0" + decamelize "^1.1.1" + get-caller-file "^1.0.1" + os-locale "^2.0.0" + read-pkg-up "^2.0.0" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^2.0.0" + which-module "^2.0.0" + y18n "^3.2.1" + yargs-parser "^7.0.0"