sootsim 0.1.293 → 0.1.295
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/detox/expectations.ts +4 -3
- package/detox/index.ts +2 -4
- package/dist-cli/bin.js +7 -5
- package/dist-cli/chunks/{agent-YWI2NWL7.js → agent-ASAYE5YY.js} +4 -2
- package/dist-cli/chunks/{agent-wrapper-IYJ7UZOA.js → agent-wrapper-K2D4Q5AA.js} +4 -2
- package/dist-cli/chunks/{app-fonts-FQFUC4LR.js → app-fonts-36N7AVQ3.js} +4 -2
- package/dist-cli/chunks/{assert-XUCELWAC.js → assert-4FKHHDY7.js} +4 -2
- package/dist-cli/chunks/{auth-4DQTV3OW.js → auth-BQPOPEFK.js} +4 -2
- package/dist-cli/chunks/beta-3LNYONDF.js +4 -0
- package/dist-cli/chunks/{camera-RYOHBVZA.js → camera-Y5MZ5V4L.js} +4 -2
- package/dist-cli/chunks/{chunk-YRFWATLA.js → chunk-2RI6RC6I.js} +4 -2
- package/dist-cli/chunks/{chunk-RV67J726.js → chunk-3WQISFAK.js} +3 -1
- package/dist-cli/chunks/{chunk-67CIS55C.js → chunk-4NJIXTVJ.js} +3 -1
- package/dist-cli/chunks/{chunk-UOHGYYSO.js → chunk-4ODQVUBH.js} +3 -1
- package/dist-cli/chunks/chunk-4V2KYK5T.js +4 -0
- package/dist-cli/chunks/chunk-6VF477QO.js +4 -0
- package/dist-cli/chunks/{chunk-2XYCSFGN.js → chunk-7FYIMLU4.js} +34 -32
- package/dist-cli/chunks/{chunk-WOWLO4LL.js → chunk-7GVBNEQ3.js} +3 -1
- package/dist-cli/chunks/{chunk-J6P2UPXH.js → chunk-7GZ6XF2B.js} +7 -5
- package/dist-cli/chunks/{chunk-VZ44FQDG.js → chunk-BX2NUJGR.js} +3 -1
- package/dist-cli/chunks/chunk-COEKUTWV.js +4 -0
- package/dist-cli/chunks/chunk-CVDC2ER2.js +10 -0
- package/dist-cli/chunks/{chunk-2VKTOZQ5.js → chunk-D2DU3ROC.js} +4 -2
- package/dist-cli/chunks/{chunk-DE4ZA3NL.js → chunk-DKS75M2I.js} +4 -2
- package/dist-cli/chunks/{chunk-WP3TFHFL.js → chunk-DXCQP3VE.js} +4 -2
- package/dist-cli/chunks/{chunk-6IFJLHDA.js → chunk-E6DZD6JD.js} +3 -1
- package/dist-cli/chunks/chunk-ETDZQUGI.js +5 -0
- package/dist-cli/chunks/{chunk-KC5SCOGS.js → chunk-FH7DQ2HB.js} +4 -2
- package/dist-cli/chunks/{chunk-LOQLZFRK.js → chunk-HT6WYHQL.js} +4 -2
- package/dist-cli/chunks/{chunk-LA5DIO33.js → chunk-I4QJVACX.js} +3 -1
- package/dist-cli/chunks/chunk-I7AWRAXM.js +125 -0
- package/dist-cli/chunks/{chunk-U3564F2Y.js → chunk-JPPGM6RZ.js} +4 -2
- package/dist-cli/chunks/chunk-K7LQB4IF.js +7 -0
- package/dist-cli/chunks/chunk-L7V46673.js +3 -0
- package/dist-cli/chunks/chunk-MEYVMDZR.js +74 -0
- package/dist-cli/chunks/chunk-OQ7SSRYK.js +4 -0
- package/dist-cli/chunks/{chunk-BQT5YDTV.js → chunk-QKZVANQG.js} +5 -3
- package/dist-cli/chunks/{chunk-E5WYXRGV.js → chunk-QPA44BZC.js} +28 -26
- package/dist-cli/chunks/{chunk-WPPMUUML.js → chunk-RNW36VM5.js} +4 -2
- package/dist-cli/chunks/{chunk-UPKYK52K.js → chunk-RV67EC7L.js} +4 -2
- package/dist-cli/chunks/{chunk-RKXHQ2Q3.js → chunk-S6BEA6OC.js} +18 -16
- package/dist-cli/chunks/chunk-SU5WQ4SQ.js +4 -0
- package/dist-cli/chunks/{chunk-7B6RGFTM.js → chunk-T2DHHOWE.js} +4 -2
- package/dist-cli/chunks/{chunk-4B4VFT73.js → chunk-TGYZYSDB.js} +7 -5
- package/dist-cli/chunks/{chunk-JOPKZVOW.js → chunk-TNKZWHD2.js} +3 -1
- package/dist-cli/chunks/chunk-TXURXDZN.js +4 -0
- package/dist-cli/chunks/{chunk-PCAPHXN3.js → chunk-U2QPKFOY.js} +4 -2
- package/dist-cli/chunks/{chunk-WVMYRKSS.js → chunk-UAZ3NVKO.js} +4 -2
- package/dist-cli/chunks/{chunk-B7TX4WFB.js → chunk-UBIGBHUM.js} +4 -2
- package/dist-cli/chunks/{chunk-547W23BB.js → chunk-UWFAWMPE.js} +4 -2
- package/dist-cli/chunks/{chunk-VO74GDXL.js → chunk-WFYQNZTT.js} +5 -3
- package/dist-cli/chunks/{chunk-NCCMRFXU.js → chunk-X5FTDIHQ.js} +3 -1
- package/dist-cli/chunks/{chunk-2M57EAWS.js → chunk-XCCDO6I2.js} +3 -1
- package/dist-cli/chunks/{chunk-RMLJXP7T.js → chunk-XQRUWC3F.js} +4 -2
- package/dist-cli/chunks/{chunk-TJS5IMOH.js → chunk-Y6FJ5FCY.js} +3 -1
- package/dist-cli/chunks/{chunk-WI36YJ23.js → chunk-ZJZYGLJ2.js} +3 -1
- package/dist-cli/chunks/{cleanup-BLFDJSFS.js → cleanup-SMCA44QC.js} +4 -2
- package/dist-cli/chunks/cli-version-I6BOBK57.js +4 -0
- package/dist-cli/chunks/{compat-Q3WCSTB7.js → compat-FCM2ZQLV.js} +5 -3
- package/dist-cli/chunks/{config-NHNMRRNB.js → config-PZSANSAI.js} +4 -2
- package/dist-cli/chunks/control-PM554MHE.js +4 -0
- package/dist-cli/chunks/daemon-5KXEZZLJ.js +4 -0
- package/dist-cli/chunks/{debug-PGRMZFXA.js → debug-VG2JOF6H.js} +5 -3
- package/dist-cli/chunks/{desktop-NVTQ37LH.js → desktop-GH2POW6X.js} +5 -3
- package/dist-cli/chunks/{detox-W3JDXS76.js → detox-X6T265L5.js} +4 -2
- package/dist-cli/chunks/{device-KQYN3EVK.js → device-VDOOSAXO.js} +4 -2
- package/dist-cli/chunks/{diagnose-CPUKSGNO.js → diagnose-6D6WNAGL.js} +4 -2
- package/dist-cli/chunks/disk-cleanup-HTOIDDKK.js +4 -0
- package/dist-cli/chunks/drivers-CKLBQDXG.js +4 -0
- package/dist-cli/chunks/{film-VZGAZ2YY.js → film-UZWYISAB.js} +11 -24
- package/dist-cli/chunks/flow-VOS3RKB3.js +4 -0
- package/dist-cli/chunks/help-LVMDERFQ.js +4 -0
- package/dist-cli/chunks/{hidden-runtime-alias-KWHABCNZ.js → hidden-runtime-alias-UGMJ4LJX.js} +4 -2
- package/dist-cli/chunks/{home-paths-O4CGYVHF.js → home-paths-3LYT47SY.js} +4 -2
- package/dist-cli/chunks/inspect-FHCSOWGQ.js +4 -0
- package/dist-cli/chunks/install-desktop-KLMCVDGZ.js +4 -0
- package/dist-cli/chunks/{login-KPN4Z26Q.js → login-K43TRKUC.js} +6 -4
- package/dist-cli/chunks/logout-L43CR6M2.js +4 -0
- package/dist-cli/chunks/{maestro-PYA4AHTS.js → maestro-7VZFYLNS.js} +13 -11
- package/dist-cli/chunks/{maestro-generate-KCMYWPWL.js → maestro-generate-PMYHUVH4.js} +5 -3
- package/dist-cli/chunks/{mode-AEB7G2SJ.js → mode-QQS5XFFX.js} +4 -2
- package/dist-cli/chunks/optional-demo-registry-2V327HDG.js +4 -0
- package/dist-cli/chunks/{perf-YLXGZI3E.js → perf-CL5P3JVP.js} +4 -2
- package/dist-cli/chunks/{permissions-7VMVZOUV.js → permissions-RGVCEC2B.js} +4 -2
- package/dist-cli/chunks/{record-AVQO45PE.js → record-ASW6UFQT.js} +5 -3
- package/dist-cli/chunks/runtime-GB3ZE27C.js +4 -0
- package/dist-cli/chunks/{screenshot-command-LACQLA4N.js → screenshot-command-FEJGQMQF.js} +5 -3
- package/dist-cli/chunks/{screenshots-capture-PROOBSGB.js → screenshots-capture-3JPZ5WMX.js} +4 -2
- package/dist-cli/chunks/{serve-FJN2FRGW.js → serve-SYXRHRQO.js} +4 -2
- package/dist-cli/chunks/{setup-IVV4NRYQ.js → setup-QLGL6MC6.js} +5 -3
- package/dist-cli/chunks/{skills-WYR3PJOH.js → skills-T6EEX5P6.js} +4 -2
- package/dist-cli/chunks/{storage-GM7K4MGM.js → storage-ZFUK4EQA.js} +4 -2
- package/dist-cli/chunks/store-WCDTSWJC.js +4 -0
- package/dist-cli/chunks/telemetry-D7SL4WW7.js +4 -0
- package/dist-cli/chunks/{timeline-R5UL3N4T.js → timeline-EIURYQVC.js} +4 -2
- package/dist-cli/chunks/{upgrade-RWHSFZRX.js → upgrade-Q7ZGWMCJ.js} +4 -2
- package/dist-cli/chunks/upload-7XEICYJX.js +4 -0
- package/dist-cli/chunks/{version-7K6TVQOW.js → version-PDG4V26R.js} +4 -2
- package/dist-cli/chunks/web-AMW2TRWB.js +4 -0
- package/dist-cli/chunks/{what-happened-K24TSJZX.js → what-happened-L5ZN7S5G.js} +4 -2
- package/dist-lib/agent-daemon-client.cjs +2 -1
- package/dist-lib/agent-events.cjs +1 -1
- package/dist-lib/agent-identity.cjs +3 -3
- package/dist-lib/agent-sessions.cjs +1 -1
- package/dist-lib/attached-projects.cjs +1 -1
- package/dist-lib/auth/shared-session.cjs +1 -1
- package/dist-lib/backend-origin.cjs +1 -1
- package/dist-lib/beta.cjs +1 -1
- package/dist-lib/beta.mjs +1 -1
- package/dist-lib/bridge-constants.cjs +4 -1
- package/dist-lib/cli-constants.cjs +1 -1
- package/dist-lib/config.cjs +1 -1
- package/dist-lib/detox/index.cjs +5 -4
- package/dist-lib/dev-bundle-resolution.cjs +1 -1
- package/dist-lib/home-paths.cjs +1 -1
- package/dist-lib/host/bridge-host.cjs +4 -3
- package/dist-lib/host/fetch-proxy-handler.cjs +1 -1
- package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
- package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
- package/dist-lib/host/websocket-proxy.cjs +1 -1
- package/dist-lib/index.cjs +4 -1
- package/dist-lib/jump-to-source-babel.cjs +1 -1
- package/dist-lib/menu.cjs +45 -4
- package/dist-lib/menu.mjs +42 -4
- package/dist-lib/metro.cjs +1 -1
- package/dist-lib/profiles.cjs +1 -1
- package/dist-lib/render-mode.cjs +1 -1
- package/dist-lib/scripts/dev-server-scanner.cjs +1 -1
- package/dist-lib/sdk.cjs +5 -2
- package/dist-lib/sdk.mjs +4 -2
- package/dist-lib/skills.cjs +328 -183
- package/dist-lib/vite.cjs +2 -1
- package/package.json +6 -1
- package/scripts/postinstall.cjs +11 -2
- package/skills/contrast/SKILL.md +2 -2
- package/src/agent-identity.ts +2 -2
- package/src/bridge-constants.ts +1 -0
- package/src/index.ts +4 -1
- package/src/menu.ts +53 -4
- package/src/vite-plugin.ts +102 -2
- package/dist-cli/chunks/beta-CFDAW6UN.js +0 -2
- package/dist-cli/chunks/chunk-3UX6AY2B.js +0 -2
- package/dist-cli/chunks/chunk-6VVLDYPV.js +0 -8
- package/dist-cli/chunks/chunk-7H34H74K.js +0 -72
- package/dist-cli/chunks/chunk-7H5G4HUK.js +0 -2
- package/dist-cli/chunks/chunk-ACSTEPSD.js +0 -2
- package/dist-cli/chunks/chunk-AFRXWKTA.js +0 -118
- package/dist-cli/chunks/chunk-HKMWUN7F.js +0 -2
- package/dist-cli/chunks/chunk-K5JEUI5G.js +0 -5
- package/dist-cli/chunks/chunk-MOU2WLO4.js +0 -2
- package/dist-cli/chunks/chunk-QXDXUDJD.js +0 -1
- package/dist-cli/chunks/chunk-USJTVC7T.js +0 -2
- package/dist-cli/chunks/chunk-YNG4C3ZS.js +0 -2
- package/dist-cli/chunks/cli-version-TQHZOK4L.js +0 -2
- package/dist-cli/chunks/control-I7YBDRJT.js +0 -2
- package/dist-cli/chunks/daemon-4R3SZLZY.js +0 -2
- package/dist-cli/chunks/disk-cleanup-2COWZWBC.js +0 -2
- package/dist-cli/chunks/drivers-RRZM6E72.js +0 -2
- package/dist-cli/chunks/flow-VH6DFDQ4.js +0 -2
- package/dist-cli/chunks/help-3HQ2RINO.js +0 -2
- package/dist-cli/chunks/inspect-PKMJGXDH.js +0 -2
- package/dist-cli/chunks/install-desktop-K5TP3ZHJ.js +0 -2
- package/dist-cli/chunks/logout-E3UCJAMC.js +0 -2
- package/dist-cli/chunks/optional-demo-registry-AIWOBAAA.js +0 -2
- package/dist-cli/chunks/runtime-HOGETVVD.js +0 -2
- package/dist-cli/chunks/store-YLVHPKG7.js +0 -2
- package/dist-cli/chunks/telemetry-MQKB6PFX.js +0 -2
- package/dist-cli/chunks/upload-RBH4XGJ2.js +0 -2
- package/dist-cli/chunks/web-46ZPQCAL.js +0 -2
package/dist-lib/skills.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.295 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
|
@@ -474,10 +474,10 @@ var init_registry = __esm({
|
|
|
474
474
|
},
|
|
475
475
|
{
|
|
476
476
|
range: ">=4.0.0",
|
|
477
|
-
coverage: 0.
|
|
478
|
-
note: "core animations, gestures, scroll, layout transitions, keyboard, sensors, and
|
|
479
|
-
working: "useSharedValue, useAnimatedStyle/Props/Reaction, useDerivedValue, useAnimatedScrollHandler, useScrollViewOffset, useFrameCallback, useAnimatedRef, useAnimatedKeyboard, useAnimatedSensor, useReducedMotion, entering/exiting/layout transitions, withTiming/Spring/Decay/Delay/Sequence/Repeat/Clamp, interpolate, interpolateColor, runOnJS/UI, measure, scrollTo, Easing, createAnimatedComponent, Animated.View/Text/Image/ScrollView/FlatList",
|
|
480
|
-
missing: "Reanimated 4 native CSS keyframes
|
|
477
|
+
coverage: 0.97,
|
|
478
|
+
note: "core animations, gestures, scroll, layout transitions, keyboard, sensors, reduced motion, native view property reads, and direct static style snapshots",
|
|
479
|
+
working: "useSharedValue, useAnimatedStyle/Props/Reaction, useDerivedValue, useAnimatedScrollHandler, useScrollViewOffset, useFrameCallback, useAnimatedRef, useAnimatedKeyboard, useAnimatedSensor, useReducedMotion, entering/exiting/layout transitions, withTiming/Spring/Decay/Delay/Sequence/Repeat/Clamp, interpolate, interpolateColor, runOnJS/UI, measure, scrollTo, getViewProp (layout, opacity, zIndex, backgroundColor, boxShadow), direct setViewStyle snapshots, Easing, createAnimatedComponent, Animated.View/Text/Image/ScrollView/FlatList",
|
|
480
|
+
missing: "Reanimated 4 native CSS keyframes and transitions remain incomplete"
|
|
481
481
|
}
|
|
482
482
|
]
|
|
483
483
|
},
|
|
@@ -491,7 +491,7 @@ var init_registry = __esm({
|
|
|
491
491
|
coverage: 0.9,
|
|
492
492
|
note: "tap, pan, pinch, rotation, fling, long press, race, manual, simultaneous",
|
|
493
493
|
working: "GestureDetector, Gesture.Tap/Pan/Pinch/Rotation/Fling/LongPress/Manual/Race/Simultaneous/Exclusive/Hover, simultaneousWithExternalGesture/requireExternalGestureToFail/blocksExternalGesture, ScrollView/FlatList, Switch/RefreshControl, Pressable/Text, Touchables, BaseButton/RawButton/RectButton/BorderlessButton/PureNativeButton, Swipeable, ReanimatedSwipeable, GestureHandlerRootView, createNativeWrapper, gestureHandlerRootHOC, PointerType/MouseButton/HoverEffect exports, velocity tracking, activeOffsets, multi-tap",
|
|
494
|
-
missing: "DrawerLayout
|
|
494
|
+
missing: "DrawerLayout is a passthrough noop; ForceTouch semantics are placeholder-only"
|
|
495
495
|
}
|
|
496
496
|
]
|
|
497
497
|
},
|
|
@@ -505,13 +505,14 @@ var init_registry = __esm({
|
|
|
505
505
|
coverage: 0.9,
|
|
506
506
|
note: "screen container, stack, header config, search bar, navigation props",
|
|
507
507
|
working: "Screen, ScreenContainer, ScreenStack, enableFreeze/freezeEnabled with delayed React freeze, Android modal/pageSheet push fallback, Android statusBarHidden/statusBarStyle/navigationBarHidden traits, push/pop slide, zoom/fade/fade_from_bottom transitions, edge swipe-back, parallax behind-screen, large title collapse, header (back button, inline/large title, custom left/center/right/search bar subviews, native header bar buttons/menus/badges, crossfade), formSheet custom initial detents/corner radius/grabber/undimmed range and stacked sheets, useHeaderHeight, useTransitionProgress, FullWindowOverlay, SearchBar, Tabs.Host/Screen, lifecycle callbacks (onAppear/onDisappear/onWillAppear/onWillDisappear), onDismissed",
|
|
508
|
-
missing: "
|
|
508
|
+
missing: "replaceAnimation differentiation, interactive drag between formSheet detents, integrated search bar placements"
|
|
509
509
|
}
|
|
510
510
|
]
|
|
511
511
|
},
|
|
512
512
|
"react-native-safe-area-context": {
|
|
513
513
|
category: "Essentials",
|
|
514
514
|
stubType: "native",
|
|
515
|
+
proofCoverage: 0.7,
|
|
515
516
|
versions: [
|
|
516
517
|
{
|
|
517
518
|
range: ">=4.0.0",
|
|
@@ -530,8 +531,8 @@ var init_registry = __esm({
|
|
|
530
531
|
range: ">=13.0.0",
|
|
531
532
|
coverage: 0.85,
|
|
532
533
|
note: "full CanvasKit rendering for shapes/text/XML; SVG filter elements skipped",
|
|
533
|
-
working: "Svg, Path, Circle, Rect, Line, Ellipse, Polygon, Polyline, G, Text, TSpan, Defs,
|
|
534
|
-
missing: "SVG filter primitives (Filter, FeBlend, FeColorMatrix, FeGaussianBlur, FeComposite, etc)
|
|
534
|
+
working: "Svg, Path, Circle, Rect, Line, Ellipse, Polygon, Polyline, G, Text, TSpan, Defs, LinearGradient, RadialGradient, Stop, SvgXml, SvgUri, SvgFromXml, SvgCss, transforms, fill/stroke/opacity/dasharray, currentColor, viewBox scaling",
|
|
535
|
+
missing: "SVG filter primitives (Filter, FeBlend, FeColorMatrix, FeGaussianBlur, FeComposite, etc) are skipped; ClipPath, Mask, Use, Pattern, Symbol, Marker, ForeignObject, TextPath, and Image are also skipped by the renderer"
|
|
535
536
|
}
|
|
536
537
|
]
|
|
537
538
|
},
|
|
@@ -549,13 +550,14 @@ var init_registry = __esm({
|
|
|
549
550
|
"react-native-webview": {
|
|
550
551
|
category: "Essentials",
|
|
551
552
|
stubType: "native",
|
|
553
|
+
proofCoverage: 0.3,
|
|
552
554
|
versions: [
|
|
553
555
|
{
|
|
554
556
|
range: ">=11.0.0",
|
|
555
|
-
coverage: 0.
|
|
556
|
-
note: "
|
|
557
|
-
working: "source.uri/source.html, injectedJavaScriptBeforeContentLoaded
|
|
558
|
-
missing: "
|
|
557
|
+
coverage: 0.5,
|
|
558
|
+
note: "native-seam only: the published package runs unchanged and routes RNCWebView through the tenant-to-shell hosted iframe surface. the iframe keeps loading while parked behind a canvas placeholder and becomes interactive when promoted live.",
|
|
559
|
+
working: "source.uri/source.html, HTML and cooperating-page injectedJavaScriptBeforeContentLoaded/injectedJavaScript, strict ReactNativeWebView.postMessage bridge envelope, onMessage synthetic event with navigation fields, onLoad/Start/End, onNavigationStateChange, ref.reload/stopLoading/injectJavaScript/postMessage, renderLoading, javaScriptEnabled sandbox, layout, inherited clipping and visibility, parked/live presentation",
|
|
560
|
+
missing: "iframe pixels in canvas screenshots, script injection and ReactNativeWebView bootstrap for arbitrary cross-origin pages, cross-origin ref.goBack/goForward and truthful canGoBack/canGoForward values, failed HTTP/refused navigation callbacks (onError/onHttpError and renderError), onShouldStartLoadWithRequest, allowsBackForwardNavigationGestures, userAgent, dataDetectorTypes, cacheEnabled, incognito, scalesPageToFit, originWhitelist enforcement"
|
|
559
561
|
}
|
|
560
562
|
]
|
|
561
563
|
},
|
|
@@ -564,24 +566,46 @@ var init_registry = __esm({
|
|
|
564
566
|
stubType: "native",
|
|
565
567
|
versions: [
|
|
566
568
|
{
|
|
567
|
-
range: ">=55.0.0",
|
|
569
|
+
range: ">=55.0.0 <56.0.0",
|
|
570
|
+
coverage: 0.3,
|
|
571
|
+
note: "native-seam only: the published Expo wrapper resolves ExpoDomWebViewModule to the shared hosted webview implementation.",
|
|
572
|
+
working: "DomWebView/WebView exports, source.uri rendering, onMessage, ref.injectJavaScript and ref.scrollTo for pages that cooperate with the shell message bridge, layout and parked/live presentation",
|
|
573
|
+
missing: "reload and injectedJavaScriptObject, Expo modules bridge, arbitrary cross-origin script injection and scrolling, exact native scroll physics and native-only media/keyboard props, iframe pixels in canvas screenshots"
|
|
574
|
+
},
|
|
575
|
+
{
|
|
576
|
+
range: ">=56.0.0 <58.0.0",
|
|
568
577
|
coverage: 0.35,
|
|
569
|
-
note: "
|
|
570
|
-
working: "DomWebView/WebView exports, source.uri
|
|
571
|
-
missing: "
|
|
578
|
+
note: "native-seam only: the published Expo wrapper resolves ExpoDomWebViewModule to the shared hosted webview implementation.",
|
|
579
|
+
working: "DomWebView/WebView exports, source.uri rendering, onMessage data/url/title, ref.reload/injectJavaScript/scrollTo, and reload-on-update behavior for injectedJavaScriptObject/injectedJavaScript on pages that cooperate with the shell message bridge, layout and parked/live presentation",
|
|
580
|
+
missing: "document-start timing for injectedJavaScriptObject on URI pages, Expo modules bridge, arbitrary cross-origin script injection and scrolling, exact native scroll physics and native-only media/keyboard props, iframe pixels in canvas screenshots"
|
|
572
581
|
}
|
|
573
582
|
]
|
|
574
583
|
},
|
|
575
584
|
"@shopify/flash-list": {
|
|
576
585
|
category: "Lists & Sheets",
|
|
586
|
+
// v2.0.0 dropped every native view: the published tarball has no ios/,
|
|
587
|
+
// android/, podspec, or codegenConfig, and its JS calls no native seam.
|
|
588
|
+
// v1 (through 2.0.0-rc.12) shipped the AutoLayoutView + CellContainer
|
|
589
|
+
// Swift/Kotlin views. `native` keeps the v1 range honest on the compat
|
|
590
|
+
// page; shipsNativeCode is false because a new install resolves to v2 and
|
|
591
|
+
// brings no native code into the app. neither major is stubbed — the real
|
|
592
|
+
// package runs from the bundle.
|
|
577
593
|
stubType: "native",
|
|
594
|
+
shipsNativeCode: false,
|
|
578
595
|
versions: [
|
|
579
596
|
{
|
|
580
|
-
range: ">=1.0.0",
|
|
581
|
-
coverage: 0.
|
|
582
|
-
note: "
|
|
583
|
-
working: "FlashList
|
|
584
|
-
missing: "native
|
|
597
|
+
range: ">=1.0.0 <2.0.0",
|
|
598
|
+
coverage: 0.7,
|
|
599
|
+
note: "real upstream v1 JS (recyclerlistview-backed) runs from the bundle; its two native views resolve as plain engine views, so recycling still works but native layout correction does not",
|
|
600
|
+
working: "FlashList, MasonryFlashList, ref methods, recyclerlistview virtualization and cell recycling (all pure JS), CellContainer renders as a view",
|
|
601
|
+
missing: "the AutoLayoutView native pass \u2014 post-layout gap correction between recycled cells and the onBlankArea callback it feeds; overrideItemLayout precision on iOS-specific paths"
|
|
602
|
+
},
|
|
603
|
+
{
|
|
604
|
+
range: ">=2.0.0",
|
|
605
|
+
coverage: 0.95,
|
|
606
|
+
note: "real upstream package \u2014 v2 is pure JS with no native views, so nothing is intercepted and the full recycling engine runs on the engine ScrollView",
|
|
607
|
+
working: "the entire published API runs unmodified: FlashList with its real recycling/virtualization engine, AnimatedFlashList, FlashListRef imperative methods, masonry prop, useLayoutState, useRecyclingState, useMappingHelper, useFlashListContext, LayoutCommitObserver, viewability/ViewToken, the benchmark helpers",
|
|
608
|
+
missing: "nothing package-level \u2014 remaining gaps are engine ScrollView fidelity, not flash-list"
|
|
585
609
|
}
|
|
586
610
|
]
|
|
587
611
|
},
|
|
@@ -607,7 +631,7 @@ var init_registry = __esm({
|
|
|
607
631
|
coverage: 0.88,
|
|
608
632
|
note: "native bindings stubbed (KeyboardControllerNative, KeyboardEvents, FocusedInputEvents, WindowDimensionsEvents, KeyboardControllerView + sibling native views); upstream pure-JS components, hooks, animated module, and KeyboardAvoidingView resolve from node_modules unchanged",
|
|
609
633
|
working: "every upstream JS export \u2014 KeyboardProvider, KeyboardAvoidingView, KeyboardStickyView, KeyboardAwareScrollView, KeyboardToolbar, KeyboardGestureArea, useReanimatedKeyboardAnimation, useKeyboardAnimation, useKeyboardHandler, useGenericKeyboardHandler, useKeyboardController, useKeyboardState, useKeyboardContext, useReanimatedFocusedInput, useFocusedInputHandler, useResizeMode, useWindowDimensions, KeyboardEvents, FocusedInputEvents, WindowDimensionsEvents resize events, KeyboardController (dismiss/setFocusTo/isVisible/state/preload/setInputMode/setDefaultMode), KeyboardControllerView, OverKeyboardView, KeyboardBackgroundView, KeyboardExtender, ClippingScrollView, KeyboardToolbarGroupView, AndroidSoftInputModes \u2014 all run upstream code through reanimated worklets",
|
|
610
|
-
missing: "
|
|
634
|
+
missing: "preload is a noop; KeyboardGestureArea, OverKeyboardView, KeyboardBackgroundView, and KeyboardExtender are passthrough views without their native platform effects"
|
|
611
635
|
}
|
|
612
636
|
]
|
|
613
637
|
},
|
|
@@ -643,8 +667,8 @@ var init_registry = __esm({
|
|
|
643
667
|
{
|
|
644
668
|
range: ">=0.1.0",
|
|
645
669
|
coverage: 0.85,
|
|
646
|
-
note: "
|
|
647
|
-
working: "TabBarView, items/selectedIndex/onItemPressed, badge, labeled, sfSymbol
|
|
670
|
+
note: "renders the platform bottom tab bar with badge/label/sfSymbol",
|
|
671
|
+
working: "TabBarView, items/selectedIndex/onItemPressed, badge, labeled, sfSymbol, hapticFeedbackEnabled accepted; the default bar follows the device platform (iOS 26 floating liquid-glass pill, android material bottom navigation)",
|
|
648
672
|
missing: "TabView (navigationState/renderScene pattern), SceneMap, useBottomTabBarHeight, sidebarAdaptable, minimizeBehavior, tabBarActiveTintColor/InactiveTintColor, getIcon/getLazy/getRole/getHidden/getFreezeOnBlur getters"
|
|
649
673
|
}
|
|
650
674
|
]
|
|
@@ -665,13 +689,14 @@ var init_registry = __esm({
|
|
|
665
689
|
"expo-constants": {
|
|
666
690
|
category: "Expo SDK",
|
|
667
691
|
stubType: "native",
|
|
692
|
+
proofCoverage: 1,
|
|
668
693
|
versions: [
|
|
669
694
|
{
|
|
670
695
|
range: ">=14.0.0",
|
|
671
696
|
coverage: 0.95,
|
|
672
697
|
note: "package-local wrapper registers only ExponentConstants; upstream expo-constants JS computes the public Constants object unchanged.",
|
|
673
|
-
working: "ExponentConstants native module constants
|
|
674
|
-
missing: "real binary-derived embedded app config, Expo Updates manifest2, expoGoConfig/easConfig, physical-device status bar and system font enumeration"
|
|
698
|
+
working: "ExponentConstants native module constants matching the bare iOS dictionary: sessionId, executionEnvironment, appOwnership, debugMode, deviceName, isHeadless, statusBarHeight, systemFonts, platform.ios.buildNumber, expoConfig/manifest from the resolved app config, getWebViewUserAgentAsync, and the AppOwnership / ExecutionEnvironment / UserInterfaceIdiom enums from upstream JS",
|
|
699
|
+
missing: "real binary-derived embedded app config, Expo Updates manifest2, expoGoConfig/easConfig, physical-device status bar and system font enumeration. the Expo Go fields deviceYearClass, expoVersion, expoRuntimeVersion, experienceUrl, isDevice, linkingUri and the deprecated platform.ios model/platform/systemVersion/userInterfaceIdiom are intentionally absent, matching a bare iOS app where the native constants dictionary never publishes them; read device metadata from expo-device instead"
|
|
675
700
|
}
|
|
676
701
|
]
|
|
677
702
|
},
|
|
@@ -794,6 +819,7 @@ var init_registry = __esm({
|
|
|
794
819
|
"expo-secure-store": {
|
|
795
820
|
category: "Auth & Payments",
|
|
796
821
|
stubType: "native",
|
|
822
|
+
proofCoverage: 1,
|
|
797
823
|
versions: [
|
|
798
824
|
{
|
|
799
825
|
range: ">=12.0.0",
|
|
@@ -820,6 +846,7 @@ var init_registry = __esm({
|
|
|
820
846
|
"expo-network": {
|
|
821
847
|
category: "Device & Platform",
|
|
822
848
|
stubType: "native",
|
|
849
|
+
proofCoverage: 1,
|
|
823
850
|
versions: [
|
|
824
851
|
{
|
|
825
852
|
range: ">=50.0.0",
|
|
@@ -945,19 +972,21 @@ var init_registry = __esm({
|
|
|
945
972
|
"expo-application": {
|
|
946
973
|
category: "Expo SDK",
|
|
947
974
|
stubType: "native",
|
|
975
|
+
proofCoverage: 1,
|
|
948
976
|
versions: [
|
|
949
977
|
{
|
|
950
978
|
range: ">=5.0.0",
|
|
951
979
|
coverage: 0.95,
|
|
952
|
-
note: "upstream expo-application JS runs unchanged; package-local wrapper only registers the ExpoApplication native module.",
|
|
980
|
+
note: "upstream expo-application JS runs unchanged; package-local wrapper only registers the ExpoApplication native module, whose identity constants follow the live Expo config.",
|
|
953
981
|
working: "upstream constants and platform availability checks, applicationName, applicationId, nativeApplicationVersion, nativeBuildVersion, getIosIdForVendorAsync (localStorage-backed), getIosApplicationReleaseTypeAsync SIMULATOR, ApplicationReleaseType enum, getInstallationTimeAsync, getIosPushNotificationServiceEnvironmentAsync",
|
|
954
|
-
missing: "
|
|
982
|
+
missing: "bare/frozen apps without resolved Expo config use simulator metadata; Android id/install referrer on non-Android platforms; push entitlement inspection"
|
|
955
983
|
}
|
|
956
984
|
]
|
|
957
985
|
},
|
|
958
986
|
"expo-battery": {
|
|
959
987
|
category: "Expo SDK",
|
|
960
988
|
stubType: "native",
|
|
989
|
+
proofCoverage: 0.9,
|
|
961
990
|
versions: [
|
|
962
991
|
{
|
|
963
992
|
range: ">=9.0.0",
|
|
@@ -971,6 +1000,7 @@ var init_registry = __esm({
|
|
|
971
1000
|
"expo-brightness": {
|
|
972
1001
|
category: "Device & Platform",
|
|
973
1002
|
stubType: "native",
|
|
1003
|
+
proofCoverage: 0.9,
|
|
974
1004
|
versions: [
|
|
975
1005
|
{
|
|
976
1006
|
range: ">=14.0.0",
|
|
@@ -984,6 +1014,7 @@ var init_registry = __esm({
|
|
|
984
1014
|
"expo-cellular": {
|
|
985
1015
|
category: "Device & Platform",
|
|
986
1016
|
stubType: "native",
|
|
1017
|
+
proofCoverage: 0.6,
|
|
987
1018
|
versions: [
|
|
988
1019
|
{
|
|
989
1020
|
range: ">=7.0.0",
|
|
@@ -997,6 +1028,7 @@ var init_registry = __esm({
|
|
|
997
1028
|
"expo-screen-capture": {
|
|
998
1029
|
category: "Device & Platform",
|
|
999
1030
|
stubType: "native",
|
|
1031
|
+
proofCoverage: 0.8,
|
|
1000
1032
|
versions: [
|
|
1001
1033
|
{
|
|
1002
1034
|
range: ">=8.0.0",
|
|
@@ -1010,6 +1042,7 @@ var init_registry = __esm({
|
|
|
1010
1042
|
"expo-speech": {
|
|
1011
1043
|
category: "Media",
|
|
1012
1044
|
stubType: "native",
|
|
1045
|
+
proofCoverage: 0.25,
|
|
1013
1046
|
versions: [
|
|
1014
1047
|
{
|
|
1015
1048
|
range: ">=13.0.0",
|
|
@@ -1203,7 +1236,13 @@ var init_registry = __esm({
|
|
|
1203
1236
|
},
|
|
1204
1237
|
"posthog-react-native": {
|
|
1205
1238
|
category: "Analytics",
|
|
1239
|
+
// the package itself is pure JS (no ios/, android/, podspec, or native
|
|
1240
|
+
// seam) and would run from the bundle. it is deliberately intercepted
|
|
1241
|
+
// anyway under the analytics rule in docs/compat-scoring.md: SDK APIs stay
|
|
1242
|
+
// load-safe noops and the simulator sends no telemetry. do not "restore
|
|
1243
|
+
// the real package" here — suppressing delivery is the point.
|
|
1206
1244
|
stubType: "native",
|
|
1245
|
+
shipsNativeCode: false,
|
|
1207
1246
|
versions: [
|
|
1208
1247
|
{
|
|
1209
1248
|
range: ">=2.0.0",
|
|
@@ -1220,7 +1259,7 @@ var init_registry = __esm({
|
|
|
1220
1259
|
versions: [
|
|
1221
1260
|
{
|
|
1222
1261
|
range: ">=4.0.0",
|
|
1223
|
-
coverage:
|
|
1262
|
+
coverage: 0.95,
|
|
1224
1263
|
note: "real package JS (index.ts hide/isVisible + the pure-JS useHideAnimation hook) runs unmodified from the bundle against the RNBootSplash native seam. the app's configured logo + background (+ logoWidth, dark variant) from the bootsplash config plugin are parsed and painted on the canvas boot splash. RNBootSplash is manual-hide (no content-appeared auto-hide); hide(fade) drives it: cross-dissolve over a fixed 250ms when fade is set, snap otherwise (mirrors ios/RNBootSplash.mm). isVisible() reflects real splash state; getConstants() returns { darkModeEnabled } exactly as the iOS constantsToExport (logoSizeRatio/navigationBarHeight/statusBarHeight are android-only, defaulted in the hook).",
|
|
1225
1264
|
working: "configured logo + background + logoWidth + dark variant painted on boot, hide(fade) (real canvas fade/snap), isVisible() (true while splash visible), getConstants() (darkModeEnabled), useHideAnimation hook (logo/brand layout from manifest, runs from bundle)",
|
|
1226
1265
|
missing: "the optional brand/darkBrand image (a secondary bottom-anchored logo) is not painted \u2014 only the primary logo + background"
|
|
@@ -1273,8 +1312,8 @@ var init_registry = __esm({
|
|
|
1273
1312
|
{
|
|
1274
1313
|
range: ">=10.0.0",
|
|
1275
1314
|
coverage: 1,
|
|
1276
|
-
note: "comprehensive
|
|
1277
|
-
working: "all sync and async getters: uniqueId, model, brand, systemName/Version, bundleId
|
|
1315
|
+
note: "comprehensive live-device mock \u2014 hardware fields follow the active device spec and app identity fields follow the live Expo config",
|
|
1316
|
+
working: "all sync and async getters: uniqueId, model, brand, systemName/Version, live bundleId/buildNumber/version/appName, deviceName, deviceType, manufacturer, carrier, totalMemory, diskCapacity, freeDiskStorage, fontScale, isEmulator, isTablet, hasNotch, hasDynamicIsland, isLandscape, brightness, getBatteryLevel and ~60 more"
|
|
1278
1317
|
}
|
|
1279
1318
|
]
|
|
1280
1319
|
},
|
|
@@ -1323,10 +1362,10 @@ var init_registry = __esm({
|
|
|
1323
1362
|
versions: [
|
|
1324
1363
|
{
|
|
1325
1364
|
range: ">=1.2.0",
|
|
1326
|
-
coverage: 0.
|
|
1327
|
-
note: "native
|
|
1328
|
-
working: "default Rate class, AndroidMarket constants, filterOptions, rate callback,
|
|
1329
|
-
missing: "
|
|
1365
|
+
coverage: 0.85,
|
|
1366
|
+
note: "native-seam only \u2014 the upstream Rate class, option defaults/filtering, platform selection, AndroidMarket constants, and Linking fallbacks run from the bundle. the RNRate iOS module opens the requested App Store review URL through the browser handoff when preferInApp is false; because StoreKit review UI is suppressed in the simulator, preferInApp follows the native post-delay fallback exactly, either opening the store and reporting true or reporting false when openAppStoreIfInAppFails is disabled.",
|
|
1367
|
+
working: "default Rate class, AndroidMarket constants, filterOptions, rate callback, exact itms-apps review URL construction, direct App Store browser handoff, preferInApp delay and openAppStoreIfInAppFails success/failure behavior, Android/fallback URL helpers from upstream JS",
|
|
1368
|
+
missing: "no visible SKStoreReviewController or Google Play in-app review dialog; App Store URLs are handed to the browser/host rather than UIApplication"
|
|
1330
1369
|
}
|
|
1331
1370
|
]
|
|
1332
1371
|
},
|
|
@@ -1395,6 +1434,19 @@ var init_registry = __esm({
|
|
|
1395
1434
|
}
|
|
1396
1435
|
]
|
|
1397
1436
|
},
|
|
1437
|
+
"react-native-sound-player": {
|
|
1438
|
+
category: "Media",
|
|
1439
|
+
stubType: "native",
|
|
1440
|
+
versions: [
|
|
1441
|
+
{
|
|
1442
|
+
range: ">=0.14.5 <1.0.0",
|
|
1443
|
+
coverage: 0.85,
|
|
1444
|
+
note: "native-seam only \u2014 the published 0.14.5 wrapper runs unchanged against an HTMLAudioElement-backed RNSoundPlayer module with its upstream NativeEventEmitter contract",
|
|
1445
|
+
working: "playUrl/loadUrl and resolved playAsset/loadAsset URLs, load/play/pause/resume/stop/seek, volume clamping, finite and infinite loop bookkeeping, delayed play, getInfo currentTime/duration, FinishedLoading/URL/File, FinishedPlaying, and OnSetupError events",
|
|
1446
|
+
missing: "iOS main-bundle and Documents resource-name lookup for playSoundFile, AVAudioSession speaker/mix routing, background playback, and exact native codec support"
|
|
1447
|
+
}
|
|
1448
|
+
]
|
|
1449
|
+
},
|
|
1398
1450
|
"react-native-sensors": {
|
|
1399
1451
|
category: "Device & Platform",
|
|
1400
1452
|
stubType: "native",
|
|
@@ -1778,10 +1830,10 @@ var init_registry = __esm({
|
|
|
1778
1830
|
versions: [
|
|
1779
1831
|
{
|
|
1780
1832
|
range: ">=10.0.0",
|
|
1781
|
-
coverage: 0.
|
|
1782
|
-
note: "real MapLibre tiles via the host native seam (map-host.ts). the package JS runs from the bundle; RNMBX* host components
|
|
1783
|
-
working: "MapView (real vector tiles, keyless satellite imagery, mercator/globe projection, pinch-zoom + pan), Camera (centerCoordinate/zoomLevel/bounds/pitch/heading via the stop prop \u2192 camera/fit), ShapeSource (geojson), LineLayer/CircleLayer/FillLayer/SymbolLayer/HeatmapLayer/FillExtrusionLayer/BackgroundLayer (reactStyle \u2192 GL paint/layout), PointAnnotation/MarkerView (host pin), setAccessToken/setWellKnownTileServer (no-op, keyless)",
|
|
1784
|
-
missing: "custom PointAnnotation/MarkerView child views
|
|
1833
|
+
coverage: 0.82,
|
|
1834
|
+
note: "real MapLibre tiles via the host native seam (map-host.ts). the package JS runs from the bundle; RNMBX* host components and every enforcing TurboModule imported by the native entrypoint are seam-provided. MapView ref reads and takeSnap consume the same host camera feedback and compositor pixels as the rendered map. keyless: Mapbox vector styles fall back to OpenFreeMap, while official Mapbox satellite styles use Esri World Imagery.",
|
|
1835
|
+
working: "MapView (upstream native wrapper, real vector tiles, keyless satellite imagery, mercator/globe projection, pinch-zoom + pan, onCameraChanged/onMapIdle and legacy region payloads), Camera (centerCoordinate/zoomLevel/bounds/pitch/heading via the stop prop \u2192 camera/fit), MapView ref getCenter/getZoom/getPointInView/getCoordinateFromView/getVisibleBounds/takeSnap/clearData, ShapeSource (geojson), LineLayer/CircleLayer/FillLayer/SymbolLayer/HeatmapLayer/FillExtrusionLayer/BackgroundLayer (reactStyle \u2192 GL paint/layout), PointAnnotation/MarkerView (host pin), setAccessToken/setWellKnownTileServer (no-op, keyless)",
|
|
1836
|
+
missing: "custom PointAnnotation/MarkerView child views, queryRenderedFeaturesAtPoint/queryRenderedFeaturesInRect/querySourceFeatures, feature-state/source-visibility/terrain queries, projection reads with bearing/pitch, standalone RasterSource/VectorSource/ImageSource components, terrain/sky/atmosphere, map/style/render lifecycle callbacks, location/user-location, offline/tile-store/viewport/shape-animator APIs, snapshotManager; MapView.takeSnap crops the visible screen rectangle (so an overlapping sibling can be included) and writeToDisk returns a browser blob URI rather than file://"
|
|
1785
1837
|
}
|
|
1786
1838
|
]
|
|
1787
1839
|
},
|
|
@@ -1882,10 +1934,10 @@ var init_registry = __esm({
|
|
|
1882
1934
|
versions: [
|
|
1883
1935
|
{
|
|
1884
1936
|
range: ">=1.0.0",
|
|
1885
|
-
coverage: 0.
|
|
1886
|
-
note: "native-seam over a real host-thread maplibre-gl driver (render-worker/map-host.ts), NOT an OSM iframe. the package JS (MapView/Marker/Callout/AnimatedRegion/createFabricMap) runs unchanged; only the RNMapsMapView/RNMapsMarker host components + the RNMapsAirModule TurboModule are ours. maplibre renders keyless OpenFreeMap vector tiles at device scale on the host and ships each frame to the shell painter via the live-frame channel. Markers render as real maplibre circle layers. Pinch (focal-point zoom) + pan are forwarded from the tenant responder. The imperative ref API
|
|
1887
|
-
working: "MapView with real maplibre vector-tile rendering at device scale, initialRegion/region/camera honored, Marker (real map pins via maplibre circle layers, pinColor), pinch+pan gestures with focal-point zoom, getCamera/getMapBoundaries (web-mercator unproject of the view corners), getPointForCoordinate/getCoordinateForPoint (projection round-trip), getMarkersFrames, animateCamera/animateToRegion/setCamera (easeTo/jumpTo), fitToCoordinates/fitToElements/fitToSuppliedMarkers (fitBounds), onMapReady, MapView ref API, Callout/CalloutSubview/AnimatedRegion/MAP_TYPES/PROVIDER_GOOGLE/DEFAULT/enableLatestRenderer exports",
|
|
1888
|
-
missing: "
|
|
1937
|
+
coverage: 0.9,
|
|
1938
|
+
note: "native-seam over a real host-thread maplibre-gl driver (render-worker/map-host.ts), NOT an OSM iframe. the package JS (MapView/Marker/Callout/AnimatedRegion/createFabricMap) runs unchanged; only the RNMapsMapView/RNMapsMarker host components + the RNMapsAirModule TurboModule are ours. maplibre renders keyless OpenFreeMap vector tiles at device scale on the host and ships each frame to the shell painter via the live-frame channel. Childless Markers render as real maplibre circle layers; custom Marker child views render in the tenant overlay and reproject from host camera feedback. Pinch (focal-point zoom) + pan are forwarded from the tenant responder, and maplibre camera changes return through the host\u2192tenant channel for region callbacks and current imperative reads. The imperative ref API works: getCamera/getMapBoundaries/getPointForCoordinate/getCoordinateForPoint answer from web-mercator math over the seam's tracked camera; animateCamera/animateToRegion/setCamera/fitToCoordinates/fitToElements route through codegenNativeCommands \u2192 __dispatchCommandImpl \u2192 the maplibre easeTo/jumpTo/fitBounds host commands. takeSnapshot captures and encodes the visible map viewport through the compositor pixel owner, including png/jpg, quality, base64/blob-uri results, and requested output dimensions.",
|
|
1939
|
+
working: "MapView with real maplibre vector-tile rendering at device scale, initialRegion/region/camera honored, Marker (real map pins via maplibre circle layers, pinColor; custom child views with anchor positioning and pan reprojection), pinch+pan gestures with focal-point zoom, onRegionChangeStart/onRegionChange/onRegionChangeComplete with region + isGesture, getCamera/getMapBoundaries (web-mercator unproject of the view corners), getPointForCoordinate/getCoordinateForPoint (projection round-trip), getMarkersFrames, animateCamera/animateToRegion/setCamera (easeTo/jumpTo), fitToCoordinates/fitToElements/fitToSuppliedMarkers (fitBounds), takeSnapshot of the visible viewport (real compositor pixels, png/jpg + quality, file/base64 result, requested output scaling), onMapReady, MapView ref API, Callout/CalloutSubview/AnimatedRegion/MAP_TYPES/PROVIDER_GOOGLE/DEFAULT/enableLatestRenderer exports",
|
|
1940
|
+
missing: "custom Marker child projection does not yet account for bearing/pitch, shape overlays (Polyline/Polygon/Circle/Overlay/Heatmap/Geojson/UrlTile/WMSTile/LocalTile render null \u2014 the GL style reconcile path exists in map-host but react-native-maps does not emit it yet, only @rnmapbox/maps does), takeSnapshot region override and isolated native-subtree capture (the visible screen rectangle can include an overlapping sibling; file result is a browser blob URI rather than file://), getAddressFromCoordinates (no reverse geocoder), showsUserLocation tracking, gesture-based onPress/onLongPress"
|
|
1889
1941
|
}
|
|
1890
1942
|
]
|
|
1891
1943
|
},
|
|
@@ -1943,6 +1995,7 @@ var init_registry = __esm({
|
|
|
1943
1995
|
"expo-screen-orientation": {
|
|
1944
1996
|
category: "Expo SDK",
|
|
1945
1997
|
stubType: "native",
|
|
1998
|
+
proofCoverage: 0.8,
|
|
1946
1999
|
versions: [
|
|
1947
2000
|
{
|
|
1948
2001
|
range: ">=7.0.0",
|
|
@@ -1956,6 +2009,7 @@ var init_registry = __esm({
|
|
|
1956
2009
|
"expo-sensors": {
|
|
1957
2010
|
category: "Expo SDK",
|
|
1958
2011
|
stubType: "native",
|
|
2012
|
+
proofCoverage: 0.8,
|
|
1959
2013
|
versions: [
|
|
1960
2014
|
{
|
|
1961
2015
|
range: ">=13.0.0",
|
|
@@ -1969,13 +2023,14 @@ var init_registry = __esm({
|
|
|
1969
2023
|
"expo-sharing": {
|
|
1970
2024
|
category: "Expo SDK",
|
|
1971
2025
|
stubType: "native",
|
|
2026
|
+
proofCoverage: 0,
|
|
1972
2027
|
versions: [
|
|
1973
2028
|
{
|
|
1974
2029
|
range: ">=12.0.0",
|
|
1975
|
-
coverage: 0.
|
|
1976
|
-
note: "upstream expo-sharing JS runs unchanged; package-local wrapper only registers the ExpoSharing native module.",
|
|
1977
|
-
working: "isAvailableAsync (real browser check), shareAsync calls navigator.share({url,title}) when available and safely noops otherwise, getSharedPayloads/getResolvedSharedPayloadsAsync
|
|
1978
|
-
missing: "native share sheet UI, native file readability validation, incoming share extension app-group storage"
|
|
2030
|
+
coverage: 0.85,
|
|
2031
|
+
note: "upstream expo-sharing JS runs unchanged; package-local wrapper only registers the ExpoSharing native module. an empty incoming-share inbox is the state a browser preview should report, so the share-into surface scores as present.",
|
|
2032
|
+
working: "isAvailableAsync (real browser check), shareAsync calls navigator.share({url,title}) when available and safely noops otherwise, getSharedPayloads/getResolvedSharedPayloadsAsync/clearSharedPayloads report an empty incoming-share inbox",
|
|
2033
|
+
missing: "native share sheet UI, native file readability validation, incoming share extension app-group storage. the share-into functions also diverge on a misconfigured app: iOS throws FailedToResolveAppGroupIdException from all three when the app declares no ExpoShareIntoAppGroupId (expo-sharing/ios/SharingModule.swift:4-11) where sootsim returns the empty inbox, so an app that redboxes on device previews cleanly"
|
|
1979
2034
|
}
|
|
1980
2035
|
]
|
|
1981
2036
|
},
|
|
@@ -1994,6 +2049,7 @@ var init_registry = __esm({
|
|
|
1994
2049
|
"expo-calendar": {
|
|
1995
2050
|
category: "Expo SDK",
|
|
1996
2051
|
stubType: "native",
|
|
2052
|
+
proofCoverage: 0.7,
|
|
1997
2053
|
versions: [
|
|
1998
2054
|
{
|
|
1999
2055
|
range: ">=13.0.0",
|
|
@@ -2229,9 +2285,9 @@ var init_registry = __esm({
|
|
|
2229
2285
|
{
|
|
2230
2286
|
range: ">=2.0.0",
|
|
2231
2287
|
coverage: 0.95,
|
|
2232
|
-
note: "
|
|
2233
|
-
working: "createClient, AnalyticsProvider, useAnalytics
|
|
2234
|
-
missing: "
|
|
2288
|
+
note: "real upstream package \u2014 not intercepted (its JS stub was dropped in 0a4ce9faf0 for omitting EventPlugin). the AnalyticsReactNative native module is absent and the SDK degrades without it, so createClient and track complete normally. UNLIKE the analytics SDKs sootsim does intercept, delivery is NOT suppressed here: a configured writeKey reaches the network from the preview.",
|
|
2289
|
+
working: "the whole published API runs unmodified: createClient, AnalyticsProvider, useAnalytics, Plugin/DestinationPlugin/EventPlugin base classes, EventType/PluginType/UpdateType enums, track/identify/screen/group/alias/flush, and the sovran store peer",
|
|
2290
|
+
missing: "the AnalyticsReactNative native module \u2014 device/app context fields it would supply fall back to defaults"
|
|
2235
2291
|
}
|
|
2236
2292
|
]
|
|
2237
2293
|
},
|
|
@@ -2316,6 +2372,7 @@ var init_registry = __esm({
|
|
|
2316
2372
|
"expo-mail-composer": {
|
|
2317
2373
|
category: "Device & Platform",
|
|
2318
2374
|
stubType: "native",
|
|
2375
|
+
proofCoverage: 0.9,
|
|
2319
2376
|
versions: [
|
|
2320
2377
|
{
|
|
2321
2378
|
range: ">=15.0.0",
|
|
@@ -2342,6 +2399,7 @@ var init_registry = __esm({
|
|
|
2342
2399
|
"expo-print": {
|
|
2343
2400
|
category: "Expo SDK",
|
|
2344
2401
|
stubType: "native",
|
|
2402
|
+
proofCoverage: 0.4,
|
|
2345
2403
|
versions: [
|
|
2346
2404
|
{
|
|
2347
2405
|
range: ">=14.0.0",
|
|
@@ -2355,6 +2413,7 @@ var init_registry = __esm({
|
|
|
2355
2413
|
"expo-store-review": {
|
|
2356
2414
|
category: "Expo SDK",
|
|
2357
2415
|
stubType: "native",
|
|
2416
|
+
proofCoverage: 0.3,
|
|
2358
2417
|
versions: [
|
|
2359
2418
|
{
|
|
2360
2419
|
range: ">=8.0.0",
|
|
@@ -2381,6 +2440,7 @@ var init_registry = __esm({
|
|
|
2381
2440
|
"expo-tracking-transparency": {
|
|
2382
2441
|
category: "Expo SDK",
|
|
2383
2442
|
stubType: "native",
|
|
2443
|
+
proofCoverage: 0.6,
|
|
2384
2444
|
versions: [
|
|
2385
2445
|
{
|
|
2386
2446
|
range: ">=3.0.0",
|
|
@@ -2420,6 +2480,7 @@ var init_registry = __esm({
|
|
|
2420
2480
|
"expo-task-manager": {
|
|
2421
2481
|
category: "Expo SDK",
|
|
2422
2482
|
stubType: "native",
|
|
2483
|
+
proofCoverage: 1,
|
|
2423
2484
|
versions: [
|
|
2424
2485
|
{
|
|
2425
2486
|
range: ">=11.0.0",
|
|
@@ -2880,9 +2941,36 @@ var init_registry = __esm({
|
|
|
2880
2941
|
}
|
|
2881
2942
|
]
|
|
2882
2943
|
},
|
|
2944
|
+
"expo-modules-jsi": {
|
|
2945
|
+
category: "Expo SDK",
|
|
2946
|
+
stubType: "build-only",
|
|
2947
|
+
versions: [
|
|
2948
|
+
{
|
|
2949
|
+
range: ">=57.0.4 <58.0.0",
|
|
2950
|
+
coverage: 1,
|
|
2951
|
+
note: "build-only \u2014 the published JavaScript entry exports null, and the npm package exists solely to autolink the native Swift/C++ ExpoModulesJSI framework used transitively by expo-modules-core; there is no runtime JavaScript API for SootSim to provide"
|
|
2952
|
+
}
|
|
2953
|
+
]
|
|
2954
|
+
},
|
|
2955
|
+
"expo-age-range": {
|
|
2956
|
+
category: "Expo SDK",
|
|
2957
|
+
stubType: "native",
|
|
2958
|
+
versions: [
|
|
2959
|
+
{
|
|
2960
|
+
range: ">=57.0.3 <58.0.0",
|
|
2961
|
+
coverage: 0.7,
|
|
2962
|
+
note: "native-seam only \u2014 the published wrapper runs unchanged; ExpoAgeRange mirrors the documented unsupported-device fallback for the reference simulator",
|
|
2963
|
+
working: "all five published APIs; requestAgeRangeAsync returns { lowerBound: 18, upperBound: null, activeParentalControls: [] }; eligibility, regulatory-feature, and age-signal requests return null; significant-update acknowledgment resolves without UI",
|
|
2964
|
+
missing: "iOS Declared Age Range prompt and real user/region data, iOS 26.4 acknowledgment UI, Android Play Age Signals consent and metadata"
|
|
2965
|
+
}
|
|
2966
|
+
]
|
|
2967
|
+
},
|
|
2883
2968
|
"react-native-edge-to-edge": {
|
|
2884
2969
|
category: "Device & Platform",
|
|
2885
|
-
|
|
2970
|
+
// ships native android code and a real runtime JS surface (SystemBars
|
|
2971
|
+
// component + stack API) that sootsim implements — it was misfiled as
|
|
2972
|
+
// build-only, which the scoring layer now excludes entirely.
|
|
2973
|
+
stubType: "native",
|
|
2886
2974
|
versions: [
|
|
2887
2975
|
{
|
|
2888
2976
|
range: ">=1.0.0",
|
|
@@ -2933,14 +3021,16 @@ var init_registry = __esm({
|
|
|
2933
3021
|
},
|
|
2934
3022
|
"@miblanchard/react-native-slider": {
|
|
2935
3023
|
category: "UI Components",
|
|
2936
|
-
|
|
3024
|
+
// pure JS — the published package imports only react and react-native
|
|
3025
|
+
// (Animated + PanResponder + View) and has no ios/, android/, podspec, or
|
|
3026
|
+
// native seam. not intercepted; the real package runs from the bundle.
|
|
3027
|
+
stubType: "works",
|
|
2937
3028
|
versions: [
|
|
2938
3029
|
{
|
|
2939
3030
|
range: ">=2.0.0",
|
|
2940
|
-
coverage:
|
|
2941
|
-
note: "
|
|
2942
|
-
working: "value,
|
|
2943
|
-
missing: "thumbImage, minimumTrackImage, maximumTrackImage, StepMarker, renderStepNumber, visual track styling beyond accentColor"
|
|
3031
|
+
coverage: 1,
|
|
3032
|
+
note: "real upstream package runs unmodified on the engine View/Animated/PanResponder surface",
|
|
3033
|
+
working: "the whole published API: single and multi-thumb (array) value, onValueChange/onSlidingStart/onSlidingComplete with the upstream array payload, renderAboveThumbComponent, renderBelowThumbComponent, renderThumbComponent, renderMinimumTrackComponent, renderMaximumTrackComponent, renderTrackMarkComponent, trackMarks, thumbImage, vertical, startFromZero, trackClickable, animateTransitions with spring/timing animationConfig, thumbTouchSize, all style props"
|
|
2944
3034
|
}
|
|
2945
3035
|
]
|
|
2946
3036
|
},
|
|
@@ -2998,6 +3088,7 @@ var init_registry = __esm({
|
|
|
2998
3088
|
"expo-intent-launcher": {
|
|
2999
3089
|
category: "Expo SDK",
|
|
3000
3090
|
stubType: "native",
|
|
3091
|
+
proofCoverage: 0.9,
|
|
3001
3092
|
versions: [
|
|
3002
3093
|
{
|
|
3003
3094
|
range: ">=11.0.0",
|
|
@@ -3011,6 +3102,7 @@ var init_registry = __esm({
|
|
|
3011
3102
|
"expo-sms": {
|
|
3012
3103
|
category: "Expo SDK",
|
|
3013
3104
|
stubType: "native",
|
|
3105
|
+
proofCoverage: 0.4,
|
|
3014
3106
|
versions: [
|
|
3015
3107
|
{
|
|
3016
3108
|
range: ">=12.0.0",
|
|
@@ -3024,6 +3116,7 @@ var init_registry = __esm({
|
|
|
3024
3116
|
"expo-video-thumbnails": {
|
|
3025
3117
|
category: "Media",
|
|
3026
3118
|
stubType: "native",
|
|
3119
|
+
proofCoverage: 0.9,
|
|
3027
3120
|
versions: [
|
|
3028
3121
|
{
|
|
3029
3122
|
range: ">=8.0.0",
|
|
@@ -3111,9 +3204,23 @@ var init_registry = __esm({
|
|
|
3111
3204
|
}
|
|
3112
3205
|
]
|
|
3113
3206
|
},
|
|
3207
|
+
"@expo/app-integrity": {
|
|
3208
|
+
category: "Device & Platform",
|
|
3209
|
+
stubType: "native",
|
|
3210
|
+
versions: [
|
|
3211
|
+
{
|
|
3212
|
+
range: ">=57.0.1 <58.0.0",
|
|
3213
|
+
coverage: 0.7,
|
|
3214
|
+
note: "native-seam only \u2014 the published wrapper runs unchanged; the reference iOS simulator reports isSupported=false, and every App Attest call rejects with the upstream ERR_APP_INTEGRITY_FEATURE_UNSUPPORTED code and message",
|
|
3215
|
+
working: "all nine public exports: isSupported=false; generateKeyAsync, attestKeyAsync, and generateAssertionAsync reject with the real iOS-simulator unsupported error; Android-only methods take the upstream wrapper platform-error or false branches on iOS",
|
|
3216
|
+
missing: "real App Attest keys, attestations, and assertions; Android Play Integrity tokens and hardware-backed key attestation"
|
|
3217
|
+
}
|
|
3218
|
+
]
|
|
3219
|
+
},
|
|
3114
3220
|
"react-native-uitextview": {
|
|
3115
3221
|
category: "UI Components",
|
|
3116
3222
|
stubType: "native",
|
|
3223
|
+
proofCoverage: 0.6,
|
|
3117
3224
|
versions: [
|
|
3118
3225
|
{
|
|
3119
3226
|
range: ">=1.0.0",
|
|
@@ -3474,6 +3581,7 @@ var init_registry = __esm({
|
|
|
3474
3581
|
"react-native-drawer-layout": {
|
|
3475
3582
|
category: "Navigation",
|
|
3476
3583
|
stubType: "works",
|
|
3584
|
+
proofCoverage: 0.8,
|
|
3477
3585
|
versions: [
|
|
3478
3586
|
{
|
|
3479
3587
|
range: ">=3.0.0",
|
|
@@ -3487,6 +3595,7 @@ var init_registry = __esm({
|
|
|
3487
3595
|
"react-native-tab-view": {
|
|
3488
3596
|
category: "Navigation",
|
|
3489
3597
|
stubType: "works",
|
|
3598
|
+
proofCoverage: 0.8,
|
|
3490
3599
|
versions: [
|
|
3491
3600
|
{
|
|
3492
3601
|
range: ">=3.0.0",
|
|
@@ -3499,14 +3608,17 @@ var init_registry = __esm({
|
|
|
3499
3608
|
},
|
|
3500
3609
|
"react-native-screen-transitions": {
|
|
3501
3610
|
category: "Navigation",
|
|
3502
|
-
|
|
3611
|
+
// pure JS over reanimated + gesture-handler + react-navigation; the
|
|
3612
|
+
// published package has no ios/, android/, podspec, or native seam. not
|
|
3613
|
+
// intercepted; the real package runs from the bundle.
|
|
3614
|
+
stubType: "works",
|
|
3503
3615
|
versions: [
|
|
3504
3616
|
{
|
|
3505
3617
|
range: ">=1.0.0",
|
|
3506
|
-
coverage: 0.
|
|
3507
|
-
note: "
|
|
3508
|
-
working: "
|
|
3509
|
-
missing: "
|
|
3618
|
+
coverage: 0.9,
|
|
3619
|
+
note: "real upstream package runs from the bundle over the reanimated, gesture-handler, screens, and safe-area-context seams sootsim already provides",
|
|
3620
|
+
working: "withScreenTransitions, createTransitionAwareComponent, createBoundaryComponent, Boundary, the transition-aware View/ScrollView/MaskedView, and the reanimated-driven transition specs",
|
|
3621
|
+
missing: "fidelity is bounded by the reanimated worklet and gesture-handler seams underneath it, not by anything package-level"
|
|
3510
3622
|
}
|
|
3511
3623
|
]
|
|
3512
3624
|
},
|
|
@@ -3634,6 +3746,7 @@ var init_registry = __esm({
|
|
|
3634
3746
|
"expo-background-task": {
|
|
3635
3747
|
category: "Expo SDK",
|
|
3636
3748
|
stubType: "native",
|
|
3749
|
+
proofCoverage: 1,
|
|
3637
3750
|
versions: [
|
|
3638
3751
|
{
|
|
3639
3752
|
range: ">=55.0.0",
|
|
@@ -3647,6 +3760,7 @@ var init_registry = __esm({
|
|
|
3647
3760
|
"expo-background-fetch": {
|
|
3648
3761
|
category: "Expo SDK",
|
|
3649
3762
|
stubType: "native",
|
|
3763
|
+
proofCoverage: 1,
|
|
3650
3764
|
versions: [
|
|
3651
3765
|
{
|
|
3652
3766
|
range: ">=13.0.0",
|
|
@@ -3838,7 +3952,11 @@ var init_registry = __esm({
|
|
|
3838
3952
|
},
|
|
3839
3953
|
"@welldone-software/why-did-you-render": {
|
|
3840
3954
|
category: "Device & Platform",
|
|
3955
|
+
// pure JS (no native code), but deliberately intercepted: see the note
|
|
3956
|
+
// below. do not "restore the real package" — it patches React internals
|
|
3957
|
+
// and takes the bridged React down with it.
|
|
3841
3958
|
stubType: "native",
|
|
3959
|
+
shipsNativeCode: false,
|
|
3842
3960
|
versions: [
|
|
3843
3961
|
{
|
|
3844
3962
|
range: ">=8.0.0",
|
|
@@ -5071,7 +5189,7 @@ var init_registry = __esm({
|
|
|
5071
5189
|
{
|
|
5072
5190
|
range: ">=0.13.0",
|
|
5073
5191
|
coverage: 1,
|
|
5074
|
-
note: "
|
|
5192
|
+
note: "build-only \u2014 the published 57.0.1 JavaScript entry build/Manifests.js contains only `export {}`; the package carries native manifest parser/types infrastructure and exposes no application runtime API"
|
|
5075
5193
|
}
|
|
5076
5194
|
]
|
|
5077
5195
|
},
|
|
@@ -5082,7 +5200,7 @@ var init_registry = __esm({
|
|
|
5082
5200
|
{
|
|
5083
5201
|
range: ">=0.13.0",
|
|
5084
5202
|
coverage: 1,
|
|
5085
|
-
note: "native-side
|
|
5203
|
+
note: "build-only \u2014 the published 57.0.1 JavaScript entry index.js contains only `module.exports = null`; the package is native-side JSON utility code used internally by Expo and exposes no application runtime API"
|
|
5086
5204
|
}
|
|
5087
5205
|
]
|
|
5088
5206
|
},
|
|
@@ -5093,18 +5211,20 @@ var init_registry = __esm({
|
|
|
5093
5211
|
{
|
|
5094
5212
|
range: ">=4.0.0",
|
|
5095
5213
|
coverage: 1,
|
|
5096
|
-
note: "
|
|
5214
|
+
note: "build-only \u2014 the published 57.0.0 tarball declares index.js as main but omits that file entirely; it contains Java and Objective-C structured-header parsers and no application runtime JavaScript API"
|
|
5097
5215
|
}
|
|
5098
5216
|
]
|
|
5099
5217
|
},
|
|
5100
5218
|
"@bacons/apple-targets": {
|
|
5101
5219
|
category: "Expo SDK",
|
|
5102
|
-
stubType: "
|
|
5220
|
+
stubType: "native",
|
|
5103
5221
|
versions: [
|
|
5104
5222
|
{
|
|
5105
|
-
range: ">=0.0.0",
|
|
5106
|
-
coverage:
|
|
5107
|
-
note: "
|
|
5223
|
+
range: ">=4.0.0 <6.0.0",
|
|
5224
|
+
coverage: 0.85,
|
|
5225
|
+
note: "native-seam only \u2014 the published ExtensionStorage wrapper runs unchanged against an app-group-keyed UserDefaults analogue; the package also keeps its Expo config-plugin and Apple-target generation paths at build time",
|
|
5226
|
+
working: "ExtensionStorage constructor, string/number/object/array set and get, remove, app-group suite isolation, reloadWidget, and reloadControls",
|
|
5227
|
+
missing: "persistence across simulator restarts, sharing with a real Apple extension process, and WidgetKit or Control Center timeline reloads"
|
|
5108
5228
|
}
|
|
5109
5229
|
]
|
|
5110
5230
|
},
|
|
@@ -5195,7 +5315,7 @@ var init_registry = __esm({
|
|
|
5195
5315
|
{
|
|
5196
5316
|
range: ">=2.0.0",
|
|
5197
5317
|
coverage: 1,
|
|
5198
|
-
note: "
|
|
5318
|
+
note: "build-only \u2014 the published 5.2.0 JavaScript entry build/withBraze.js is an Expo createRunOncePlugin that mutates Android and iOS projects during prebuild; it exposes no application runtime API"
|
|
5199
5319
|
}
|
|
5200
5320
|
]
|
|
5201
5321
|
},
|
|
@@ -5224,6 +5344,19 @@ var init_registry = __esm({
|
|
|
5224
5344
|
}
|
|
5225
5345
|
]
|
|
5226
5346
|
},
|
|
5347
|
+
"@posthog/react-native-plugin": {
|
|
5348
|
+
category: "Analytics",
|
|
5349
|
+
stubType: "native",
|
|
5350
|
+
versions: [
|
|
5351
|
+
{
|
|
5352
|
+
range: ">=2.0.1 <3.0.0",
|
|
5353
|
+
coverage: 0.95,
|
|
5354
|
+
note: "native-seam only \u2014 the published 2.0.1 and 2.3.1 JavaScript wrappers run unchanged against one PosthogReactNativePlugin seam; session-replay, native-error, and push bridges stay load-safe in their disabled state, and delivery is intentionally absent per the analytics/session-replay scoring rule",
|
|
5355
|
+
working: "2.0.1 named and default exports: setup/start/startSession/endSession/identify/startRecording/stopRecording/isEnabled=false; later 2.x exports reset, addExceptionStep, push-token register/unregister, setOptOut, capturePushNotificationOpened, and setPushIdentityProvider with NativeEventEmitter listener bookkeeping; the shared seam backs both surfaces",
|
|
5356
|
+
missing: "no session capture or replay upload, native exception capture, push subscription or notification-open delivery, or push-identity request events \u2014 intentionally absent for the development simulator"
|
|
5357
|
+
}
|
|
5358
|
+
]
|
|
5359
|
+
},
|
|
5227
5360
|
"posthog-react-native-session-replay": {
|
|
5228
5361
|
category: "Analytics",
|
|
5229
5362
|
stubType: "native",
|
|
@@ -5231,7 +5364,7 @@ var init_registry = __esm({
|
|
|
5231
5364
|
{
|
|
5232
5365
|
range: ">=1.0.0",
|
|
5233
5366
|
coverage: 0.95,
|
|
5234
|
-
note: "native-seam only: the real posthog-react-native-session-replay runs from the bundle (start/startSession/endSession/identify/startRecording/stopRecording/isEnabled + default export \u2014 all upstream JS).
|
|
5367
|
+
note: "native-seam only: the real posthog-react-native-session-replay runs from the bundle (start/startSession/endSession/identify/startRecording/stopRecording/isEnabled + default export \u2014 all upstream JS). its published surface is fully covered by the shared PosthogReactNativeSessionReplay module, which also carries the renamed plugin superset: recording actions resolve without capturing and isEnabled() reports false \u2014 the same clean state an app sees with replay unconfigured. per docs/compat-scoring.md session-replay rule, delivery is intentionally absent",
|
|
5235
5368
|
working: "full upstream JS surface (named exports + default module), start/startSession/endSession/identify/startRecording/stopRecording resolve, isEnabled resolves false",
|
|
5236
5369
|
missing: "no session capture, no canvas recording, no replay upload \u2014 intentionally absent for the development simulator (no PostHog replay backend)"
|
|
5237
5370
|
}
|
|
@@ -5257,8 +5390,7 @@ var init_registry = __esm({
|
|
|
5257
5390
|
{
|
|
5258
5391
|
range: ">=1.0.0",
|
|
5259
5392
|
coverage: 1,
|
|
5260
|
-
note: "load-safe noop \u2014 NewRelic.startAgent + record* methods + interaction tracking;
|
|
5261
|
-
missing: "no metrics, errors, or events transmitted; interaction IDs are placeholders"
|
|
5393
|
+
note: "load-safe noop \u2014 NewRelic.startAgent + record* methods + interaction tracking. no metrics, errors, or events are transmitted from the browser simulator and interaction ids are placeholders; delivery is intentionally absent, so an app behaves exactly as it would with a live agent."
|
|
5262
5394
|
}
|
|
5263
5395
|
]
|
|
5264
5396
|
},
|
|
@@ -5422,7 +5554,7 @@ var init_registry = __esm({
|
|
|
5422
5554
|
versions: [
|
|
5423
5555
|
{
|
|
5424
5556
|
range: ">=4.0.0",
|
|
5425
|
-
coverage:
|
|
5557
|
+
coverage: 0.3,
|
|
5426
5558
|
note: "load-safe noop \u2014 useShareIntent hook reports hasShareIntent=false consistently; ShareIntentProvider passthrough; getShareIntent resolves null. apps with conditional UI on incoming shares take their no-share branch",
|
|
5427
5559
|
missing: "no iOS Share Extension / Android ACTION_SEND intent target \u2014 browsers cannot register a system share target. ShareIntentTypes constants exposed for type-checked imports"
|
|
5428
5560
|
}
|
|
@@ -5642,8 +5774,7 @@ var init_registry = __esm({
|
|
|
5642
5774
|
{
|
|
5643
5775
|
range: ">=2.0.0",
|
|
5644
5776
|
coverage: 1,
|
|
5645
|
-
note: "load-safe noop \u2014 this is itself a polyfill package that monkey-patches global objects (Buffer, crypto, async-storage). on sootsim those globals are already wired by our compat layer so importing this is a no-op import; default export is an empty object"
|
|
5646
|
-
missing: "nothing \u2014 its only job (install polyfills) is already done by our base compat layer. flagged as 0.5 because we don't exercise WalletConnect end-to-end yet"
|
|
5777
|
+
note: "load-safe noop \u2014 this is itself a polyfill package that monkey-patches global objects (Buffer, crypto, async-storage). on sootsim those globals are already wired by our compat layer so importing this is a no-op import; default export is an empty object. its only job is done, though WalletConnect itself is not exercised end to end here."
|
|
5647
5778
|
}
|
|
5648
5779
|
]
|
|
5649
5780
|
},
|
|
@@ -5729,7 +5860,7 @@ var init_registry = __esm({
|
|
|
5729
5860
|
versions: [
|
|
5730
5861
|
{
|
|
5731
5862
|
range: ">=125.0.0",
|
|
5732
|
-
coverage:
|
|
5863
|
+
coverage: 0.7,
|
|
5733
5864
|
note: "load-safe pass-through \u2014 RTCPeerConnection / RTCIceCandidate / RTCSessionDescription / MediaStream / MediaStreamTrack / mediaDevices forwarded from globalThis (browsers have these natively); registerGlobals is a noop; RTCView component renders null since we have no host-side video bridge yet",
|
|
5734
5865
|
missing: "RTCView visual rendering needs a host bridge that paints a video element into the device frame (deferred). raw audio/video peer connections work via the browser globals"
|
|
5735
5866
|
}
|
|
@@ -5878,7 +6009,7 @@ var init_registry = __esm({
|
|
|
5878
6009
|
versions: [
|
|
5879
6010
|
{
|
|
5880
6011
|
range: ">=3.0.0",
|
|
5881
|
-
coverage:
|
|
6012
|
+
coverage: 0.25,
|
|
5882
6013
|
note: 'isSupported=false (sootsim tenant runs in a worker without DOM); create/get reject with a clear "needs top-level DOM" error so apps with passkey-optional flows take their password fallback. PasskeyError class exposed',
|
|
5883
6014
|
missing: "no WebAuthn \u2014 needs DOM access. host iframe could provide this; deferred until host bridge for credential management"
|
|
5884
6015
|
}
|
|
@@ -5975,21 +6106,24 @@ var init_registry = __esm({
|
|
|
5975
6106
|
versions: [
|
|
5976
6107
|
{
|
|
5977
6108
|
range: ">=11.0.0",
|
|
5978
|
-
coverage:
|
|
6109
|
+
coverage: 0.8,
|
|
5979
6110
|
note: "load-safe noop \u2014 start/scan accept; connect rejects; getConnectedPeripherals returns []; full BleEventType / BleScanCallbackType / BleScanMode / BleAndroidPhyType / BleState enum surface",
|
|
5980
6111
|
missing: "no Web Bluetooth bridging in this stub \u2014 apps that absolutely need BLE should branch on checkState=off"
|
|
5981
6112
|
}
|
|
5982
6113
|
]
|
|
5983
6114
|
},
|
|
5984
6115
|
voltra: {
|
|
5985
|
-
category: "
|
|
5986
|
-
|
|
6116
|
+
category: "Device & Platform",
|
|
6117
|
+
// "CLI for applying Voltra to native React Native projects" — a build-time
|
|
6118
|
+
// widget/Xcode-target tool (commander + cosmiconfig + @bacons/xcode), not a
|
|
6119
|
+
// runtime library, and nothing intercepts it. it was scored as a stubbed
|
|
6120
|
+
// analytics SDK, which it has never been.
|
|
6121
|
+
stubType: "build-only",
|
|
5987
6122
|
versions: [
|
|
5988
6123
|
{
|
|
5989
6124
|
range: ">=0.0.1",
|
|
5990
|
-
coverage:
|
|
5991
|
-
note: "
|
|
5992
|
-
missing: "package surface stubbed loosely; no real analytics delivery"
|
|
6125
|
+
coverage: 1,
|
|
6126
|
+
note: "CLI only \u2014 mutates native project files at build time and is never imported by app code, so there is no runtime surface to support"
|
|
5993
6127
|
}
|
|
5994
6128
|
]
|
|
5995
6129
|
},
|
|
@@ -6036,8 +6170,7 @@ var init_registry = __esm({
|
|
|
6036
6170
|
{
|
|
6037
6171
|
range: ">=0.5.0",
|
|
6038
6172
|
coverage: 1,
|
|
6039
|
-
note: "load-safe pass-through \u2014 uses globalThis.AudioContext / OfflineAudioContext when present (Web Audio API). browsers have these natively"
|
|
6040
|
-
missing: "no JSI fast-path; performance differs from native iOS/Android implementation but the API surface matches"
|
|
6173
|
+
note: "load-safe pass-through \u2014 uses globalThis.AudioContext / OfflineAudioContext when present (Web Audio API). browsers have these natively"
|
|
6041
6174
|
}
|
|
6042
6175
|
]
|
|
6043
6176
|
},
|
|
@@ -6155,9 +6288,9 @@ var init_registry = __esm({
|
|
|
6155
6288
|
versions: [
|
|
6156
6289
|
{
|
|
6157
6290
|
range: ">=2.0.0",
|
|
6158
|
-
coverage:
|
|
6159
|
-
note:
|
|
6160
|
-
missing: "
|
|
6291
|
+
coverage: 0.95,
|
|
6292
|
+
note: "true alias for react-native-fs (0.95) \u2014 the maintained fork resolves to the same stub, so readFile / writeFile / appendFile / read / write / readDir / stat / exists / mkdir / unlink / copyFile / moveFile / hash / downloadFile / uploadFiles and every path constant run against the shared IndexedDB byte store that react-native-blob-util also writes to.",
|
|
6293
|
+
missing: "see react-native-fs \u2014 no Android background download manager; slight discount for fork-specific API drift we do not model separately"
|
|
6161
6294
|
}
|
|
6162
6295
|
]
|
|
6163
6296
|
},
|
|
@@ -6190,10 +6323,11 @@ var init_registry = __esm({
|
|
|
6190
6323
|
stubType: "native",
|
|
6191
6324
|
versions: [
|
|
6192
6325
|
{
|
|
6193
|
-
range: ">=0.
|
|
6194
|
-
coverage:
|
|
6195
|
-
note:
|
|
6196
|
-
|
|
6326
|
+
range: ">=0.3.6 <1.0.0",
|
|
6327
|
+
coverage: 0.9,
|
|
6328
|
+
note: "native-seam only \u2014 published package JS runs unchanged and reads RNVersionNumber appVersion/buildVersion/bundleIdentifier from the live Expo config",
|
|
6329
|
+
working: "default export with appVersion, platform-typed buildVersion, and bundleIdentifier; iOS and Android config fields; stable bare-app fallback",
|
|
6330
|
+
missing: "bare/frozen apps without resolved Expo config use simulator metadata rather than Info.plist or PackageInfo"
|
|
6197
6331
|
}
|
|
6198
6332
|
]
|
|
6199
6333
|
},
|
|
@@ -6275,7 +6409,7 @@ var init_registry = __esm({
|
|
|
6275
6409
|
versions: [
|
|
6276
6410
|
{
|
|
6277
6411
|
range: ">=1.0.0",
|
|
6278
|
-
coverage:
|
|
6412
|
+
coverage: 0.6,
|
|
6279
6413
|
note: "load-safe pass-through \u2014 forwards to globalThis.PaymentRequest where supported (browsers have W3C Payment Request API natively in some contexts)",
|
|
6280
6414
|
missing: "no Apple Pay / Google Pay native fallback \u2014 apps fall back to PaymentRequest if available"
|
|
6281
6415
|
}
|
|
@@ -6287,7 +6421,7 @@ var init_registry = __esm({
|
|
|
6287
6421
|
versions: [
|
|
6288
6422
|
{
|
|
6289
6423
|
range: ">=6.0.0",
|
|
6290
|
-
coverage:
|
|
6424
|
+
coverage: 0.85,
|
|
6291
6425
|
note: "partial \u2014 getItem / setItem / deleteItem / hasItem / getAllItems backed by the shared tenant key/value store with __soot_sensitive_ prefix; biometric helpers (hasEnrolledFingerprints / isSensorAvailable) report false",
|
|
6292
6426
|
missing: "no real biometric gating; recommended swap: react-native-keychain (already 0.85 in our registry)"
|
|
6293
6427
|
}
|
|
@@ -6395,7 +6529,7 @@ var init_registry = __esm({
|
|
|
6395
6529
|
versions: [
|
|
6396
6530
|
{
|
|
6397
6531
|
range: ">=7.0.0",
|
|
6398
|
-
coverage:
|
|
6532
|
+
coverage: 0.8,
|
|
6399
6533
|
note: "load-safe passthrough \u2014 Toast / Picker / Drawer / ActionSheet pass children through; the pure-JS half (Colors / Typography / Spacings tokens) is loaded directly from the consumer's bundle without going through this stub",
|
|
6400
6534
|
missing: "native parts of ui-lib (Picker spinner, ActionSheet UI) are not delivered; UI looks plain"
|
|
6401
6535
|
}
|
|
@@ -6507,7 +6641,7 @@ var init_registry = __esm({
|
|
|
6507
6641
|
versions: [
|
|
6508
6642
|
{
|
|
6509
6643
|
range: ">=2.0.0",
|
|
6510
|
-
coverage:
|
|
6644
|
+
coverage: 0.5,
|
|
6511
6645
|
note: "partial \u2014 getLanguage uses navigator.language; setLanguage / openSystemSettings noop",
|
|
6512
6646
|
missing: "cannot set system language from browser"
|
|
6513
6647
|
}
|
|
@@ -6531,7 +6665,7 @@ var init_registry = __esm({
|
|
|
6531
6665
|
versions: [
|
|
6532
6666
|
{
|
|
6533
6667
|
range: ">=0.5.0",
|
|
6534
|
-
coverage:
|
|
6668
|
+
coverage: 0.9,
|
|
6535
6669
|
note: "partial \u2014 Restart() calls location.reload() on web",
|
|
6536
6670
|
missing: "app-state reset semantics differ from a real RN reload"
|
|
6537
6671
|
}
|
|
@@ -6726,8 +6860,7 @@ var init_registry = __esm({
|
|
|
6726
6860
|
{
|
|
6727
6861
|
range: ">=1.0.0",
|
|
6728
6862
|
coverage: 1,
|
|
6729
|
-
note: "load-safe noop \u2014 expo plugin function returns empty config"
|
|
6730
|
-
missing: "config plugin runs at build time; runtime is the iterable-react-native-sdk path"
|
|
6863
|
+
note: "load-safe noop \u2014 expo plugin function returns empty config"
|
|
6731
6864
|
}
|
|
6732
6865
|
]
|
|
6733
6866
|
},
|
|
@@ -6833,7 +6966,7 @@ var init_registry = __esm({
|
|
|
6833
6966
|
versions: [
|
|
6834
6967
|
{
|
|
6835
6968
|
range: ">=1.5.0",
|
|
6836
|
-
coverage:
|
|
6969
|
+
coverage: 0.4,
|
|
6837
6970
|
note: "load-safe passthrough \u2014 Spinner renders children; full Type enum exposed",
|
|
6838
6971
|
missing: "no animation; recommended swap: pure-JS spinner like react-spinners"
|
|
6839
6972
|
}
|
|
@@ -6844,10 +6977,11 @@ var init_registry = __esm({
|
|
|
6844
6977
|
stubType: "native",
|
|
6845
6978
|
versions: [
|
|
6846
6979
|
{
|
|
6847
|
-
range: ">=1.0.0",
|
|
6848
|
-
coverage:
|
|
6849
|
-
note:
|
|
6850
|
-
|
|
6980
|
+
range: ">=1.1.1 <2.0.0",
|
|
6981
|
+
coverage: 0.9,
|
|
6982
|
+
note: "native-seam only \u2014 published package JS runs unchanged and reads RNVersionInfo appVersion/buildVersion/bundleIdentifier from the live Expo config",
|
|
6983
|
+
working: "default export with appVersion, platform-typed buildVersion, and bundleIdentifier; iOS and Android config fields; stable bare-app fallback",
|
|
6984
|
+
missing: "bare/frozen apps without resolved Expo config use simulator metadata rather than Info.plist or PackageInfo"
|
|
6851
6985
|
}
|
|
6852
6986
|
]
|
|
6853
6987
|
},
|
|
@@ -6906,7 +7040,7 @@ var init_registry = __esm({
|
|
|
6906
7040
|
versions: [
|
|
6907
7041
|
{
|
|
6908
7042
|
range: ">=2.0.0",
|
|
6909
|
-
coverage:
|
|
7043
|
+
coverage: 0.8,
|
|
6910
7044
|
note: "load-safe class \u2014 setLanguage / getLanguage / getInterfaceLanguage / getAvailableLanguages backed by navigator.language",
|
|
6911
7045
|
missing: "no Localizable.strings reading; consumers should use upstream Localizable strings via JSON imports"
|
|
6912
7046
|
}
|
|
@@ -7257,7 +7391,7 @@ var init_registry = __esm({
|
|
|
7257
7391
|
versions: [
|
|
7258
7392
|
{
|
|
7259
7393
|
range: ">=1.0.0",
|
|
7260
|
-
coverage:
|
|
7394
|
+
coverage: 0.8,
|
|
7261
7395
|
note: "partial \u2014 uses window.prompt() when available so callbacks fire with the entered value",
|
|
7262
7396
|
missing: "no Material AlertDialog on iOS; window.prompt is the closest browser equivalent"
|
|
7263
7397
|
}
|
|
@@ -7536,7 +7670,7 @@ var init_registry = __esm({
|
|
|
7536
7670
|
versions: [
|
|
7537
7671
|
{
|
|
7538
7672
|
range: ">=2.0.0",
|
|
7539
|
-
coverage:
|
|
7673
|
+
coverage: 0.85,
|
|
7540
7674
|
note: "partial \u2014 set/get/remove backed by the shared tenant key/value store with __soot_secure_ prefix; ACCESSIBLE constants exposed",
|
|
7541
7675
|
missing: "no real keychain encryption; recommended swap: react-native-keychain (already polyfilled)"
|
|
7542
7676
|
}
|
|
@@ -7572,10 +7706,9 @@ var init_registry = __esm({
|
|
|
7572
7706
|
versions: [
|
|
7573
7707
|
{
|
|
7574
7708
|
range: ">=1.0.0",
|
|
7575
|
-
coverage:
|
|
7709
|
+
coverage: 1,
|
|
7576
7710
|
note: "native-seam: the two pure-JS constants (ScreenCornerRadius, IsScreenRounded) run from the real bundle; only the ScreenCornerRadius NativeModule is ours, and its `cornerRadius` constant returns the live simulated device's measured display corner radius from the same device spec the engine renders the chrome from. this is the package's entire purpose and SootSim answers it precisely. faithful complete contract, not a no-op.",
|
|
7577
|
-
working: "NativeModules.ScreenCornerRadius.cornerRadius (real per-device radius, synchronous constant read at import like upstream); ScreenCornerRadius + IsScreenRounded constants computed by the real package JS off that value, so IsScreenRounded is correct per device"
|
|
7578
|
-
missing: 'none functionally \u2014 returns the exact display corner radius of the simulated device; 0 only in the pre-boot window before the first device spec publishes, which the upstream `?? 0` already treats as "couldn\'t be detected"'
|
|
7711
|
+
working: "NativeModules.ScreenCornerRadius.cornerRadius (real per-device radius, synchronous constant read at import like upstream); ScreenCornerRadius + IsScreenRounded constants computed by the real package JS off that value, so IsScreenRounded is correct per device"
|
|
7579
7712
|
}
|
|
7580
7713
|
]
|
|
7581
7714
|
},
|
|
@@ -7694,8 +7827,7 @@ var init_registry = __esm({
|
|
|
7694
7827
|
{
|
|
7695
7828
|
range: ">=1.0.0",
|
|
7696
7829
|
coverage: 1,
|
|
7697
|
-
note: "load-safe partial \u2014 isWebPSupported=true (browsers support WebP); encodeWebP/decodeWebP reject"
|
|
7698
|
-
missing: "WebP reading is via <img>/<canvas>; encoding via Canvas.toBlob"
|
|
7830
|
+
note: "load-safe partial \u2014 isWebPSupported=true (browsers support WebP); encodeWebP/decodeWebP reject"
|
|
7699
7831
|
}
|
|
7700
7832
|
]
|
|
7701
7833
|
},
|
|
@@ -7781,8 +7913,7 @@ var init_registry = __esm({
|
|
|
7781
7913
|
{
|
|
7782
7914
|
range: ">=1.0.0",
|
|
7783
7915
|
coverage: 1,
|
|
7784
|
-
note: "load-safe passthrough \u2014 children pass through (brownfield-mount of RN inside native host has no browser equivalent)"
|
|
7785
|
-
missing: "sootsim is already a pure-JS host"
|
|
7916
|
+
note: "load-safe passthrough \u2014 children pass through (brownfield-mount of RN inside native host has no browser equivalent)"
|
|
7786
7917
|
}
|
|
7787
7918
|
]
|
|
7788
7919
|
},
|
|
@@ -7997,7 +8128,7 @@ var init_registry = __esm({
|
|
|
7997
8128
|
versions: [
|
|
7998
8129
|
{
|
|
7999
8130
|
range: ">=2.0.0",
|
|
8000
|
-
coverage:
|
|
8131
|
+
coverage: 0.8,
|
|
8001
8132
|
note: "load-safe partial \u2014 getCacheUri returns input url; cleanCache/cleanByUrl accepted; getCacheSize=0",
|
|
8002
8133
|
missing: "no video proxy/cache; browsers cache via standard HTTP cache"
|
|
8003
8134
|
}
|
|
@@ -8367,7 +8498,7 @@ var init_registry = __esm({
|
|
|
8367
8498
|
versions: [
|
|
8368
8499
|
{
|
|
8369
8500
|
range: ">=0.5.0",
|
|
8370
|
-
coverage:
|
|
8501
|
+
coverage: 0.7,
|
|
8371
8502
|
note: 'load-safe defaults \u2014 model/manufacturer/deviceId/bundleId/version/buildNumber/systemVersion/systemName all "sootsim"',
|
|
8372
8503
|
missing: "consumers should use react-native-device-info (already polyfilled)"
|
|
8373
8504
|
}
|
|
@@ -8452,7 +8583,7 @@ var init_registry = __esm({
|
|
|
8452
8583
|
versions: [
|
|
8453
8584
|
{
|
|
8454
8585
|
range: ">=2.0.0",
|
|
8455
|
-
coverage:
|
|
8586
|
+
coverage: 0.25,
|
|
8456
8587
|
note: "load-safe noop \u2014 LoaderKit renders null",
|
|
8457
8588
|
missing: "no native loader animations; recommended swap: pure-JS spinner"
|
|
8458
8589
|
}
|
|
@@ -8500,7 +8631,7 @@ var init_registry = __esm({
|
|
|
8500
8631
|
versions: [
|
|
8501
8632
|
{
|
|
8502
8633
|
range: ">=0.10.0",
|
|
8503
|
-
coverage:
|
|
8634
|
+
coverage: 0.6,
|
|
8504
8635
|
note: "load-safe pass-through \u2014 forwards to globalThis.PaymentRequest where supported",
|
|
8505
8636
|
missing: "see @rnw-community/react-native-payments for the modern variant"
|
|
8506
8637
|
}
|
|
@@ -8549,8 +8680,7 @@ var init_registry = __esm({
|
|
|
8549
8680
|
{
|
|
8550
8681
|
range: ">=0.0.1",
|
|
8551
8682
|
coverage: 1,
|
|
8552
|
-
note: "load-safe noop \u2014 Easing constants exposed; interpolate returns input"
|
|
8553
|
-
missing: "pure-JS easings live in react-native-reanimated which we polyfill"
|
|
8683
|
+
note: "load-safe noop \u2014 Easing constants exposed; interpolate returns input"
|
|
8554
8684
|
}
|
|
8555
8685
|
]
|
|
8556
8686
|
},
|
|
@@ -8620,7 +8750,7 @@ var init_registry = __esm({
|
|
|
8620
8750
|
versions: [
|
|
8621
8751
|
{
|
|
8622
8752
|
range: ">=3.0.0",
|
|
8623
|
-
coverage:
|
|
8753
|
+
coverage: 0.85,
|
|
8624
8754
|
note: "partial \u2014 setItem/getItem/removeItem/exist/getAllKeys/multi* backed by the shared tenant key/value store with __soot_secure_ prefix; getSupportedBiometryType=null",
|
|
8625
8755
|
missing: "no real keychain encryption; recommended swap: react-native-keychain (already 0.85)"
|
|
8626
8756
|
}
|
|
@@ -8860,7 +8990,7 @@ var init_registry = __esm({
|
|
|
8860
8990
|
{
|
|
8861
8991
|
range: ">=0.4.0",
|
|
8862
8992
|
coverage: 0.95,
|
|
8863
|
-
note: "native-seam only - upstream analytics client, batching, AppState integration, and fetch delivery run from the bundle; RNAptabaseModule supplies
|
|
8993
|
+
note: "native-seam only - upstream analytics client, batching, AppState integration, and fetch delivery run from the bundle; RNAptabaseModule supplies live Expo-config appVersion/appBuildNumber constants",
|
|
8864
8994
|
working: "init, trackEvent, flush, AppState-based batching, fetch delivery, appVersion/appBuildNumber constants",
|
|
8865
8995
|
missing: "no extra native delivery path beyond the upstream JS fetch client"
|
|
8866
8996
|
}
|
|
@@ -9179,6 +9309,19 @@ var init_registry = __esm({
|
|
|
9179
9309
|
}
|
|
9180
9310
|
]
|
|
9181
9311
|
},
|
|
9312
|
+
"expo-widgets": {
|
|
9313
|
+
category: "Expo SDK",
|
|
9314
|
+
stubType: "native",
|
|
9315
|
+
versions: [
|
|
9316
|
+
{
|
|
9317
|
+
range: ">=57.0.10 <58.0.0",
|
|
9318
|
+
coverage: 0.7,
|
|
9319
|
+
note: "native-seam only \u2014 the published Widget, LiveActivity, and factory classes run from the bundle; widget timelines and live-activity instance lifecycles use deterministic in-memory state while unavailable host events and push tokens stay absent",
|
|
9320
|
+
working: "createWidget, Widget reload/updateTimeline/updateSnapshot/getTimeline, createLiveActivity, LiveActivityFactory start/getInstances, LiveActivity update/end/getPushToken, after dismissal policy, widgetsDirectory, reloadAllWidgets, and removable user-interaction/push-token subscriptions",
|
|
9321
|
+
missing: "no WidgetKit home-screen or Lock Screen rendering, Dynamic Island visuals, APNs push or push-to-start tokens, host widget interaction events, app-group files, or timeline persistence across simulator restarts"
|
|
9322
|
+
}
|
|
9323
|
+
]
|
|
9324
|
+
},
|
|
9182
9325
|
"@bittingz/expo-widgets": {
|
|
9183
9326
|
category: "Device & Platform",
|
|
9184
9327
|
stubType: "native",
|
|
@@ -9386,10 +9529,9 @@ var init_registry = __esm({
|
|
|
9386
9529
|
versions: [
|
|
9387
9530
|
{
|
|
9388
9531
|
range: ">=1.0.0",
|
|
9389
|
-
coverage:
|
|
9390
|
-
note: "native-seam only \u2014 upstream
|
|
9391
|
-
working: "getCornerRadiusSync and getCornerRadius"
|
|
9392
|
-
missing: "no real UIDevice model identifier lookup from the tenant worker yet"
|
|
9532
|
+
coverage: 1,
|
|
9533
|
+
note: "native-seam only \u2014 the upstream Expo module wrapper runs from the bundle; getCornerRadiusSync and getCornerRadius return the live simulated device's measured display corner radius from the same canonical surface metrics the engine uses to clip its screen. the value follows device switches and is zero for square-screen devices.",
|
|
9534
|
+
working: "getCornerRadiusSync and getCornerRadius with the real per-device radius in points"
|
|
9393
9535
|
}
|
|
9394
9536
|
]
|
|
9395
9537
|
},
|
|
@@ -9649,6 +9791,19 @@ var init_registry = __esm({
|
|
|
9649
9791
|
}
|
|
9650
9792
|
]
|
|
9651
9793
|
},
|
|
9794
|
+
"react-native-nitro-fetch": {
|
|
9795
|
+
category: "Networking",
|
|
9796
|
+
stubType: "native",
|
|
9797
|
+
versions: [
|
|
9798
|
+
{
|
|
9799
|
+
range: ">=1.5.4 <2.0.0",
|
|
9800
|
+
coverage: 0.7,
|
|
9801
|
+
note: "published-browser-entry: the package ships native NitroModules code, so SootSim classifies it as native while selecting its own index.web.js and internal .web.js siblings instead of the native transport. The upstream web implementation delegates the primary fetch API to the browser and keeps its public JavaScript helpers; native-only APIs expose the package's documented web warnings and unavailable values.",
|
|
9802
|
+
working: "fetch with browser RequestInfo/RequestInit, AbortSignal, headers, request bodies, redirects, credentials, and browser streaming; upstream Headers, Request, Response, generateCurl, NetworkInspector, nitroFetchOnWorklet JS-thread mapper, and token mapping utilities",
|
|
9803
|
+
missing: "Cronet/URLSession transport details, HTTP/3-specific behavior, native disk/prefetch cache, startup prefetch queue, synchronous off-thread worklet requests, cancellation by native request ID, and encrypted native token-refresh persistence"
|
|
9804
|
+
}
|
|
9805
|
+
]
|
|
9806
|
+
},
|
|
9652
9807
|
"react-native-fast-trie": {
|
|
9653
9808
|
category: "Storage & Data",
|
|
9654
9809
|
stubType: "native",
|
|
@@ -10296,41 +10451,49 @@ var init_registry = __esm({
|
|
|
10296
10451
|
}
|
|
10297
10452
|
});
|
|
10298
10453
|
|
|
10299
|
-
// ../compat/src/
|
|
10300
|
-
function
|
|
10301
|
-
if (deps["one"]) return "one";
|
|
10302
|
-
if (deps["expo"]) return "expo";
|
|
10303
|
-
if (deps["react-native"]) return "bare";
|
|
10304
|
-
return "unknown";
|
|
10305
|
-
}
|
|
10306
|
-
function isRNEcosystemPackage(name) {
|
|
10307
|
-
if (NON_RN_PACKAGES.has(name)) return false;
|
|
10308
|
-
return name.startsWith("react-native") || name.startsWith("expo-") || name.startsWith("@react-native") || name.startsWith("@shopify/") || name.startsWith("@gorhom/") || name.startsWith("@callstack/") || POLYFILL_REGISTRY[name] !== void 0 || UNSUPPORTABLE.has(name);
|
|
10309
|
-
}
|
|
10310
|
-
function matchVersion(entry, version) {
|
|
10454
|
+
// ../compat/src/version-range.ts
|
|
10455
|
+
function matchCompatVersion(entry, version) {
|
|
10311
10456
|
const clean = version.replace(/^[~^>=<\s]+/, "").split("-")[0];
|
|
10312
10457
|
const [major] = clean.split(".").map(Number);
|
|
10313
|
-
for (const
|
|
10314
|
-
const parts =
|
|
10458
|
+
for (const candidate of entry.versions) {
|
|
10459
|
+
const parts = candidate.range.split(" ");
|
|
10315
10460
|
let matches = true;
|
|
10316
10461
|
for (const part of parts) {
|
|
10317
|
-
const
|
|
10318
|
-
if (!
|
|
10319
|
-
const [, op,
|
|
10320
|
-
const rangeMajor = parseInt(
|
|
10462
|
+
const match = part.match(/^([><=]+)(\d+)/);
|
|
10463
|
+
if (!match) continue;
|
|
10464
|
+
const [, op, rawNum] = match;
|
|
10465
|
+
const rangeMajor = parseInt(rawNum);
|
|
10321
10466
|
if (op === ">=" && major < rangeMajor) matches = false;
|
|
10322
10467
|
if (op === "<" && major >= rangeMajor) matches = false;
|
|
10323
10468
|
if (op === ">" && major <= rangeMajor) matches = false;
|
|
10324
10469
|
if (op === "<=" && major > rangeMajor) matches = false;
|
|
10325
10470
|
}
|
|
10326
|
-
if (matches) return { coverage:
|
|
10471
|
+
if (matches) return { coverage: candidate.coverage, note: candidate.note };
|
|
10327
10472
|
}
|
|
10328
|
-
const last = entry.versions
|
|
10473
|
+
const last = entry.versions.at(-1);
|
|
10474
|
+
if (!last) return null;
|
|
10329
10475
|
return {
|
|
10330
10476
|
coverage: last.coverage * 0.5,
|
|
10331
10477
|
note: `${last.note} (version not explicitly supported)`
|
|
10332
10478
|
};
|
|
10333
10479
|
}
|
|
10480
|
+
var init_version_range = __esm({
|
|
10481
|
+
"../compat/src/version-range.ts"() {
|
|
10482
|
+
"use strict";
|
|
10483
|
+
}
|
|
10484
|
+
});
|
|
10485
|
+
|
|
10486
|
+
// ../compat/src/scan.ts
|
|
10487
|
+
function detectFramework(deps) {
|
|
10488
|
+
if (deps["one"]) return "one";
|
|
10489
|
+
if (deps["expo"]) return "expo";
|
|
10490
|
+
if (deps["react-native"]) return "bare";
|
|
10491
|
+
return "unknown";
|
|
10492
|
+
}
|
|
10493
|
+
function isRNEcosystemPackage(name) {
|
|
10494
|
+
if (NON_RN_PACKAGES.has(name)) return false;
|
|
10495
|
+
return name.startsWith("react-native") || name.startsWith("expo-") || name.startsWith("@react-native") || name.startsWith("@shopify/") || name.startsWith("@gorhom/") || name.startsWith("@callstack/") || POLYFILL_REGISTRY[name] !== void 0 || UNSUPPORTABLE.has(name);
|
|
10496
|
+
}
|
|
10334
10497
|
function scanDeps(pkg) {
|
|
10335
10498
|
const allDeps = { ...pkg.dependencies, ...pkg.devDependencies };
|
|
10336
10499
|
const framework = detectFramework(allDeps);
|
|
@@ -10369,7 +10532,7 @@ function scanDeps(pkg) {
|
|
|
10369
10532
|
});
|
|
10370
10533
|
continue;
|
|
10371
10534
|
}
|
|
10372
|
-
const match =
|
|
10535
|
+
const match = matchCompatVersion(entry, version);
|
|
10373
10536
|
if (!match) {
|
|
10374
10537
|
packages.push({
|
|
10375
10538
|
name,
|
|
@@ -10404,6 +10567,7 @@ var init_scan = __esm({
|
|
|
10404
10567
|
"../compat/src/scan.ts"() {
|
|
10405
10568
|
"use strict";
|
|
10406
10569
|
init_registry();
|
|
10570
|
+
init_version_range();
|
|
10407
10571
|
NON_RN_PACKAGES = /* @__PURE__ */ new Set([
|
|
10408
10572
|
"react",
|
|
10409
10573
|
"react-dom",
|
|
@@ -10452,6 +10616,7 @@ var init_web = __esm({
|
|
|
10452
10616
|
var bridge_constants_exports = {};
|
|
10453
10617
|
__export(bridge_constants_exports, {
|
|
10454
10618
|
DEFAULT_SOOTSIM_BRIDGE_PORT: () => DEFAULT_SOOTSIM_BRIDGE_PORT,
|
|
10619
|
+
DEFAULT_SOOTSIM_BRIDGE_URL: () => DEFAULT_SOOTSIM_BRIDGE_URL,
|
|
10455
10620
|
SOOTSIM_BRIDGE_SIM_CLOSE_CODE: () => SOOTSIM_BRIDGE_SIM_CLOSE_CODE,
|
|
10456
10621
|
SOOTSIM_BRIDGE_SIM_CLOSE_REASON: () => SOOTSIM_BRIDGE_SIM_CLOSE_REASON,
|
|
10457
10622
|
resolveSootsimBridgePort: () => resolveSootsimBridgePort,
|
|
@@ -10550,11 +10715,12 @@ function resolveSootsimBridgeWebSocketUrl(input) {
|
|
|
10550
10715
|
href: input.href
|
|
10551
10716
|
});
|
|
10552
10717
|
}
|
|
10553
|
-
var DEFAULT_SOOTSIM_BRIDGE_PORT, CONTRAST_DEV_HTTP_BASE_PORT, SOOTSIM_SITE_DEV_HTTP_BASE_PORT, SOOTSIM_SHELL_DEV_HTTP_BASE_PORT, LOCAL_DEV_HTTP_BASE_PORTS, MAX_LOCAL_DEV_PORT_OFFSET, SOOTSIM_BRIDGE_SIM_CLOSE_CODE, SOOTSIM_BRIDGE_SIM_CLOSE_REASON;
|
|
10718
|
+
var DEFAULT_SOOTSIM_BRIDGE_PORT, DEFAULT_SOOTSIM_BRIDGE_URL, CONTRAST_DEV_HTTP_BASE_PORT, SOOTSIM_SITE_DEV_HTTP_BASE_PORT, SOOTSIM_SHELL_DEV_HTTP_BASE_PORT, LOCAL_DEV_HTTP_BASE_PORTS, MAX_LOCAL_DEV_PORT_OFFSET, SOOTSIM_BRIDGE_SIM_CLOSE_CODE, SOOTSIM_BRIDGE_SIM_CLOSE_REASON;
|
|
10554
10719
|
var init_bridge_constants = __esm({
|
|
10555
10720
|
"src/bridge-constants.ts"() {
|
|
10556
10721
|
"use strict";
|
|
10557
10722
|
DEFAULT_SOOTSIM_BRIDGE_PORT = 7668;
|
|
10723
|
+
DEFAULT_SOOTSIM_BRIDGE_URL = `http://localhost:${DEFAULT_SOOTSIM_BRIDGE_PORT}/`;
|
|
10558
10724
|
CONTRAST_DEV_HTTP_BASE_PORT = 3e3;
|
|
10559
10725
|
SOOTSIM_SITE_DEV_HTTP_BASE_PORT = 3001;
|
|
10560
10726
|
SOOTSIM_SHELL_DEV_HTTP_BASE_PORT = 5173;
|
|
@@ -12963,8 +13129,8 @@ var init_agent_sessions = __esm({
|
|
|
12963
13129
|
|
|
12964
13130
|
// src/agent-identity.ts
|
|
12965
13131
|
function teamMachineSessionIdFromCliIdentity(identity) {
|
|
12966
|
-
if (!identity?.startsWith("
|
|
12967
|
-
const sessionId = identity.slice("
|
|
13132
|
+
if (!identity?.startsWith("TM_SESSION:")) return null;
|
|
13133
|
+
const sessionId = identity.slice("TM_SESSION:".length).trim();
|
|
12968
13134
|
if (!TEAM_MACHINE_SESSION_RE.test(sessionId)) return null;
|
|
12969
13135
|
return sessionId;
|
|
12970
13136
|
}
|
|
@@ -16399,7 +16565,7 @@ var init_current_sim = __esm({
|
|
|
16399
16565
|
IDENTITY_ENV_VARS = [
|
|
16400
16566
|
"SOOTSIM_CLI_IDENTITY",
|
|
16401
16567
|
// explicit override — fastest path, skips all pid lookups
|
|
16402
|
-
"
|
|
16568
|
+
"TM_SESSION",
|
|
16403
16569
|
// Team Machine session id; routes prompt-bar followups back to this agent
|
|
16404
16570
|
"CLAUDE_CODE_SESSION_ID",
|
|
16405
16571
|
// claude code, if ever set
|
|
@@ -17520,7 +17686,7 @@ async function getShellState(bridge, readyTimeoutMs = 0) {
|
|
|
17520
17686
|
}
|
|
17521
17687
|
}
|
|
17522
17688
|
}
|
|
17523
|
-
var LAYOUT_GET_NATIVE_EVAL, WAIT_READY_PROBE, READY_CONTENT_NODE_FLOOR, READY_NODE_STABLE_MS;
|
|
17689
|
+
var LAYOUT_GET_NATIVE_EVAL, WAIT_READY_PROBE, READY_CONTENT_NODE_FLOOR, READY_NODE_STABLE_MS, READY_PROBE_POLL_MS;
|
|
17524
17690
|
var init_core = __esm({
|
|
17525
17691
|
"cli/commands/inspect/core.ts"() {
|
|
17526
17692
|
"use strict";
|
|
@@ -17665,6 +17831,7 @@ var init_core = __esm({
|
|
|
17665
17831
|
})()`;
|
|
17666
17832
|
READY_CONTENT_NODE_FLOOR = 100;
|
|
17667
17833
|
READY_NODE_STABLE_MS = 750;
|
|
17834
|
+
READY_PROBE_POLL_MS = 150;
|
|
17668
17835
|
}
|
|
17669
17836
|
});
|
|
17670
17837
|
|
|
@@ -18667,7 +18834,7 @@ var init_bridge_flow_runner = __esm({
|
|
|
18667
18834
|
` [flow] waiting for app to be ready\u2026 (${Math.round(elapsed / 1e3)}s)`
|
|
18668
18835
|
);
|
|
18669
18836
|
}
|
|
18670
|
-
await sleep2(
|
|
18837
|
+
await sleep2(READY_PROBE_POLL_MS);
|
|
18671
18838
|
}
|
|
18672
18839
|
if (lastError?.message.startsWith("app failed to load:")) {
|
|
18673
18840
|
throw lastError;
|
|
@@ -19706,18 +19873,10 @@ var init_bridge_flow_runner = __esm({
|
|
|
19706
19873
|
if (!this.firstLaunchDone && !wantsClear) {
|
|
19707
19874
|
this.firstLaunchDone = true;
|
|
19708
19875
|
if (wantsResetRuntime) {
|
|
19709
|
-
const
|
|
19710
|
-
|
|
19876
|
+
const launched = await this.launchShellAppFromHomeIfNeeded(opts);
|
|
19877
|
+
if (launched) await this.waitForTree(12e4);
|
|
19711
19878
|
await this.softReloadGuestApp(false);
|
|
19712
19879
|
await this.waitForTree(12e4);
|
|
19713
|
-
if (shouldReturnHome) {
|
|
19714
|
-
await callShellCommandWhenReady(this.bridge, "goHome", 1e3);
|
|
19715
|
-
await this.waitForShellHome(1e3);
|
|
19716
|
-
}
|
|
19717
|
-
await this.launchShellAppFromHomeIfNeeded(
|
|
19718
|
-
opts,
|
|
19719
|
-
shouldReturnHome ? { ...startingShellState ?? {}, state: "home", activeApp: null } : null
|
|
19720
|
-
);
|
|
19721
19880
|
} else {
|
|
19722
19881
|
await this.launchShellAppFromHomeIfNeeded(opts);
|
|
19723
19882
|
}
|
|
@@ -19790,26 +19949,12 @@ var init_bridge_flow_runner = __esm({
|
|
|
19790
19949
|
await sleep2(16);
|
|
19791
19950
|
}
|
|
19792
19951
|
}
|
|
19793
|
-
async
|
|
19794
|
-
const deadline = Date.now() + timeoutMs;
|
|
19795
|
-
while (Date.now() < deadline) {
|
|
19796
|
-
const state = await getShellState(this.bridge).catch(() => null);
|
|
19797
|
-
if (state?.state === "home" && state.activeApp == null && state.showSwitcher === false) {
|
|
19798
|
-
return;
|
|
19799
|
-
}
|
|
19800
|
-
await sleep2(16);
|
|
19801
|
-
}
|
|
19802
|
-
}
|
|
19803
|
-
async launchShellAppFromHomeIfNeeded(opts, knownHomeState) {
|
|
19952
|
+
async launchShellAppFromHomeIfNeeded(opts) {
|
|
19804
19953
|
let state = null;
|
|
19805
|
-
|
|
19806
|
-
state =
|
|
19807
|
-
}
|
|
19808
|
-
|
|
19809
|
-
state = await getShellState(this.bridge);
|
|
19810
|
-
} catch {
|
|
19811
|
-
return false;
|
|
19812
|
-
}
|
|
19954
|
+
try {
|
|
19955
|
+
state = await getShellState(this.bridge);
|
|
19956
|
+
} catch {
|
|
19957
|
+
return false;
|
|
19813
19958
|
}
|
|
19814
19959
|
if (state?.state !== "home" || state.activeApp != null) return false;
|
|
19815
19960
|
const appId = this.resolveShellLaunchAppId(opts, state);
|