@sentry/react-native 6.7.0-alpha.0 → 6.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/RNSentry.podspec +1 -1
- package/android/src/main/java/io/sentry/react/RNSentryModuleImpl.java +280 -2
- package/android/src/main/java/io/sentry/react/RNSentryVersion.java +1 -1
- package/dist/js/sdk.d.ts.map +1 -1
- package/dist/js/sdk.js +10 -21
- package/dist/js/sdk.js.map +1 -1
- package/dist/js/tools/metroconfig.d.ts +7 -11
- package/dist/js/tools/metroconfig.d.ts.map +1 -1
- package/dist/js/tools/metroconfig.js +10 -12
- package/dist/js/tools/metroconfig.js.map +1 -1
- package/dist/js/tools/sentryBabelTransformer.d.ts +1 -2
- package/dist/js/tools/sentryBabelTransformer.d.ts.map +1 -1
- package/dist/js/tools/sentryBabelTransformer.js +1 -23
- package/dist/js/tools/sentryBabelTransformer.js.map +1 -1
- package/dist/js/tools/sentryBabelTransformerUtils.d.ts +18 -0
- package/dist/js/tools/sentryBabelTransformerUtils.d.ts.map +1 -1
- package/dist/js/tools/sentryBabelTransformerUtils.js +71 -1
- package/dist/js/tools/sentryBabelTransformerUtils.js.map +1 -1
- package/dist/js/tools/sentryMetroSerializer.d.ts.map +1 -1
- package/dist/js/tools/sentryMetroSerializer.js +0 -1
- package/dist/js/tools/sentryMetroSerializer.js.map +1 -1
- package/dist/js/tools/utils.d.ts +1 -2
- package/dist/js/tools/utils.d.ts.map +1 -1
- package/dist/js/tools/utils.js.map +1 -1
- package/dist/js/utils/worldwide.d.ts +0 -2
- package/dist/js/utils/worldwide.d.ts.map +1 -1
- package/dist/js/utils/worldwide.js.map +1 -1
- package/dist/js/version.d.ts +1 -1
- package/dist/js/version.d.ts.map +1 -1
- package/dist/js/version.js +1 -1
- package/dist/js/version.js.map +1 -1
- package/ios/RNSentry.h +5 -3
- package/ios/RNSentry.mm +169 -2
- package/ios/RNSentryVersion.m +1 -1
- package/package.json +6 -6
- package/scripts/sentry-xcode.sh +0 -19
- package/sentry.gradle +1 -52
- package/ts3.8/dist/js/utils/worldwide.d.ts +0 -2
- package/ts3.8/dist/js/version.d.ts +1 -1
- package/android/src/main/java/io/sentry/react/RNSentryCompositeOptionsConfiguration.java +0 -25
- package/android/src/main/java/io/sentry/react/RNSentryJsonConverter.java +0 -76
- package/android/src/main/java/io/sentry/react/RNSentryJsonUtils.java +0 -41
- package/android/src/main/java/io/sentry/react/RNSentrySDK.java +0 -68
- package/android/src/main/java/io/sentry/react/RNSentryStart.java +0 -365
- package/dist/js/tools/sentryOptionsSerializer.d.ts +0 -6
- package/dist/js/tools/sentryOptionsSerializer.d.ts.map +0 -1
- package/dist/js/tools/sentryOptionsSerializer.js +0 -91
- package/dist/js/tools/sentryOptionsSerializer.js.map +0 -1
- package/ios/RNSentrySDK.h +0 -31
- package/ios/RNSentrySDK.m +0 -71
- package/ios/RNSentryStart.h +0 -26
- package/ios/RNSentryStart.m +0 -222
package/RNSentry.podspec
CHANGED
|
@@ -20,11 +20,13 @@ import com.facebook.react.bridge.Promise;
|
|
|
20
20
|
import com.facebook.react.bridge.ReactApplicationContext;
|
|
21
21
|
import com.facebook.react.bridge.ReadableMap;
|
|
22
22
|
import com.facebook.react.bridge.ReadableMapKeySetIterator;
|
|
23
|
+
import com.facebook.react.bridge.ReadableType;
|
|
23
24
|
import com.facebook.react.bridge.UiThreadUtil;
|
|
24
25
|
import com.facebook.react.bridge.WritableArray;
|
|
25
26
|
import com.facebook.react.bridge.WritableMap;
|
|
26
27
|
import com.facebook.react.bridge.WritableNativeArray;
|
|
27
28
|
import com.facebook.react.bridge.WritableNativeMap;
|
|
29
|
+
import com.facebook.react.common.JavascriptException;
|
|
28
30
|
import com.facebook.react.modules.core.DeviceEventManagerModule;
|
|
29
31
|
import io.sentry.Breadcrumb;
|
|
30
32
|
import io.sentry.HubAdapter;
|
|
@@ -32,16 +34,25 @@ import io.sentry.ILogger;
|
|
|
32
34
|
import io.sentry.IScope;
|
|
33
35
|
import io.sentry.ISentryExecutorService;
|
|
34
36
|
import io.sentry.ISerializer;
|
|
37
|
+
import io.sentry.Integration;
|
|
35
38
|
import io.sentry.Sentry;
|
|
36
39
|
import io.sentry.SentryDate;
|
|
37
40
|
import io.sentry.SentryDateProvider;
|
|
41
|
+
import io.sentry.SentryEvent;
|
|
38
42
|
import io.sentry.SentryExecutorService;
|
|
39
43
|
import io.sentry.SentryLevel;
|
|
40
44
|
import io.sentry.SentryOptions;
|
|
45
|
+
import io.sentry.SentryReplayOptions;
|
|
46
|
+
import io.sentry.UncaughtExceptionHandlerIntegration;
|
|
41
47
|
import io.sentry.android.core.AndroidLogger;
|
|
42
48
|
import io.sentry.android.core.AndroidProfiler;
|
|
49
|
+
import io.sentry.android.core.AnrIntegration;
|
|
50
|
+
import io.sentry.android.core.BuildConfig;
|
|
43
51
|
import io.sentry.android.core.BuildInfoProvider;
|
|
52
|
+
import io.sentry.android.core.CurrentActivityHolder;
|
|
44
53
|
import io.sentry.android.core.InternalSentrySdk;
|
|
54
|
+
import io.sentry.android.core.NdkIntegration;
|
|
55
|
+
import io.sentry.android.core.SentryAndroid;
|
|
45
56
|
import io.sentry.android.core.SentryAndroidDateProvider;
|
|
46
57
|
import io.sentry.android.core.SentryAndroidOptions;
|
|
47
58
|
import io.sentry.android.core.ViewHierarchyEventProcessor;
|
|
@@ -50,8 +61,11 @@ import io.sentry.android.core.internal.util.SentryFrameMetricsCollector;
|
|
|
50
61
|
import io.sentry.android.core.performance.AppStartMetrics;
|
|
51
62
|
import io.sentry.protocol.SdkVersion;
|
|
52
63
|
import io.sentry.protocol.SentryId;
|
|
64
|
+
import io.sentry.protocol.SentryPackage;
|
|
53
65
|
import io.sentry.protocol.User;
|
|
54
66
|
import io.sentry.protocol.ViewHierarchy;
|
|
67
|
+
import io.sentry.react.replay.RNSentryReplayMask;
|
|
68
|
+
import io.sentry.react.replay.RNSentryReplayUnmask;
|
|
55
69
|
import io.sentry.util.DebugMetaPropertiesApplier;
|
|
56
70
|
import io.sentry.util.FileUtils;
|
|
57
71
|
import io.sentry.util.JsonSerializationUtils;
|
|
@@ -63,6 +77,8 @@ import java.io.FileNotFoundException;
|
|
|
63
77
|
import java.io.FileReader;
|
|
64
78
|
import java.io.IOException;
|
|
65
79
|
import java.io.InputStream;
|
|
80
|
+
import java.net.URI;
|
|
81
|
+
import java.net.URISyntaxException;
|
|
66
82
|
import java.nio.charset.Charset;
|
|
67
83
|
import java.util.HashMap;
|
|
68
84
|
import java.util.Iterator;
|
|
@@ -162,12 +178,216 @@ public class RNSentryModuleImpl {
|
|
|
162
178
|
}
|
|
163
179
|
|
|
164
180
|
public void initNativeSdk(final ReadableMap rnOptions, Promise promise) {
|
|
165
|
-
|
|
166
|
-
this.getReactApplicationContext(),
|
|
181
|
+
SentryAndroid.init(
|
|
182
|
+
this.getReactApplicationContext(),
|
|
183
|
+
options -> getSentryAndroidOptions(options, rnOptions, logger));
|
|
167
184
|
|
|
168
185
|
promise.resolve(true);
|
|
169
186
|
}
|
|
170
187
|
|
|
188
|
+
protected void getSentryAndroidOptions(
|
|
189
|
+
@NotNull SentryAndroidOptions options, @NotNull ReadableMap rnOptions, ILogger logger) {
|
|
190
|
+
@Nullable SdkVersion sdkVersion = options.getSdkVersion();
|
|
191
|
+
if (sdkVersion == null) {
|
|
192
|
+
sdkVersion = new SdkVersion(RNSentryVersion.ANDROID_SDK_NAME, BuildConfig.VERSION_NAME);
|
|
193
|
+
} else {
|
|
194
|
+
sdkVersion.setName(RNSentryVersion.ANDROID_SDK_NAME);
|
|
195
|
+
}
|
|
196
|
+
sdkVersion.addPackage(
|
|
197
|
+
RNSentryVersion.REACT_NATIVE_SDK_PACKAGE_NAME,
|
|
198
|
+
RNSentryVersion.REACT_NATIVE_SDK_PACKAGE_VERSION);
|
|
199
|
+
|
|
200
|
+
options.setSentryClientName(sdkVersion.getName() + "/" + sdkVersion.getVersion());
|
|
201
|
+
options.setNativeSdkName(RNSentryVersion.NATIVE_SDK_NAME);
|
|
202
|
+
options.setSdkVersion(sdkVersion);
|
|
203
|
+
|
|
204
|
+
if (rnOptions.hasKey("debug") && rnOptions.getBoolean("debug")) {
|
|
205
|
+
options.setDebug(true);
|
|
206
|
+
}
|
|
207
|
+
if (rnOptions.hasKey("dsn") && rnOptions.getString("dsn") != null) {
|
|
208
|
+
String dsn = rnOptions.getString("dsn");
|
|
209
|
+
logger.log(SentryLevel.INFO, String.format("Starting with DSN: '%s'", dsn));
|
|
210
|
+
options.setDsn(dsn);
|
|
211
|
+
} else {
|
|
212
|
+
// SentryAndroid needs an empty string fallback for the dsn.
|
|
213
|
+
options.setDsn("");
|
|
214
|
+
}
|
|
215
|
+
if (rnOptions.hasKey("sampleRate")) {
|
|
216
|
+
options.setSampleRate(rnOptions.getDouble("sampleRate"));
|
|
217
|
+
}
|
|
218
|
+
if (rnOptions.hasKey("sendClientReports")) {
|
|
219
|
+
options.setSendClientReports(rnOptions.getBoolean("sendClientReports"));
|
|
220
|
+
}
|
|
221
|
+
if (rnOptions.hasKey("maxBreadcrumbs")) {
|
|
222
|
+
options.setMaxBreadcrumbs(rnOptions.getInt("maxBreadcrumbs"));
|
|
223
|
+
}
|
|
224
|
+
if (rnOptions.hasKey("maxCacheItems")) {
|
|
225
|
+
options.setMaxCacheItems(rnOptions.getInt("maxCacheItems"));
|
|
226
|
+
}
|
|
227
|
+
if (rnOptions.hasKey("environment") && rnOptions.getString("environment") != null) {
|
|
228
|
+
options.setEnvironment(rnOptions.getString("environment"));
|
|
229
|
+
}
|
|
230
|
+
if (rnOptions.hasKey("release") && rnOptions.getString("release") != null) {
|
|
231
|
+
options.setRelease(rnOptions.getString("release"));
|
|
232
|
+
}
|
|
233
|
+
if (rnOptions.hasKey("dist") && rnOptions.getString("dist") != null) {
|
|
234
|
+
options.setDist(rnOptions.getString("dist"));
|
|
235
|
+
}
|
|
236
|
+
if (rnOptions.hasKey("enableAutoSessionTracking")) {
|
|
237
|
+
options.setEnableAutoSessionTracking(rnOptions.getBoolean("enableAutoSessionTracking"));
|
|
238
|
+
}
|
|
239
|
+
if (rnOptions.hasKey("sessionTrackingIntervalMillis")) {
|
|
240
|
+
options.setSessionTrackingIntervalMillis(rnOptions.getInt("sessionTrackingIntervalMillis"));
|
|
241
|
+
}
|
|
242
|
+
if (rnOptions.hasKey("shutdownTimeout")) {
|
|
243
|
+
options.setShutdownTimeoutMillis(rnOptions.getInt("shutdownTimeout"));
|
|
244
|
+
}
|
|
245
|
+
if (rnOptions.hasKey("enableNdkScopeSync")) {
|
|
246
|
+
options.setEnableScopeSync(rnOptions.getBoolean("enableNdkScopeSync"));
|
|
247
|
+
}
|
|
248
|
+
if (rnOptions.hasKey("attachStacktrace")) {
|
|
249
|
+
options.setAttachStacktrace(rnOptions.getBoolean("attachStacktrace"));
|
|
250
|
+
}
|
|
251
|
+
if (rnOptions.hasKey("attachThreads")) {
|
|
252
|
+
// JS use top level stacktrace and android attaches Threads which hides them so
|
|
253
|
+
// by default we hide.
|
|
254
|
+
options.setAttachThreads(rnOptions.getBoolean("attachThreads"));
|
|
255
|
+
}
|
|
256
|
+
if (rnOptions.hasKey("attachScreenshot")) {
|
|
257
|
+
options.setAttachScreenshot(rnOptions.getBoolean("attachScreenshot"));
|
|
258
|
+
}
|
|
259
|
+
if (rnOptions.hasKey("attachViewHierarchy")) {
|
|
260
|
+
options.setAttachViewHierarchy(rnOptions.getBoolean("attachViewHierarchy"));
|
|
261
|
+
}
|
|
262
|
+
if (rnOptions.hasKey("sendDefaultPii")) {
|
|
263
|
+
options.setSendDefaultPii(rnOptions.getBoolean("sendDefaultPii"));
|
|
264
|
+
}
|
|
265
|
+
if (rnOptions.hasKey("maxQueueSize")) {
|
|
266
|
+
options.setMaxQueueSize(rnOptions.getInt("maxQueueSize"));
|
|
267
|
+
}
|
|
268
|
+
if (rnOptions.hasKey("enableNdk")) {
|
|
269
|
+
options.setEnableNdk(rnOptions.getBoolean("enableNdk"));
|
|
270
|
+
}
|
|
271
|
+
if (rnOptions.hasKey("spotlight")) {
|
|
272
|
+
if (rnOptions.getType("spotlight") == ReadableType.Boolean) {
|
|
273
|
+
options.setEnableSpotlight(rnOptions.getBoolean("spotlight"));
|
|
274
|
+
options.setSpotlightConnectionUrl(rnOptions.getString("defaultSidecarUrl"));
|
|
275
|
+
} else if (rnOptions.getType("spotlight") == ReadableType.String) {
|
|
276
|
+
options.setEnableSpotlight(true);
|
|
277
|
+
options.setSpotlightConnectionUrl(rnOptions.getString("spotlight"));
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
SentryReplayOptions replayOptions = getReplayOptions(rnOptions);
|
|
282
|
+
options.setSessionReplay(replayOptions);
|
|
283
|
+
if (isReplayEnabled(replayOptions)) {
|
|
284
|
+
options.getReplayController().setBreadcrumbConverter(new RNSentryReplayBreadcrumbConverter());
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
// Exclude Dev Server and Sentry Dsn request from Breadcrumbs
|
|
288
|
+
String dsn = getURLFromDSN(rnOptions.getString("dsn"));
|
|
289
|
+
String devServerUrl = rnOptions.getString("devServerUrl");
|
|
290
|
+
options.setBeforeBreadcrumb(
|
|
291
|
+
(breadcrumb, hint) -> {
|
|
292
|
+
Object urlObject = breadcrumb.getData("url");
|
|
293
|
+
String url = urlObject instanceof String ? (String) urlObject : "";
|
|
294
|
+
if ("http".equals(breadcrumb.getType())
|
|
295
|
+
&& ((dsn != null && url.startsWith(dsn))
|
|
296
|
+
|| (devServerUrl != null && url.startsWith(devServerUrl)))) {
|
|
297
|
+
return null;
|
|
298
|
+
}
|
|
299
|
+
return breadcrumb;
|
|
300
|
+
});
|
|
301
|
+
|
|
302
|
+
// React native internally throws a JavascriptException.
|
|
303
|
+
// we want to ignore it on the native side to avoid sending it twice.
|
|
304
|
+
options.addIgnoredExceptionForType(JavascriptException.class);
|
|
305
|
+
|
|
306
|
+
options.setBeforeSend(
|
|
307
|
+
(event, hint) -> {
|
|
308
|
+
setEventOriginTag(event);
|
|
309
|
+
addPackages(event, options.getSdkVersion());
|
|
310
|
+
|
|
311
|
+
return event;
|
|
312
|
+
});
|
|
313
|
+
|
|
314
|
+
if (rnOptions.hasKey("enableNativeCrashHandling")
|
|
315
|
+
&& !rnOptions.getBoolean("enableNativeCrashHandling")) {
|
|
316
|
+
final List<Integration> integrations = options.getIntegrations();
|
|
317
|
+
for (final Integration integration : integrations) {
|
|
318
|
+
if (integration instanceof UncaughtExceptionHandlerIntegration
|
|
319
|
+
|| integration instanceof AnrIntegration
|
|
320
|
+
|| integration instanceof NdkIntegration) {
|
|
321
|
+
integrations.remove(integration);
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
logger.log(
|
|
326
|
+
SentryLevel.INFO, String.format("Native Integrations '%s'", options.getIntegrations()));
|
|
327
|
+
|
|
328
|
+
final CurrentActivityHolder currentActivityHolder = CurrentActivityHolder.getInstance();
|
|
329
|
+
final Activity currentActivity = getCurrentActivity();
|
|
330
|
+
if (currentActivity != null) {
|
|
331
|
+
currentActivityHolder.setActivity(currentActivity);
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
private boolean isReplayEnabled(SentryReplayOptions replayOptions) {
|
|
336
|
+
return replayOptions.getSessionSampleRate() != null
|
|
337
|
+
|| replayOptions.getOnErrorSampleRate() != null;
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
private SentryReplayOptions getReplayOptions(@NotNull ReadableMap rnOptions) {
|
|
341
|
+
final SdkVersion replaySdkVersion =
|
|
342
|
+
new SdkVersion(
|
|
343
|
+
RNSentryVersion.REACT_NATIVE_SDK_NAME,
|
|
344
|
+
RNSentryVersion.REACT_NATIVE_SDK_PACKAGE_VERSION);
|
|
345
|
+
@NotNull
|
|
346
|
+
final SentryReplayOptions androidReplayOptions =
|
|
347
|
+
new SentryReplayOptions(false, replaySdkVersion);
|
|
348
|
+
|
|
349
|
+
if (!(rnOptions.hasKey("replaysSessionSampleRate")
|
|
350
|
+
|| rnOptions.hasKey("replaysOnErrorSampleRate"))) {
|
|
351
|
+
return androidReplayOptions;
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
androidReplayOptions.setSessionSampleRate(
|
|
355
|
+
rnOptions.hasKey("replaysSessionSampleRate")
|
|
356
|
+
? rnOptions.getDouble("replaysSessionSampleRate")
|
|
357
|
+
: null);
|
|
358
|
+
androidReplayOptions.setOnErrorSampleRate(
|
|
359
|
+
rnOptions.hasKey("replaysOnErrorSampleRate")
|
|
360
|
+
? rnOptions.getDouble("replaysOnErrorSampleRate")
|
|
361
|
+
: null);
|
|
362
|
+
|
|
363
|
+
if (!rnOptions.hasKey("mobileReplayOptions")) {
|
|
364
|
+
return androidReplayOptions;
|
|
365
|
+
}
|
|
366
|
+
@Nullable final ReadableMap rnMobileReplayOptions = rnOptions.getMap("mobileReplayOptions");
|
|
367
|
+
if (rnMobileReplayOptions == null) {
|
|
368
|
+
return androidReplayOptions;
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
androidReplayOptions.setMaskAllText(
|
|
372
|
+
!rnMobileReplayOptions.hasKey("maskAllText")
|
|
373
|
+
|| rnMobileReplayOptions.getBoolean("maskAllText"));
|
|
374
|
+
androidReplayOptions.setMaskAllImages(
|
|
375
|
+
!rnMobileReplayOptions.hasKey("maskAllImages")
|
|
376
|
+
|| rnMobileReplayOptions.getBoolean("maskAllImages"));
|
|
377
|
+
|
|
378
|
+
final boolean redactVectors =
|
|
379
|
+
!rnMobileReplayOptions.hasKey("maskAllVectors")
|
|
380
|
+
|| rnMobileReplayOptions.getBoolean("maskAllVectors");
|
|
381
|
+
if (redactVectors) {
|
|
382
|
+
androidReplayOptions.addMaskViewClass("com.horcrux.svg.SvgView"); // react-native-svg
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
androidReplayOptions.setMaskViewContainerClass(RNSentryReplayMask.class.getName());
|
|
386
|
+
androidReplayOptions.setUnmaskViewContainerClass(RNSentryReplayUnmask.class.getName());
|
|
387
|
+
|
|
388
|
+
return androidReplayOptions;
|
|
389
|
+
}
|
|
390
|
+
|
|
171
391
|
public void crash() {
|
|
172
392
|
throw new RuntimeException("TEST - Sentry Client Crash (only works in release mode)");
|
|
173
393
|
}
|
|
@@ -754,6 +974,51 @@ public class RNSentryModuleImpl {
|
|
|
754
974
|
promise.resolve(Sentry.isCrashedLastRun());
|
|
755
975
|
}
|
|
756
976
|
|
|
977
|
+
private void setEventOriginTag(SentryEvent event) {
|
|
978
|
+
// We hardcode native-java as only java events are processed by the Android SDK.
|
|
979
|
+
SdkVersion sdk = event.getSdk();
|
|
980
|
+
if (sdk != null) {
|
|
981
|
+
switch (sdk.getName()) {
|
|
982
|
+
case RNSentryVersion.NATIVE_SDK_NAME:
|
|
983
|
+
setEventEnvironmentTag(event, "native");
|
|
984
|
+
break;
|
|
985
|
+
case RNSentryVersion.ANDROID_SDK_NAME:
|
|
986
|
+
setEventEnvironmentTag(event, "java");
|
|
987
|
+
break;
|
|
988
|
+
default:
|
|
989
|
+
break;
|
|
990
|
+
}
|
|
991
|
+
}
|
|
992
|
+
}
|
|
993
|
+
|
|
994
|
+
private void setEventEnvironmentTag(SentryEvent event, String environment) {
|
|
995
|
+
event.setTag("event.origin", "android");
|
|
996
|
+
event.setTag("event.environment", environment);
|
|
997
|
+
}
|
|
998
|
+
|
|
999
|
+
private void addPackages(SentryEvent event, SdkVersion sdk) {
|
|
1000
|
+
SdkVersion eventSdk = event.getSdk();
|
|
1001
|
+
if (eventSdk != null
|
|
1002
|
+
&& "sentry.javascript.react-native".equals(eventSdk.getName())
|
|
1003
|
+
&& sdk != null) {
|
|
1004
|
+
List<SentryPackage> sentryPackages = sdk.getPackages();
|
|
1005
|
+
if (sentryPackages != null) {
|
|
1006
|
+
for (SentryPackage sentryPackage : sentryPackages) {
|
|
1007
|
+
eventSdk.addPackage(sentryPackage.getName(), sentryPackage.getVersion());
|
|
1008
|
+
}
|
|
1009
|
+
}
|
|
1010
|
+
|
|
1011
|
+
List<String> integrations = sdk.getIntegrations();
|
|
1012
|
+
if (integrations != null) {
|
|
1013
|
+
for (String integration : integrations) {
|
|
1014
|
+
eventSdk.addIntegration(integration);
|
|
1015
|
+
}
|
|
1016
|
+
}
|
|
1017
|
+
|
|
1018
|
+
event.setSdk(eventSdk);
|
|
1019
|
+
}
|
|
1020
|
+
}
|
|
1021
|
+
|
|
757
1022
|
private boolean checkAndroidXAvailability() {
|
|
758
1023
|
try {
|
|
759
1024
|
Class.forName("androidx.core.app.FrameMetricsAggregator");
|
|
@@ -767,4 +1032,17 @@ public class RNSentryModuleImpl {
|
|
|
767
1032
|
private boolean isFrameMetricsAggregatorAvailable() {
|
|
768
1033
|
return androidXAvailable && frameMetricsAggregator != null;
|
|
769
1034
|
}
|
|
1035
|
+
|
|
1036
|
+
public static @Nullable String getURLFromDSN(@Nullable String dsn) {
|
|
1037
|
+
if (dsn == null) {
|
|
1038
|
+
return null;
|
|
1039
|
+
}
|
|
1040
|
+
URI uri = null;
|
|
1041
|
+
try {
|
|
1042
|
+
uri = new URI(dsn);
|
|
1043
|
+
} catch (URISyntaxException e) {
|
|
1044
|
+
return null;
|
|
1045
|
+
}
|
|
1046
|
+
return uri.getScheme() + "://" + uri.getHost();
|
|
1047
|
+
}
|
|
770
1048
|
}
|
|
@@ -2,7 +2,7 @@ package io.sentry.react;
|
|
|
2
2
|
|
|
3
3
|
class RNSentryVersion {
|
|
4
4
|
static final String REACT_NATIVE_SDK_PACKAGE_NAME = "npm:@sentry/react-native";
|
|
5
|
-
static final String REACT_NATIVE_SDK_PACKAGE_VERSION = "6.7.0
|
|
5
|
+
static final String REACT_NATIVE_SDK_PACKAGE_VERSION = "6.7.0";
|
|
6
6
|
static final String NATIVE_SDK_NAME = "sentry.native.android.react-native";
|
|
7
7
|
static final String ANDROID_SDK_NAME = "sentry.java.android.react-native";
|
|
8
8
|
static final String REACT_NATIVE_SDK_NAME = "sentry.javascript.react-native";
|
package/dist/js/sdk.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdk.d.ts","sourceRoot":"","sources":["../../src/js/sdk.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAA2C,KAAK,EAAsB,YAAY,EAAE,MAAM,cAAc,CAAC;AAMrH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,OAAO,KAAK,EAA4B,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"sdk.d.ts","sourceRoot":"","sources":["../../src/js/sdk.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAA2C,KAAK,EAAsB,YAAY,EAAE,MAAM,cAAc,CAAC;AAMrH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,OAAO,KAAK,EAA4B,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,WAAW,CAAC;AA6BzG;;GAEG;AACH,wBAAgB,IAAI,CAAC,aAAa,EAAE,kBAAkB,GAAG,IAAI,CAuG5D;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACpD,aAAa,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,EACrC,OAAO,CAAC,EAAE,yBAAyB,GAClC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAiBxB;AAED;;;GAGG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAElC;AAED;;;GAGG;AACH,wBAAsB,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC,CAe9C;AAED;;GAEG;AACH,wBAAsB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAU3C;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAQhE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS,CAUzE;AAED;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAE9D"}
|
package/dist/js/sdk.js
CHANGED
|
@@ -13,7 +13,6 @@ import { useEncodePolyfill } from './transports/encodePolyfill';
|
|
|
13
13
|
import { DEFAULT_BUFFER_SIZE, makeNativeTransportFactory } from './transports/native';
|
|
14
14
|
import { getDefaultEnvironment, isExpoGo, isRunningInMetroDevServer } from './utils/environment';
|
|
15
15
|
import { safeFactory, safeTracesSampler } from './utils/safe';
|
|
16
|
-
import { RN_GLOBAL_OBJ } from './utils/worldwide';
|
|
17
16
|
import { NATIVE } from './wrapper';
|
|
18
17
|
const DEFAULT_OPTIONS = {
|
|
19
18
|
enableNativeCrashHandling: true,
|
|
@@ -40,9 +39,8 @@ export function init(passedOptions) {
|
|
|
40
39
|
if (isRunningInMetroDevServer()) {
|
|
41
40
|
return;
|
|
42
41
|
}
|
|
43
|
-
const
|
|
44
|
-
const
|
|
45
|
-
const enableNative = userOptions.enableNative === undefined || userOptions.enableNative
|
|
42
|
+
const maxQueueSize = (_c = (_a = passedOptions.maxQueueSize) !== null && _a !== void 0 ? _a : (_b = passedOptions.transportOptions) === null || _b === void 0 ? void 0 : _b.bufferSize) !== null && _c !== void 0 ? _c : DEFAULT_OPTIONS.maxQueueSize;
|
|
43
|
+
const enableNative = passedOptions.enableNative === undefined || passedOptions.enableNative
|
|
46
44
|
? NATIVE.isNativeAvailable()
|
|
47
45
|
: false;
|
|
48
46
|
useEncodePolyfill();
|
|
@@ -62,10 +60,10 @@ export function init(passedOptions) {
|
|
|
62
60
|
const port = dsnComponents.port ? `:${dsnComponents.port}` : '';
|
|
63
61
|
return `${dsnComponents.protocol}://${dsnComponents.host}${port}`;
|
|
64
62
|
};
|
|
65
|
-
const userBeforeBreadcrumb = safeFactory(
|
|
63
|
+
const userBeforeBreadcrumb = safeFactory(passedOptions.beforeBreadcrumb, { loggerMessage: 'The beforeBreadcrumb threw an error' });
|
|
66
64
|
// Exclude Dev Server and Sentry Dsn request from Breadcrumbs
|
|
67
65
|
const devServerUrl = (_d = getDevServer()) === null || _d === void 0 ? void 0 : _d.url;
|
|
68
|
-
const dsn = getURLFromDSN(
|
|
66
|
+
const dsn = getURLFromDSN(passedOptions.dsn);
|
|
69
67
|
const defaultBeforeBreadcrumb = (breadcrumb, _hint) => {
|
|
70
68
|
var _a;
|
|
71
69
|
const type = breadcrumb.type || '';
|
|
@@ -86,30 +84,24 @@ export function init(passedOptions) {
|
|
|
86
84
|
}
|
|
87
85
|
return defaultBeforeBreadcrumb(modifiedBreadcrumb, hint);
|
|
88
86
|
};
|
|
89
|
-
const options = Object.assign(Object.assign(Object.assign({}, DEFAULT_OPTIONS),
|
|
87
|
+
const options = Object.assign(Object.assign(Object.assign({}, DEFAULT_OPTIONS), passedOptions), { enableNative, enableNativeNagger: shouldEnableNativeNagger(passedOptions.enableNativeNagger),
|
|
90
88
|
// If custom transport factory fails the SDK won't initialize
|
|
91
|
-
transport:
|
|
89
|
+
transport: passedOptions.transport
|
|
92
90
|
|| makeNativeTransportFactory({
|
|
93
91
|
enableNative,
|
|
94
92
|
})
|
|
95
|
-
|| makeFetchTransport, transportOptions: Object.assign(Object.assign(Object.assign({}, DEFAULT_OPTIONS.transportOptions), ((_e =
|
|
96
|
-
if (!('autoInitializeNativeSdk' in userOptions) && RN_GLOBAL_OBJ.__SENTRY_OPTIONS__) {
|
|
97
|
-
// We expect users to use the file options only in combination with manual native initialization
|
|
98
|
-
// eslint-disable-next-line no-console
|
|
99
|
-
console.info('Initializing Sentry JS with the options file. Expecting manual native initialization before JS. Native will not be initialized automatically.');
|
|
100
|
-
options.autoInitializeNativeSdk = false;
|
|
101
|
-
}
|
|
93
|
+
|| makeFetchTransport, transportOptions: Object.assign(Object.assign(Object.assign({}, DEFAULT_OPTIONS.transportOptions), ((_e = passedOptions.transportOptions) !== null && _e !== void 0 ? _e : {})), { bufferSize: maxQueueSize }), maxQueueSize, integrations: [], stackParser: stackParserFromStackParserOptions(passedOptions.stackParser || defaultStackParser), beforeBreadcrumb: chainedBeforeBreadcrumb, initialScope: safeFactory(passedOptions.initialScope, { loggerMessage: 'The initialScope threw an error' }) });
|
|
102
94
|
if ('tracesSampler' in options) {
|
|
103
95
|
options.tracesSampler = safeTracesSampler(options.tracesSampler);
|
|
104
96
|
}
|
|
105
97
|
if (!('environment' in options)) {
|
|
106
98
|
options.environment = getDefaultEnvironment();
|
|
107
99
|
}
|
|
108
|
-
const defaultIntegrations =
|
|
100
|
+
const defaultIntegrations = passedOptions.defaultIntegrations === undefined
|
|
109
101
|
? getDefaultIntegrations(options)
|
|
110
|
-
:
|
|
102
|
+
: passedOptions.defaultIntegrations;
|
|
111
103
|
options.integrations = getIntegrationsToSetup({
|
|
112
|
-
integrations: safeFactory(
|
|
104
|
+
integrations: safeFactory(passedOptions.integrations, { loggerMessage: 'The integrations threw an error' }),
|
|
113
105
|
defaultIntegrations,
|
|
114
106
|
});
|
|
115
107
|
initAndBind(ReactNativeClient, options);
|
|
@@ -117,9 +109,6 @@ export function init(passedOptions) {
|
|
|
117
109
|
logger.info('Offline caching, native errors features are not available in Expo Go.');
|
|
118
110
|
logger.info('Use EAS Build / Native Release Build to test these features.');
|
|
119
111
|
}
|
|
120
|
-
if (RN_GLOBAL_OBJ.__SENTRY_OPTIONS__) {
|
|
121
|
-
logger.info('Sentry JS initialized with options from the options file.');
|
|
122
|
-
}
|
|
123
112
|
}
|
|
124
113
|
/**
|
|
125
114
|
* Inits the Sentry React Native SDK with automatic instrumentation and wrapped features.
|
package/dist/js/sdk.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdk.js","sourceRoot":"","sources":["../../src/js/sdk.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,cAAc,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,iCAAiC,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,cAAc,CAAC;AAClN,OAAO,EACL,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AACrE,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAEhE,OAAO,EAAE,wBAAwB,EAAE,MAAM,WAAW,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AACtF,OAAO,EAAE,qBAAqB,EAAE,QAAQ,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AACjG,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnC,MAAM,eAAe,GAAuB;IAC1C,yBAAyB,EAAE,IAAI;IAC/B,kBAAkB,EAAE,IAAI;IACxB,uBAAuB,EAAE,IAAI;IAC7B,4BAA4B,EAAE,IAAI;IAClC,iCAAiC,EAAE,IAAI;IACvC,kBAAkB,EAAE,IAAI;IACxB,iBAAiB,EAAE,IAAI;IACvB,YAAY,EAAE,mBAAmB;IACjC,gBAAgB,EAAE,IAAI;IACtB,2BAA2B,EAAE,KAAK;IAClC,SAAS,EAAE,IAAI;IACf,sBAAsB,EAAE,IAAI;IAC5B,0BAA0B,EAAE,IAAI;IAChC,mBAAmB,EAAE,IAAI;IACzB,4BAA4B,EAAE,KAAK;CACpC,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,IAAI,CAAC,aAAiC;;IACpD,IAAI,yBAAyB,EAAE,EAAE;QAC/B,OAAO;KACR;IAED,MAAM,WAAW,mCACZ,aAAa,CAAC,kBAAkB,GAChC,aAAa,CACjB,CAAC;IAEF,MAAM,YAAY,GAAG,MAAA,MAAA,WAAW,CAAC,YAAY,mCAExC,MAAA,WAAW,CAAC,gBAAgB,0CAAE,UAAU,mCACxC,eAAe,CAAC,YAAY,CAAC;IAElC,MAAM,YAAY,GAAG,WAAW,CAAC,YAAY,KAAK,SAAS,IAAI,WAAW,CAAC,YAAY;QACrF,CAAC,CAAC,MAAM,CAAC,iBAAiB,EAAE;QAC5B,CAAC,CAAC,KAAK,CAAC;IAEV,iBAAiB,EAAE,CAAC;IACpB,IAAI,YAAY,EAAE;QAChB,kBAAkB,CAAC,cAAc,EAAE,CAAC,CAAC;QACrC,kBAAkB,CAAC,iBAAiB,EAAE,CAAC,CAAC;KACzC;IAED,MAAM,aAAa,GAAG,CAAC,GAAkB,EAAsB,EAAE;QAC/D,IAAI,CAAC,GAAG,EAAE;YACR,OAAO,SAAS,CAAC;SAClB;QACD,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,CAAC,aAAa,EAAE;YAClB,MAAM,CAAC,KAAK,CAAC,kCAAkC,EAAE,GAAG,CAAC,CAAC;YACtD,OAAO,SAAS,CAAC;SAClB;QACD,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChE,OAAO,GAAG,aAAa,CAAC,QAAQ,MAAM,aAAa,CAAC,IAAI,GAAG,IAAI,EAAE,CAAC;IACpE,CAAC,CAAC;IAEF,MAAM,oBAAoB,GAAG,WAAW,CAAC,WAAW,CAAC,gBAAgB,EAAE,EAAE,aAAa,EAAE,qCAAqC,EAAE,CAAC,CAAC;IAEjI,6DAA6D;IAC7D,MAAM,YAAY,GAAG,MAAA,YAAY,EAAE,0CAAE,GAAG,CAAC;IACzC,MAAM,GAAG,GAAG,aAAa,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAC3C,MAAM,uBAAuB,GAAG,CAAC,UAAsB,EAAE,KAAsB,EAAqB,EAAE;;QACpG,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,IAAI,EAAE,CAAC;QACnC,MAAM,GAAG,GAAG,OAAO,CAAA,MAAA,UAAU,CAAC,IAAI,0CAAE,GAAG,CAAA,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAChF,IAAI,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,YAAY,IAAI,GAAG,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;YACvG,OAAO,IAAI,CAAC;SACb;QACD,OAAO,UAAU,CAAC;IACpB,CAAC,CAAC;IAEF,MAAM,uBAAuB,GAAG,CAAC,UAAsB,EAAE,IAAqB,EAAqB,EAAE;QACnG,IAAI,kBAAkB,GAAG,UAAU,CAAC;QACpC,IAAI,oBAAoB,EAAE;YACxB,MAAM,MAAM,GAAG,oBAAoB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;YACtD,IAAI,MAAM,KAAK,IAAI,EAAE;gBACnB,OAAO,IAAI,CAAC;aACb;YACD,kBAAkB,GAAG,MAAM,CAAC;SAC7B;QACD,OAAO,uBAAuB,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC;IAC3D,CAAC,CAAC;IAEF,MAAM,OAAO,iDACR,eAAe,GACf,WAAW,KACd,YAAY,EACZ,kBAAkB,EAAE,wBAAwB,CAAC,WAAW,CAAC,kBAAkB,CAAC;QAC5E,6DAA6D;QAC7D,SAAS,EAAE,WAAW,CAAC,SAAS;eAC3B,0BAA0B,CAAC;gBAC5B,YAAY;aACb,CAAC;eACC,kBAAkB,EACvB,gBAAgB,gDACX,eAAe,CAAC,gBAAgB,GAChC,CAAC,MAAA,WAAW,CAAC,gBAAgB,mCAAI,EAAE,CAAC,KACvC,UAAU,EAAE,YAAY,KAE1B,YAAY,EACZ,YAAY,EAAE,EAAE,EAChB,WAAW,EAAE,iCAAiC,CAAC,WAAW,CAAC,WAAW,IAAI,kBAAkB,CAAC,EAC7F,gBAAgB,EAAE,uBAAuB,EACzC,YAAY,EAAE,WAAW,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE,aAAa,EAAE,iCAAiC,EAAE,CAAC,GAC1G,CAAC;IAEF,IAAI,CAAC,CAAC,yBAAyB,IAAI,WAAW,CAAC,IAAI,aAAa,CAAC,kBAAkB,EAAE;QACnF,gGAAgG;QAChG,sCAAsC;QACtC,OAAO,CAAC,IAAI,CAAC,+IAA+I,CAAC,CAAC;QAC9J,OAAO,CAAC,uBAAuB,GAAG,KAAK,CAAC;KACzC;IAED,IAAI,eAAe,IAAI,OAAO,EAAE;QAC9B,OAAO,CAAC,aAAa,GAAG,iBAAiB,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;KAClE;IAED,IAAI,CAAC,CAAC,aAAa,IAAI,OAAO,CAAC,EAAE;QAC/B,OAAO,CAAC,WAAW,GAAG,qBAAqB,EAAE,CAAC;KAC/C;IAED,MAAM,mBAAmB,GAA0B,WAAW,CAAC,mBAAmB,KAAK,SAAS;QAC9F,CAAC,CAAC,sBAAsB,CAAC,OAAO,CAAC;QACjC,CAAC,CAAC,WAAW,CAAC,mBAAmB,CAAC;IAEpC,OAAO,CAAC,YAAY,GAAG,sBAAsB,CAAC;QAC5C,YAAY,EAAE,WAAW,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE,aAAa,EAAE,iCAAiC,EAAE,CAAC;QACzG,mBAAmB;KACpB,CAAC,CAAC;IACH,WAAW,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;IAExC,IAAI,QAAQ,EAAE,EAAE;QACd,MAAM,CAAC,IAAI,CAAC,uEAAuE,CAAC,CAAC;QACrF,MAAM,CAAC,IAAI,CAAC,8DAA8D,CAAC,CAAC;KAC7E;IAED,IAAI,aAAa,CAAC,kBAAkB,EAAE;QACpC,MAAM,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC;KAC1E;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,IAAI,CAClB,aAAqC,EACrC,OAAmC;;IAEnC,MAAM,aAAa,mCACd,CAAC,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,aAAa,mCAAI,EAAE,CAAC,KACjC,IAAI,EAAE,MAAA,aAAa,CAAC,WAAW,mCAAI,MAAM,GAC1C,CAAC;IAEF,MAAM,OAAO,GAAgB,CAAC,QAAQ,EAAE,EAAE;;QACxC,OAAO,CACL,oBAAC,kBAAkB,oBAAK,CAAC,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,uBAAuB,mCAAI,EAAE,CAAC;YAC9D,oBAAC,mBAAmB,oBAAK,aAAa;gBACpC,oBAAC,aAAa,oBAAK,QAAQ,EAAI,CACX,CACH,CACtB,CAAC;IACJ,CAAC,CAAC;IAEF,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW;IACzB,MAAM,CAAC,WAAW,EAAE,CAAC;AACvB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAgB,KAAK;;QACzB,IAAI;YACF,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;YAE3B,IAAI,MAAM,EAAE;gBACV,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;gBAEpC,OAAO,MAAM,CAAC;aACf;YACD,oCAAoC;SACrC;QAAC,OAAO,CAAC,EAAE,GAAG;QAEf,MAAM,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;QAEjD,OAAO,KAAK,CAAC;IACf,CAAC;CAAA;AAED;;GAEG;AACH,MAAM,UAAgB,KAAK;;QACzB,IAAI;YACF,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;YAE3B,IAAI,MAAM,EAAE;gBACV,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;aACtB;SACF;QAAC,OAAO,CAAC,EAAE;YACV,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;SACzC;IACH,CAAC;CAAA;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,QAAsB;IACxD,MAAM,cAAc,GAAuB;QACzC,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,OAAO,EAAE,QAAQ,CAAC,QAAQ;QAC1B,iBAAiB,EAAE,QAAQ,CAAC,QAAQ;KACrC,CAAC;IACF,eAAe,CAAC,cAAc,CAAC,CAAC;AAClC,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,SAAS,CAAI,QAA6B;IACxD,MAAM,YAAY,GAAG,CAAC,KAAY,EAAiB,EAAE;QACnD,IAAI;YACF,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC;SACxB;QAAC,OAAO,CAAC,EAAE;YACV,MAAM,CAAC,KAAK,CAAC,wCAAwC,EAAE,CAAC,CAAC,CAAC;YAC1D,OAAO,SAAS,CAAC;SAClB;IACH,CAAC,CAAC;IACF,OAAO,aAAa,CAAC,YAAY,CAAC,CAAC;AACrC,CAAC;AAED;;GAEG;AACH,MAAM,UAAgB,cAAc;;QAClC,OAAO,MAAM,CAAC,cAAc,EAAE,CAAC;IACjC,CAAC;CAAA","sourcesContent":["/* eslint-disable complexity */\nimport type { Breadcrumb, BreadcrumbHint, Integration, Scope, SendFeedbackParams, UserFeedback } from '@sentry/core';\nimport { captureFeedback, getClient, getGlobalScope, getIntegrationsToSetup, getIsolationScope, initAndBind, logger, makeDsn, stackParserFromStackParserOptions, withScope as coreWithScope } from '@sentry/core';\nimport {\n defaultStackParser,\n makeFetchTransport,\n} from '@sentry/react';\nimport * as React from 'react';\n\nimport { ReactNativeClient } from './client';\nimport { getDevServer } from './integrations/debugsymbolicatorutils';\nimport { getDefaultIntegrations } from './integrations/default';\nimport type { ReactNativeClientOptions, ReactNativeOptions, ReactNativeWrapperOptions } from './options';\nimport { shouldEnableNativeNagger } from './options';\nimport { enableSyncToNative } from './scopeSync';\nimport { TouchEventBoundary } from './touchevents';\nimport { ReactNativeProfiler } from './tracing';\nimport { useEncodePolyfill } from './transports/encodePolyfill';\nimport { DEFAULT_BUFFER_SIZE, makeNativeTransportFactory } from './transports/native';\nimport { getDefaultEnvironment, isExpoGo, isRunningInMetroDevServer } from './utils/environment';\nimport { safeFactory, safeTracesSampler } from './utils/safe';\nimport { RN_GLOBAL_OBJ } from './utils/worldwide';\nimport { NATIVE } from './wrapper';\n\nconst DEFAULT_OPTIONS: ReactNativeOptions = {\n enableNativeCrashHandling: true,\n enableNativeNagger: true,\n autoInitializeNativeSdk: true,\n enableAutoPerformanceTracing: true,\n enableWatchdogTerminationTracking: true,\n patchGlobalPromise: true,\n sendClientReports: true,\n maxQueueSize: DEFAULT_BUFFER_SIZE,\n attachStacktrace: true,\n enableCaptureFailedRequests: false,\n enableNdk: true,\n enableAppStartTracking: true,\n enableNativeFramesTracking: true,\n enableStallTracking: true,\n enableUserInteractionTracing: false,\n};\n\n/**\n * Inits the SDK and returns the final options.\n */\nexport function init(passedOptions: ReactNativeOptions): void {\n if (isRunningInMetroDevServer()) {\n return;\n }\n\n const userOptions = {\n ...RN_GLOBAL_OBJ.__SENTRY_OPTIONS__,\n ...passedOptions,\n };\n\n const maxQueueSize = userOptions.maxQueueSize\n // eslint-disable-next-line deprecation/deprecation\n ?? userOptions.transportOptions?.bufferSize\n ?? DEFAULT_OPTIONS.maxQueueSize;\n\n const enableNative = userOptions.enableNative === undefined || userOptions.enableNative\n ? NATIVE.isNativeAvailable()\n : false;\n\n useEncodePolyfill();\n if (enableNative) {\n enableSyncToNative(getGlobalScope());\n enableSyncToNative(getIsolationScope());\n }\n\n const getURLFromDSN = (dsn: string | null): string | undefined => {\n if (!dsn) {\n return undefined;\n }\n const dsnComponents = makeDsn(dsn);\n if (!dsnComponents) {\n logger.error('Failed to extract url from DSN: ', dsn);\n return undefined;\n }\n const port = dsnComponents.port ? `:${dsnComponents.port}` : '';\n return `${dsnComponents.protocol}://${dsnComponents.host}${port}`;\n };\n\n const userBeforeBreadcrumb = safeFactory(userOptions.beforeBreadcrumb, { loggerMessage: 'The beforeBreadcrumb threw an error' });\n\n // Exclude Dev Server and Sentry Dsn request from Breadcrumbs\n const devServerUrl = getDevServer()?.url;\n const dsn = getURLFromDSN(userOptions.dsn);\n const defaultBeforeBreadcrumb = (breadcrumb: Breadcrumb, _hint?: BreadcrumbHint): Breadcrumb | null => {\n const type = breadcrumb.type || '';\n const url = typeof breadcrumb.data?.url === 'string' ? breadcrumb.data.url : '';\n if (type === 'http' && ((devServerUrl && url.startsWith(devServerUrl)) || (dsn && url.startsWith(dsn)))) {\n return null;\n }\n return breadcrumb;\n };\n\n const chainedBeforeBreadcrumb = (breadcrumb: Breadcrumb, hint?: BreadcrumbHint): Breadcrumb | null => {\n let modifiedBreadcrumb = breadcrumb;\n if (userBeforeBreadcrumb) {\n const result = userBeforeBreadcrumb(breadcrumb, hint);\n if (result === null) {\n return null;\n }\n modifiedBreadcrumb = result;\n }\n return defaultBeforeBreadcrumb(modifiedBreadcrumb, hint);\n };\n\n const options: ReactNativeClientOptions = {\n ...DEFAULT_OPTIONS,\n ...userOptions,\n enableNative,\n enableNativeNagger: shouldEnableNativeNagger(userOptions.enableNativeNagger),\n // If custom transport factory fails the SDK won't initialize\n transport: userOptions.transport\n || makeNativeTransportFactory({\n enableNative,\n })\n || makeFetchTransport,\n transportOptions: {\n ...DEFAULT_OPTIONS.transportOptions,\n ...(userOptions.transportOptions ?? {}),\n bufferSize: maxQueueSize,\n },\n maxQueueSize,\n integrations: [],\n stackParser: stackParserFromStackParserOptions(userOptions.stackParser || defaultStackParser),\n beforeBreadcrumb: chainedBeforeBreadcrumb,\n initialScope: safeFactory(userOptions.initialScope, { loggerMessage: 'The initialScope threw an error' }),\n };\n\n if (!('autoInitializeNativeSdk' in userOptions) && RN_GLOBAL_OBJ.__SENTRY_OPTIONS__) {\n // We expect users to use the file options only in combination with manual native initialization\n // eslint-disable-next-line no-console\n console.info('Initializing Sentry JS with the options file. Expecting manual native initialization before JS. Native will not be initialized automatically.');\n options.autoInitializeNativeSdk = false;\n }\n\n if ('tracesSampler' in options) {\n options.tracesSampler = safeTracesSampler(options.tracesSampler);\n }\n\n if (!('environment' in options)) {\n options.environment = getDefaultEnvironment();\n }\n\n const defaultIntegrations: false | Integration[] = userOptions.defaultIntegrations === undefined\n ? getDefaultIntegrations(options)\n : userOptions.defaultIntegrations;\n\n options.integrations = getIntegrationsToSetup({\n integrations: safeFactory(userOptions.integrations, { loggerMessage: 'The integrations threw an error' }),\n defaultIntegrations,\n });\n initAndBind(ReactNativeClient, options);\n\n if (isExpoGo()) {\n logger.info('Offline caching, native errors features are not available in Expo Go.');\n logger.info('Use EAS Build / Native Release Build to test these features.');\n }\n\n if (RN_GLOBAL_OBJ.__SENTRY_OPTIONS__) {\n logger.info('Sentry JS initialized with options from the options file.');\n }\n}\n\n/**\n * Inits the Sentry React Native SDK with automatic instrumentation and wrapped features.\n */\nexport function wrap<P extends Record<string, unknown>>(\n RootComponent: React.ComponentType<P>,\n options?: ReactNativeWrapperOptions\n): React.ComponentType<P> {\n const profilerProps = {\n ...(options?.profilerProps ?? {}),\n name: RootComponent.displayName ?? 'Root',\n };\n\n const RootApp: React.FC<P> = (appProps) => {\n return (\n <TouchEventBoundary {...(options?.touchEventBoundaryProps ?? {})}>\n <ReactNativeProfiler {...profilerProps}>\n <RootComponent {...appProps} />\n </ReactNativeProfiler>\n </TouchEventBoundary>\n );\n };\n\n return RootApp;\n}\n\n/**\n * If native client is available it will trigger a native crash.\n * Use this only for testing purposes.\n */\nexport function nativeCrash(): void {\n NATIVE.nativeCrash();\n}\n\n/**\n * Flushes all pending events in the queue to disk.\n * Use this before applying any realtime updates such as code-push or expo updates.\n */\nexport async function flush(): Promise<boolean> {\n try {\n const client = getClient();\n\n if (client) {\n const result = await client.flush();\n\n return result;\n }\n // eslint-disable-next-line no-empty\n } catch (_) { }\n\n logger.error('Failed to flush the event queue.');\n\n return false;\n}\n\n/**\n * Closes the SDK, stops sending events.\n */\nexport async function close(): Promise<void> {\n try {\n const client = getClient();\n\n if (client) {\n await client.close();\n }\n } catch (e) {\n logger.error('Failed to close the SDK');\n }\n}\n\n/**\n * Captures user feedback and sends it to Sentry.\n * @deprecated Use `Sentry.captureFeedback` instead.\n */\nexport function captureUserFeedback(feedback: UserFeedback): void {\n const feedbackParams: SendFeedbackParams = {\n name: feedback.name,\n email: feedback.email,\n message: feedback.comments,\n associatedEventId: feedback.event_id,\n };\n captureFeedback(feedbackParams);\n}\n\n/**\n * Creates a new scope with and executes the given operation within.\n * The scope is automatically removed once the operation\n * finishes or throws.\n *\n * This is essentially a convenience function for:\n *\n * pushScope();\n * callback();\n * popScope();\n *\n * @param callback that will be enclosed into push/popScope.\n */\nexport function withScope<T>(callback: (scope: Scope) => T): T | undefined {\n const safeCallback = (scope: Scope): T | undefined => {\n try {\n return callback(scope);\n } catch (e) {\n logger.error('Error while running withScope callback', e);\n return undefined;\n }\n };\n return coreWithScope(safeCallback);\n}\n\n/**\n * Returns if the app crashed in the last run.\n */\nexport async function crashedLastRun(): Promise<boolean | null> {\n return NATIVE.crashedLastRun();\n}\n"]}
|
|
1
|
+
{"version":3,"file":"sdk.js","sourceRoot":"","sources":["../../src/js/sdk.tsx"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable complexity */\nimport type { Breadcrumb, BreadcrumbHint, Integration, Scope, SendFeedbackParams, UserFeedback } from '@sentry/core';\nimport { captureFeedback, getClient, getGlobalScope, getIntegrationsToSetup, getIsolationScope, initAndBind, logger, makeDsn, stackParserFromStackParserOptions, withScope as coreWithScope } from '@sentry/core';\nimport {\n defaultStackParser,\n makeFetchTransport,\n} from '@sentry/react';\nimport * as React from 'react';\n\nimport { ReactNativeClient } from './client';\nimport { getDevServer } from './integrations/debugsymbolicatorutils';\nimport { getDefaultIntegrations } from './integrations/default';\nimport type { ReactNativeClientOptions, ReactNativeOptions, ReactNativeWrapperOptions } from './options';\nimport { shouldEnableNativeNagger } from './options';\nimport { enableSyncToNative } from './scopeSync';\nimport { TouchEventBoundary } from './touchevents';\nimport { ReactNativeProfiler } from './tracing';\nimport { useEncodePolyfill } from './transports/encodePolyfill';\nimport { DEFAULT_BUFFER_SIZE, makeNativeTransportFactory } from './transports/native';\nimport { getDefaultEnvironment, isExpoGo, isRunningInMetroDevServer } from './utils/environment';\nimport { safeFactory, safeTracesSampler } from './utils/safe';\nimport { NATIVE } from './wrapper';\n\nconst DEFAULT_OPTIONS: ReactNativeOptions = {\n enableNativeCrashHandling: true,\n enableNativeNagger: true,\n autoInitializeNativeSdk: true,\n enableAutoPerformanceTracing: true,\n enableWatchdogTerminationTracking: true,\n patchGlobalPromise: true,\n sendClientReports: true,\n maxQueueSize: DEFAULT_BUFFER_SIZE,\n attachStacktrace: true,\n enableCaptureFailedRequests: false,\n enableNdk: true,\n enableAppStartTracking: true,\n enableNativeFramesTracking: true,\n enableStallTracking: true,\n enableUserInteractionTracing: false,\n};\n\n/**\n * Inits the SDK and returns the final options.\n */\nexport function init(passedOptions: ReactNativeOptions): void {\n if (isRunningInMetroDevServer()) {\n return;\n }\n\n const maxQueueSize = passedOptions.maxQueueSize\n // eslint-disable-next-line deprecation/deprecation\n ?? passedOptions.transportOptions?.bufferSize\n ?? DEFAULT_OPTIONS.maxQueueSize;\n\n const enableNative = passedOptions.enableNative === undefined || passedOptions.enableNative\n ? NATIVE.isNativeAvailable()\n : false;\n\n useEncodePolyfill();\n if (enableNative) {\n enableSyncToNative(getGlobalScope());\n enableSyncToNative(getIsolationScope());\n }\n\n const getURLFromDSN = (dsn: string | null): string | undefined => {\n if (!dsn) {\n return undefined;\n }\n const dsnComponents = makeDsn(dsn);\n if (!dsnComponents) {\n logger.error('Failed to extract url from DSN: ', dsn);\n return undefined;\n }\n const port = dsnComponents.port ? `:${dsnComponents.port}` : '';\n return `${dsnComponents.protocol}://${dsnComponents.host}${port}`;\n };\n\n const userBeforeBreadcrumb = safeFactory(passedOptions.beforeBreadcrumb, { loggerMessage: 'The beforeBreadcrumb threw an error' });\n\n // Exclude Dev Server and Sentry Dsn request from Breadcrumbs\n const devServerUrl = getDevServer()?.url;\n const dsn = getURLFromDSN(passedOptions.dsn);\n const defaultBeforeBreadcrumb = (breadcrumb: Breadcrumb, _hint?: BreadcrumbHint): Breadcrumb | null => {\n const type = breadcrumb.type || '';\n const url = typeof breadcrumb.data?.url === 'string' ? breadcrumb.data.url : '';\n if (type === 'http' && ((devServerUrl && url.startsWith(devServerUrl)) || (dsn && url.startsWith(dsn)))) {\n return null;\n }\n return breadcrumb;\n };\n\n const chainedBeforeBreadcrumb = (breadcrumb: Breadcrumb, hint?: BreadcrumbHint): Breadcrumb | null => {\n let modifiedBreadcrumb = breadcrumb;\n if (userBeforeBreadcrumb) {\n const result = userBeforeBreadcrumb(breadcrumb, hint);\n if (result === null) {\n return null;\n }\n modifiedBreadcrumb = result;\n }\n return defaultBeforeBreadcrumb(modifiedBreadcrumb, hint);\n };\n\n const options: ReactNativeClientOptions = {\n ...DEFAULT_OPTIONS,\n ...passedOptions,\n enableNative,\n enableNativeNagger: shouldEnableNativeNagger(passedOptions.enableNativeNagger),\n // If custom transport factory fails the SDK won't initialize\n transport: passedOptions.transport\n || makeNativeTransportFactory({\n enableNative,\n })\n || makeFetchTransport,\n transportOptions: {\n ...DEFAULT_OPTIONS.transportOptions,\n ...(passedOptions.transportOptions ?? {}),\n bufferSize: maxQueueSize,\n },\n maxQueueSize,\n integrations: [],\n stackParser: stackParserFromStackParserOptions(passedOptions.stackParser || defaultStackParser),\n beforeBreadcrumb: chainedBeforeBreadcrumb,\n initialScope: safeFactory(passedOptions.initialScope, { loggerMessage: 'The initialScope threw an error' }),\n };\n if ('tracesSampler' in options) {\n options.tracesSampler = safeTracesSampler(options.tracesSampler);\n }\n\n if (!('environment' in options)) {\n options.environment = getDefaultEnvironment();\n }\n\n const defaultIntegrations: false | Integration[] = passedOptions.defaultIntegrations === undefined\n ? getDefaultIntegrations(options)\n : passedOptions.defaultIntegrations;\n\n options.integrations = getIntegrationsToSetup({\n integrations: safeFactory(passedOptions.integrations, { loggerMessage: 'The integrations threw an error' }),\n defaultIntegrations,\n });\n initAndBind(ReactNativeClient, options);\n\n if (isExpoGo()) {\n logger.info('Offline caching, native errors features are not available in Expo Go.');\n logger.info('Use EAS Build / Native Release Build to test these features.');\n }\n}\n\n/**\n * Inits the Sentry React Native SDK with automatic instrumentation and wrapped features.\n */\nexport function wrap<P extends Record<string, unknown>>(\n RootComponent: React.ComponentType<P>,\n options?: ReactNativeWrapperOptions\n): React.ComponentType<P> {\n const profilerProps = {\n ...(options?.profilerProps ?? {}),\n name: RootComponent.displayName ?? 'Root',\n };\n\n const RootApp: React.FC<P> = (appProps) => {\n return (\n <TouchEventBoundary {...(options?.touchEventBoundaryProps ?? {})}>\n <ReactNativeProfiler {...profilerProps}>\n <RootComponent {...appProps} />\n </ReactNativeProfiler>\n </TouchEventBoundary>\n );\n };\n\n return RootApp;\n}\n\n/**\n * If native client is available it will trigger a native crash.\n * Use this only for testing purposes.\n */\nexport function nativeCrash(): void {\n NATIVE.nativeCrash();\n}\n\n/**\n * Flushes all pending events in the queue to disk.\n * Use this before applying any realtime updates such as code-push or expo updates.\n */\nexport async function flush(): Promise<boolean> {\n try {\n const client = getClient();\n\n if (client) {\n const result = await client.flush();\n\n return result;\n }\n // eslint-disable-next-line no-empty\n } catch (_) { }\n\n logger.error('Failed to flush the event queue.');\n\n return false;\n}\n\n/**\n * Closes the SDK, stops sending events.\n */\nexport async function close(): Promise<void> {\n try {\n const client = getClient();\n\n if (client) {\n await client.close();\n }\n } catch (e) {\n logger.error('Failed to close the SDK');\n }\n}\n\n/**\n * Captures user feedback and sends it to Sentry.\n * @deprecated Use `Sentry.captureFeedback` instead.\n */\nexport function captureUserFeedback(feedback: UserFeedback): void {\n const feedbackParams: SendFeedbackParams = {\n name: feedback.name,\n email: feedback.email,\n message: feedback.comments,\n associatedEventId: feedback.event_id,\n };\n captureFeedback(feedbackParams);\n}\n\n/**\n * Creates a new scope with and executes the given operation within.\n * The scope is automatically removed once the operation\n * finishes or throws.\n *\n * This is essentially a convenience function for:\n *\n * pushScope();\n * callback();\n * popScope();\n *\n * @param callback that will be enclosed into push/popScope.\n */\nexport function withScope<T>(callback: (scope: Scope) => T): T | undefined {\n const safeCallback = (scope: Scope): T | undefined => {\n try {\n return callback(scope);\n } catch (e) {\n logger.error('Error while running withScope callback', e);\n return undefined;\n }\n };\n return coreWithScope(safeCallback);\n}\n\n/**\n * Returns if the app crashed in the last run.\n */\nexport async function crashedLastRun(): Promise<boolean | null> {\n return NATIVE.crashedLastRun();\n}\n"]}
|
|
@@ -6,7 +6,9 @@ export interface SentryMetroConfigOptions {
|
|
|
6
6
|
* Annotates React components with Sentry data.
|
|
7
7
|
* @default false
|
|
8
8
|
*/
|
|
9
|
-
annotateReactComponents?: boolean
|
|
9
|
+
annotateReactComponents?: boolean | {
|
|
10
|
+
ignoredComponents?: string[];
|
|
11
|
+
};
|
|
10
12
|
/**
|
|
11
13
|
* Adds the Sentry replay package for web.
|
|
12
14
|
* @default true
|
|
@@ -18,14 +20,6 @@ export interface SentryMetroConfigOptions {
|
|
|
18
20
|
* @default true
|
|
19
21
|
*/
|
|
20
22
|
enableSourceContextInDevelopment?: boolean;
|
|
21
|
-
/**
|
|
22
|
-
* Load Sentry Options from a file. If `true` it will use the default path.
|
|
23
|
-
* If `false` it will not load any options from a file. Only options provided in the code will be used.
|
|
24
|
-
* If `string` it will use the provided path.
|
|
25
|
-
*
|
|
26
|
-
* @default '{projectRoot}/sentry.options.json'
|
|
27
|
-
*/
|
|
28
|
-
optionsFile?: string | boolean;
|
|
29
23
|
}
|
|
30
24
|
export interface SentryExpoConfigOptions {
|
|
31
25
|
/**
|
|
@@ -39,7 +33,7 @@ export interface SentryExpoConfigOptions {
|
|
|
39
33
|
* Adds Debug ID to the output bundle and source maps.
|
|
40
34
|
* Collapses Sentry frames from the stack trace view in LogBox.
|
|
41
35
|
*/
|
|
42
|
-
export declare function withSentryConfig(config: MetroConfig, { annotateReactComponents, includeWebReplay, enableSourceContextInDevelopment,
|
|
36
|
+
export declare function withSentryConfig(config: MetroConfig, { annotateReactComponents, includeWebReplay, enableSourceContextInDevelopment, }?: SentryMetroConfigOptions): MetroConfig;
|
|
43
37
|
/**
|
|
44
38
|
* This function returns Default Expo configuration with Sentry plugins.
|
|
45
39
|
*/
|
|
@@ -47,7 +41,9 @@ export declare function getSentryExpoConfig(projectRoot: string, options?: Defau
|
|
|
47
41
|
/**
|
|
48
42
|
* Adds Sentry Babel transformer to the Metro config.
|
|
49
43
|
*/
|
|
50
|
-
export declare function withSentryBabelTransformer(config: MetroConfig
|
|
44
|
+
export declare function withSentryBabelTransformer(config: MetroConfig, annotateReactComponents: true | {
|
|
45
|
+
ignoredComponents?: string[];
|
|
46
|
+
}): MetroConfig;
|
|
51
47
|
/**
|
|
52
48
|
* Includes `@sentry/replay` packages based on the `includeWebReplay` flag and current bundle `platform`.
|
|
53
49
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metroconfig.d.ts","sourceRoot":"","sources":["../../../src/js/tools/metroconfig.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAsC,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"metroconfig.d.ts","sourceRoot":"","sources":["../../../src/js/tools/metroconfig.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAsC,MAAM,OAAO,CAAC;AAW7E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AACrE,cAAc,yBAAyB,CAAC;AAKxC,MAAM,WAAW,wBAAwB;IACvC;;;OAGG;IACH,uBAAuB,CAAC,EACpB,OAAO,GACP;QACE,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;KAC9B,CAAC;IACN;;;OAGG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;;;OAIG;IACH,gCAAgC,CAAC,EAAE,OAAO,CAAC;CAC5C;AAED,MAAM,WAAW,uBAAuB;IACtC;;OAEG;IACH,gBAAgB,CAAC,EAAE,OAAO,mBAAmB,CAAC;CAC/C;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,WAAW,EACnB,EACE,uBAA+B,EAC/B,gBAAuB,EACvB,gCAAuC,GACxC,GAAE,wBAA6B,GAC/B,WAAW,CAkBb;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,oBAAoB,GAAG,uBAAuB,GAAG,wBAA6B,GACtF,WAAW,CA0Bb;AAsBD;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,WAAW,EACnB,uBAAuB,EAAE,IAAI,GAAG;IAAE,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,GAC/D,WAAW,CA8Bb;AA4BD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,WAAW,EAAE,gBAAgB,EAAE,OAAO,GAAG,SAAS,GAAG,WAAW,CA+C1G;AAQD;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,WAAW,GAAG,WAAW,CAiC1E"}
|