diff --git a/bun.lock b/bun.lock index 74fa6eca..5a327eb1 100644 --- a/bun.lock +++ b/bun.lock @@ -31,7 +31,7 @@ "name": "evals-testbench", "version": "1.0.0", "dependencies": { - "@expo/ui": "~56.0.17", + "@expo/ui": "~56.0.18", "@legendapp/list": "^3.0.0-beta.42", "@react-native-async-storage/async-storage": "2.2.0", "@react-native-community/netinfo": "^12.0.1", @@ -39,11 +39,11 @@ "@react-navigation/drawer": "^7.3.0", "@react-navigation/native": "^7.1.0", "@react-navigation/native-stack": "^7.3.0", - "@shopify/flash-list": "^2.3.0", + "@shopify/flash-list": "2.0.2", "@tanstack/react-query": "^5.90.21", - "expo": "^56", + "expo": "~56.0.12", "expo-audio": "~56.0.12", - "expo-build-properties": "~56.0.18", + "expo-build-properties": "~56.0.19", "expo-calendar": "~56.0.8", "expo-camera": "~56.0.8", "expo-constants": "~56.0.18", @@ -51,31 +51,31 @@ "expo-file-system": "~56.0.8", "expo-glass-effect": "~56.0.4", "expo-image": "~56.0.11", - "expo-image-picker": "~56.0.17", - "expo-location": "~56.0.17", + "expo-image-picker": "~56.0.18", + "expo-location": "~56.0.18", "expo-media-library": "~56.0.7", "expo-navigation-bar": "~56.0.3", - "expo-notifications": "~56.0.17", - "expo-router": "~56.2.10", + "expo-notifications": "~56.0.18", + "expo-router": "~56.2.11", "expo-status-bar": "~56.0.4", - "expo-task-manager": "~56.0.18", + "expo-task-manager": "~56.0.19", "expo-updates": "~56.0.19", - "expo-video": "~56.1.3", + "expo-video": "~56.1.4", "jotai": "^2.18.0", "react": "19.2.3", "react-native": "0.85.3", - "react-native-gesture-handler": "~2.28.0", - "react-native-keyboard-controller": "^1.20.7", - "react-native-reanimated": "~4.1.1", - "react-native-safe-area-context": "~5.6.0", - "react-native-screens": "~4.16.0", + "react-native-gesture-handler": "~2.31.1", + "react-native-keyboard-controller": "1.21.6", + "react-native-reanimated": "4.3.1", + "react-native-safe-area-context": "~5.7.0", + "react-native-screens": "4.25.2", "zustand": "^5.0.11", }, "devDependencies": { "@react-native-harness/platform-web": "^1.0.0-alpha.25", "@types/react": "~19.2.0", "react-native-harness": "^1.0.0-alpha.25", - "typescript": "~5.9.2", + "typescript": "~6.0.3", }, }, }, @@ -346,7 +346,7 @@ "@expo/sudo-prompt": ["@expo/sudo-prompt@9.3.2", "", {}, "sha512-HHQigo3rQWKMDzYDLkubN5WQOYXJJE2eNqIQC2axC2iO3mHdwnIR7FgZVvHWtBwAdzBgAP0ECp8KqS8TiMKvgw=="], - "@expo/ui": ["@expo/ui@56.0.17", "", { "dependencies": { "sf-symbols-typescript": "^2.1.0", "vaul": "^1.1.2" }, "peerDependencies": { "@babel/core": "*", "expo": "*", "react": "*", "react-dom": "*", "react-native": "*", "react-native-reanimated": "*", "react-native-worklets": "*" }, "optionalPeers": ["@babel/core", "react-dom", "react-native-reanimated", "react-native-worklets"] }, "sha512-Jos9oGzurMDngrSWJesX3LSykPRvkUdANxtq2sPKBc6bAjadtZJCkthAYMaE3P9L5xrzbNRFo+2O76cRP0iYPw=="], + "@expo/ui": ["@expo/ui@56.0.18", "", { "dependencies": { "sf-symbols-typescript": "^2.1.0", "vaul": "^1.1.2" }, "peerDependencies": { "@babel/core": "*", "expo": "*", "react": "*", "react-dom": "*", "react-native": "*", "react-native-reanimated": "*", "react-native-worklets": "*" }, "optionalPeers": ["@babel/core", "react-dom", "react-native-reanimated", "react-native-worklets"] }, "sha512-2XgH5obigGtXm8zlb/V3g87NSiIcBcJ1xoQOEQYPoExL1DCNsHzaIecTh1XG/f/45ardo4OZNJwpbfYJ9X3qrQ=="], "@expo/ws-tunnel": ["@expo/ws-tunnel@2.0.0", "", { "peerDependencies": { "ws": "^8.0.0" } }, "sha512-j+JfTRdCk820J9dU0sA2SqshQIKFOMo7ED84w9MJFcebfbNQgsLztEY/SABDkGnjatrW4xGqnUhVRxSBVyCkXw=="], @@ -544,7 +544,7 @@ "@rtsao/scc": ["@rtsao/scc@1.1.0", "", {}, "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g=="], - "@shopify/flash-list": ["@shopify/flash-list@2.3.0", "", { "peerDependencies": { "@babel/runtime": "*", "react": "*", "react-native": "*" } }, "sha512-DR7VuN8KJHTYj9zv1/IhpqrMBMQyeeW/DCWCbVQAAkWhHrc6ylIbXOY+qK93CuHABV+dNHXK/3V6p4wCSW/+wA=="], + "@shopify/flash-list": ["@shopify/flash-list@2.0.2", "", { "dependencies": { "tslib": "2.8.1" }, "peerDependencies": { "@babel/runtime": "*", "react": "*", "react-native": "*" } }, "sha512-zhlrhA9eiuEzja4wxVvotgXHtqd3qsYbXkQ3rsBfOgbFA9BVeErpDE/yEwtlIviRGEqpuFj/oU5owD6ByaNX+w=="], "@sinclair/typebox": ["@sinclair/typebox@0.27.10", "", {}, "sha512-MTBk/3jGLNB2tVxv6uLlFh1iu64iYOQ2PbdOSK3NW8JZsmlaOh2q6sdtKowBhfw8QFLmYNzTW4/oK4uATIi6ZA=="], @@ -604,6 +604,8 @@ "@types/react": ["@types/react@19.2.17", "", { "dependencies": { "csstype": "^3.2.2" } }, "sha512-MXfmqaVPEVgkBT/aY0aGCkRWWtByiYQXo3xdQ8r5RzuFrPiRn8Gar2tQdXSUQ2GKV3bkXckek89V8wQBY2Q/Aw=="], + "@types/react-test-renderer": ["@types/react-test-renderer@19.1.0", "", { "dependencies": { "@types/react": "*" } }, "sha512-XD0WZrHqjNrxA/MaR9O22w/RNidWR9YZmBdRGI7wcnWGrv/3dA8wKCJ8m63Sn+tLJhcjmuhOi629N66W6kgWzQ=="], + "@types/stack-utils": ["@types/stack-utils@2.0.3", "", {}, "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw=="], "@types/yargs": ["@types/yargs@17.0.35", "", { "dependencies": { "@types/yargs-parser": "*" } }, "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg=="], @@ -1012,7 +1014,7 @@ "expo-audio": ["expo-audio@56.0.12", "", { "peerDependencies": { "expo": "*", "expo-asset": "*", "react": "*", "react-native": "*" } }, "sha512-ne2UIO/HsQoBL9e+tGs5N9Sf3NyW5sJMm4sDkexbSJRc2IchLDG+9Msu/+l5N4RlZ8SiF42wRyWsh/Usg+SwOw=="], - "expo-build-properties": ["expo-build-properties@56.0.18", "", { "dependencies": { "@expo/schema-utils": "^56.0.0", "resolve-from": "^5.0.0", "semver": "^7.6.0" }, "peerDependencies": { "expo": "*" } }, "sha512-at03ytur1Vfyl9ddtRMqIdSyR/oV57GM04+NZ5rhFTF0mC7dmKzxS9RBb34KHDPdT8UwUt7KsKbzYD1lnxLAKg=="], + "expo-build-properties": ["expo-build-properties@56.0.19", "", { "dependencies": { "@expo/schema-utils": "^56.0.0", "resolve-from": "^5.0.0", "semver": "^7.6.0" }, "peerDependencies": { "expo": "*" } }, "sha512-InoviXcxWosNp4cC7L3SWoiY99Xr2HdgN+LYHb6mUm/BBVxy1mIMrZR+3PJ2gwDZzW6EJNDz8ioASWGHBTmzpA=="], "expo-calendar": ["expo-calendar@56.0.8", "", { "peerDependencies": { "expo": "*", "react-native": "*" } }, "sha512-gxH+J+teP3CBXPybQHuwzTYrFEmSz4irh2n2KSVzzbIRqjVwgVH42op/BViOqxIkMlOlx3hmXNVIkB8RiMtIvg=="], @@ -1034,7 +1036,7 @@ "expo-image-loader": ["expo-image-loader@56.0.3", "", { "peerDependencies": { "expo": "*" } }, "sha512-JgUo4fUeU1ZC+z8iBFj8v7yoGQnZrLbOVPyNE+DWVrld55F2F6R1ck+rmdm/8TNWLz1LhNQfD7c3XYP1ZikxXA=="], - "expo-image-picker": ["expo-image-picker@56.0.17", "", { "dependencies": { "expo-image-loader": "~56.0.3" }, "peerDependencies": { "expo": "*" } }, "sha512-/RojW1ptyQNV89hEeDdaoHCkn38+546MqakMyB0acFf0HLh5ZI7wxQCHkxr16qjuQMy11M+96GlX9Z6vgXF7Nw=="], + "expo-image-picker": ["expo-image-picker@56.0.18", "", { "dependencies": { "expo-image-loader": "~56.0.3" }, "peerDependencies": { "expo": "*" } }, "sha512-sCjQ8M27bhGUv2vUavIE+uWdYo79b2D7Q5h9B66BSDZ+Rd8YyLVSf7vYGfIzQ7nMVoENZ6c4xo/JiDkEeQ9iTg=="], "expo-json-utils": ["expo-json-utils@56.0.0", "", {}, "sha512-lUqyv9aIGDbYTQ5Nux2FnH2/Dz0w5uJ8Pr080eS0StXi2jr5OmuMNErpzUnpfnYOU55xKotd4AHv68PfV/ludg=="], @@ -1042,7 +1044,7 @@ "expo-linking": ["expo-linking@56.0.14", "", { "dependencies": { "expo-constants": "~56.0.18", "invariant": "^2.2.4" }, "peerDependencies": { "react": "*", "react-native": "*" } }, "sha512-IvVQHWC+Cj4fK5qD3iEVYqpU2a4rLW0IpAAlGJ4MH+H1fyZiHh3eN6qg2WmoclOEPfYATSuEa+dQT6wfgVpXlQ=="], - "expo-location": ["expo-location@56.0.17", "", { "dependencies": { "@expo/image-utils": "^0.10.1" }, "peerDependencies": { "expo": "*" } }, "sha512-3kEONgFApqGzuRhgWyYGb/nXK+rYaeuHtcCYkuVNbrDSlHYYe+mgQPeM4Iuqv43Fihmp0mKsNtq7zX030nE+VA=="], + "expo-location": ["expo-location@56.0.18", "", { "dependencies": { "@expo/image-utils": "^0.10.1" }, "peerDependencies": { "expo": "*" } }, "sha512-6xP0UwGy8a7EEHAMeigYAp3HNo3yWHAg05tVPUfwrOWepWPpFXmjsfUBUxQdkpfpjddJ9r+f4PplxZqKI0LtjA=="], "expo-manifests": ["expo-manifests@56.0.4", "", { "dependencies": { "expo-json-utils": "~56.0.0" }, "peerDependencies": { "expo": "*" } }, "sha512-Fokawl2UkiExIF0bqGoblRFA8lYpROVD+EpvDwSW4LgqQyPwNua1gLSgHZjdl5GsVugfRMMWE3LHaibDyX93hw=="], @@ -1056,9 +1058,9 @@ "expo-navigation-bar": ["expo-navigation-bar@56.0.3", "", { "dependencies": { "debug": "^4.3.2" }, "peerDependencies": { "expo": "*", "react": "*", "react-native": "*" } }, "sha512-7k8jyJojMs59gIsAPOFk/gCz1BTFy5S0Qf3i2uUW1f2CFoWcQSSyR4VnsmppBkzIKrBzZjcuFmdsZmYO+GZ4og=="], - "expo-notifications": ["expo-notifications@56.0.17", "", { "dependencies": { "@expo/image-utils": "^0.10.1", "abort-controller": "^3.0.0", "badgin": "^1.1.5", "expo-application": "~56.0.3", "expo-constants": "~56.0.18" }, "peerDependencies": { "expo": "*", "react": "*", "react-native": "*" } }, "sha512-Yn6JUKmoBDkQeznbuUn4cHF2u44r1ErJTneW65MBFt7NLG8U8/VGQ4bBVwswm5nPH1/V92UoXPgvCssScPFRDg=="], + "expo-notifications": ["expo-notifications@56.0.18", "", { "dependencies": { "@expo/image-utils": "^0.10.1", "abort-controller": "^3.0.0", "badgin": "^1.1.5", "expo-application": "~56.0.3", "expo-constants": "~56.0.18" }, "peerDependencies": { "expo": "*", "react": "*", "react-native": "*" } }, "sha512-HHnrwyCLC5srFojcHYS2KskbNroy9o2fwPKdyhjrdjjrBu4sNRKm4LepcuZjDy98cZKEm89WIPW8O45vut8Rgw=="], - "expo-router": ["expo-router@56.2.10", "", { "dependencies": { "@expo/log-box": "^56.0.13", "@expo/metro-runtime": "^56.0.15", "@expo/schema-utils": "^56.0.0", "@expo/ui": "^56.0.17", "@radix-ui/react-slot": "^1.2.0", "@radix-ui/react-tabs": "^1.1.12", "@react-native-masked-view/masked-view": "^0.3.2", "@testing-library/jest-dom": "^6.9.1", "@testing-library/user-event": "^14.6.1", "client-only": "^0.0.1", "color": "^4.2.3", "debug": "^4.3.4", "escape-string-regexp": "^4.0.0", "expo-glass-effect": "^56.0.4", "expo-server": "^56.0.5", "expo-symbols": "^56.0.6", "fast-deep-equal": "^3.1.3", "invariant": "^2.2.4", "nanoid": "^3.3.8", "query-string": "^7.1.3", "react-fast-compare": "^3.2.2", "react-is": "^19.1.0", "react-native-drawer-layout": "^4.2.2", "react-native-screens": "^4.25.2", "server-only": "^0.0.1", "sf-symbols-typescript": "^2.1.0", "shallowequal": "^1.1.0", "standard-navigation": "^0.0.5", "vaul": "^1.1.2" }, "peerDependencies": { "@testing-library/react-native": ">= 13.2.0", "expo": "*", "expo-constants": "^56.0.18", "expo-linking": "^56.0.14", "react": "*", "react-dom": "*", "react-native": "*", "react-native-gesture-handler": "*", "react-native-reanimated": "*", "react-native-safe-area-context": ">= 5.4.0", "react-native-web": "*", "react-server-dom-webpack": "~19.0.4 || ~19.1.5 || ~19.2.4" }, "optionalPeers": ["@testing-library/react-native", "react-dom", "react-native-gesture-handler", "react-native-reanimated", "react-native-web", "react-server-dom-webpack"] }, "sha512-u7WcdsFAjSrQS7Bdb1VbNPE3xNcd/BZ6qXSS31UAJKhaYIb+ik3jJSy/W5kY3qKipwbwlo3CSb1WnZ2XYs7F+Q=="], + "expo-router": ["expo-router@56.2.11", "", { "dependencies": { "@expo/log-box": "^56.0.13", "@expo/metro-runtime": "^56.0.15", "@expo/schema-utils": "^56.0.0", "@expo/ui": "^56.0.18", "@radix-ui/react-slot": "^1.2.0", "@radix-ui/react-tabs": "^1.1.12", "@react-native-masked-view/masked-view": "^0.3.2", "@testing-library/jest-dom": "^6.9.1", "@testing-library/user-event": "^14.6.1", "client-only": "^0.0.1", "color": "^4.2.3", "debug": "^4.3.4", "escape-string-regexp": "^4.0.0", "expo-glass-effect": "^56.0.4", "expo-server": "^56.0.5", "expo-symbols": "^56.0.6", "fast-deep-equal": "^3.1.3", "invariant": "^2.2.4", "nanoid": "^3.3.8", "query-string": "^7.1.3", "react-fast-compare": "^3.2.2", "react-is": "^19.1.0", "react-native-drawer-layout": "^4.2.2", "react-native-screens": "^4.25.2", "server-only": "^0.0.1", "sf-symbols-typescript": "^2.1.0", "shallowequal": "^1.1.0", "standard-navigation": "^0.0.5", "vaul": "^1.1.2" }, "peerDependencies": { "@testing-library/react-native": ">= 13.2.0", "expo": "*", "expo-constants": "^56.0.18", "expo-linking": "^56.0.14", "react": "*", "react-dom": "*", "react-native": "*", "react-native-gesture-handler": "*", "react-native-reanimated": "*", "react-native-safe-area-context": ">= 5.4.0", "react-native-web": "*", "react-server-dom-webpack": "~19.0.4 || ~19.1.5 || ~19.2.4" }, "optionalPeers": ["@testing-library/react-native", "react-dom", "react-native-gesture-handler", "react-native-reanimated", "react-native-web", "react-server-dom-webpack"] }, "sha512-08DBTrKv3QanOc9u1JNxSEChW9c/qNFbQ0dO28OLvufWWfdSRkSdHmh365D2FgoZg1qaOzZPCDuL3tM6nGSfkQ=="], "expo-server": ["expo-server@56.0.5", "", {}, "sha512-SmM2p2g3Jrktpiazcst+OxhjSzOHXKAY4BPURHYHXvApzzoybMmrNF4IEZ8DKZ145BhSe4ydAmlEFCRTsdtgUQ=="], @@ -1068,13 +1070,13 @@ "expo-symbols": ["expo-symbols@56.0.6", "", { "dependencies": { "@expo-google-fonts/material-symbols": "^0.4.1", "sf-symbols-typescript": "^2.0.0" }, "peerDependencies": { "expo": "*", "expo-font": "*", "react": "*", "react-native": "*" } }, "sha512-BrA81DjcNafdj7gXVhdrExb9LtUiSVyOf/NavyMmDAHgHMY1GqeR5cnn1PSAZeYKnSgQhee/H89XUpAxtog5hg=="], - "expo-task-manager": ["expo-task-manager@56.0.18", "", { "dependencies": { "unimodules-app-loader": "~56.0.0" }, "peerDependencies": { "expo": "*", "react-native": "*" } }, "sha512-abTKDhlZ572wSwNuZ9HkDw6rl+kKLq0TkqheIEbGoRkMQVEGV3D5GYYY0gg84TO/HvAqiipdcBFQH8+9uHj70Q=="], + "expo-task-manager": ["expo-task-manager@56.0.19", "", { "dependencies": { "unimodules-app-loader": "~56.0.0" }, "peerDependencies": { "expo": "*", "react-native": "*" } }, "sha512-eDeBR8vXlOAXBck29AzPl+tv4QlJus+cgkQ0TGOBqAlgRPWPWd7ebhqrhb0KRieUZIvzlycfcxjHR/+AiEiMHA=="], "expo-updates": ["expo-updates@56.0.19", "", { "dependencies": { "@expo/code-signing-certificates": "^0.0.6", "@expo/plist": "^0.7.0", "@expo/spawn-async": "^1.8.0", "arg": "^4.1.0", "chalk": "^4.1.2", "debug": "^4.3.4", "expo-eas-client": "~56.0.0", "expo-manifests": "~56.0.4", "expo-structured-headers": "~56.0.0", "expo-updates-interface": "~56.0.1", "getenv": "^2.0.0", "glob": "^13.0.0", "ignore": "^5.3.1", "nullthrows": "^1.1.1", "resolve-from": "^5.0.0" }, "peerDependencies": { "expo": "*", "expo-dev-client": "*", "react": "*", "react-native": "*" }, "optionalPeers": ["expo-dev-client"], "bin": { "expo-updates": "bin/cli.js" } }, "sha512-tTSPYO5h8wDA6a+wQ2v/SRdnOdz29x0npGHCv+4Ev31Fz5r05Ii1Wgfh3BlTXNz8mikMReDsZCf6YN71YeQKpw=="], "expo-updates-interface": ["expo-updates-interface@56.0.2", "", { "peerDependencies": { "expo": "*" } }, "sha512-eWTwSZ9y8vrULG2oBn2TQSSIwBGSq/TxGJ3jY6tuVS2FWH/ASRIiKs3zkUZTRoC3ZuV2alz0mUClYV7nNrFx8g=="], - "expo-video": ["expo-video@56.1.3", "", { "peerDependencies": { "expo": "*", "react": "*", "react-native": "*" } }, "sha512-Ht2BMdx11RnGKxILL/P4t/hl4kqWXq1vLaoOrLZlDed+IXgf8hdDI9jmtEEgsIHwf3jaHFXblJCRVuS9mIxKAw=="], + "expo-video": ["expo-video@56.1.4", "", { "peerDependencies": { "expo": "*", "react": "*", "react-native": "*" } }, "sha512-8mXZOnb7ZsWneDlcnRf0M2Ox9eb5dGnNiGiCkj9bwLPY+3jM2Pc1t5ymNUuhw8lSpT/rOnE0J0/81Y3+0k2Zcw=="], "exponential-backoff": ["exponential-backoff@3.1.3", "", {}, "sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA=="], @@ -1662,19 +1664,19 @@ "react-native-drawer-layout": ["react-native-drawer-layout@4.2.2", "", { "dependencies": { "color": "^4.2.3", "use-latest-callback": "^0.2.4" }, "peerDependencies": { "react": ">= 18.2.0", "react-native": "*", "react-native-gesture-handler": ">= 2.0.0", "react-native-reanimated": ">= 2.0.0" } }, "sha512-UG/PTTeyyr43KahbgoGyXri8LMO5USHY3/RUpeKBKwCc7xLVGnDLOVNSRrJw0dDc7YmPbmAyJ4oxp8nKboKKuw=="], - "react-native-gesture-handler": ["react-native-gesture-handler@2.28.0", "", { "dependencies": { "@egjs/hammerjs": "^2.0.17", "hoist-non-react-statics": "^3.3.0", "invariant": "^2.2.4" }, "peerDependencies": { "react": "*", "react-native": "*" } }, "sha512-0msfJ1vRxXKVgTgvL+1ZOoYw3/0z1R+Ked0+udoJhyplC2jbVKIJ8Z1bzWdpQRCV3QcQ87Op0zJVE5DhKK2A0A=="], + "react-native-gesture-handler": ["react-native-gesture-handler@2.31.2", "", { "dependencies": { "@egjs/hammerjs": "^2.0.17", "@types/react-test-renderer": "^19.1.0", "hoist-non-react-statics": "^3.3.0", "invariant": "^2.2.4" }, "peerDependencies": { "react": "*", "react-native": "*" } }, "sha512-rw5q74i2AfS7YGYdbxQDhOU7xqgY6WRM1132/CCm3erqjblhECZDZFHIm0tteHoC9ih24wogVBVVzcTBQtZ+5A=="], "react-native-harness": ["react-native-harness@1.0.0-alpha.25", "", { "dependencies": { "@react-native-harness/babel-preset": "1.0.0-alpha.25", "@react-native-harness/cli": "1.0.0-alpha.25", "@react-native-harness/jest": "1.0.0-alpha.25", "@react-native-harness/metro": "1.0.0-alpha.25", "@react-native-harness/runtime": "1.0.0-alpha.25", "tslib": "^2.3.0" }, "bin": { "react-native-harness": "bin.js", "harness": "bin.js" } }, "sha512-vqkJThgFwxbPBYDWyih/a2ARL0roPl08ga45L968Sd/VnTTOWkfT7pPiKjpLCx0kkyH5Gf196G1yOPhkdh6Yhg=="], "react-native-is-edge-to-edge": ["react-native-is-edge-to-edge@1.2.1", "", { "peerDependencies": { "react": "*", "react-native": "*" } }, "sha512-FLbPWl/MyYQWz+KwqOZsSyj2JmLKglHatd3xLZWskXOpRaio4LfEDEz8E/A6uD8QoTHW6Aobw1jbEwK7KMgR7Q=="], - "react-native-keyboard-controller": ["react-native-keyboard-controller@1.20.7", "", { "dependencies": { "react-native-is-edge-to-edge": "^1.2.1" }, "peerDependencies": { "react": "*", "react-native": "*", "react-native-reanimated": ">=3.0.0" } }, "sha512-G8S5jz1FufPrcL1vPtReATx+jJhT/j+sTqxMIb30b1z7cYEfMlkIzOCyaHgf6IMB2KA9uBmnA5M6ve2A9Ou4kw=="], + "react-native-keyboard-controller": ["react-native-keyboard-controller@1.21.6", "", { "dependencies": { "react-native-is-edge-to-edge": "^1.2.1" }, "peerDependencies": { "react": "*", "react-native": "*", "react-native-reanimated": ">=3.0.0" } }, "sha512-nAXCmar/W8Gn4iQV7O5fAVuTh57JszCsqTS+cfR95WFOLR/AfbwfPz/+sWyz/q2SOIe2VpyQzq6hzYiwErhqqw=="], - "react-native-reanimated": ["react-native-reanimated@4.1.6", "", { "dependencies": { "react-native-is-edge-to-edge": "^1.2.1", "semver": "7.7.2" }, "peerDependencies": { "@babel/core": "^7.0.0-0", "react": "*", "react-native": "*", "react-native-worklets": ">=0.5.0" } }, "sha512-F+ZJBYiok/6Jzp1re75F/9aLzkgoQCOh4yxrnwATa8392RvM3kx+fiXXFvwcgE59v48lMwd9q0nzF1oJLXpfxQ=="], + "react-native-reanimated": ["react-native-reanimated@4.3.1", "", { "dependencies": { "react-native-is-edge-to-edge": "^1.3.1", "semver": "^7.7.3" }, "peerDependencies": { "react": "*", "react-native": "0.81 - 0.85", "react-native-worklets": "0.8.x" } }, "sha512-KhGsS0YkCA+gusgyzlf9hnqzVPIR398KTpqXyqq/+yYJJPAvyEEPKcxlB0xtOOXSMrR2A9uRKVARVQhZwrOh+Q=="], - "react-native-safe-area-context": ["react-native-safe-area-context@5.6.2", "", { "peerDependencies": { "react": "*", "react-native": "*" } }, "sha512-4XGqMNj5qjUTYywJqpdWZ9IG8jgkS3h06sfVjfw5yZQZfWnRFXczi0GnYyFyCc2EBps/qFmoCH8fez//WumdVg=="], + "react-native-safe-area-context": ["react-native-safe-area-context@5.7.0", "", { "peerDependencies": { "react": "*", "react-native": "*" } }, "sha512-/9/MtQz8ODphjsLdZ+GZAIcC/RtoqW9EeShf7Uvnfgm/pzYrJ75y3PV/J1wuAV1T5Dye5ygq4EAW20RoBq0ABQ=="], - "react-native-screens": ["react-native-screens@4.16.0", "", { "dependencies": { "react-freeze": "^1.0.0", "react-native-is-edge-to-edge": "^1.2.1", "warn-once": "^0.1.0" }, "peerDependencies": { "react": "*", "react-native": "*" } }, "sha512-yIAyh7F/9uWkOzCi1/2FqvNvK6Wb9Y1+Kzn16SuGfN9YFJDTbwlzGRvePCNTOX0recpLQF3kc2FmvMUhyTCH1Q=="], + "react-native-screens": ["react-native-screens@4.25.2", "", { "dependencies": { "react-freeze": "^1.0.0", "warn-once": "^0.1.0" }, "peerDependencies": { "react": "*", "react-native": ">=0.82.0" } }, "sha512-1Nj1fusFd+rIMKU/qC9yGKVG+3ofh11d3OdBQKL1iVvQfKvcB8vhvTGQf2TkfxW3bamxN+hCZIXmNuU0mRkyDg=="], "react-native-worklets": ["react-native-worklets@0.7.4", "", { "dependencies": { "@babel/plugin-transform-arrow-functions": "7.27.1", "@babel/plugin-transform-class-properties": "7.27.1", "@babel/plugin-transform-classes": "7.28.4", "@babel/plugin-transform-nullish-coalescing-operator": "7.27.1", "@babel/plugin-transform-optional-chaining": "7.27.1", "@babel/plugin-transform-shorthand-properties": "7.27.1", "@babel/plugin-transform-template-literals": "7.27.1", "@babel/plugin-transform-unicode-regex": "7.27.1", "@babel/preset-typescript": "7.27.1", "convert-source-map": "2.0.0", "semver": "7.7.3" }, "peerDependencies": { "@babel/core": "*", "react": "*", "react-native": "*" } }, "sha512-NYOdM1MwBb3n+AtMqy1tFy3Mn8DliQtd8sbzAVRf9Gc+uvQ0zRfxN7dS8ZzoyX7t6cyQL5THuGhlnX+iFlQTag=="], @@ -2104,14 +2106,16 @@ "eslint-plugin-import/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + "evals-testbench/expo": ["expo@56.0.12", "", { "dependencies": { "@babel/runtime": "^7.20.0", "@expo/cli": "^56.1.16", "@expo/config": "~56.0.9", "@expo/config-plugins": "~56.0.9", "@expo/devtools": "~56.0.2", "@expo/dom-webview": "~56.0.5", "@expo/fingerprint": "^0.19.4", "@expo/local-build-cache-provider": "^56.0.8", "@expo/log-box": "^56.0.13", "@expo/metro": "~56.0.0", "@expo/metro-config": "~56.0.14", "@ungap/structured-clone": "^1.3.0", "babel-preset-expo": "~56.0.15", "expo-asset": "~56.0.17", "expo-constants": "~56.0.18", "expo-file-system": "~56.0.8", "expo-font": "~56.0.7", "expo-keep-awake": "~56.0.3", "expo-modules-autolinking": "~56.0.16", "expo-modules-core": "~56.0.17", "pretty-format": "^29.7.0", "react-refresh": "^0.14.2", "whatwg-url-minimum": "^0.1.2" }, "peerDependencies": { "@expo/metro-runtime": "*", "react": "*", "react-dom": "*", "react-native": "*", "react-native-web": "*", "react-native-webview": "*" }, "optionalPeers": ["@expo/metro-runtime", "react-dom", "react-native-web", "react-native-webview"], "bin": { "expo": "bin/cli", "fingerprint": "bin/fingerprint", "expo-modules-autolinking": "bin/autolinking" } }, "sha512-FxgdI/Yqva6iJOThZIHfvxlKPxs4EC4uScUnEswwSArR/Fj9k430O13R590LcOQTsdNsjIs+GBHwjfoAY6vmAQ=="], + + "evals-testbench/typescript": ["typescript@6.0.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw=="], + "execa/onetime": ["onetime@5.1.2", "", { "dependencies": { "mimic-fn": "^2.1.0" } }, "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg=="], "expo-modules-autolinking/commander": ["commander@7.2.0", "", {}, "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw=="], "expo-router/nanoid": ["nanoid@3.3.12", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ=="], - "expo-router/react-native-screens": ["react-native-screens@4.25.2", "", { "dependencies": { "react-freeze": "^1.0.0", "warn-once": "^0.1.0" }, "peerDependencies": { "react": "*", "react-native": ">=0.82.0" } }, "sha512-1Nj1fusFd+rIMKU/qC9yGKVG+3ofh11d3OdBQKL1iVvQfKvcB8vhvTGQf2TkfxW3bamxN+hCZIXmNuU0mRkyDg=="], - "fast-glob/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], "finalhandler/debug": ["debug@2.6.9", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="], @@ -2222,7 +2226,7 @@ "react-dom/react": ["react@19.2.4", "", {}, "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ=="], - "react-native-reanimated/semver": ["semver@7.7.2", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA=="], + "react-native-reanimated/react-native-is-edge-to-edge": ["react-native-is-edge-to-edge@1.3.1", "", { "peerDependencies": { "react": "*", "react-native": "*" } }, "sha512-NIXU/iT5+ORyCc7p0z2nnlkouYKX425vuU1OEm6bMMtWWR9yvb+Xg5AZmImTKoF9abxCPqrKC3rOZsKzUYgYZA=="], "react-native-worklets/@babel/plugin-transform-class-properties": ["@babel/plugin-transform-class-properties@7.27.1", "", { "dependencies": { "@babel/helper-create-class-features-plugin": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA=="], @@ -2330,6 +2334,16 @@ "eslint-plugin-expo/@typescript-eslint/utils/@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.55.0", "", { "dependencies": { "@typescript-eslint/project-service": "8.55.0", "@typescript-eslint/tsconfig-utils": "8.55.0", "@typescript-eslint/types": "8.55.0", "@typescript-eslint/visitor-keys": "8.55.0", "debug": "^4.4.3", "minimatch": "^9.0.5", "semver": "^7.7.3", "tinyglobby": "^0.2.15", "ts-api-utils": "^2.4.0" }, "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-EwrH67bSWdx/3aRQhCoxDaHM+CrZjotc2UCCpEDVqfCE+7OjKAGWNY2HsCSTEVvWH2clYQK8pdeLp42EVs+xQw=="], + "evals-testbench/expo/@expo/cli": ["@expo/cli@56.1.16", "", { "dependencies": { "@expo/code-signing-certificates": "^0.0.6", "@expo/config": "~56.0.9", "@expo/config-plugins": "~56.0.9", "@expo/devcert": "^1.2.1", "@expo/env": "~2.3.0", "@expo/image-utils": "^0.10.1", "@expo/inline-modules": "^0.0.12", "@expo/json-file": "^10.2.0", "@expo/log-box": "^56.0.13", "@expo/metro": "~56.0.0", "@expo/metro-config": "~56.0.14", "@expo/metro-file-map": "^56.0.3", "@expo/osascript": "^2.6.0", "@expo/package-manager": "^1.12.1", "@expo/plist": "^0.7.0", "@expo/prebuild-config": "^56.0.16", "@expo/require-utils": "^56.1.3", "@expo/router-server": "^56.0.14", "@expo/schema-utils": "^56.0.0", "@expo/spawn-async": "^1.8.0", "@expo/ws-tunnel": "^2.0.0", "@expo/xcpretty": "^4.4.4", "@react-native/dev-middleware": "0.85.3", "accepts": "^1.3.8", "arg": "^5.0.2", "bplist-creator": "0.1.0", "bplist-parser": "^0.3.1", "chalk": "^4.0.0", "ci-info": "^3.3.0", "compression": "^1.7.4", "connect": "^3.7.0", "debug": "^4.3.4", "dnssd-advertise": "^1.1.4", "expo-server": "^56.0.5", "fetch-nodeshim": "^0.4.10", "getenv": "^2.0.0", "glob": "^13.0.0", "lan-network": "^0.2.1", "multitars": "^1.0.0", "node-forge": "^1.3.3", "npm-package-arg": "^11.0.0", "ora": "^3.4.0", "picomatch": "^4.0.4", "pretty-format": "^29.7.0", "progress": "^2.0.3", "prompts": "^2.3.2", "resolve-from": "^5.0.0", "semver": "^7.6.0", "send": "^0.19.0", "slugify": "^1.3.4", "stacktrace-parser": "^0.1.10", "structured-headers": "^0.4.1", "terminal-link": "^2.1.1", "toqr": "^0.1.1", "wrap-ansi": "^7.0.0", "ws": "^8.12.1", "zod": "^3.25.76" }, "peerDependencies": { "expo": "*", "expo-router": "*", "react-native": "*" }, "optionalPeers": ["expo-router", "react-native"], "bin": { "expo-internal": "main.js" } }, "sha512-VBQn0mqAwc67b9Cn0RVXyeodghomAx5xGRhA/bXaQzuxDjMQk0zIOb6pXMZX7yiIwJW66UZt/zQiJNSv6aWJYw=="], + + "evals-testbench/expo/@expo/config-plugins": ["@expo/config-plugins@56.0.9", "", { "dependencies": { "@expo/config-types": "^56.0.6", "@expo/json-file": "~10.2.0", "@expo/plist": "^0.7.0", "@expo/require-utils": "^56.1.3", "@expo/sdk-runtime-versions": "^1.0.0", "chalk": "^4.1.2", "debug": "^4.3.5", "getenv": "^2.0.0", "glob": "^13.0.0", "semver": "^7.5.4", "slugify": "^1.6.6", "xcode": "^3.0.1", "xml2js": "0.6.0" } }, "sha512-/6a/S9USwx8OC9tGjHxbviLFiBHyueN3aoNWMLvWDEJoZ1CIVW800ZBzwXq/FYNK2qzcN1LxFmQtzD1zeFQKNA=="], + + "evals-testbench/expo/expo-font": ["expo-font@56.0.7", "", { "dependencies": { "fontfaceobserver": "^2.1.0" }, "peerDependencies": { "expo": "*", "react": "*", "react-native": "*" } }, "sha512-hpU/vRwPzsby9lPGkA4blDqLIIXYzoWnCZHr6PxvcWbY/uPObAiyhh6q+e0WYsB65SthK+PLH95jEnVag7fwEg=="], + + "evals-testbench/expo/expo-modules-autolinking": ["expo-modules-autolinking@56.0.16", "", { "dependencies": { "@expo/require-utils": "^56.1.3", "@expo/spawn-async": "^1.8.0", "chalk": "^4.1.0", "commander": "^7.2.0" }, "bin": { "expo-modules-autolinking": "bin/expo-modules-autolinking.js" } }, "sha512-9JnL4N46P8ubDpDIfWolDn7nxU2j1rY67xY/dNVuyH0m+HG+r/JI16VYtjIf4COpZtEuFo4D3h3MBeFzGucMnw=="], + + "evals-testbench/expo/expo-modules-core": ["expo-modules-core@56.0.17", "", { "dependencies": { "@expo/expo-modules-macros-plugin": "0.2.2", "expo-modules-jsi": "~56.0.10", "invariant": "^2.2.4" }, "peerDependencies": { "react": "*", "react-native": "*", "react-native-worklets": "^0.7.4 || ^0.8.0" }, "optionalPeers": ["react-native-worklets"] }, "sha512-5J8whnT7Ccp+BrFClLmpF76omBqn95VZExroTm01Dgjm4vpty1Rb7U3we+ZUceNHtRd07Lw30u7FNfDgIhEbRQ=="], + "execa/onetime/mimic-fn": ["mimic-fn@2.1.0", "", {}, "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="], "finalhandler/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], @@ -2460,6 +2474,20 @@ "eslint-plugin-expo/@typescript-eslint/utils/@typescript-eslint/typescript-estree/ts-api-utils": ["ts-api-utils@2.4.0", "", { "peerDependencies": { "typescript": ">=4.8.4" } }, "sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA=="], + "evals-testbench/expo/@expo/cli/@expo/inline-modules": ["@expo/inline-modules@0.0.12", "", { "dependencies": { "@expo/config-plugins": "~56.0.9" } }, "sha512-SNIZr/HWfIQPTZBwmukItxpc7ws1SgMUywYq1dnQvDknQDjJcuWAasIRFUjsK15yQ1xb4G5CP7VHtbN3V4lENg=="], + + "evals-testbench/expo/@expo/cli/@expo/prebuild-config": ["@expo/prebuild-config@56.0.16", "", { "dependencies": { "@expo/config": "~56.0.9", "@expo/config-plugins": "~56.0.9", "@expo/config-types": "^56.0.6", "@expo/image-utils": "^0.10.1", "@expo/json-file": "^10.2.0", "@react-native/normalize-colors": "0.85.3", "debug": "^4.3.1", "expo-modules-autolinking": "~56.0.16", "resolve-from": "^5.0.0", "semver": "^7.6.0" } }, "sha512-ce9ENfPWO4WUWUVQz0OaqL3KYZ7YofP8O35ncnn7CHCaKwQ7BqxcCGJbh+qvP1UjlWeNB3CjHPrXXJ3bnZwlJw=="], + + "evals-testbench/expo/@expo/cli/arg": ["arg@5.0.2", "", {}, "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg=="], + + "evals-testbench/expo/@expo/cli/ws": ["ws@8.19.0", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg=="], + + "evals-testbench/expo/@expo/config-plugins/@expo/config-types": ["@expo/config-types@56.0.6", "", {}, "sha512-4Y6Aum5J4Re5NnxGVofRNe1aDwUBOmWhQYkynZsqzRtX/zEA1ADUeyHXuEckv9YD9djiyT7bKtLt5gKL3mA6VQ=="], + + "evals-testbench/expo/expo-modules-autolinking/commander": ["commander@7.2.0", "", {}, "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw=="], + + "evals-testbench/expo/expo-modules-core/expo-modules-jsi": ["expo-modules-jsi@56.0.10", "", { "peerDependencies": { "react-native": "*" } }, "sha512-fHZcFpYO/o62GYa6fJyAQJZcAShzhoN0iMMDzbr7vD3ewET6e1vAlTonbEakN9F0VHEgBFJ4NREy87uwVcpCuA=="], + "glob/minimatch/brace-expansion/balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="], "jest-circus/pretty-format/@jest/schemas/@sinclair/typebox": ["@sinclair/typebox@0.34.48", "", {}, "sha512-kKJTNuK3AQOrgjjotVxMrCn1sUJwM76wMszfq1kdU4uYVJjvEWuFQ6HgvLt4Xz3fSmZlTOxJ/Ie13KnIcWQXFA=="], @@ -2518,6 +2546,8 @@ "eslint-plugin-expo/@typescript-eslint/utils/@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], + "evals-testbench/expo/@expo/cli/@expo/prebuild-config/@expo/config-types": ["@expo/config-types@56.0.6", "", {}, "sha512-4Y6Aum5J4Re5NnxGVofRNe1aDwUBOmWhQYkynZsqzRtX/zEA1ADUeyHXuEckv9YD9djiyT7bKtLt5gKL3mA6VQ=="], + "jest-cli/jest-validate/pretty-format/@jest/schemas/@sinclair/typebox": ["@sinclair/typebox@0.34.48", "", {}, "sha512-kKJTNuK3AQOrgjjotVxMrCn1sUJwM76wMszfq1kdU4uYVJjvEWuFQ6HgvLt4Xz3fSmZlTOxJ/Ie13KnIcWQXFA=="], "jest-environment-node/jest-validate/pretty-format/@jest/schemas/@sinclair/typebox": ["@sinclair/typebox@0.34.48", "", {}, "sha512-kKJTNuK3AQOrgjjotVxMrCn1sUJwM76wMszfq1kdU4uYVJjvEWuFQ6HgvLt4Xz3fSmZlTOxJ/Ie13KnIcWQXFA=="], diff --git a/evals/expo-modules/01-rn-expo-modules-inline-config/app/INLINE_MODULES.md b/evals/expo-modules/01-rn-expo-modules-inline-config/app/INLINE_MODULES.md new file mode 100644 index 00000000..66ce1cf2 --- /dev/null +++ b/evals/expo-modules/01-rn-expo-modules-inline-config/app/INLINE_MODULES.md @@ -0,0 +1,3 @@ +# Inline Modules + +Add any build or prebuild notes for inline module config changes here. diff --git a/evals/expo-modules/01-rn-expo-modules-inline-config/app/app.json b/evals/expo-modules/01-rn-expo-modules-inline-config/app/app.json new file mode 100644 index 00000000..ade285c8 --- /dev/null +++ b/evals/expo-modules/01-rn-expo-modules-inline-config/app/app.json @@ -0,0 +1,5 @@ +{ + "expo": { + "experiments": {} + } +} diff --git a/evals/expo-modules/01-rn-expo-modules-inline-config/app/src/modules/DeviceAuditModule.kt b/evals/expo-modules/01-rn-expo-modules-inline-config/app/src/modules/DeviceAuditModule.kt new file mode 100644 index 00000000..8578ba71 --- /dev/null +++ b/evals/expo-modules/01-rn-expo-modules-inline-config/app/src/modules/DeviceAuditModule.kt @@ -0,0 +1,3 @@ +package expo.modules.deviceaudit + +// Replace with an Expo ModuleDefinition inline module. diff --git a/evals/expo-modules/01-rn-expo-modules-inline-config/reference/INLINE_MODULES.md b/evals/expo-modules/01-rn-expo-modules-inline-config/reference/INLINE_MODULES.md new file mode 100644 index 00000000..1d318895 --- /dev/null +++ b/evals/expo-modules/01-rn-expo-modules-inline-config/reference/INLINE_MODULES.md @@ -0,0 +1,3 @@ +# Inline Modules + +Changing `expo.experiments.inlineModules` or its `watchedDirectories` requires regenerating the native project with `npx expo prebuild` or rebuilding the development client so the generated module providers include the inline module. diff --git a/evals/expo-modules/01-rn-expo-modules-inline-config/requirements.yaml b/evals/expo-modules/01-rn-expo-modules-inline-config/requirements.yaml index 4bdefe3b..226feb13 100644 --- a/evals/expo-modules/01-rn-expo-modules-inline-config/requirements.yaml +++ b/evals/expo-modules/01-rn-expo-modules-inline-config/requirements.yaml @@ -2,6 +2,9 @@ version: 1 inputs: files: - app/App.tsx + - app/INLINE_MODULES.md + - app/app.json + - app/src/modules/DeviceAuditModule.kt requirements: - id: inline-modules-enabled description: "Must set expo.experiments.inlineModules in app config." diff --git a/evals/expo-modules/02-rn-expo-modules-inline-watched-directories-rules/app/app.json b/evals/expo-modules/02-rn-expo-modules-inline-watched-directories-rules/app/app.json new file mode 100644 index 00000000..7051eb71 --- /dev/null +++ b/evals/expo-modules/02-rn-expo-modules-inline-watched-directories-rules/app/app.json @@ -0,0 +1,9 @@ +{ + "expo": { + "experiments": { + "inlineModules": { + "watchedDirectories": [] + } + } + } +} diff --git a/evals/expo-modules/02-rn-expo-modules-inline-watched-directories-rules/app/src/modules/DirectoryAuditModule.kt b/evals/expo-modules/02-rn-expo-modules-inline-watched-directories-rules/app/src/modules/DirectoryAuditModule.kt new file mode 100644 index 00000000..61f46aca --- /dev/null +++ b/evals/expo-modules/02-rn-expo-modules-inline-watched-directories-rules/app/src/modules/DirectoryAuditModule.kt @@ -0,0 +1,3 @@ +package expo.modules.directoryaudit + +// Add the inline module inside a valid watched project subdirectory. diff --git a/evals/expo-modules/02-rn-expo-modules-inline-watched-directories-rules/requirements.yaml b/evals/expo-modules/02-rn-expo-modules-inline-watched-directories-rules/requirements.yaml index a001d3c1..7c1a1773 100644 --- a/evals/expo-modules/02-rn-expo-modules-inline-watched-directories-rules/requirements.yaml +++ b/evals/expo-modules/02-rn-expo-modules-inline-watched-directories-rules/requirements.yaml @@ -2,6 +2,8 @@ version: 1 inputs: files: - app/App.tsx + - app/app.json + - app/src/modules/DirectoryAuditModule.kt requirements: - id: watched-directories-valid description: "Must configure watchedDirectories as project subdirectories, not ./, /, ../, or parent directories." diff --git a/evals/expo-modules/03-rn-expo-modules-swift-name-match/app/index.ts b/evals/expo-modules/03-rn-expo-modules-swift-name-match/app/index.ts new file mode 100644 index 00000000..47a4aea8 --- /dev/null +++ b/evals/expo-modules/03-rn-expo-modules-swift-name-match/app/index.ts @@ -0,0 +1 @@ +// Export the inline Swift module wrapper from here. diff --git a/evals/expo-modules/03-rn-expo-modules-swift-name-match/app/modules/WeatherInlineModule.swift b/evals/expo-modules/03-rn-expo-modules-swift-name-match/app/modules/WeatherInlineModule.swift new file mode 100644 index 00000000..c30d2df0 --- /dev/null +++ b/evals/expo-modules/03-rn-expo-modules-swift-name-match/app/modules/WeatherInlineModule.swift @@ -0,0 +1,3 @@ +import ExpoModulesCore + +// Replace with a Swift inline module whose file, class, and Name match. diff --git a/evals/expo-modules/03-rn-expo-modules-swift-name-match/requirements.yaml b/evals/expo-modules/03-rn-expo-modules-swift-name-match/requirements.yaml index b5a33850..38326bf1 100644 --- a/evals/expo-modules/03-rn-expo-modules-swift-name-match/requirements.yaml +++ b/evals/expo-modules/03-rn-expo-modules-swift-name-match/requirements.yaml @@ -2,6 +2,8 @@ version: 1 inputs: files: - app/App.tsx + - app/index.ts + - app/modules/WeatherInlineModule.swift requirements: - id: swift-file-class-match description: "Must make the Swift file name match the Swift module class name." diff --git a/evals/expo-modules/04-rn-expo-modules-kotlin-name-match/app/index.ts b/evals/expo-modules/04-rn-expo-modules-kotlin-name-match/app/index.ts new file mode 100644 index 00000000..f70fcc2a --- /dev/null +++ b/evals/expo-modules/04-rn-expo-modules-kotlin-name-match/app/index.ts @@ -0,0 +1 @@ +// Export the inline Kotlin module wrapper from here. diff --git a/evals/expo-modules/04-rn-expo-modules-kotlin-name-match/app/modules/WeatherInlineModule.kt b/evals/expo-modules/04-rn-expo-modules-kotlin-name-match/app/modules/WeatherInlineModule.kt new file mode 100644 index 00000000..763c209d --- /dev/null +++ b/evals/expo-modules/04-rn-expo-modules-kotlin-name-match/app/modules/WeatherInlineModule.kt @@ -0,0 +1,3 @@ +package expo.modules.weatherinline + +// Replace with a Kotlin inline module whose file, class, and Name match. diff --git a/evals/expo-modules/04-rn-expo-modules-kotlin-name-match/requirements.yaml b/evals/expo-modules/04-rn-expo-modules-kotlin-name-match/requirements.yaml index 17be49b6..cdced043 100644 --- a/evals/expo-modules/04-rn-expo-modules-kotlin-name-match/requirements.yaml +++ b/evals/expo-modules/04-rn-expo-modules-kotlin-name-match/requirements.yaml @@ -2,6 +2,8 @@ version: 1 inputs: files: - app/App.tsx + - app/index.ts + - app/modules/WeatherInlineModule.kt requirements: - id: kotlin-file-class-match description: "Must make the Kotlin file name match the Kotlin module class name." diff --git a/evals/expo-modules/05-rn-expo-modules-require-native-module-wrapper/app/src/NativeDeviceAudit.ts b/evals/expo-modules/05-rn-expo-modules-require-native-module-wrapper/app/src/NativeDeviceAudit.ts new file mode 100644 index 00000000..532936e2 --- /dev/null +++ b/evals/expo-modules/05-rn-expo-modules-require-native-module-wrapper/app/src/NativeDeviceAudit.ts @@ -0,0 +1 @@ +// Wrap the native module with requireNativeModule and export typed helpers. diff --git a/evals/expo-modules/05-rn-expo-modules-require-native-module-wrapper/app/src/index.ts b/evals/expo-modules/05-rn-expo-modules-require-native-module-wrapper/app/src/index.ts new file mode 100644 index 00000000..cb46f69e --- /dev/null +++ b/evals/expo-modules/05-rn-expo-modules-require-native-module-wrapper/app/src/index.ts @@ -0,0 +1 @@ +// Re-export the public JS helper from here. diff --git a/evals/expo-modules/05-rn-expo-modules-require-native-module-wrapper/requirements.yaml b/evals/expo-modules/05-rn-expo-modules-require-native-module-wrapper/requirements.yaml index ba312aff..9cb47540 100644 --- a/evals/expo-modules/05-rn-expo-modules-require-native-module-wrapper/requirements.yaml +++ b/evals/expo-modules/05-rn-expo-modules-require-native-module-wrapper/requirements.yaml @@ -2,6 +2,8 @@ version: 1 inputs: files: - app/App.tsx + - app/src/NativeDeviceAudit.ts + - app/src/index.ts requirements: - id: uses-require-native-module description: "Must import requireNativeModule from expo-modules-core." diff --git a/evals/expo-modules/06-rn-expo-modules-inline-view-events-props/app/ios/AuditLabelModule.swift b/evals/expo-modules/06-rn-expo-modules-inline-view-events-props/app/ios/AuditLabelModule.swift new file mode 100644 index 00000000..155a9093 --- /dev/null +++ b/evals/expo-modules/06-rn-expo-modules-inline-view-events-props/app/ios/AuditLabelModule.swift @@ -0,0 +1,3 @@ +import ExpoModulesCore + +// Define the native module and its View(...) declaration here. diff --git a/evals/expo-modules/06-rn-expo-modules-inline-view-events-props/app/ios/AuditLabelView.swift b/evals/expo-modules/06-rn-expo-modules-inline-view-events-props/app/ios/AuditLabelView.swift new file mode 100644 index 00000000..8ed87882 --- /dev/null +++ b/evals/expo-modules/06-rn-expo-modules-inline-view-events-props/app/ios/AuditLabelView.swift @@ -0,0 +1,3 @@ +import ExpoModulesCore + +// Define the ExpoView subclass used by the module. diff --git a/evals/expo-modules/06-rn-expo-modules-inline-view-events-props/app/src/AuditLabel.tsx b/evals/expo-modules/06-rn-expo-modules-inline-view-events-props/app/src/AuditLabel.tsx new file mode 100644 index 00000000..beaa7ac0 --- /dev/null +++ b/evals/expo-modules/06-rn-expo-modules-inline-view-events-props/app/src/AuditLabel.tsx @@ -0,0 +1 @@ +// Wrap the native view manager and expose typed props/events. diff --git a/evals/expo-modules/06-rn-expo-modules-inline-view-events-props/requirements.yaml b/evals/expo-modules/06-rn-expo-modules-inline-view-events-props/requirements.yaml index de8dafa1..22c182c6 100644 --- a/evals/expo-modules/06-rn-expo-modules-inline-view-events-props/requirements.yaml +++ b/evals/expo-modules/06-rn-expo-modules-inline-view-events-props/requirements.yaml @@ -2,6 +2,9 @@ version: 1 inputs: files: - app/App.tsx + - app/ios/AuditLabelModule.swift + - app/ios/AuditLabelView.swift + - app/src/AuditLabel.tsx requirements: - id: view-definition-used description: "Must define a View(...) in the native module definition." diff --git a/evals/expo-modules/07-rn-expo-modules-typegen-stable-generated-files/app/build/index.d.ts b/evals/expo-modules/07-rn-expo-modules-typegen-stable-generated-files/app/build/index.d.ts new file mode 100644 index 00000000..9033df27 --- /dev/null +++ b/evals/expo-modules/07-rn-expo-modules-typegen-stable-generated-files/app/build/index.d.ts @@ -0,0 +1 @@ +// Commit generated public TypeScript declarations here. diff --git a/evals/expo-modules/07-rn-expo-modules-typegen-stable-generated-files/app/expo-module.config.json b/evals/expo-modules/07-rn-expo-modules-typegen-stable-generated-files/app/expo-module.config.json new file mode 100644 index 00000000..bb030e50 --- /dev/null +++ b/evals/expo-modules/07-rn-expo-modules-typegen-stable-generated-files/app/expo-module.config.json @@ -0,0 +1,5 @@ +{ + "platforms": ["apple", "android"], + "apple": { "modules": ["AuditModule"] }, + "android": { "modules": ["expo.modules.audit.AuditModule"] } +} diff --git a/evals/expo-modules/07-rn-expo-modules-typegen-stable-generated-files/app/src/index.ts b/evals/expo-modules/07-rn-expo-modules-typegen-stable-generated-files/app/src/index.ts new file mode 100644 index 00000000..83716f6c --- /dev/null +++ b/evals/expo-modules/07-rn-expo-modules-typegen-stable-generated-files/app/src/index.ts @@ -0,0 +1 @@ +// Export public runtime helpers and public TypeScript types from here. diff --git a/evals/expo-modules/07-rn-expo-modules-typegen-stable-generated-files/requirements.yaml b/evals/expo-modules/07-rn-expo-modules-typegen-stable-generated-files/requirements.yaml index 85c0c136..6523b180 100644 --- a/evals/expo-modules/07-rn-expo-modules-typegen-stable-generated-files/requirements.yaml +++ b/evals/expo-modules/07-rn-expo-modules-typegen-stable-generated-files/requirements.yaml @@ -2,6 +2,9 @@ version: 1 inputs: files: - app/App.tsx + - app/build/index.d.ts + - app/expo-module.config.json + - app/src/index.ts requirements: - id: expo-module-config-platforms description: "Must keep expo-module.config.json platforms and module class names explicit." diff --git a/evals/expo-modules/08-rn-expo-modules-config-plugin-permissions/app/app.config.ts b/evals/expo-modules/08-rn-expo-modules-config-plugin-permissions/app/app.config.ts new file mode 100644 index 00000000..607d4885 --- /dev/null +++ b/evals/expo-modules/08-rn-expo-modules-config-plugin-permissions/app/app.config.ts @@ -0,0 +1,5 @@ +export default { + expo: { + plugins: [], + }, +} diff --git a/evals/expo-modules/08-rn-expo-modules-config-plugin-permissions/app/plugin/withAuditPermissions.ts b/evals/expo-modules/08-rn-expo-modules-config-plugin-permissions/app/plugin/withAuditPermissions.ts new file mode 100644 index 00000000..a94a94f6 --- /dev/null +++ b/evals/expo-modules/08-rn-expo-modules-config-plugin-permissions/app/plugin/withAuditPermissions.ts @@ -0,0 +1 @@ +// Export a ConfigPlugin that writes iOS and Android permission config. diff --git a/evals/expo-modules/08-rn-expo-modules-config-plugin-permissions/requirements.yaml b/evals/expo-modules/08-rn-expo-modules-config-plugin-permissions/requirements.yaml index b5027555..3bb8e6c9 100644 --- a/evals/expo-modules/08-rn-expo-modules-config-plugin-permissions/requirements.yaml +++ b/evals/expo-modules/08-rn-expo-modules-config-plugin-permissions/requirements.yaml @@ -2,6 +2,8 @@ version: 1 inputs: files: - app/App.tsx + - app/app.config.ts + - app/plugin/withAuditPermissions.ts requirements: - id: config-plugin-export description: "Must export a ConfigPlugin from the plugin file." diff --git a/evals/expo-modules/09-rn-expo-modules-create-module-noninteractive/app/README.md b/evals/expo-modules/09-rn-expo-modules-create-module-noninteractive/app/README.md new file mode 100644 index 00000000..3ff5d04a --- /dev/null +++ b/evals/expo-modules/09-rn-expo-modules-create-module-noninteractive/app/README.md @@ -0,0 +1,3 @@ +# expo-audit-module scaffold + +Document the deterministic noninteractive module scaffold here. diff --git a/evals/expo-modules/09-rn-expo-modules-create-module-noninteractive/app/scripts/create-module.sh b/evals/expo-modules/09-rn-expo-modules-create-module-noninteractive/app/scripts/create-module.sh new file mode 100644 index 00000000..b4f2fcd8 --- /dev/null +++ b/evals/expo-modules/09-rn-expo-modules-create-module-noninteractive/app/scripts/create-module.sh @@ -0,0 +1,4 @@ +#!/usr/bin/env bash +set -euo pipefail + +# Replace with a noninteractive create-expo-module command. diff --git a/evals/expo-modules/09-rn-expo-modules-create-module-noninteractive/requirements.yaml b/evals/expo-modules/09-rn-expo-modules-create-module-noninteractive/requirements.yaml index 2324e340..54cd3db9 100644 --- a/evals/expo-modules/09-rn-expo-modules-create-module-noninteractive/requirements.yaml +++ b/evals/expo-modules/09-rn-expo-modules-create-module-noninteractive/requirements.yaml @@ -2,6 +2,8 @@ version: 1 inputs: files: - app/App.tsx + - app/README.md + - app/scripts/create-module.sh requirements: - id: noninteractive-command description: "Must provide a noninteractive create-expo-module command or script." diff --git a/evals/expo-modules/10-rn-expo-modules-add-platform-support/app/expo-module.config.json b/evals/expo-modules/10-rn-expo-modules-add-platform-support/app/expo-module.config.json new file mode 100644 index 00000000..bb030e50 --- /dev/null +++ b/evals/expo-modules/10-rn-expo-modules-add-platform-support/app/expo-module.config.json @@ -0,0 +1,5 @@ +{ + "platforms": ["apple", "android"], + "apple": { "modules": ["AuditModule"] }, + "android": { "modules": ["expo.modules.audit.AuditModule"] } +} diff --git a/evals/expo-modules/10-rn-expo-modules-add-platform-support/app/src/AuditModule.ts b/evals/expo-modules/10-rn-expo-modules-add-platform-support/app/src/AuditModule.ts new file mode 100644 index 00000000..1dc8e5c7 --- /dev/null +++ b/evals/expo-modules/10-rn-expo-modules-add-platform-support/app/src/AuditModule.ts @@ -0,0 +1,7 @@ +import { requireNativeModule } from 'expo-modules-core' + +export type AuditModule = { + getPlatform(): string +} + +export default requireNativeModule('AuditModule') diff --git a/evals/expo-modules/10-rn-expo-modules-add-platform-support/app/src/index.ts b/evals/expo-modules/10-rn-expo-modules-add-platform-support/app/src/index.ts new file mode 100644 index 00000000..837598e4 --- /dev/null +++ b/evals/expo-modules/10-rn-expo-modules-add-platform-support/app/src/index.ts @@ -0,0 +1,7 @@ +import AuditModule from './AuditModule' + +export function getPlatform() { + return AuditModule.getPlatform() +} + +export default AuditModule diff --git a/evals/expo-modules/10-rn-expo-modules-add-platform-support/reference/expo-module.config.json b/evals/expo-modules/10-rn-expo-modules-add-platform-support/reference/expo-module.config.json index 497ef4df..a037d2f3 100644 --- a/evals/expo-modules/10-rn-expo-modules-add-platform-support/reference/expo-module.config.json +++ b/evals/expo-modules/10-rn-expo-modules-add-platform-support/reference/expo-module.config.json @@ -1,6 +1,5 @@ { - "platforms": ["ios", "android", "web"], - "ios": { "modules": ["AuditModule"] }, - "android": { "modules": ["expo.modules.audit.AuditModule"] }, - "web": { "modules": ["src/AuditModule.web.ts"] } + "platforms": ["apple", "android", "web"], + "apple": { "modules": ["AuditModule"] }, + "android": { "modules": ["expo.modules.audit.AuditModule"] } } diff --git a/evals/expo-modules/10-rn-expo-modules-add-platform-support/reference/src/AuditModule.ts b/evals/expo-modules/10-rn-expo-modules-add-platform-support/reference/src/AuditModule.ts new file mode 100644 index 00000000..1dc8e5c7 --- /dev/null +++ b/evals/expo-modules/10-rn-expo-modules-add-platform-support/reference/src/AuditModule.ts @@ -0,0 +1,7 @@ +import { requireNativeModule } from 'expo-modules-core' + +export type AuditModule = { + getPlatform(): string +} + +export default requireNativeModule('AuditModule') diff --git a/evals/expo-modules/10-rn-expo-modules-add-platform-support/reference/src/AuditModule.web.ts b/evals/expo-modules/10-rn-expo-modules-add-platform-support/reference/src/AuditModule.web.ts index f3ab2d43..a1a9ba3a 100644 --- a/evals/expo-modules/10-rn-expo-modules-add-platform-support/reference/src/AuditModule.web.ts +++ b/evals/expo-modules/10-rn-expo-modules-add-platform-support/reference/src/AuditModule.web.ts @@ -1,5 +1,9 @@ -export default { +import type { AuditModule } from './AuditModule' + +const AuditModuleWeb: AuditModule = { getPlatform() { return 'web' }, } + +export default AuditModuleWeb diff --git a/evals/expo-modules/10-rn-expo-modules-add-platform-support/reference/src/index.ts b/evals/expo-modules/10-rn-expo-modules-add-platform-support/reference/src/index.ts index 7721ee50..837598e4 100644 --- a/evals/expo-modules/10-rn-expo-modules-add-platform-support/reference/src/index.ts +++ b/evals/expo-modules/10-rn-expo-modules-add-platform-support/reference/src/index.ts @@ -1,7 +1,7 @@ -import { requireNativeModule } from 'expo-modules-core' +import AuditModule from './AuditModule' -type AuditModule = { - getPlatform(): string +export function getPlatform() { + return AuditModule.getPlatform() } -export default requireNativeModule('AuditModule') +export default AuditModule diff --git a/evals/expo-modules/10-rn-expo-modules-add-platform-support/requirements.yaml b/evals/expo-modules/10-rn-expo-modules-add-platform-support/requirements.yaml index b313f88c..3bcc9204 100644 --- a/evals/expo-modules/10-rn-expo-modules-add-platform-support/requirements.yaml +++ b/evals/expo-modules/10-rn-expo-modules-add-platform-support/requirements.yaml @@ -2,12 +2,15 @@ version: 1 inputs: files: - app/App.tsx + - app/expo-module.config.json + - app/src/AuditModule.ts + - app/src/index.ts requirements: - id: platform-added-to-config - description: "Must add the new platform to expo-module.config.json." + description: "Must add web to expo-module.config.json platforms without adding an unsupported web.modules block." - id: platform-implementation-file - description: "Must include an implementation file for the added platform." + description: "Must include a .web.ts implementation file for the added platform." - id: js-export-preserved - description: "Must preserve the JS/TS public export surface." + description: "Must preserve the JS/TS public export surface and route exports through a platform-resolved module file." - id: autolinking-not-broken - description: "Must not remove existing iOS/Android autolinking module declarations while adding the new platform." + description: "Must not remove existing Apple/iOS or Android native module declarations while adding web." diff --git a/evals/expo-router/09-rn-expo-router-data-loaders-config/app/app.json b/evals/expo-router/09-rn-expo-router-data-loaders-config/app/app.json new file mode 100644 index 00000000..d5f9f747 --- /dev/null +++ b/evals/expo-router/09-rn-expo-router-data-loaders-config/app/app.json @@ -0,0 +1,8 @@ +{ + "expo": { + "plugins": ["expo-router"], + "web": { + "bundler": "metro" + } + } +} diff --git a/evals/expo-router/09-rn-expo-router-data-loaders-config/reference/app.json b/evals/expo-router/09-rn-expo-router-data-loaders-config/reference/app.json index ceca201d..cd134733 100644 --- a/evals/expo-router/09-rn-expo-router-data-loaders-config/reference/app.json +++ b/evals/expo-router/09-rn-expo-router-data-loaders-config/reference/app.json @@ -1,7 +1,13 @@ { "expo": { "plugins": [ - ["expo-router", { "asyncRoutes": true }] + [ + "expo-router", + { + "unstable_useServerDataLoaders": true, + "unstable_useServerRendering": true + } + ] ], "web": { "bundler": "metro", diff --git a/evals/expo-router/09-rn-expo-router-data-loaders-config/requirements.yaml b/evals/expo-router/09-rn-expo-router-data-loaders-config/requirements.yaml index a3019503..46116e76 100644 --- a/evals/expo-router/09-rn-expo-router-data-loaders-config/requirements.yaml +++ b/evals/expo-router/09-rn-expo-router-data-loaders-config/requirements.yaml @@ -1,6 +1,7 @@ version: 1 inputs: files: + - app/app.json - app/_layout.tsx - app/index.tsx requirements: @@ -9,6 +10,6 @@ requirements: - id: uses-use-loader-data description: "Must read loader results with useLoaderData typed to the loader." - id: router-plugin-configured - description: "Must configure expo-router/app config for data-loader compatible web/server output." + description: "Must configure the expo-router plugin with unstable_useServerDataLoaders and web output set to static or server." - id: no-client-fetch-duplication description: "Must not duplicate the same data fetch in a client mount effect." diff --git a/evals/expo-sdk/17-rn-expo-media-library-file-asset-create/reference/App.tsx b/evals/expo-sdk/17-rn-expo-media-library-file-asset-create/reference/App.tsx index 27fb0201..9e13ad7e 100644 --- a/evals/expo-sdk/17-rn-expo-media-library-file-asset-create/reference/App.tsx +++ b/evals/expo-sdk/17-rn-expo-media-library-file-asset-create/reference/App.tsx @@ -1,7 +1,14 @@ import { File, Paths } from 'expo-file-system' import * as MediaLibrary from 'expo-media-library' -import { useCallback, useEffect, useMemo, useRef, useState } from 'react' -import { AppState, Image, Linking, Platform, Pressable, ScrollView, StyleSheet, Text, View } from 'react-native' +import { useState } from 'react' +import { Pressable, StyleSheet, Text, View } from 'react-native' + +const transparentPng = Uint8Array.from([ + 137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 1, + 0, 0, 0, 1, 8, 6, 0, 0, 0, 31, 21, 196, 137, 0, 0, 0, 13, 73, 68, 65, + 84, 120, 156, 99, 248, 255, 255, 63, 0, 5, 254, 2, 254, 167, 53, 129, 132, + 0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130, +]) export default function App() { const [message, setMessage] = useState('No asset saved.') @@ -12,11 +19,19 @@ export default function App() { setMessage('Cannot save without photo permission.') return } - const file = new File(Paths.cache, 'generated-photo.txt') - file.write('placeholder-image-bytes') + const file = new File(Paths.cache, 'generated-photo.png') + file.write(transparentPng) + if (!file.exists) { + setMessage('Generated file was not written.') + return + } const asset = await MediaLibrary.Asset.create(file.uri) - const album = (await MediaLibrary.Album.get('Exports')) ?? await MediaLibrary.Album.create('Exports', [asset], false) - await album.add(asset) + const album = await MediaLibrary.Album.get('Exports') + if (album) { + await album.add(asset) + } else { + await MediaLibrary.Album.create('Exports', [asset], false) + } setMessage(await asset.getFilename()) } @@ -40,21 +55,6 @@ const styles = StyleSheet.create({ color: '#fff', fontWeight: '600', }, - card: { - backgroundColor: '#f9fafb', - borderColor: '#e5e7eb', - borderRadius: 12, - borderWidth: 1, - padding: 14, - width: '100%', - }, - media: { - backgroundColor: '#e5e7eb', - borderRadius: 12, - height: 180, - overflow: 'hidden', - width: '100%', - }, screen: { backgroundColor: '#fff', flex: 1, diff --git a/evals/expo-sdk/README.md b/evals/expo-sdk/README.md index 133f087d..00c9694c 100644 --- a/evals/expo-sdk/README.md +++ b/evals/expo-sdk/README.md @@ -25,12 +25,14 @@ Expo SDK evals cover current SDK 56 behavior across Expo capability modules, per - Expo FileSystem: https://docs.expo.dev/versions/latest/sdk/filesystem/ - Expo MediaLibrary: https://docs.expo.dev/versions/latest/sdk/media-library/ - Expo Calendar: https://docs.expo.dev/versions/latest/sdk/calendar/ +- Expo Contacts: https://docs.expo.dev/versions/latest/sdk/contacts/ - Expo Audio: https://docs.expo.dev/versions/latest/sdk/audio/ - Expo Video: https://docs.expo.dev/versions/latest/sdk/video/ - Expo Updates: https://docs.expo.dev/versions/latest/sdk/updates/ - Expo StatusBar: https://docs.expo.dev/versions/latest/sdk/status-bar/ - Expo NavigationBar: https://docs.expo.dev/versions/latest/sdk/navigation-bar/ - Expo BuildProperties: https://docs.expo.dev/versions/latest/sdk/build-properties/ +- Expo GlassEffect: https://docs.expo.dev/versions/latest/sdk/glass-effect/ ### best-practice inventory diff --git a/paper/benchmark-methodology-whitepaper.tex b/paper/benchmark-methodology-whitepaper.tex index 1f891f2e..5fd81087 100644 --- a/paper/benchmark-methodology-whitepaper.tex +++ b/paper/benchmark-methodology-whitepaper.tex @@ -61,7 +61,7 @@ \section{React Native methodology} The meritorious content of this benchmark is concentrated around validation of primitive Large Language Models without any external augmentations such as RAG, documentation access or agent skills. The purpose of this benchmark is to assess how those models perform in the task of React Native development including the most common third party libraries in the React Native ecosystem. -The benchmark we propose in this work includes evaluation cases (referred to as \textit{evals}), divided into categories; each eval consists of multiple requirements as to the outputs of the evaluated model (referred to as \textit{solver}), as described in \cref{sec:generation,sec:judgement}. Finally, the solver performs the task in each evaluation, and in the second stage of the benchmark, another LLM (referred to as \textit{judge}) assesses the result by assigning scores to each of the requirements, along with generating a justification in natural language (for interpretability). The breakdown of the categories of evals is presented in \cref{tab:category-evals-scope}. For the sake of this experiment, the chosen requirements were adjusted such that they mattered equally, thus implying weights of all requirements being set to $1.0$. +The benchmark we propose in this work includes evaluation cases (referred to as \textit{evals}), divided into categories; each eval consists of multiple requirements as to the outputs of the evaluated model (referred to as \textit{solver}), as described in \cref{sec:generation,sec:judgement}. Finally, the solver performs the task in each evaluation, and in the second stage of the benchmark, another LLM (referred to as \textit{judge}) assesses the result by assigning scores to each of the requirements, along with generating a justification in natural language (for interpretability). The breakdown of the categories of evals is presented in \cref{tab:category-evals-scope}. Requirements default to a weight of $1.0$ when no explicit weight is provided, while individual evals may set positive custom weights where finer scoring granularity is useful. \begin{table}[htbp] \centering @@ -238,7 +238,7 @@ \subsubsection{\texttt{prompt.md}} \subsubsection{\texttt{app/}} -The \texttt{app/} directory must contain all files serving as baseline input provided to the solver. The files that shall be evaluated by the judge must be listed in the \texttt{requirements.yaml} file. +The \texttt{app/} directory contains the baseline input files provided to the solver. The current generation runner copies the full \texttt{app/} directory for each eval; by authoring convention, files that are expected as baseline inputs should also be listed in the \texttt{requirements.yaml} metadata so eval scope remains auditable. \subsection{Judgement stage inputs} \label{sec:judgement} @@ -289,7 +289,7 @@ \subsubsection{\texttt{requirements.yaml}} Task prompt used by the solver model. A representative logical template of this type of file is presented in \cref{lst:requirements-yaml-template}. The \mintinline{yaml}{version} is a constant element present for compatibility reasons for future versions of the project, that must be set to \mintinline{yaml}{1}. -The \mintinline{yaml}{inputs} list shall contain all files to be copied to the temporary workspace for the solver. +The \mintinline{yaml}{inputs} list documents the intended baseline files for the eval. In the current runner it is metadata rather than the copy source of truth: generation copies the full eval \texttt{app/} directory to the temporary solver workspace. The \mintinline{yaml}{requirements} list shall contain all the requirements, described in natural language. The requirements should explicitly state specific elements or behaviors that the presence of is to be asserted in the judgement stage. Optionally, each requirement may contain a \mintinline{yaml}{weight} value set to a positive value to emphasize its impact on the score for that requirement. If omitted, its value defaults to \mintinline{yaml}{1}. diff --git a/testbench/package.json b/testbench/package.json index 6c959d56..426008ba 100644 --- a/testbench/package.json +++ b/testbench/package.json @@ -14,7 +14,7 @@ "harness:ios": "react-native-harness --harnessRunner ios" }, "dependencies": { - "@expo/ui": "~56.0.17", + "@expo/ui": "~56.0.18", "@legendapp/list": "^3.0.0-beta.42", "@react-native-async-storage/async-storage": "2.2.0", "@react-native-community/netinfo": "^12.0.1", @@ -22,11 +22,11 @@ "@react-navigation/drawer": "^7.3.0", "@react-navigation/native": "^7.1.0", "@react-navigation/native-stack": "^7.3.0", - "@shopify/flash-list": "^2.3.0", + "@shopify/flash-list": "2.0.2", "@tanstack/react-query": "^5.90.21", - "expo": "^56", + "expo": "~56.0.12", "expo-audio": "~56.0.12", - "expo-build-properties": "~56.0.18", + "expo-build-properties": "~56.0.19", "expo-calendar": "~56.0.8", "expo-camera": "~56.0.8", "expo-constants": "~56.0.18", @@ -34,30 +34,30 @@ "expo-file-system": "~56.0.8", "expo-glass-effect": "~56.0.4", "expo-image": "~56.0.11", - "expo-image-picker": "~56.0.17", - "expo-location": "~56.0.17", + "expo-image-picker": "~56.0.18", + "expo-location": "~56.0.18", "expo-media-library": "~56.0.7", "expo-navigation-bar": "~56.0.3", - "expo-notifications": "~56.0.17", - "expo-router": "~56.2.10", + "expo-notifications": "~56.0.18", + "expo-router": "~56.2.11", "expo-status-bar": "~56.0.4", - "expo-task-manager": "~56.0.18", + "expo-task-manager": "~56.0.19", "expo-updates": "~56.0.19", - "expo-video": "~56.1.3", + "expo-video": "~56.1.4", "jotai": "^2.18.0", "react": "19.2.3", "react-native": "0.85.3", - "react-native-gesture-handler": "~2.28.0", - "react-native-keyboard-controller": "^1.20.7", - "react-native-reanimated": "~4.1.1", - "react-native-safe-area-context": "~5.6.0", - "react-native-screens": "~4.16.0", + "react-native-gesture-handler": "~2.31.1", + "react-native-keyboard-controller": "1.21.6", + "react-native-reanimated": "4.3.1", + "react-native-safe-area-context": "~5.7.0", + "react-native-screens": "4.25.2", "zustand": "^5.0.11" }, "devDependencies": { "@react-native-harness/platform-web": "^1.0.0-alpha.25", "@types/react": "~19.2.0", "react-native-harness": "^1.0.0-alpha.25", - "typescript": "~5.9.2" + "typescript": "~6.0.3" } }