From 7e2c0d16c75676e39a370e18eb85c5c7b9766aae Mon Sep 17 00:00:00 2001 From: Samuel Newman Date: Fri, 2 May 2025 09:09:24 +0300 Subject: [PATCH 01/13] bump RN to 0.79.2 --- package.json | 22 +- ...28.11.patch => expo-updates+0.28.12.patch} | 0 ...patch.md => expo-updates+0.28.12.patch.md} | 0 ...0.79.1.patch => react-native+0.79.2.patch} | 0 ....patch.md => react-native+0.79.2.patch.md} | 0 yarn.lock | 315 ++++++++---------- 6 files changed, 158 insertions(+), 179 deletions(-) rename patches/{expo-updates+0.28.11.patch => expo-updates+0.28.12.patch} (100%) rename patches/{expo-updates+0.28.11.patch.md => expo-updates+0.28.12.patch.md} (100%) rename patches/{react-native+0.79.1.patch => react-native+0.79.2.patch} (100%) rename patches/{react-native+0.79.1.patch.md => react-native+0.79.2.patch.md} (100%) diff --git a/package.json b/package.json index a429ec96fc..c94d132000 100644 --- a/package.json +++ b/package.json @@ -130,7 +130,7 @@ "emoji-mart": "^5.5.2", "emoji-regex": "^10.4.0", "eventemitter3": "^5.0.1", - "expo": "~53.0.4", + "expo": "^53.0.5", "expo-application": "~6.1.4", "expo-blur": "~14.1.4", "expo-build-properties": "~0.14.6", @@ -151,10 +151,10 @@ "expo-notifications": "~0.31.1", "expo-screen-orientation": "~8.1.5", "expo-sharing": "~13.1.5", - "expo-splash-screen": "~0.30.7", - "expo-system-ui": "~5.0.6", + "expo-splash-screen": "~0.30.8", + "expo-system-ui": "~5.0.7", "expo-task-manager": "~13.1.5", - "expo-updates": "~0.28.11", + "expo-updates": "~0.28.12", "expo-video": "~2.1.8", "expo-web-browser": "~14.1.6", "fast-text-encoding": "^1.0.6", @@ -181,7 +181,7 @@ "react-image-crop": "^11.0.7", "react-is": "19", "react-keyed-flatten-children": "^5.0.0", - "react-native": "^0.79.1", + "react-native": "0.79.2", "react-native-compressor": "1.11.0", "react-native-date-picker": "^5.0.12", "react-native-drawer-layout": "^4.1.6", @@ -224,12 +224,12 @@ "@babel/core": "^7.26.0", "@babel/preset-env": "^7.26.0", "@babel/runtime": "^7.26.0", - "@expo/config-plugins": "9.1.7", + "@expo/config-plugins": "~10.0.0", "@lingui/cli": "^4.14.1", "@lingui/macro": "^4.14.1", "@pmmmwh/react-refresh-webpack-plugin": "^0.5.15", - "@react-native/eslint-config": "^0.79.1", - "@react-native/typescript-config": "^0.79.1", + "@react-native/eslint-config": "^0.79.2", + "@react-native/typescript-config": "^0.79.2", "@sentry/webpack-plugin": "^3.2.2", "@testing-library/jest-native": "^5.4.3", "@testing-library/react-native": "^13.2.0", @@ -261,7 +261,7 @@ "husky": "^8.0.3", "is-ci": "^3.0.1", "jest": "^29.7.0", - "jest-expo": "~53.0.2", + "jest-expo": "~53.0.3", "jest-junit": "^16.0.0", "lint-staged": "^13.2.3", "lockfile-lint": "^4.14.0", @@ -276,8 +276,8 @@ }, "resolutions": { "@expo/image-utils": "0.6.3", - "@react-native/babel-preset": "0.79.1", - "@react-native/normalize-colors": "0.79.1", + "@react-native/babel-preset": "0.79.2", + "@react-native/normalize-colors": "0.79.2", "@types/react": "^18", "**/expo-constants": "17.0.3", "**/expo-device": "7.0.1", diff --git a/patches/expo-updates+0.28.11.patch b/patches/expo-updates+0.28.12.patch similarity index 100% rename from patches/expo-updates+0.28.11.patch rename to patches/expo-updates+0.28.12.patch diff --git a/patches/expo-updates+0.28.11.patch.md b/patches/expo-updates+0.28.12.patch.md similarity index 100% rename from patches/expo-updates+0.28.11.patch.md rename to patches/expo-updates+0.28.12.patch.md diff --git a/patches/react-native+0.79.1.patch b/patches/react-native+0.79.2.patch similarity index 100% rename from patches/react-native+0.79.1.patch rename to patches/react-native+0.79.2.patch diff --git a/patches/react-native+0.79.1.patch.md b/patches/react-native+0.79.2.patch.md similarity index 100% rename from patches/react-native+0.79.1.patch.md rename to patches/react-native+0.79.2.patch.md diff --git a/yarn.lock b/yarn.lock index e614d4496d..ce6bdda4c0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3764,29 +3764,29 @@ resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.47.0.tgz#5478fdf443ff8158f9de171c704ae45308696c7d" integrity sha512-P6omY1zv5MItm93kLM8s2vr1HICJH8v0dvddDhysbIuZ+vcjOHg5Zbkf1mTkcmi2JA9oBG2anOkRnW8WJTS8Og== -"@expo/cli@0.24.9": - version "0.24.9" - resolved "https://registry.yarnpkg.com/@expo/cli/-/cli-0.24.9.tgz#e38051fab8d913a8236a41f407fb6761e75fdc5f" - integrity sha512-ITx9+NCoMsj4npY4DVQVD9k2cbUermTeWXrOGxMiezlJnmzgkaVK1qTwuA0p6fPavLWSJqhtktCnUqfxZKnuCw== +"@expo/cli@0.24.10": + version "0.24.10" + resolved "https://registry.yarnpkg.com/@expo/cli/-/cli-0.24.10.tgz#f23d150f011cdebd6f503343d9be3c6283fb4096" + integrity sha512-auPE4MSRdkJkHsWJk935VoqX/BGMKARgXOLtJybTFUi64K3MkvdUoBrujcn/QzXl5DTGhacFd9qxUeQss6/qwg== dependencies: "@0no-co/graphql.web" "^1.0.8" "@babel/runtime" "^7.20.0" "@expo/code-signing-certificates" "^0.0.5" "@expo/config" "~11.0.7" - "@expo/config-plugins" "~10.0.1" + "@expo/config-plugins" "~10.0.2" "@expo/devcert" "^1.1.2" "@expo/env" "~1.0.5" "@expo/image-utils" "^0.7.4" "@expo/json-file" "^9.1.4" - "@expo/metro-config" "~0.20.11" + "@expo/metro-config" "~0.20.12" "@expo/osascript" "^2.2.4" "@expo/package-manager" "^1.8.4" "@expo/plist" "^0.3.4" - "@expo/prebuild-config" "^9.0.4" + "@expo/prebuild-config" "^9.0.5" "@expo/spawn-async" "^1.7.2" "@expo/ws-tunnel" "^1.0.1" "@expo/xcpretty" "^4.3.0" - "@react-native/dev-middleware" "0.79.1" + "@react-native/dev-middleware" "0.79.2" "@urql/core" "^5.0.6" "@urql/exchange-retry" "^1.3.0" accepts "^1.3.8" @@ -3839,26 +3839,6 @@ node-forge "^1.2.1" nullthrows "^1.1.1" -"@expo/config-plugins@9.1.7": - version "9.1.7" - resolved "https://registry.yarnpkg.com/@expo/config-plugins/-/config-plugins-9.1.7.tgz#cbaaf883c57cd236f157f26c03784adbe6ebf9ac" - integrity sha512-8dJzOesaQS+8XuT49pdSHej1z6XG3x2fqN2O3v807ri8uhxm2N9P6+iZBn19xv9+7OxraOc2tH3nEIWE19Za0w== - dependencies: - "@expo/config-types" "^53.0.0" - "@expo/json-file" "~9.1.3" - "@expo/plist" "^0.3.3" - "@expo/sdk-runtime-versions" "^1.0.0" - chalk "^4.1.2" - debug "^4.3.5" - getenv "^1.0.0" - glob "^10.4.2" - resolve-from "^5.0.0" - semver "^7.5.4" - slash "^3.0.0" - slugify "^1.6.6" - xcode "^3.0.1" - xml2js "0.6.0" - "@expo/config-plugins@^9.0.14": version "9.0.14" resolved "https://registry.yarnpkg.com/@expo/config-plugins/-/config-plugins-9.0.14.tgz#c57cc86c238b276823ff66d96e4722366d57b12c" @@ -3919,6 +3899,26 @@ xcode "^3.0.1" xml2js "0.6.0" +"@expo/config-plugins@~10.0.2": + version "10.0.2" + resolved "https://registry.yarnpkg.com/@expo/config-plugins/-/config-plugins-10.0.2.tgz#040867991e9c8c527b4f5c13a47bcf040a7479fe" + integrity sha512-TzUn3pPdpwCS0yYaSlZOClgDmCX8N4I2lfgitX5oStqmvpPtB+vqtdyqsVM02fQ2tlJIAqwBW+NHaHqqy8Jv7g== + dependencies: + "@expo/config-types" "^53.0.3" + "@expo/json-file" "~9.1.4" + "@expo/plist" "^0.3.4" + "@expo/sdk-runtime-versions" "^1.0.0" + chalk "^4.1.2" + debug "^4.3.5" + getenv "^1.0.0" + glob "^10.4.2" + resolve-from "^5.0.0" + semver "^7.5.4" + slash "^3.0.0" + slugify "^1.6.6" + xcode "^3.0.1" + xml2js "0.6.0" + "@expo/config-plugins@~9.0.10": version "9.0.10" resolved "https://registry.yarnpkg.com/@expo/config-plugins/-/config-plugins-9.0.10.tgz#a25fd6061ea7f707213ff8344f562025f850fdc8" @@ -3949,11 +3949,6 @@ resolved "https://registry.yarnpkg.com/@expo/config-types/-/config-types-52.0.3.tgz#511f2f868172c93abeac7183beeb921dc72d6e1e" integrity sha512-muxvuARmbysH5OGaiBRlh1Y6vfdmL56JtpXxB+y2Hfhu0ezG1U4FjZYBIacthckZPvnDCcP3xIu1R+eTo7/QFA== -"@expo/config-types@^53.0.0": - version "53.0.1" - resolved "https://registry.yarnpkg.com/@expo/config-types/-/config-types-53.0.1.tgz#e07b6709b93e9b09ad3c55c4f9087b7e9fbd3762" - integrity sha512-tPX+2DuA7zxW697a6pCZjckoupx+DWB1ThDbuUaSQWwTD37CiOz80VttOgSNf3h7GeF0KowYSXpUJeS5N5jB2Q== - "@expo/config-types@^53.0.2", "@expo/config-types@^53.0.3": version "53.0.3" resolved "https://registry.yarnpkg.com/@expo/config-types/-/config-types-53.0.3.tgz#d083d9b095972e89eee96c41d085feb5b92d2749" @@ -4078,7 +4073,7 @@ resolved "https://registry.yarnpkg.com/@expo/html-elements/-/html-elements-0.12.4.tgz#e08f2028133a0aed6207560f5d1b12aa328c4523" integrity sha512-IkCOGc6acGf+wUdpIJrmQzM+IzKVzAmzrMO3UTZ+7W9ifflAjsoKBv4eWGkogX+lwqzNyg9ynx6GJQIU6Pt6/w== -"@expo/image-utils@0.3.23", "@expo/image-utils@0.6.3", "@expo/image-utils@^0.6.3", "@expo/image-utils@^0.7.3", "@expo/image-utils@^0.7.4": +"@expo/image-utils@0.3.23", "@expo/image-utils@0.6.3", "@expo/image-utils@^0.6.3", "@expo/image-utils@^0.7.4": version "0.6.3" resolved "https://registry.yarnpkg.com/@expo/image-utils/-/image-utils-0.6.3.tgz#89c744460beefc686989b969121357bbd5520c8a" integrity sha512-v/JbCKBrHeudxn1gN1TgfPE/pWJSlLPrl29uXJBgrJFQVkViQvUHQNDhaS+UEa9wYI5HHh7XYmtzAehyG4L+GA== @@ -4128,10 +4123,10 @@ json5 "^2.2.3" write-file-atomic "^2.3.0" -"@expo/metro-config@0.20.11", "@expo/metro-config@~0.20.11": - version "0.20.11" - resolved "https://registry.yarnpkg.com/@expo/metro-config/-/metro-config-0.20.11.tgz#2927e818de5ed23335f29e794da67aab740e234e" - integrity sha512-V2icQavtKWYD3Ml7cN7Af42vfx5UEOTpejgSKt1mmZ5uSIIv/7f4OBLM60HRErtqudiDzDla8s4g5frFw/hVTQ== +"@expo/metro-config@0.20.12", "@expo/metro-config@~0.20.12": + version "0.20.12" + resolved "https://registry.yarnpkg.com/@expo/metro-config/-/metro-config-0.20.12.tgz#f6e2c33a305cb0ab8b0aa0dadafd6adf09058b9c" + integrity sha512-O9zaAF3gH76EXkwuQCpXLKC5dBy344/pqoszWmtOloKo4gJy74aNPUy2LRS57pDHyjZe1HjrxVkMcr7lZCIsag== dependencies: "@babel/core" "^7.20.0" "@babel/generator" "^7.20.5" @@ -4209,33 +4204,17 @@ base64-js "^1.2.3" xmlbuilder "^15.1.1" -"@expo/prebuild-config@^9.0.3": - version "9.0.3" - resolved "https://registry.yarnpkg.com/@expo/prebuild-config/-/prebuild-config-9.0.3.tgz#28fae76590a49d7811569951663e4f112e834fa2" - integrity sha512-mopn+uMJTDbNOdIB5wpgha64qnz9LYk/REA0A6k93gxsUIi1/tiKznAM53bQ/H/AfL3njI28s2+YWGTX7Jo5JA== - dependencies: - "@expo/config" "~11.0.6" - "@expo/config-plugins" "~10.0.0" - "@expo/config-types" "^53.0.2" - "@expo/image-utils" "^0.7.3" - "@expo/json-file" "^9.1.3" - "@react-native/normalize-colors" "0.79.1" - debug "^4.3.1" - resolve-from "^5.0.0" - semver "^7.6.0" - xml2js "0.6.0" - -"@expo/prebuild-config@^9.0.4": - version "9.0.4" - resolved "https://registry.yarnpkg.com/@expo/prebuild-config/-/prebuild-config-9.0.4.tgz#4c8cdac2299ea94977207b4707447aa83860cabd" - integrity sha512-YQwTLvHjgqtVM3ZNdMP79510Opnv+TVWTOf3gmi9fKOfWgpR0YiE19aRF7YrQ+qh22Mt1tBBFVRsT3gsBq/Ytw== +"@expo/prebuild-config@^9.0.5": + version "9.0.5" + resolved "https://registry.yarnpkg.com/@expo/prebuild-config/-/prebuild-config-9.0.5.tgz#b8b864b5e19489a1f66442ae30d5d7295f658297" + integrity sha512-oiSVU5ePu9lsOvn5p4xplqjzPlcZHzKYwzuonTa9GCH1GxcOEIBsvMVQiHBXHtqvgV2dztjm34kdXV//+9jtCA== dependencies: "@expo/config" "~11.0.7" - "@expo/config-plugins" "~10.0.1" + "@expo/config-plugins" "~10.0.2" "@expo/config-types" "^53.0.3" "@expo/image-utils" "^0.7.4" "@expo/json-file" "^9.1.4" - "@react-native/normalize-colors" "0.79.1" + "@react-native/normalize-colors" "0.79.2" debug "^4.3.1" resolve-from "^5.0.0" semver "^7.6.0" @@ -6226,23 +6205,23 @@ resolved "https://registry.yarnpkg.com/@react-native-picker/picker/-/picker-2.11.0.tgz#4587fbce6a382adedad74311e96ee10bb2b2d63a" integrity sha512-QuZU6gbxmOID5zZgd/H90NgBnbJ3VV6qVzp6c7/dDrmWdX8S0X5YFYgDcQFjE3dRen9wB9FWnj2VVdPU64adSg== -"@react-native/assets-registry@0.79.1": - version "0.79.1" - resolved "https://registry.yarnpkg.com/@react-native/assets-registry/-/assets-registry-0.79.1.tgz#39ce0a710a03d98c276cfa2877a925f1677614bd" - integrity sha512-q5BwZtL0YbaJRgofl8qrD9BNdGJkecTJNYG8VFOVQYXPTBa3ZSooip1aj0wrjoa0HloKx/Hmx5UMvuhfEsjn8A== +"@react-native/assets-registry@0.79.2": + version "0.79.2" + resolved "https://registry.yarnpkg.com/@react-native/assets-registry/-/assets-registry-0.79.2.tgz#731963e664c8543f5b277e56c058bde612b69f50" + integrity sha512-5h2Z7/+/HL/0h88s0JHOdRCW4CXMCJoROxqzHqxdrjGL6EBD1DdaB4ZqkCOEVSW4Vjhir5Qb97C8i/MPWEYPtg== -"@react-native/babel-plugin-codegen@0.79.1": - version "0.79.1" - resolved "https://registry.yarnpkg.com/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.79.1.tgz#bb2144c7570ba91be72e80b2aad1c8bc918fac7a" - integrity sha512-y3VyrPO/ej8Uhjk2IM+vBZok8cEyMl3DwJ3o/tsgiIVROITL+MWdk6M6iQOHRvwRWAgLe5jLSR3Zv5IIdDVY4A== +"@react-native/babel-plugin-codegen@0.79.2": + version "0.79.2" + resolved "https://registry.yarnpkg.com/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.79.2.tgz#f3f86766a01487aaaa623ec62514af4c84400953" + integrity sha512-d+NB7Uosn2ZWd4O4+7ZkB6q1a+0z2opD/4+Bzhk/Tv6fc5FrSftK2Noqxvo3/bhbdGFVPxf0yvLE8et4W17x/Q== dependencies: "@babel/traverse" "^7.25.3" - "@react-native/codegen" "0.79.1" + "@react-native/codegen" "0.79.2" -"@react-native/babel-preset@0.79.0-rc.4", "@react-native/babel-preset@0.79.1": - version "0.79.1" - resolved "https://registry.yarnpkg.com/@react-native/babel-preset/-/babel-preset-0.79.1.tgz#6721d00a7a2aa730ccddfecf7011360e10a027c0" - integrity sha512-vS6Os9jFIeQ679VEwW2/h0a5uPYtX9E6ALYTW+VH4Knm+HNzdXC69Z1C5Cgia36ljiGEVCKtsBg5yjDYwliaeg== +"@react-native/babel-preset@0.79.0-rc.4", "@react-native/babel-preset@0.79.2": + version "0.79.2" + resolved "https://registry.yarnpkg.com/@react-native/babel-preset/-/babel-preset-0.79.2.tgz#5a683a6efeea357a326f70c84a881be2bafbeae3" + integrity sha512-/HNu869oUq4FUXizpiNWrIhucsYZqu0/0spudJEzk9SEKar0EjVDP7zkg/sKK+KccNypDQGW7nFXT8onzvQ3og== dependencies: "@babel/core" "^7.25.2" "@babel/plugin-proposal-export-default-from" "^7.24.7" @@ -6285,15 +6264,15 @@ "@babel/plugin-transform-typescript" "^7.25.2" "@babel/plugin-transform-unicode-regex" "^7.24.7" "@babel/template" "^7.25.0" - "@react-native/babel-plugin-codegen" "0.79.1" + "@react-native/babel-plugin-codegen" "0.79.2" babel-plugin-syntax-hermes-parser "0.25.1" babel-plugin-transform-flow-enums "^0.0.2" react-refresh "^0.14.0" -"@react-native/codegen@0.79.1": - version "0.79.1" - resolved "https://registry.yarnpkg.com/@react-native/codegen/-/codegen-0.79.1.tgz#3adc0b689ac1d863e883624625987878b7bbfee0" - integrity sha512-cTVXfCICkmUU6UvUpnLP4BE82O14JRuVz42cg/A19oasTaZmzHl0+uIDzt2cZEbt/N2sJ/EZnZL61qqpwbNXWQ== +"@react-native/codegen@0.79.2": + version "0.79.2" + resolved "https://registry.yarnpkg.com/@react-native/codegen/-/codegen-0.79.2.tgz#75270d8162e78c02b0272396a3c6942e39e8703d" + integrity sha512-8JTlGLuLi1p8Jx2N/enwwEd7/2CfrqJpv90Cp77QLRX3VHF2hdyavRIxAmXMwN95k+Me7CUuPtqn2X3IBXOWYg== dependencies: glob "^7.1.1" hermes-parser "0.25.1" @@ -6301,12 +6280,12 @@ nullthrows "^1.1.1" yargs "^17.6.2" -"@react-native/community-cli-plugin@0.79.1": - version "0.79.1" - resolved "https://registry.yarnpkg.com/@react-native/community-cli-plugin/-/community-cli-plugin-0.79.1.tgz#a25d56c2281ee7ce0d7349dfa906cf508d1bee2a" - integrity sha512-hqCMQrMRi19G7yxEsYwV9A0MHB6Hri7B5dytRD7kU5vtz0Lzg1fZYYvmS0x9OdWJWPntmHA8xiijwM+4cT8cpQ== +"@react-native/community-cli-plugin@0.79.2": + version "0.79.2" + resolved "https://registry.yarnpkg.com/@react-native/community-cli-plugin/-/community-cli-plugin-0.79.2.tgz#d3a0efbdfb554cf3a7e9bfb27865a7caeeeaa1b3" + integrity sha512-E+YEY2dL+68HyR2iahsZdyBKBUi9QyPyaN9vsnda1jNgCjNpSPk2yAF5cXsho+zKK5ZQna3JSeE1Kbi2IfGJbw== dependencies: - "@react-native/dev-middleware" "0.79.1" + "@react-native/dev-middleware" "0.79.2" chalk "^4.0.0" debug "^2.2.0" invariant "^2.2.4" @@ -6315,18 +6294,18 @@ metro-core "^0.82.0" semver "^7.1.3" -"@react-native/debugger-frontend@0.79.1": - version "0.79.1" - resolved "https://registry.yarnpkg.com/@react-native/debugger-frontend/-/debugger-frontend-0.79.1.tgz#9dc32fb9dc606ac4e19184505181f684022b404c" - integrity sha512-IgbQM/djzBhkkjzIT/b36zwkc4UMxZLTKgRVJrSEjuwtOPmgfh/1F5m3OUitbMd4/e06VgN0vPLyBzToj1kiwA== +"@react-native/debugger-frontend@0.79.2": + version "0.79.2" + resolved "https://registry.yarnpkg.com/@react-native/debugger-frontend/-/debugger-frontend-0.79.2.tgz#1377de6d9cabe5455bf332e06408167da5f60c19" + integrity sha512-cGmC7X6kju76DopSBNc+PRAEetbd7TWF9J9o84hOp/xL3ahxR2kuxJy0oJX8Eg8oehhGGEXTuMKHzNa3rDBeSg== -"@react-native/dev-middleware@0.79.1": - version "0.79.1" - resolved "https://registry.yarnpkg.com/@react-native/dev-middleware/-/dev-middleware-0.79.1.tgz#6227b7d89acd69a198b532f0ba84d09a10b4e836" - integrity sha512-xegUHwi6h8wOLIl/9ImZoIVVwzecE+ENGTELIrD2PsseBbtdRMKzZ8A1LTBjPPt3IjHPH6103JcSPwgepP6zFA== +"@react-native/dev-middleware@0.79.2": + version "0.79.2" + resolved "https://registry.yarnpkg.com/@react-native/dev-middleware/-/dev-middleware-0.79.2.tgz#f09f1a75b4cd0b56dfd82a07bf41157a9c45619c" + integrity sha512-9q4CpkklsAs1L0Bw8XYCoqqyBSrfRALGEw4/r0EkR38Y/6fVfNfdsjSns0pTLO6h0VpxswK34L/hm4uK3MoLHw== dependencies: "@isaacs/ttlcache" "^1.4.1" - "@react-native/debugger-frontend" "0.79.1" + "@react-native/debugger-frontend" "0.79.2" chrome-launcher "^0.15.2" chromium-edge-launcher "^0.2.0" connect "^3.6.5" @@ -6337,14 +6316,14 @@ serve-static "^1.16.2" ws "^6.2.3" -"@react-native/eslint-config@^0.79.1": - version "0.79.1" - resolved "https://registry.yarnpkg.com/@react-native/eslint-config/-/eslint-config-0.79.1.tgz#bd0e262b0c46ec3171c218f265d6378ead1b287e" - integrity sha512-McId/80c6BQq7x7uHZWFlJVkfMHcAUb6E0J8AykpWL4KY2sZGtbDzemY4kCxm+mh64EHIAvtJNYS5+7nVFDG6Q== +"@react-native/eslint-config@^0.79.2": + version "0.79.2" + resolved "https://registry.yarnpkg.com/@react-native/eslint-config/-/eslint-config-0.79.2.tgz#b42c95fe2399aae84209356b0971dd68c4149e4e" + integrity sha512-ukb9qGvrFC/3YVlWVy/GGM+auKdGIsbbumCyfOYPfUdhHFWA/twz1zK4bJQmCZ38iINuTENYedRzoE+U57GclA== dependencies: "@babel/core" "^7.25.2" "@babel/eslint-parser" "^7.25.1" - "@react-native/eslint-plugin" "0.79.1" + "@react-native/eslint-plugin" "0.79.2" "@typescript-eslint/eslint-plugin" "^7.1.1" "@typescript-eslint/parser" "^7.1.1" eslint-config-prettier "^8.5.0" @@ -6355,35 +6334,35 @@ eslint-plugin-react-hooks "^4.6.0" eslint-plugin-react-native "^4.0.0" -"@react-native/eslint-plugin@0.79.1": - version "0.79.1" - resolved "https://registry.yarnpkg.com/@react-native/eslint-plugin/-/eslint-plugin-0.79.1.tgz#425c96b00de1d72bd6541e6bc4c64757ee99a380" - integrity sha512-db9YJkk1jG2DJ98/ly50XVbEygBpI38yIlNwohw3a+d4ipe3yqeDY4B6af7kEKjHKqHEILdoU15seRqZKsqmuA== +"@react-native/eslint-plugin@0.79.2": + version "0.79.2" + resolved "https://registry.yarnpkg.com/@react-native/eslint-plugin/-/eslint-plugin-0.79.2.tgz#23d18226bb4335404e6db561bf1a47ac7d1380ed" + integrity sha512-Abu+0OuwTje9E5eQOvYpTUuXvDgGjHeFhnfNVY9BXalBK8OrX20EFlonWvIbFqii136eS5KLEBm2Wjqk2V5XJg== -"@react-native/gradle-plugin@0.79.1": - version "0.79.1" - resolved "https://registry.yarnpkg.com/@react-native/gradle-plugin/-/gradle-plugin-0.79.1.tgz#b533024ac1930a826b225fed8fbf94d7f768afe9" - integrity sha512-vfoNcOBig/+R7g3eqHkBSbSVkk0NMPzyXE5QY0V+/0flRa3kDZUHP2fr8ygoY/4rxbi05wPME2/dTEuoYcpnjg== +"@react-native/gradle-plugin@0.79.2": + version "0.79.2" + resolved "https://registry.yarnpkg.com/@react-native/gradle-plugin/-/gradle-plugin-0.79.2.tgz#d41d4e2c63baf688a2b47652c6260f2a2f1ec091" + integrity sha512-6MJFemrwR0bOT0QM+2BxX9k3/pvZQNmJ3Js5pF/6owsA0cUDiCO57otiEU8Fz+UywWEzn1FoQfOfQ8vt2GYmoA== -"@react-native/js-polyfills@0.79.1": - version "0.79.1" - resolved "https://registry.yarnpkg.com/@react-native/js-polyfills/-/js-polyfills-0.79.1.tgz#774d5d20c20f6d9986852af01840983f214cbdef" - integrity sha512-P8j11kdD+ehL5jqHSCM1BOl4SnJ+3rvGPpsagAqyngU6WSausISO7YFufltrWA7kdpHdnAL2HfJJ62szTRGShw== +"@react-native/js-polyfills@0.79.2": + version "0.79.2" + resolved "https://registry.yarnpkg.com/@react-native/js-polyfills/-/js-polyfills-0.79.2.tgz#15eb4da0fe9e8d61d2980d08fd06b5f49e133b0f" + integrity sha512-IaY87Ckd4GTPMkO1/Fe8fC1IgIx3vc3q9Tyt/6qS3Mtk9nC0x9q4kSR5t+HHq0/MuvGtu8HpdxXGy5wLaM+zUw== -"@react-native/normalize-colors@0.79.1", "@react-native/normalize-colors@^0.73.0", "@react-native/normalize-colors@^0.74.1": - version "0.79.1" - resolved "https://registry.yarnpkg.com/@react-native/normalize-colors/-/normalize-colors-0.79.1.tgz#5d8214f850dd5d8c95f76ba8a7a2e1c0d2f344bc" - integrity sha512-Fj12xKyihZhrFH45ruqECd2JVx9lyYe+dyxO7MYgkqY6UENsSS3JKcfzjSNBZLW7NXts6JkbaqLQPwaHmPF7QA== +"@react-native/normalize-colors@0.79.2", "@react-native/normalize-colors@^0.73.0", "@react-native/normalize-colors@^0.74.1": + version "0.79.2" + resolved "https://registry.yarnpkg.com/@react-native/normalize-colors/-/normalize-colors-0.79.2.tgz#9ab70ca257c7411e4ab74cf7f91332c27d39cc6f" + integrity sha512-+b+GNrupWrWw1okHnEENz63j7NSMqhKeFMOyzYLBwKcprG8fqJQhDIGXfizKdxeIa5NnGSAevKL1Ev1zJ56X8w== -"@react-native/typescript-config@^0.79.1": - version "0.79.1" - resolved "https://registry.yarnpkg.com/@react-native/typescript-config/-/typescript-config-0.79.1.tgz#e9f8279ade7213fdd6423d2c5ecc6f50067193d0" - integrity sha512-ZeCui5MYZxVOedw9feoONuNF0lup0DvcUGvLeTyQitZoPGV4NSz9jzC1XcxMsLb9M4a2FGUhopmgrxuXgyERFg== +"@react-native/typescript-config@^0.79.2": + version "0.79.2" + resolved "https://registry.yarnpkg.com/@react-native/typescript-config/-/typescript-config-0.79.2.tgz#02cb07db89ef80159b3c1b3e82e81b0c0d5ce908" + integrity sha512-krHAkkPRCOEhuqN3iwRUwIyE1rAnUQ9//huzUc1ukcoQ7Y4qFxM6amhNloAmYn4QH1Ay6o5At00VbEh2xoHISA== -"@react-native/virtualized-lists@0.79.1": - version "0.79.1" - resolved "https://registry.yarnpkg.com/@react-native/virtualized-lists/-/virtualized-lists-0.79.1.tgz#7d3abff3fb759d4bd0416306731620e42b5b2bd2" - integrity sha512-v1KeqJeVJXjc2mewjKQYSay7D7+VSacxryejuuVXlPE9E9wVbzMPCfPjbIS8C9nMC7a4rsRFilX7RVKYkeZaGg== +"@react-native/virtualized-lists@0.79.2": + version "0.79.2" + resolved "https://registry.yarnpkg.com/@react-native/virtualized-lists/-/virtualized-lists-0.79.2.tgz#ed5a419a30b7ddec978b7816ff698a9d85507e15" + integrity sha512-9G6ROJeP+rdw9Bvr5ruOlag11ET7j1z/En1riFFNo6W3xZvJY+alCuH1ttm12y9+zBm4n8jwCk4lGhjYaV4dKw== dependencies: invariant "^2.2.4" nullthrows "^1.1.1" @@ -8812,10 +8791,10 @@ babel-preset-expo@~13.0.0: react-refresh "^0.14.2" resolve-from "^5.0.0" -babel-preset-expo@~13.1.10: - version "13.1.10" - resolved "https://registry.yarnpkg.com/babel-preset-expo/-/babel-preset-expo-13.1.10.tgz#9b826ceef13d32e24298e69a547254ded8373240" - integrity sha512-RIZMZ+shEf+EQV66Vb6inAoDSrSGDqO9Pn+2koHNJ1LbLapNgj9vx4qHitivyEUdehEtEjGHCi0UwvGITlsWgw== +babel-preset-expo@~13.1.11: + version "13.1.11" + resolved "https://registry.yarnpkg.com/babel-preset-expo/-/babel-preset-expo-13.1.11.tgz#de81e6a621c9f40dcb1e0bf5f1fe111f82c10496" + integrity sha512-jigWjvhRVdm9UTPJ1wjLYJ0OJvD5vLZ8YYkEknEl6+9S1JWORO/y3xtHr/hNj5n34nOilZqdXrmNFcqKc8YTsg== dependencies: "@babel/helper-module-imports" "^7.25.9" "@babel/plugin-proposal-decorators" "^7.12.9" @@ -8831,7 +8810,7 @@ babel-preset-expo@~13.1.10: "@babel/plugin-transform-runtime" "^7.24.7" "@babel/preset-react" "^7.22.15" "@babel/preset-typescript" "^7.23.0" - "@react-native/babel-preset" "0.79.1" + "@react-native/babel-preset" "0.79.2" babel-plugin-react-native-web "~0.19.13" babel-plugin-syntax-hermes-parser "^0.25.1" babel-plugin-transform-flow-enums "^0.0.2" @@ -11287,7 +11266,7 @@ expo-clipboard@~7.1.4: resolved "https://registry.yarnpkg.com/expo-clipboard/-/expo-clipboard-7.1.4.tgz#f2cda0d3cbfd2d307aa85dd7ba6843d6bbaf4227" integrity sha512-NHhfKnrzb4o0PacUKD93ByadU0JmPBoFTFYbbFJZ9OAX6SImpSqG5gfrMUR3vVj4Qx9f1LpMcdAv5lBzv868ow== -expo-constants@17.0.3, expo-constants@^13.0.2, expo-constants@~17.1.4: +expo-constants@17.0.3, expo-constants@^13.0.2, expo-constants@~17.1.4, expo-constants@~17.1.5: version "17.0.3" resolved "https://registry.yarnpkg.com/expo-constants/-/expo-constants-17.0.3.tgz#a05b38e0417d59759ece1642b4d483889e04dbda" integrity sha512-lnbcX2sAu8SucHXEXxSkhiEpqH+jGrf+TF+MO6sHWIESjwOUVVYlT8qYdjR9xbxWmqFtrI4KV44FkeJf2DaFjQ== @@ -11498,24 +11477,24 @@ expo-sharing@~13.1.5: resolved "https://registry.yarnpkg.com/expo-sharing/-/expo-sharing-13.1.5.tgz#73d86cdcc037b46ddc82be224dfd3d6bceec497c" integrity sha512-X/5sAEiWXL2kdoGE3NO5KmbfcmaCWuWVZXHu8OQef7Yig4ZgHFkGD11HKJ5KqDrDg+SRZe4ISd6MxE7vGUgm4w== -expo-splash-screen@~0.30.7: - version "0.30.7" - resolved "https://registry.yarnpkg.com/expo-splash-screen/-/expo-splash-screen-0.30.7.tgz#bd4f0ea643c8f09ed43957ec6cf5a051edfcdfa7" - integrity sha512-rMMJC43bSqn4cNWsbilIodnCjnWXWLWNHSEvuyhiIg2UciV7bp2PKb6AuFqMdzjG4lmdM9ANn52AQaYnAaZoAQ== +expo-splash-screen@~0.30.8: + version "0.30.8" + resolved "https://registry.yarnpkg.com/expo-splash-screen/-/expo-splash-screen-0.30.8.tgz#2e960ccff053bc8ace85eb56f7d6745e4ddfc6b6" + integrity sha512-2eh+uA543brfeG5HILXmtNKA7E2/pfywKzNumzy3Ef6OtDjYy6zJUGNSbhnZRbVEjUZo3/QNRs0JRBfY80okZg== dependencies: - "@expo/prebuild-config" "^9.0.3" + "@expo/prebuild-config" "^9.0.5" expo-structured-headers@~4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/expo-structured-headers/-/expo-structured-headers-4.1.0.tgz#5475fc3f9559701cc755fd2d50605f8817d42ad0" integrity sha512-2X+aUNzC/qaw7/WyUhrVHNDB0uQ5rE12XA2H/rJXaAiYQSuOeU90ladaN0IJYV9I2XlhYrjXLktLXWbO7zgbag== -expo-system-ui@~5.0.6: - version "5.0.6" - resolved "https://registry.yarnpkg.com/expo-system-ui/-/expo-system-ui-5.0.6.tgz#d05f10468f30cc03beb901fd2434a1ef2279e83e" - integrity sha512-yV3sFWVYJerz/sote0n9odwtoKLwNTL0iBn4UFeHiNUQPz0jRAbZrabYFO2fj/n2jvgGNnYgJu66tFAwMVv50g== +expo-system-ui@~5.0.7: + version "5.0.7" + resolved "https://registry.yarnpkg.com/expo-system-ui/-/expo-system-ui-5.0.7.tgz#ccf047a689ab488d9bcda375afd063419578f494" + integrity sha512-ijSnSFA4VfuQc84N6WyCUNsKKTIyQb6QuC8q2zGvYC/sBXTMrOtZg0zrisQGzCRW+WhritQTiVqHlp3Ix9xDmQ== dependencies: - "@react-native/normalize-colors" "0.79.1" + "@react-native/normalize-colors" "0.79.2" debug "^4.3.2" expo-task-manager@~13.1.5: @@ -11530,14 +11509,14 @@ expo-updates-interface@~1.1.0: resolved "https://registry.yarnpkg.com/expo-updates-interface/-/expo-updates-interface-1.1.0.tgz#62497d4647b381da9fdb68868ed180203ae737ef" integrity sha512-DeB+fRe0hUDPZhpJ4X4bFMAItatFBUPjw/TVSbJsaf3Exeami+2qbbJhWkcTMoYHOB73nOIcaYcWXYJnCJXO0w== -expo-updates@~0.28.11: - version "0.28.11" - resolved "https://registry.yarnpkg.com/expo-updates/-/expo-updates-0.28.11.tgz#9c5fa5d60da7627ff85542f936a27e16ba7947f8" - integrity sha512-4xvZOZ7xcfwdwlb3WaoYayrcyL+vq1NYsJR2nRC8sf4uxjgAj5InMu6fnjNLAXaokbSNGZ9qSu3nBfRn4rgkPg== +expo-updates@~0.28.12: + version "0.28.12" + resolved "https://registry.yarnpkg.com/expo-updates/-/expo-updates-0.28.12.tgz#abf6e0c593837b20af64feee31aa018e1a85b332" + integrity sha512-GUQNI7apaQa8mVLGyeUQZsSaY75lq3yIp2OO+gX0BZIeD5hr8ADZ0Gw2+9+uRSB70B7AWQklUCMBxvOsA2DVfg== dependencies: "@expo/code-signing-certificates" "0.0.5" "@expo/config" "~11.0.7" - "@expo/config-plugins" "~10.0.1" + "@expo/config-plugins" "~10.0.2" "@expo/spawn-async" "^1.7.2" arg "4.1.0" chalk "^4.1.2" @@ -11559,21 +11538,21 @@ expo-web-browser@~14.1.6: resolved "https://registry.yarnpkg.com/expo-web-browser/-/expo-web-browser-14.1.6.tgz#26d66e641e6e96d155be6fa513e7e667a719a0b0" integrity sha512-/4P8eWqRyfXIMZna3acg320LXNA+P2cwyEVbjDX8vHnWU+UnOtyRKWy3XaAIyMPQ9hVjBNUQTh4MPvtnPRzakw== -expo@~53.0.4: - version "53.0.4" - resolved "https://registry.yarnpkg.com/expo/-/expo-53.0.4.tgz#ded8219d9cebe8b3be5350f2655b3b441dd644e5" - integrity sha512-h3t507SrayyY/EPoghKkfrJRbo4Qw4ITsvy4Z4GRNxb5DhagUFGB8N/rrjwaBIzryELXiYyDcnrbuMU2TJ9kqw== +expo@^53.0.5: + version "53.0.5" + resolved "https://registry.yarnpkg.com/expo/-/expo-53.0.5.tgz#f8c30643c4e45d769934415ea9196531612cb657" + integrity sha512-A9nh7ojGcdsv05TCH39q/7RRQsTfgcQ3qD2CFzlADVW8jIIFNiIg80shE8DQiXHkeCKWT78Iy7iog2yIu4sq3Q== dependencies: "@babel/runtime" "^7.20.0" - "@expo/cli" "0.24.9" + "@expo/cli" "0.24.10" "@expo/config" "~11.0.7" - "@expo/config-plugins" "~10.0.1" + "@expo/config-plugins" "~10.0.2" "@expo/fingerprint" "0.12.4" - "@expo/metro-config" "0.20.11" + "@expo/metro-config" "0.20.12" "@expo/vector-icons" "^14.0.0" - babel-preset-expo "~13.1.10" + babel-preset-expo "~13.1.11" expo-asset "~11.1.4" - expo-constants "~17.1.4" + expo-constants "~17.1.5" expo-file-system "~18.1.8" expo-font "~13.3.0" expo-keep-awake "~14.1.4" @@ -13572,13 +13551,13 @@ jest-environment-node@^29.7.0: jest-mock "^29.7.0" jest-util "^29.7.0" -jest-expo@~53.0.2: - version "53.0.2" - resolved "https://registry.yarnpkg.com/jest-expo/-/jest-expo-53.0.2.tgz#9d2f648d0c93a6ba7d89819a3307e5cf615542e1" - integrity sha512-FzQZ+7XDC9jhcc4L5LgAWP5R1k1WYMwPh1z/Geo/WJpiDLodUshlERswyOj9DwiaM7+M+eqef4v1Nx2bTJ2M8g== +jest-expo@~53.0.3: + version "53.0.3" + resolved "https://registry.yarnpkg.com/jest-expo/-/jest-expo-53.0.3.tgz#094da673d5b7953565c4cc6c41af4337465ddfc9" + integrity sha512-aOJyy/i0wPAWrQpSVNTTFWjcNTbUE/0eXr2cpdM3WW57K3EB1sueuKj8j2tWlzeKz4bk3+DVRy8K44V/XMoy3Q== dependencies: - "@expo/config" "~11.0.6" - "@expo/json-file" "^9.1.3" + "@expo/config" "~11.0.7" + "@expo/json-file" "^9.1.4" "@jest/create-cache-key-function" "^29.2.1" "@jest/globals" "^29.2.1" babel-jest "^29.2.1" @@ -17084,19 +17063,19 @@ react-native-webview@13.13.5: escape-string-regexp "^4.0.0" invariant "2.2.4" -react-native@^0.79.1: - version "0.79.1" - resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.79.1.tgz#e25dd74c08bfde0862079cbeb64642c5dfbbb454" - integrity sha512-MZQFEKyKPjqvyjuMUvH02elnmRQFzbS0yf46YOe9ktJWTZGwklsbJkRgaXJx9KA3SK6v1/QXVeCqZmrzho+1qw== +react-native@0.79.2: + version "0.79.2" + resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.79.2.tgz#f1a53099701c1736d09e441eb79f97cfc90dd202" + integrity sha512-AnGzb56JvU5YCL7cAwg10+ewDquzvmgrMddiBM0GAWLwQM/6DJfGd2ZKrMuKKehHerpDDZgG+EY64gk3x3dEkw== dependencies: "@jest/create-cache-key-function" "^29.7.0" - "@react-native/assets-registry" "0.79.1" - "@react-native/codegen" "0.79.1" - "@react-native/community-cli-plugin" "0.79.1" - "@react-native/gradle-plugin" "0.79.1" - "@react-native/js-polyfills" "0.79.1" - "@react-native/normalize-colors" "0.79.1" - "@react-native/virtualized-lists" "0.79.1" + "@react-native/assets-registry" "0.79.2" + "@react-native/codegen" "0.79.2" + "@react-native/community-cli-plugin" "0.79.2" + "@react-native/gradle-plugin" "0.79.2" + "@react-native/js-polyfills" "0.79.2" + "@react-native/normalize-colors" "0.79.2" + "@react-native/virtualized-lists" "0.79.2" abort-controller "^3.0.0" anser "^1.4.9" ansi-regex "^5.0.0" From da7503fee3a4c88cad0181f4eda0578fbc88ee93 Mon Sep 17 00:00:00 2001 From: Samuel Newman Date: Fri, 2 May 2025 09:17:51 +0300 Subject: [PATCH 02/13] fix yarn lock ci --- yarn.lock | 94 ++++++------------------------------------------------- 1 file changed, 9 insertions(+), 85 deletions(-) diff --git a/yarn.lock b/yarn.lock index ce6bdda4c0..66dceefdf7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3859,47 +3859,7 @@ xcode "^3.0.1" xml2js "0.6.0" -"@expo/config-plugins@~10.0.0": - version "10.0.0" - resolved "https://registry.yarnpkg.com/@expo/config-plugins/-/config-plugins-10.0.0.tgz#5ea58f9c12d1d06b6c43c9fb9e7163bb4954d04f" - integrity sha512-VAGMjQoBFKwyXGzVcAptqY68LGx1pZr8c+4e82h6E1elenjeVBt1CBaWHC/kiAw2Akr2nkdUVd85nIaC81m1ow== - dependencies: - "@expo/config-types" "^53.0.2" - "@expo/json-file" "~9.1.3" - "@expo/plist" "^0.3.3" - "@expo/sdk-runtime-versions" "^1.0.0" - chalk "^4.1.2" - debug "^4.3.5" - getenv "^1.0.0" - glob "^10.4.2" - resolve-from "^5.0.0" - semver "^7.5.4" - slash "^3.0.0" - slugify "^1.6.6" - xcode "^3.0.1" - xml2js "0.6.0" - -"@expo/config-plugins@~10.0.1": - version "10.0.1" - resolved "https://registry.yarnpkg.com/@expo/config-plugins/-/config-plugins-10.0.1.tgz#bfb09a0a478416ae9b0b5bcfa6761207e5e6a156" - integrity sha512-JM8fmG2TVzuF02LrkywZKfCBfA8yVvOeK+3X/JnWUQqWCdUpLNf1RmCdnZ67VBeFLBD74ro+Gd1bJR1dW5aMcw== - dependencies: - "@expo/config-types" "^53.0.3" - "@expo/json-file" "~9.1.4" - "@expo/plist" "^0.3.4" - "@expo/sdk-runtime-versions" "^1.0.0" - chalk "^4.1.2" - debug "^4.3.5" - getenv "^1.0.0" - glob "^10.4.2" - resolve-from "^5.0.0" - semver "^7.5.4" - slash "^3.0.0" - slugify "^1.6.6" - xcode "^3.0.1" - xml2js "0.6.0" - -"@expo/config-plugins@~10.0.2": +"@expo/config-plugins@~10.0.0", "@expo/config-plugins@~10.0.1", "@expo/config-plugins@~10.0.2": version "10.0.2" resolved "https://registry.yarnpkg.com/@expo/config-plugins/-/config-plugins-10.0.2.tgz#040867991e9c8c527b4f5c13a47bcf040a7479fe" integrity sha512-TzUn3pPdpwCS0yYaSlZOClgDmCX8N4I2lfgitX5oStqmvpPtB+vqtdyqsVM02fQ2tlJIAqwBW+NHaHqqy8Jv7g== @@ -3949,7 +3909,7 @@ resolved "https://registry.yarnpkg.com/@expo/config-types/-/config-types-52.0.3.tgz#511f2f868172c93abeac7183beeb921dc72d6e1e" integrity sha512-muxvuARmbysH5OGaiBRlh1Y6vfdmL56JtpXxB+y2Hfhu0ezG1U4FjZYBIacthckZPvnDCcP3xIu1R+eTo7/QFA== -"@expo/config-types@^53.0.2", "@expo/config-types@^53.0.3": +"@expo/config-types@^53.0.3": version "53.0.3" resolved "https://registry.yarnpkg.com/@expo/config-types/-/config-types-53.0.3.tgz#d083d9b095972e89eee96c41d085feb5b92d2749" integrity sha512-V1e6CiM4TXtGxG/W2Msjp/QOx/vikLo5IUGMvEMjgAglBfGYx3PXfqsUb5aZDt6kqA3bDDwFuZoS5vNm/SYwSg== @@ -3973,26 +3933,7 @@ slugify "^1.3.4" sucrase "3.35.0" -"@expo/config@~11.0.6": - version "11.0.6" - resolved "https://registry.yarnpkg.com/@expo/config/-/config-11.0.6.tgz#934efecf3393e0d47d00cadd511095b2255c3262" - integrity sha512-lmBP4kbNFiDLZoxPNuaN/UanFzns0+PxJA1eimOAHa6aFSAHTl48AHozbJ6UARbvig/TVTzLfGpoxv2Ih03iYQ== - dependencies: - "@babel/code-frame" "~7.10.4" - "@expo/config-plugins" "~10.0.0" - "@expo/config-types" "^53.0.2" - "@expo/json-file" "^9.1.3" - deepmerge "^4.3.1" - getenv "^1.0.0" - glob "^10.4.2" - require-from-string "^2.0.2" - resolve-from "^5.0.0" - resolve-workspace-root "^2.0.0" - semver "^7.6.0" - slugify "^1.3.4" - sucrase "3.35.0" - -"@expo/config@~11.0.7": +"@expo/config@~11.0.6", "@expo/config@~11.0.7": version "11.0.7" resolved "https://registry.yarnpkg.com/@expo/config/-/config-11.0.7.tgz#e6a6071942854269825e2450c3a115c963a4fd56" integrity sha512-pppH3Cy2IfituiYACMeW7cWYezcjmHKq7lDLfH1gMHT+zZ1QaYNs3EN6Kcc/QAXV//KFFhU0Qq4H/UrLuPp/yg== @@ -4069,9 +4010,9 @@ semver "^7.6.0" "@expo/html-elements@^0.12.4": - version "0.12.4" - resolved "https://registry.yarnpkg.com/@expo/html-elements/-/html-elements-0.12.4.tgz#e08f2028133a0aed6207560f5d1b12aa328c4523" - integrity sha512-IkCOGc6acGf+wUdpIJrmQzM+IzKVzAmzrMO3UTZ+7W9ifflAjsoKBv4eWGkogX+lwqzNyg9ynx6GJQIU6Pt6/w== + version "0.12.5" + resolved "https://registry.yarnpkg.com/@expo/html-elements/-/html-elements-0.12.5.tgz#be7e7af9f2be6d3f1aa3ec2e7ae1c121c91a9aa1" + integrity sha512-28KWO88YKykKU7ke5sEQs5TivFRMs1Aktz13xxgqAf5rTgb+lka0VKVt3W2fG7ksbUQ407rtUqz7SEAq298NvQ== "@expo/image-utils@0.3.23", "@expo/image-utils@0.6.3", "@expo/image-utils@^0.6.3", "@expo/image-utils@^0.7.4": version "0.6.3" @@ -4098,14 +4039,6 @@ json5 "^2.2.3" write-file-atomic "^2.3.0" -"@expo/json-file@^9.1.3", "@expo/json-file@~9.1.3": - version "9.1.3" - resolved "https://registry.yarnpkg.com/@expo/json-file/-/json-file-9.1.3.tgz#7e40658345e694c33641cf5750ac08d42cf00c84" - integrity sha512-u+5OxD589x+BkR3CerGKshz7OTX23xFAkKWH0Vu2uG0nNrHwAC+RMafvehiP3+xnDrFwuK+oGtZJpg6+fW3bHw== - dependencies: - "@babel/code-frame" "~7.10.4" - json5 "^2.2.3" - "@expo/json-file@^9.1.4", "@expo/json-file@~9.1.4": version "9.1.4" resolved "https://registry.yarnpkg.com/@expo/json-file/-/json-file-9.1.4.tgz#e719d092c08afb3234643f9285e57c6a24989327" @@ -4186,15 +4119,6 @@ base64-js "^1.2.3" xmlbuilder "^14.0.0" -"@expo/plist@^0.3.3": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@expo/plist/-/plist-0.3.3.tgz#fe2da503d7e6a411161e11c79ecab629c256161d" - integrity sha512-tpokZlWbeMm8UwW5311XyEv4tELGysZYkzq+f+LOgi9DRcGPmGPtcQ+aD1dZv4JZkld82AnTUWu0sfWDZdwpNA== - dependencies: - "@xmldom/xmldom" "^0.8.8" - base64-js "^1.2.3" - xmlbuilder "^15.1.1" - "@expo/plist@^0.3.4": version "0.3.4" resolved "https://registry.yarnpkg.com/@expo/plist/-/plist-0.3.4.tgz#0c48eeff2158cf26c5c9ed4f681d24997ccfbeca" @@ -7637,9 +7561,9 @@ integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== "@types/react-dom@^19.1.2": - version "19.1.2" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-19.1.2.tgz#bd1fe3b8c28a3a2e942f85314dcfb71f531a242f" - integrity sha512-XGJkWF41Qq305SKWEILa1O8vzhb3aOo3ogBlSmiqNko/WmRb6QIaweuZCXjKygVDXpzXb5wyxKTSOsmkuqj+Qw== + version "19.1.3" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-19.1.3.tgz#3f0c60804441bf34d19f8dd0d44405c0c0e21bfa" + integrity sha512-rJXC08OG0h3W6wDMFxQrZF00Kq6qQvw0djHRdzl3U5DnIERz0MRce3WVc7IS6JYBwtaP/DwYtRRjVlvivNveKg== "@types/react-responsive@^8.0.5": version "8.0.5" From 90ab8a8ebbbd3d3b5e8b390041302a6349890bdd Mon Sep 17 00:00:00 2001 From: Hailey Date: Mon, 28 Apr 2025 12:18:03 -0700 Subject: [PATCH 03/13] enable new arch --- app.config.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/app.config.js b/app.config.js index dae8ca38cc..e9f4a2abdd 100644 --- a/app.config.js +++ b/app.config.js @@ -211,13 +211,11 @@ module.exports = function (_config) { { ios: { deploymentTarget: '15.1', - newArchEnabled: false, }, android: { compileSdkVersion: 35, targetSdkVersion: 35, buildToolsVersion: '35.0.0', - newArchEnabled: false, }, }, ], From 482166d88d030b2ac716afe7dc80fc1afc95180f Mon Sep 17 00:00:00 2001 From: Hailey Date: Mon, 28 Apr 2025 14:09:17 -0700 Subject: [PATCH 04/13] bump mmkv --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index c94d132000..47f8afd162 100644 --- a/package.json +++ b/package.json @@ -191,7 +191,7 @@ "react-native-image-crop-picker": "^0.42.0", "react-native-ios-context-menu": "^1.15.3", "react-native-keyboard-controller": "^1.17.1", - "react-native-mmkv": "^2.12.2", + "react-native-mmkv": "^3.2.0", "react-native-pager-view": "6.7.1", "react-native-picker-select": "^9.3.1", "react-native-progress": "bluesky-social/react-native-progress", diff --git a/yarn.lock b/yarn.lock index 66dceefdf7..f69443390e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -16857,10 +16857,10 @@ react-native-keyboard-controller@^1.17.1: dependencies: react-native-is-edge-to-edge "^1.1.6" -react-native-mmkv@^2.12.2: - version "2.12.2" - resolved "https://registry.yarnpkg.com/react-native-mmkv/-/react-native-mmkv-2.12.2.tgz#4bba0f5f04e2cf222494cce3a9794ba6a4894dee" - integrity sha512-6058Aq0p57chPrUutLGe9fYoiDVDNMU2PKV+lLFUJ3GhoHvUrLdsS1PDSCLr00yqzL4WJQ7TTzH+V8cpyrNcfg== +react-native-mmkv@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/react-native-mmkv/-/react-native-mmkv-3.2.0.tgz#460723eb23b9cc92c65b0416eae9874a6ddf5b82" + integrity sha512-9y7K//1MaU46TFrXkyU0wT5VGk9Y2FDLFV6NPl+z3jTbm2G7SC1UIxneF6CfhSmBX5CfKze9SO7kwDuRx7flpQ== react-native-pager-view@6.7.1: version "6.7.1" From 13ff0d1595f11968039132a05db2a3fcf6f52703 Mon Sep 17 00:00:00 2001 From: Hailey Date: Mon, 28 Apr 2025 15:16:11 -0700 Subject: [PATCH 05/13] more upgrades --- package.json | 6 +++--- yarn.lock | 41 +++++++++++++++++------------------------ 2 files changed, 20 insertions(+), 27 deletions(-) diff --git a/package.json b/package.json index 47f8afd162..3e664f9603 100644 --- a/package.json +++ b/package.json @@ -88,9 +88,9 @@ "@haileyok/bluesky-video": "0.2.6", "@ipld/dag-cbor": "^9.2.0", "@lingui/react": "^4.14.1", - "@mattermost/react-native-paste-input": "^0.7.1", - "@miblanchard/react-native-slider": "^2.3.1", - "@mozzius/expo-dynamic-app-icon": "^1.5.0", + "@mattermost/react-native-paste-input": "^0.8.1", + "@miblanchard/react-native-slider": "^2.6.0", + "@mozzius/expo-dynamic-app-icon": "^1.6.0", "@react-native-async-storage/async-storage": "2.1.2", "@react-native-menu/menu": "^1.2.3", "@react-native-picker/picker": "2.11.0", diff --git a/yarn.lock b/yarn.lock index f69443390e..42c972f901 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5107,12 +5107,12 @@ "@babel/runtime" "^7.20.13" "@lingui/core" "4.14.1" -"@mattermost/react-native-paste-input@^0.7.1": - version "0.7.1" - resolved "https://registry.yarnpkg.com/@mattermost/react-native-paste-input/-/react-native-paste-input-0.7.1.tgz#f14585030b992cf7c9bbd0921225eefa501756ba" - integrity sha512-kY8LKtqRX2T/rtn/HNrzTitijuATvyzd6yl5WNWOsszmyzNcssKStjjCTBup04CyMxfwutUU1CWrYUb3hQO7oA== +"@mattermost/react-native-paste-input@^0.8.1": + version "0.8.1" + resolved "https://registry.yarnpkg.com/@mattermost/react-native-paste-input/-/react-native-paste-input-0.8.1.tgz#944ec69d0c49c3607265a02ad04103cc5b556caf" + integrity sha512-QHpwWORPALmX5FczCewRlJkVqtltD84mlpMpto5IGLKdHMAoHeXMiG4VJVh2XkRQvTyUhYegtrUrJzf8dkJokA== dependencies: - semver "7.6.0" + semver "7.6.3" "@messageformat/parser@^5.0.0": version "5.1.0" @@ -5121,15 +5121,15 @@ dependencies: moo "^0.5.1" -"@miblanchard/react-native-slider@^2.3.1": - version "2.3.1" - resolved "https://registry.yarnpkg.com/@miblanchard/react-native-slider/-/react-native-slider-2.3.1.tgz#79e0f1f9b1ce43ef25ee51ee9256c012e5dfa412" - integrity sha512-J/hZDBWmXq8fJeOnTVHqIUVDHshqMSpJVxJ4WqwuCBKl5Rke9OBYXIdkSlgi75OgtScAr8FKK5KNkDKHUf6JIg== +"@miblanchard/react-native-slider@^2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@miblanchard/react-native-slider/-/react-native-slider-2.6.0.tgz#9f78c805d637ffaff0e3e7429932d2995a67edc9" + integrity sha512-o7hk/f/8vkqh6QNR5L52m+ws846fQeD/qNCC9CCSRdBqjq66KiCgbxzlhRzKM/gbtxcvMYMIEEJ1yes5cr6I3A== -"@mozzius/expo-dynamic-app-icon@^1.5.0": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@mozzius/expo-dynamic-app-icon/-/expo-dynamic-app-icon-1.5.0.tgz#c5f88c309965b6d6b89cfd5e2c00faa7bda736af" - integrity sha512-yE2yEPO+HQmOqsX7cECh7/vu/LXnqhHGsVm3UiVi/3gaK8u5hAkPTNzZ0Qu6vnMwjPnY+uFbN6X+6Aj9c9yjMQ== +"@mozzius/expo-dynamic-app-icon@^1.6.0": + version "1.6.0" + resolved "https://registry.yarnpkg.com/@mozzius/expo-dynamic-app-icon/-/expo-dynamic-app-icon-1.6.0.tgz#baed590c733a1c5d09b244c115abc7248f6e1a86" + integrity sha512-lPvEKEdMlZ1iC8qLjDM8DQGXyAUbJdYxFTvIv4YuyBRdmamIgesoeRLRubAoRNLKBm0pqPpxVomZwjnnZfobyg== dependencies: "@expo/image-utils" "^0.6.3" expo-modules-core "^2.1.1" @@ -17747,12 +17747,10 @@ semver-compare@^1.0.0: resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" integrity sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow== -semver@7.6.0: - version "7.6.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" - integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== - dependencies: - lru-cache "^6.0.0" +semver@7.6.3, semver@^7.1.3, semver@^7.6.3: + version "7.6.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" + integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== semver@^5.5.0, semver@^5.6.0: version "5.7.2" @@ -17764,11 +17762,6 @@ semver@^6.0.0, semver@^6.3.0, semver@^6.3.1: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.1.3, semver@^7.6.3: - version "7.6.3" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" - integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== - semver@^7.3.5, semver@^7.3.7, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4, semver@~7.5.4: version "7.5.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" From 709a2bcdf13aa98ddd4fe90a889d117054b0eeb9 Mon Sep 17 00:00:00 2001 From: Hailey Date: Mon, 28 Apr 2025 21:32:19 -0700 Subject: [PATCH 06/13] downgrade --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 3e664f9603..6048faf664 100644 --- a/package.json +++ b/package.json @@ -90,7 +90,7 @@ "@lingui/react": "^4.14.1", "@mattermost/react-native-paste-input": "^0.8.1", "@miblanchard/react-native-slider": "^2.6.0", - "@mozzius/expo-dynamic-app-icon": "^1.6.0", + "@mozzius/expo-dynamic-app-icon": "1.5.0", "@react-native-async-storage/async-storage": "2.1.2", "@react-native-menu/menu": "^1.2.3", "@react-native-picker/picker": "2.11.0", diff --git a/yarn.lock b/yarn.lock index 42c972f901..84e96e4f33 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5126,10 +5126,10 @@ resolved "https://registry.yarnpkg.com/@miblanchard/react-native-slider/-/react-native-slider-2.6.0.tgz#9f78c805d637ffaff0e3e7429932d2995a67edc9" integrity sha512-o7hk/f/8vkqh6QNR5L52m+ws846fQeD/qNCC9CCSRdBqjq66KiCgbxzlhRzKM/gbtxcvMYMIEEJ1yes5cr6I3A== -"@mozzius/expo-dynamic-app-icon@^1.6.0": - version "1.6.0" - resolved "https://registry.yarnpkg.com/@mozzius/expo-dynamic-app-icon/-/expo-dynamic-app-icon-1.6.0.tgz#baed590c733a1c5d09b244c115abc7248f6e1a86" - integrity sha512-lPvEKEdMlZ1iC8qLjDM8DQGXyAUbJdYxFTvIv4YuyBRdmamIgesoeRLRubAoRNLKBm0pqPpxVomZwjnnZfobyg== +"@mozzius/expo-dynamic-app-icon@1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@mozzius/expo-dynamic-app-icon/-/expo-dynamic-app-icon-1.5.0.tgz#c5f88c309965b6d6b89cfd5e2c00faa7bda736af" + integrity sha512-yE2yEPO+HQmOqsX7cECh7/vu/LXnqhHGsVm3UiVi/3gaK8u5hAkPTNzZ0Qu6vnMwjPnY+uFbN6X+6Aj9c9yjMQ== dependencies: "@expo/image-utils" "^0.6.3" expo-modules-core "^2.1.1" From acdcf9d1fd4d032210deca3d6357ab5a6fd60c74 Mon Sep 17 00:00:00 2001 From: Hailey Date: Tue, 29 Apr 2025 17:59:50 -0700 Subject: [PATCH 07/13] more bumps that let the thing build on ios --- app.config.js | 1 + package.json | 2 +- yarn.lock | 25 ++++++++++++++++--------- 3 files changed, 18 insertions(+), 10 deletions(-) diff --git a/app.config.js b/app.config.js index e9f4a2abdd..6fd4422bca 100644 --- a/app.config.js +++ b/app.config.js @@ -211,6 +211,7 @@ module.exports = function (_config) { { ios: { deploymentTarget: '15.1', + newArchEnabled: true, }, android: { compileSdkVersion: 35, diff --git a/package.json b/package.json index 6048faf664..253622189a 100644 --- a/package.json +++ b/package.json @@ -88,7 +88,7 @@ "@haileyok/bluesky-video": "0.2.6", "@ipld/dag-cbor": "^9.2.0", "@lingui/react": "^4.14.1", - "@mattermost/react-native-paste-input": "^0.8.1", + "@mattermost/react-native-paste-input": "^0.7.1", "@miblanchard/react-native-slider": "^2.6.0", "@mozzius/expo-dynamic-app-icon": "1.5.0", "@react-native-async-storage/async-storage": "2.1.2", diff --git a/yarn.lock b/yarn.lock index 84e96e4f33..42e59f71e9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5107,12 +5107,12 @@ "@babel/runtime" "^7.20.13" "@lingui/core" "4.14.1" -"@mattermost/react-native-paste-input@^0.8.1": - version "0.8.1" - resolved "https://registry.yarnpkg.com/@mattermost/react-native-paste-input/-/react-native-paste-input-0.8.1.tgz#944ec69d0c49c3607265a02ad04103cc5b556caf" - integrity sha512-QHpwWORPALmX5FczCewRlJkVqtltD84mlpMpto5IGLKdHMAoHeXMiG4VJVh2XkRQvTyUhYegtrUrJzf8dkJokA== +"@mattermost/react-native-paste-input@^0.7.1": + version "0.7.1" + resolved "https://registry.yarnpkg.com/@mattermost/react-native-paste-input/-/react-native-paste-input-0.7.1.tgz#f14585030b992cf7c9bbd0921225eefa501756ba" + integrity sha512-kY8LKtqRX2T/rtn/HNrzTitijuATvyzd6yl5WNWOsszmyzNcssKStjjCTBup04CyMxfwutUU1CWrYUb3hQO7oA== dependencies: - semver "7.6.3" + semver "7.6.0" "@messageformat/parser@^5.0.0": version "5.1.0" @@ -17747,10 +17747,12 @@ semver-compare@^1.0.0: resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" integrity sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow== -semver@7.6.3, semver@^7.1.3, semver@^7.6.3: - version "7.6.3" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" - integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== +semver@7.6.0: + version "7.6.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" + integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== + dependencies: + lru-cache "^6.0.0" semver@^5.5.0, semver@^5.6.0: version "5.7.2" @@ -17762,6 +17764,11 @@ semver@^6.0.0, semver@^6.3.0, semver@^6.3.1: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== +semver@^7.1.3, semver@^7.6.3: + version "7.6.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" + integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== + semver@^7.3.5, semver@^7.3.7, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4, semver@~7.5.4: version "7.5.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" From 185dcb0bffdd59132cc9c084177fade48f6f17db Mon Sep 17 00:00:00 2001 From: hailey Date: Tue, 29 Apr 2025 21:37:56 -0700 Subject: [PATCH 08/13] [new arch] experiment - use animatedview/animatedref to measure rect for lightbox (#8298) * more upgrades * use animatedview/animatedref for measurements in lightbox * rm usehandleref * downgrade dynamic app icon * more bumps that let the thing build on ios * bumps that let it build for ios * bump expo --------- Co-authored-by: Samuel Newman --- src/lib/hooks/useHandleRef.ts | 39 ------------------- src/screens/Profile/Header/Shell.tsx | 24 +++++++----- src/view/com/profile/ProfileSubpageHeader.tsx | 24 +++++++----- src/view/com/util/images/AutoSizedImage.tsx | 19 +++++---- src/view/com/util/images/Gallery.tsx | 16 ++++---- src/view/com/util/images/ImageLayoutGrid.tsx | 20 +++++----- src/view/com/util/post-embeds/index.tsx | 25 +++++++----- 7 files changed, 73 insertions(+), 94 deletions(-) delete mode 100644 src/lib/hooks/useHandleRef.ts diff --git a/src/lib/hooks/useHandleRef.ts b/src/lib/hooks/useHandleRef.ts deleted file mode 100644 index 167ba270b6..0000000000 --- a/src/lib/hooks/useHandleRef.ts +++ /dev/null @@ -1,39 +0,0 @@ -import {useState} from 'react' -import {AnimatedRef, measure, MeasuredDimensions} from 'react-native-reanimated' - -export type HandleRef = { - (node: any): void - current: null | number -} - -// This is a lighterweight alternative to `useAnimatedRef()` for imperative UI thread actions. -// Render it like , then pass `ref.current` to `measureHandle()` and such. -export function useHandleRef(): HandleRef { - return useState(() => { - const ref = (node: any) => { - if (node) { - ref.current = - node._nativeTag ?? - node.__nativeTag ?? - node.canonical?.nativeTag ?? - null - } else { - ref.current = null - } - } - ref.current = null - return ref - })[0] as HandleRef -} - -// When using this version, you need to read ref.current on the JS thread, and pass it to UI. -export function measureHandle( - current: number | null, -): MeasuredDimensions | null { - 'worklet' - if (current !== null) { - return measure((() => current) as AnimatedRef) - } else { - return null - } -} diff --git a/src/screens/Profile/Header/Shell.tsx b/src/screens/Profile/Header/Shell.tsx index a3efdedf5e..21d33d84b0 100644 --- a/src/screens/Profile/Header/Shell.tsx +++ b/src/screens/Profile/Header/Shell.tsx @@ -1,17 +1,22 @@ import React, {memo} from 'react' import {StyleSheet, TouchableWithoutFeedback, View} from 'react-native' -import {MeasuredDimensions, runOnJS, runOnUI} from 'react-native-reanimated' +import Animated, { + measure, + type MeasuredDimensions, + runOnJS, + runOnUI, + useAnimatedRef, +} from 'react-native-reanimated' import {useSafeAreaInsets} from 'react-native-safe-area-context' -import {AppBskyActorDefs, ModerationDecision} from '@atproto/api' +import {type AppBskyActorDefs, type ModerationDecision} from '@atproto/api' import {msg} from '@lingui/macro' import {useLingui} from '@lingui/react' import {useNavigation} from '@react-navigation/native' import {BACK_HITSLOP} from '#/lib/constants' -import {measureHandle, useHandleRef} from '#/lib/hooks/useHandleRef' -import {NavigationProp} from '#/lib/routes/types' +import {type NavigationProp} from '#/lib/routes/types' import {isIOS} from '#/platform/detection' -import {Shadow} from '#/state/cache/types' +import {type Shadow} from '#/state/cache/types' import {useLightboxControls} from '#/state/lightbox' import {useSession} from '#/state/session' import {LoadingPlaceholder} from '#/view/com/util/LoadingPlaceholder' @@ -46,7 +51,7 @@ let ProfileHeaderShell = ({ const navigation = useNavigation() const {top: topInset} = useSafeAreaInsets() - const aviRef = useHandleRef() + const aviRef = useAnimatedRef() const onPressBack = React.useCallback(() => { if (navigation.canGoBack()) { @@ -83,10 +88,9 @@ let ProfileHeaderShell = ({ const modui = moderation.ui('avatar') const avatar = profile.avatar if (avatar && !(modui.blur && modui.noOverride)) { - const aviHandle = aviRef.current runOnUI(() => { 'worklet' - const rect = measureHandle(aviHandle) + const rect = measure(aviRef) runOnJS(_openLightbox)(avatar, rect) })() } @@ -174,14 +178,14 @@ let ProfileHeaderShell = ({ styles.avi, profile.associated?.labeler && styles.aviLabeler, ]}> - + - + diff --git a/src/view/com/profile/ProfileSubpageHeader.tsx b/src/view/com/profile/ProfileSubpageHeader.tsx index b0cf4d10e4..02a6704bf9 100644 --- a/src/view/com/profile/ProfileSubpageHeader.tsx +++ b/src/view/com/profile/ProfileSubpageHeader.tsx @@ -1,23 +1,28 @@ import React from 'react' import {Pressable, View} from 'react-native' -import {MeasuredDimensions, runOnJS, runOnUI} from 'react-native-reanimated' -import {AppBskyGraphDefs} from '@atproto/api' +import Animated, { + measure, + type MeasuredDimensions, + runOnJS, + runOnUI, + useAnimatedRef, +} from 'react-native-reanimated' +import {type AppBskyGraphDefs} from '@atproto/api' import {msg, Trans} from '@lingui/macro' import {useLingui} from '@lingui/react' import {useNavigation} from '@react-navigation/native' -import {measureHandle, useHandleRef} from '#/lib/hooks/useHandleRef' import {usePalette} from '#/lib/hooks/usePalette' import {useWebMediaQueries} from '#/lib/hooks/useWebMediaQueries' import {makeProfileLink} from '#/lib/routes/links' -import {NavigationProp} from '#/lib/routes/types' +import {type NavigationProp} from '#/lib/routes/types' import {sanitizeHandle} from '#/lib/strings/handles' import {emitSoftReset} from '#/state/events' import {useLightboxControls} from '#/state/lightbox' import {TextLink} from '#/view/com/util/Link' import {LoadingPlaceholder} from '#/view/com/util/LoadingPlaceholder' import {Text} from '#/view/com/util/text/Text' -import {UserAvatar, UserAvatarType} from '#/view/com/util/UserAvatar' +import {UserAvatar, type UserAvatarType} from '#/view/com/util/UserAvatar' import {StarterPack} from '#/components/icons/StarterPack' import * as Layout from '#/components/Layout' @@ -52,7 +57,7 @@ export function ProfileSubpageHeader({ const {openLightbox} = useLightboxControls() const pal = usePalette('default') const canGoBack = navigation.canGoBack() - const aviRef = useHandleRef() + const aviRef = useAnimatedRef() const _openLightbox = React.useCallback( (uri: string, thumbRect: MeasuredDimensions | null) => { @@ -81,10 +86,9 @@ export function ProfileSubpageHeader({ if ( avatar // TODO && !(view.moderation.avatar.blur && view.moderation.avatar.noOverride) ) { - const aviHandle = aviRef.current runOnUI(() => { 'worklet' - const rect = measureHandle(aviHandle) + const rect = measure(aviRef) runOnJS(_openLightbox)(avatar, rect) })() } @@ -111,7 +115,7 @@ export function ProfileSubpageHeader({ paddingBottom: 14, paddingHorizontal: isMobile ? 12 : 14, }}> - + )} - + {isLoading ? ( void + onPress?: ( + containerRef: AnimatedRef, + fetchedDims: Dimensions | null, + ) => void onLongPress?: () => void onPressIn?: () => void }) { const t = useTheme() const {_} = useLingui() const largeAlt = useLargeAltBadgeEnabled() - const containerRef = useHandleRef() + const containerRef = useAnimatedRef() const fetchedDimsRef = useRef<{width: number; height: number} | null>(null) let aspectRatio: number | undefined @@ -103,7 +106,7 @@ export function AutoSizedImage({ const hasAlt = !!image.alt const contents = ( - + ) : null} - + ) if (cropDisabled) { diff --git a/src/view/com/util/images/Gallery.tsx b/src/view/com/util/images/Gallery.tsx index cc3eda68d2..1d35c88c59 100644 --- a/src/view/com/util/images/Gallery.tsx +++ b/src/view/com/util/images/Gallery.tsx @@ -1,12 +1,12 @@ -import React from 'react' -import {Pressable, StyleProp, View, ViewStyle} from 'react-native' -import {Image, ImageStyle} from 'expo-image' -import {AppBskyEmbedImages} from '@atproto/api' +import {Pressable, type StyleProp, View, type ViewStyle} from 'react-native' +import {type AnimatedRef} from 'react-native-reanimated' +import {Image, type ImageStyle} from 'expo-image' +import {type AppBskyEmbedImages} from '@atproto/api' import {msg} from '@lingui/macro' import {useLingui} from '@lingui/react' +import type React from 'react' -import {HandleRef} from '#/lib/hooks/useHandleRef' -import {Dimensions} from '#/lib/media/types' +import {type Dimensions} from '#/lib/media/types' import {useLargeAltBadgeEnabled} from '#/state/preferences/large-alt-badge' import {PostEmbedViewContext} from '#/view/com/util/post-embeds/types' import {atoms as a, useTheme} from '#/alf' @@ -20,7 +20,7 @@ interface Props { index: number onPress?: ( index: number, - containerRefs: HandleRef[], + containerRefs: AnimatedRef[], fetchedDims: (Dimensions | null)[], ) => void onLongPress?: EventFunction @@ -28,7 +28,7 @@ interface Props { imageStyle?: StyleProp viewContext?: PostEmbedViewContext insetBorderStyle?: StyleProp - containerRefs: HandleRef[] + containerRefs: AnimatedRef[] thumbDimsRef: React.MutableRefObject<(Dimensions | null)[]> } diff --git a/src/view/com/util/images/ImageLayoutGrid.tsx b/src/view/com/util/images/ImageLayoutGrid.tsx index 16ea9d453f..b91d7a7adb 100644 --- a/src/view/com/util/images/ImageLayoutGrid.tsx +++ b/src/view/com/util/images/ImageLayoutGrid.tsx @@ -1,18 +1,18 @@ import React from 'react' -import {StyleProp, StyleSheet, View, ViewStyle} from 'react-native' -import {AppBskyEmbedImages} from '@atproto/api' +import {type StyleProp, StyleSheet, View, type ViewStyle} from 'react-native' +import {type AnimatedRef, useAnimatedRef} from 'react-native-reanimated' +import {type AppBskyEmbedImages} from '@atproto/api' -import {HandleRef, useHandleRef} from '#/lib/hooks/useHandleRef' import {PostEmbedViewContext} from '#/view/com/util/post-embeds/types' import {atoms as a, useBreakpoints} from '#/alf' -import {Dimensions} from '../../lightbox/ImageViewing/@types' +import {type Dimensions} from '../../lightbox/ImageViewing/@types' import {GalleryItem} from './Gallery' interface ImageLayoutGridProps { images: AppBskyEmbedImages.ViewImage[] onPress?: ( index: number, - containerRefs: HandleRef[], + containerRefs: AnimatedRef[], fetchedDims: (Dimensions | null)[], ) => void onLongPress?: (index: number) => void @@ -43,7 +43,7 @@ interface ImageLayoutGridInnerProps { images: AppBskyEmbedImages.ViewImage[] onPress?: ( index: number, - containerRefs: HandleRef[], + containerRefs: AnimatedRef[], fetchedDims: (Dimensions | null)[], ) => void onLongPress?: (index: number) => void @@ -56,10 +56,10 @@ function ImageLayoutGridInner(props: ImageLayoutGridInnerProps) { const gap = props.gap const count = props.images.length - const containerRef1 = useHandleRef() - const containerRef2 = useHandleRef() - const containerRef3 = useHandleRef() - const containerRef4 = useHandleRef() + const containerRef1 = useAnimatedRef() + const containerRef2 = useAnimatedRef() + const containerRef3 = useAnimatedRef() + const containerRef4 = useAnimatedRef() const thumbDimsRef = React.useRef<(Dimensions | null)[]>([]) switch (count) { diff --git a/src/view/com/util/post-embeds/index.tsx b/src/view/com/util/post-embeds/index.tsx index 6f5f9d3ab9..4cf71f9486 100644 --- a/src/view/com/util/post-embeds/index.tsx +++ b/src/view/com/util/post-embeds/index.tsx @@ -1,12 +1,18 @@ import React from 'react' import { InteractionManager, - StyleProp, + type StyleProp, StyleSheet, View, - ViewStyle, + type ViewStyle, } from 'react-native' -import {MeasuredDimensions, runOnJS, runOnUI} from 'react-native-reanimated' +import { + type AnimatedRef, + measure, + type MeasuredDimensions, + runOnJS, + runOnUI, +} from 'react-native-reanimated' import {Image} from 'expo-image' import { AppBskyEmbedExternal, @@ -18,10 +24,9 @@ import { AppBskyGraphDefs, moderateFeedGenerator, moderateUserList, - ModerationDecision, + type ModerationDecision, } from '@atproto/api' -import {HandleRef, measureHandle} from '#/lib/hooks/useHandleRef' import {usePalette} from '#/lib/hooks/usePalette' import {useLightboxControls} from '#/state/lightbox' import {useModerationOpts} from '#/state/preferences/moderation-opts' @@ -30,7 +35,7 @@ import {atoms as a, useTheme} from '#/alf' import * as ListCard from '#/components/ListCard' import {Embed as StarterPackCard} from '#/components/StarterPack/StarterPackCard' import {ContentHider} from '../../../../components/moderation/ContentHider' -import {Dimensions} from '../../lightbox/ImageViewing/@types' +import {type Dimensions} from '../../lightbox/ImageViewing/@types' import {AutoSizedImage} from '../images/AutoSizedImage' import {ImageLayoutGrid} from '../images/ImageLayoutGrid' import {ExternalLinkEmbed} from './ExternalLinkEmbed' @@ -158,13 +163,15 @@ export function PostEmbeds({ } const onPress = ( index: number, - refs: HandleRef[], + refs: AnimatedRef[], fetchedDims: (Dimensions | null)[], ) => { - const handles = refs.map(r => r.current) runOnUI(() => { 'worklet' - const rects = handles.map(measureHandle) + const rects: (MeasuredDimensions | null)[] = [] + for (const r of refs) { + rects.push(measure(r)) + } runOnJS(_openLightbox)(index, rects, fetchedDims) })() } From 00a8e12cee5919a0d68dbacd025cf36793e4f5d5 Mon Sep 17 00:00:00 2001 From: hailey Date: Tue, 29 Apr 2025 21:47:30 -0700 Subject: [PATCH 09/13] [new arch] remove rn-fetch-blob dependency (#8294) * remove fetchblob dependency * give error a name * fix timeout * give qr code dialog a handle * fix error toast text * more bumps that let the thing build on ios * bumps that let it build for ios * [new arch] experiment - use animatedview/animatedref to measure rect for lightbox (#8298) * more upgrades * use animatedview/animatedref for measurements in lightbox * rm usehandleref * downgrade dynamic app icon * more bumps that let the thing build on ios * bumps that let it build for ios * bump expo --------- Co-authored-by: Samuel Newman --------- Co-authored-by: Samuel Newman --- __tests__/lib/images.test.ts | 51 +++-------- jest/jestSetup.js | 9 +- package.json | 1 - src/components/StarterPack/QrCodeDialog.tsx | 5 +- src/components/StarterPack/ShareDialog.tsx | 8 +- src/lib/media/manip.ts | 97 +++++++++------------ yarn.lock | 27 +----- 7 files changed, 65 insertions(+), 133 deletions(-) diff --git a/__tests__/lib/images.test.ts b/__tests__/lib/images.test.ts index a5acad25f6..c7a645d39c 100644 --- a/__tests__/lib/images.test.ts +++ b/__tests__/lib/images.test.ts @@ -1,10 +1,9 @@ -import {deleteAsync} from 'expo-file-system' +import {createDownloadResumable, deleteAsync} from 'expo-file-system' import {manipulateAsync, SaveFormat} from 'expo-image-manipulator' -import RNFetchBlob from 'rn-fetch-blob' import { downloadAndResize, - DownloadAndResizeOpts, + type DownloadAndResizeOpts, getResizedDimensions, } from '../../src/lib/media/manip' @@ -32,11 +31,12 @@ describe('downloadAndResize', () => { }) it('should return resized image for valid URI and options', async () => { - const mockedFetch = RNFetchBlob.fetch as jest.Mock - mockedFetch.mockResolvedValueOnce({ - path: jest.fn().mockReturnValue('file://downloaded-image.jpg'), - info: jest.fn().mockReturnValue({status: 200}), - flush: jest.fn(), + const mockedFetch = createDownloadResumable as jest.Mock + mockedFetch.mockReturnValue({ + cancelAsync: jest.fn(), + downloadAsync: jest + .fn() + .mockResolvedValue({uri: 'file://resized-image.jpg'}), }) const opts: DownloadAndResizeOpts = { @@ -50,13 +50,12 @@ describe('downloadAndResize', () => { const result = await downloadAndResize(opts) expect(result).toEqual(mockResizedImage) - expect(RNFetchBlob.config).toHaveBeenCalledWith({ - fileCache: true, - appendExt: 'jpeg', - }) - expect(RNFetchBlob.fetch).toHaveBeenCalledWith( - 'GET', - 'https://example.com/image.jpg', + expect(createDownloadResumable).toHaveBeenCalledWith( + opts.uri, + expect.anything(), + { + cache: true, + }, ) // First time it gets called is to get dimensions @@ -86,28 +85,6 @@ describe('downloadAndResize', () => { expect(result).toBeUndefined() }) - it('should return undefined for non-200 response', async () => { - const mockedFetch = RNFetchBlob.fetch as jest.Mock - mockedFetch.mockResolvedValueOnce({ - path: jest.fn().mockReturnValue('file://downloaded-image'), - info: jest.fn().mockReturnValue({status: 400}), - flush: jest.fn(), - }) - - const opts: DownloadAndResizeOpts = { - uri: 'https://example.com/image', - width: 100, - height: 100, - maxSize: 500000, - mode: 'cover', - timeout: 10000, - } - - const result = await downloadAndResize(opts) - expect(errorSpy).not.toHaveBeenCalled() - expect(result).toBeUndefined() - }) - it('should not downsize whenever dimensions are below the max dimensions', () => { const initialDimensionsOne = { width: 1200, diff --git a/jest/jestSetup.js b/jest/jestSetup.js index d303225f6c..700d20afc0 100644 --- a/jest/jestSetup.js +++ b/jest/jestSetup.js @@ -33,15 +33,10 @@ jest.mock('react-native-safe-area-context', () => { } }) -jest.mock('rn-fetch-blob', () => ({ - config: jest.fn().mockReturnThis(), - cancel: jest.fn(), - fetch: jest.fn(), -})) - jest.mock('expo-file-system', () => ({ getInfoAsync: jest.fn().mockResolvedValue({exists: true, size: 100}), deleteAsync: jest.fn(), + createDownloadResumable: jest.fn(), })) jest.mock('expo-image-manipulator', () => ({ @@ -101,7 +96,7 @@ jest.mock('expo-modules-core', () => ({ } } }), - requireNativeViewManager: jest.fn().mockImplementation(moduleName => { + requireNativeViewManager: jest.fn().mockImplementation(_ => { return () => null }), })) diff --git a/package.json b/package.json index 253622189a..c4e8d44dc0 100644 --- a/package.json +++ b/package.json @@ -211,7 +211,6 @@ "react-remove-scroll-bar": "^2.3.8", "react-responsive": "^9.0.2", "react-textarea-autosize": "^8.5.3", - "rn-fetch-blob": "^0.12.0", "statsig-react-native-expo": "^4.6.1", "tippy.js": "^6.3.7", "tlds": "^1.234.0", diff --git a/src/components/StarterPack/QrCodeDialog.tsx b/src/components/StarterPack/QrCodeDialog.tsx index 43d8b72dad..19fd6257c8 100644 --- a/src/components/StarterPack/QrCodeDialog.tsx +++ b/src/components/StarterPack/QrCodeDialog.tsx @@ -4,7 +4,7 @@ import type ViewShot from 'react-native-view-shot' import {requestMediaLibraryPermissionsAsync} from 'expo-image-picker' import {createAssetAsync} from 'expo-media-library' import * as Sharing from 'expo-sharing' -import {AppBskyGraphDefs, AppBskyGraphStarterpack} from '@atproto/api' +import {type AppBskyGraphDefs, AppBskyGraphStarterpack} from '@atproto/api' import {msg, Trans} from '@lingui/macro' import {useLingui} from '@lingui/react' @@ -15,7 +15,7 @@ import * as Toast from '#/view/com/util/Toast' import {atoms as a} from '#/alf' import {Button, ButtonText} from '#/components/Button' import * as Dialog from '#/components/Dialog' -import {DialogControlProps} from '#/components/Dialog' +import {type DialogControlProps} from '#/components/Dialog' import {Loader} from '#/components/Loader' import {QrCode} from '#/components/StarterPack/QrCode' import * as bsky from '#/types/bsky' @@ -155,6 +155,7 @@ export function QrCodeDialog({ return ( + diff --git a/src/components/StarterPack/ShareDialog.tsx b/src/components/StarterPack/ShareDialog.tsx index 354d7bc4ee..ae7e6c418a 100644 --- a/src/components/StarterPack/ShareDialog.tsx +++ b/src/components/StarterPack/ShareDialog.tsx @@ -1,7 +1,7 @@ import {View} from 'react-native' import {Image} from 'expo-image' import {requestMediaLibraryPermissionsAsync} from 'expo-image-picker' -import {AppBskyGraphDefs} from '@atproto/api' +import {type AppBskyGraphDefs} from '@atproto/api' import {msg, Trans} from '@lingui/macro' import {useLingui} from '@lingui/react' @@ -15,7 +15,7 @@ import {isNative, isWeb} from '#/platform/detection' import * as Toast from '#/view/com/util/Toast' import {atoms as a, useTheme} from '#/alf' import {Button, ButtonText} from '#/components/Button' -import {DialogControlProps} from '#/components/Dialog' +import {type DialogControlProps} from '#/components/Dialog' import * as Dialog from '#/components/Dialog' import {Loader} from '#/components/Loader' import {Text} from '#/components/Typography' @@ -76,8 +76,8 @@ function ShareDialogInner({ Toast.show(_(msg`Image saved to your camera roll!`)) control.close() } catch (e: unknown) { - Toast.show(_(msg`An error occurred while saving the QR code!`), 'xmark') - logger.error('Failed to save QR code', {error: e}) + Toast.show(_(msg`An error occurred while saving the image!`), 'xmark') + logger.error('Failed to save starter pack image', {error: e}) return } } diff --git a/src/lib/media/manip.ts b/src/lib/media/manip.ts index f6ef8347de..b56964596f 100644 --- a/src/lib/media/manip.ts +++ b/src/lib/media/manip.ts @@ -1,9 +1,10 @@ -import {Image as RNImage, Share as RNShare} from 'react-native' -import {Image} from 'react-native-image-crop-picker' +import {Image as RNImage} from 'react-native' +import {type Image} from 'react-native-image-crop-picker' import uuid from 'react-native-uuid' import { cacheDirectory, copyAsync, + createDownloadResumable, deleteAsync, EncodingType, getInfoAsync, @@ -15,12 +16,11 @@ import {manipulateAsync, SaveFormat} from 'expo-image-manipulator' import * as MediaLibrary from 'expo-media-library' import * as Sharing from 'expo-sharing' import {Buffer} from 'buffer' -import RNFetchBlob from 'rn-fetch-blob' import {POST_IMG_MAX} from '#/lib/constants' import {logger} from '#/logger' import {isAndroid, isIOS} from '#/platform/detection' -import {Dimensions} from './types' +import {type Dimensions} from './types' export async function compressIfNeeded( img: Image, @@ -69,28 +69,13 @@ export async function downloadAndResize(opts: DownloadAndResizeOpts) { return } - let downloadRes + const path = createPath(appendExt) + try { - const downloadResPromise = RNFetchBlob.config({ - fileCache: true, - appendExt, - }).fetch('GET', opts.uri) - const to1 = setTimeout(() => downloadResPromise.cancel(), opts.timeout) - downloadRes = await downloadResPromise - clearTimeout(to1) - - const status = downloadRes.info().status - if (status !== 200) { - return - } - - const localUri = normalizePath(downloadRes.path(), true) - return await doResize(localUri, opts) + await downloadImage(opts.uri, path, opts.timeout) + return await doResize(path, opts) } finally { - // TODO Whenever we remove `rn-fetch-blob`, we will need to replace this `flush()` with a `deleteAsync()` -hailey - if (downloadRes) { - downloadRes.flush() - } + safeDeleteAsync(path) } } @@ -99,32 +84,16 @@ export async function shareImageModal({uri}: {uri: string}) { // TODO might need to give an error to the user in this case -prf return } - const downloadResponse = await RNFetchBlob.config({ - fileCache: true, - }).fetch('GET', uri) - // NOTE - // assuming PNG // we're currently relying on the fact our CDN only serves pngs // -prf - - let imagePath = downloadResponse.path() - imagePath = normalizePath(await moveToPermanentPath(imagePath, '.png'), true) - - // NOTE - // for some reason expo-sharing refuses to work on iOS - // ...and visa versa - // -prf - if (isIOS) { - await RNShare.share({url: imagePath}) - } else { - await Sharing.shareAsync(imagePath, { - mimeType: 'image/png', - UTI: 'image/png', - }) - } - - safeDeleteAsync(imagePath) + const imageUri = await downloadImage(uri, createPath('png'), 5e3) + const imagePath = await moveToPermanentPath(imageUri, '.png') + safeDeleteAsync(imageUri) + await Sharing.shareAsync(imagePath, { + mimeType: 'image/png', + UTI: 'image/png', + }) } export async function saveImageToMediaLibrary({uri}: {uri: string}) { @@ -133,15 +102,10 @@ export async function saveImageToMediaLibrary({uri}: {uri: string}) { // assuming PNG // we're currently relying on the fact our CDN only serves pngs // -prf - const downloadResponse = await RNFetchBlob.config({ - fileCache: true, - }).fetch('GET', uri) - let imagePath = downloadResponse.path() - imagePath = normalizePath(await moveToPermanentPath(imagePath, '.png'), true) - - // save - await MediaLibrary.createAssetAsync(imagePath) - safeDeleteAsync(imagePath) + const imageUri = await downloadImage(uri, createPath('png'), 5e3) + const imagePath = await moveToPermanentPath(imageUri, '.png') + safeDeleteAsync(imageUri) + MediaLibrary.createAssetAsync(imagePath) } export function getImageDim(path: string): Promise { @@ -366,3 +330,24 @@ export function getResizedDimensions(originalDims: { height: Math.round(originalDims.height * ratio), } } + +function createPath(ext: string) { + // cacheDirectory will never be null on native, so the null check here is not necessary except for typescript. + // we use a web-only function for downloadAndResize on web + return `${cacheDirectory ?? ''}/${uuid.v4()}.${ext}` +} + +async function downloadImage(uri: string, path: string, timeout: number) { + const dlResumable = createDownloadResumable(uri, path, {cache: true}) + + const to1 = setTimeout(() => dlResumable.cancelAsync(), timeout) + + const dlRes = await dlResumable.downloadAsync() + clearTimeout(to1) + + if (!dlRes?.uri) { + throw new Error('Failed to download image - dlRes is undefined') + } + + return normalizePath(dlRes.uri) +} diff --git a/yarn.lock b/yarn.lock index 42e59f71e9..cc2c816301 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8760,11 +8760,6 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== -base-64@0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/base-64/-/base-64-0.1.0.tgz#780a99c84e7d600260361511c4877613bf24f6bb" - integrity sha512-Y5gU45svrR5tI2Vt/X9GPd3L0HNIKzGu202EjxrXMpuc2V2CiKgemAbUUsqYmZJvPtCXoUKjNZwBJzsNScUbXA== - base64-arraybuffer@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz#1c37589a7c4b0746e34bd1feb951da2df01c1bdc" @@ -12085,18 +12080,6 @@ glob-to-regexp@^0.4.1: resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== -glob@7.0.6: - version "7.0.6" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.0.6.tgz#211bafaf49e525b8cd93260d14ab136152b3f57a" - integrity sha512-f8c0rE8JiCxpa52kWPAOa3ZaYEnzofDzCQLCn3Vdk0Z5OVLq3BsRFJI4S4ykpeVW6QMGBUkMeUpoEgWnMTnw5Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.2" - once "^1.3.0" - path-is-absolute "^1.0.0" - glob@^10.3.10: version "10.3.12" resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.12.tgz#3a65c363c2e9998d220338e88a5f6ac97302960b" @@ -14857,7 +14840,7 @@ minimalistic-crypto-utils@^1.0.1: resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== -minimatch@^3.0.2, minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: +minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== @@ -17552,14 +17535,6 @@ rimraf@^3.0.2: dependencies: glob "^7.1.3" -rn-fetch-blob@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/rn-fetch-blob/-/rn-fetch-blob-0.12.0.tgz#ec610d2f9b3f1065556b58ab9c106eeb256f3cba" - integrity sha512-+QnR7AsJ14zqpVVUbzbtAjq0iI8c9tCg49tIoKO2ezjzRunN7YL6zFSFSWZm6d+mE/l9r+OeDM3jmb2tBb2WbA== - dependencies: - base-64 "0.1.0" - glob "7.0.6" - roarr@^7.0.4: version "7.15.1" resolved "https://registry.yarnpkg.com/roarr/-/roarr-7.15.1.tgz#e4d93105c37b5ea7dd1200d96a3500f757ddc39f" From 992a08fac91e270c3c2dbf5b5a77dedec57d189d Mon Sep 17 00:00:00 2001 From: Hailey Date: Wed, 30 Apr 2025 21:26:24 -0700 Subject: [PATCH 10/13] omg thank u char Co-authored-by: Charlotte Som --- package.json | 5 +++-- yarn.lock | 39 ++++++--------------------------------- 2 files changed, 9 insertions(+), 35 deletions(-) diff --git a/package.json b/package.json index c4e8d44dc0..d82ee9cce8 100644 --- a/package.json +++ b/package.json @@ -201,7 +201,7 @@ "react-native-safe-area-context": "5.4.0", "react-native-screens": "~4.10.0", "react-native-svg": "15.11.2", - "react-native-uitextview": "^1.4.0", + "react-native-uitextview": "2.0.0-rc.10", "react-native-url-polyfill": "^1.3.0", "react-native-uuid": "^2.0.3", "react-native-view-shot": "^4.0.3", @@ -227,6 +227,7 @@ "@lingui/cli": "^4.14.1", "@lingui/macro": "^4.14.1", "@pmmmwh/react-refresh-webpack-plugin": "^0.5.15", + "@react-native/babel-preset": "0.79.2", "@react-native/eslint-config": "^0.79.2", "@react-native/typescript-config": "^0.79.2", "@sentry/webpack-plugin": "^3.2.2", @@ -246,7 +247,7 @@ "babel-plugin-macros": "^3.1.0", "babel-plugin-module-resolver": "^5.0.2", "babel-plugin-react-compiler": "^19.1.0-rc.1", - "babel-preset-expo": "~13.0.0", + "babel-preset-expo": "^13.1.11", "eslint": "^8.19.0", "eslint-plugin-bsky-internal": "link:./eslint", "eslint-plugin-ft-flow": "^2.0.3", diff --git a/yarn.lock b/yarn.lock index cc2c816301..b7f8e47d29 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6142,7 +6142,7 @@ "@babel/traverse" "^7.25.3" "@react-native/codegen" "0.79.2" -"@react-native/babel-preset@0.79.0-rc.4", "@react-native/babel-preset@0.79.2": +"@react-native/babel-preset@0.79.2": version "0.79.2" resolved "https://registry.yarnpkg.com/@react-native/babel-preset/-/babel-preset-0.79.2.tgz#5a683a6efeea357a326f70c84a881be2bafbeae3" integrity sha512-/HNu869oUq4FUXizpiNWrIhucsYZqu0/0spudJEzk9SEKar0EjVDP7zkg/sKK+KccNypDQGW7nFXT8onzvQ3og== @@ -8688,34 +8688,7 @@ babel-preset-current-node-syntax@^1.0.0: "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-syntax-top-level-await" "^7.8.3" -babel-preset-expo@~13.0.0: - version "13.0.0" - resolved "https://registry.yarnpkg.com/babel-preset-expo/-/babel-preset-expo-13.0.0.tgz#49662765a175994fd70ea89d1f7f6ea2147e5c98" - integrity sha512-4NfamKh+BKu6v0VUtZ2wFuZ9VdaDnYOC+vsAHhUF3ks1jzFLo9TwBqsrkhD129DIHfdhVJnRJah2KRCXEjcrVQ== - dependencies: - "@babel/helper-module-imports" "^7.25.9" - "@babel/plugin-proposal-decorators" "^7.12.9" - "@babel/plugin-proposal-export-default-from" "^7.24.7" - "@babel/plugin-syntax-export-default-from" "^7.24.7" - "@babel/plugin-transform-export-namespace-from" "^7.25.9" - "@babel/plugin-transform-flow-strip-types" "^7.25.2" - "@babel/plugin-transform-modules-commonjs" "^7.24.8" - "@babel/plugin-transform-object-rest-spread" "^7.24.7" - "@babel/plugin-transform-parameters" "^7.24.7" - "@babel/plugin-transform-private-methods" "^7.24.7" - "@babel/plugin-transform-private-property-in-object" "^7.24.7" - "@babel/plugin-transform-runtime" "^7.24.7" - "@babel/preset-react" "^7.22.15" - "@babel/preset-typescript" "^7.23.0" - "@react-native/babel-preset" "0.79.0-rc.4" - babel-plugin-react-native-web "~0.19.13" - babel-plugin-syntax-hermes-parser "^0.25.1" - babel-plugin-transform-flow-enums "^0.0.2" - debug "^4.3.4" - react-refresh "^0.14.2" - resolve-from "^5.0.0" - -babel-preset-expo@~13.1.11: +babel-preset-expo@^13.1.11, babel-preset-expo@~13.1.11: version "13.1.11" resolved "https://registry.yarnpkg.com/babel-preset-expo/-/babel-preset-expo-13.1.11.tgz#de81e6a621c9f40dcb1e0bf5f1fe111f82c10496" integrity sha512-jigWjvhRVdm9UTPJ1wjLYJ0OJvD5vLZ8YYkEknEl6+9S1JWORO/y3xtHr/hNj5n34nOilZqdXrmNFcqKc8YTsg== @@ -16917,10 +16890,10 @@ react-native-svg@15.11.2: css-tree "^1.1.3" warn-once "0.1.1" -react-native-uitextview@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/react-native-uitextview/-/react-native-uitextview-1.4.0.tgz#d1b583cc173cec00f4fdd03744cca76c54a12fbb" - integrity sha512-itm/frzkn/ma3+lwmKn2CkBOXPNo4bL8iVwQwjlzix5gVO59T2+axdfoj/Wi+Ra6F76KzNKxSah+7Y8dYmCHbQ== +react-native-uitextview@2.0.0-rc.10: + version "2.0.0-rc.10" + resolved "https://registry.yarnpkg.com/react-native-uitextview/-/react-native-uitextview-2.0.0-rc.10.tgz#b8f34edf795a924b97c7483cc0a760999caeb7d9" + integrity sha512-dv4rgNFEjjGcZ5s3+ll1DgCSK8YI91Z9Uvh36f9ObG2qgUxLqfxTUnp6AbJTQRxt5kTLo9y1gXVaguxGJNh39Q== react-native-url-polyfill@^1.3.0: version "1.3.0" From deffc2c70fca7ca4391ac44c50a3667a93f4fe2c Mon Sep 17 00:00:00 2001 From: Hailey Date: Thu, 1 May 2025 17:41:48 -0700 Subject: [PATCH 11/13] bump video --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index d82ee9cce8..98dbbb551d 100644 --- a/package.json +++ b/package.json @@ -85,7 +85,7 @@ "@fortawesome/free-regular-svg-icons": "^6.1.1", "@fortawesome/free-solid-svg-icons": "^6.1.1", "@fortawesome/react-native-fontawesome": "^0.3.2", - "@haileyok/bluesky-video": "0.2.6", + "@haileyok/bluesky-video": "0.3.1", "@ipld/dag-cbor": "^9.2.0", "@lingui/react": "^4.14.1", "@mattermost/react-native-paste-input": "^0.7.1", diff --git a/yarn.lock b/yarn.lock index b7f8e47d29..b7e8cc03e8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4404,10 +4404,10 @@ protobufjs "^7.2.5" yargs "^17.7.2" -"@haileyok/bluesky-video@0.2.6": - version "0.2.6" - resolved "https://registry.yarnpkg.com/@haileyok/bluesky-video/-/bluesky-video-0.2.6.tgz#61bb4ff908498558fd2320f06ba0f74ea03598b4" - integrity sha512-IlzrTATD7ci/a+ehSA7pIhOvxxNTe35zdzBYt8EmVvKKafyeFhxGfDuuP5qxfQmHurcQMIL+3HeZgnAXwQQNmQ== +"@haileyok/bluesky-video@0.3.1": + version "0.3.1" + resolved "https://registry.yarnpkg.com/@haileyok/bluesky-video/-/bluesky-video-0.3.1.tgz#c996d8433e8f1988f2e9644adf39366fb4305d00" + integrity sha512-TU5c0RCV1yWF/HEZA22E0qXjxNzu0SOuMZpvdo+QVrO4tQcja9k8nHBbKRmyj60Odke4HQMoTOfNDNq/xo2Grw== "@hapi/accept@^6.0.3": version "6.0.3" From 8f8f8143e32d6f89c3cdbc1e437d9fcd40937674 Mon Sep 17 00:00:00 2001 From: Hailey Date: Thu, 1 May 2025 18:54:34 -0700 Subject: [PATCH 12/13] fix bottom sheet --- modules/bottom-sheet/ios/SheetView.swift | 37 ++++++++++--------- .../bottom-sheet/ios/SurfaceTouchHandler.h | 3 ++ 2 files changed, 22 insertions(+), 18 deletions(-) create mode 100644 modules/bottom-sheet/ios/SurfaceTouchHandler.h diff --git a/modules/bottom-sheet/ios/SheetView.swift b/modules/bottom-sheet/ios/SheetView.swift index b6df8d7d2d..46b0805d74 100644 --- a/modules/bottom-sheet/ios/SheetView.swift +++ b/modules/bottom-sheet/ios/SheetView.swift @@ -5,7 +5,7 @@ class SheetView: ExpoView, UISheetPresentationControllerDelegate { // Views private var sheetVc: SheetViewController? private var innerView: UIView? - private var touchHandler: RCTTouchHandler? + private var touchHandler: RCTSurfaceTouchHandler? // Events private let onAttemptDismiss = EventDispatcher() @@ -73,33 +73,35 @@ class SheetView: ExpoView, UISheetPresentationControllerDelegate { required init (appContext: AppContext? = nil) { super.init(appContext: appContext) self.maxHeight = Util.getScreenHeight() - self.touchHandler = RCTTouchHandler(bridge: appContext?.reactBridge) + self.touchHandler = RCTSurfaceTouchHandler() SheetManager.shared.add(self) } deinit { self.destroy() } - - // We don't want this view to actually get added to the tree, so we'll simply store it for adding - // to the SheetViewController - override func insertReactSubview(_ subview: UIView!, at atIndex: Int) { - self.touchHandler?.attach(to: subview) - self.innerView = subview + + override func mountChildComponentView( + _ childComponentView: UIView, + index: Int + ) { + self.innerView = childComponentView + touchHandler?.attach(to: childComponentView) + } + + override func unmountChildComponentView( + _ childComponentView: UIView, + index: Int + ) { + touchHandler?.detach(from: childComponentView) + if self.innerView === childComponentView { + self.innerView = nil + } } // We'll grab the content height from here so we know the initial detent to set override func layoutSubviews() { super.layoutSubviews() - - guard let innerView = self.innerView else { - return - } - - if innerView.subviews.count != 1 { - return - } - self.present() } @@ -107,7 +109,6 @@ class SheetView: ExpoView, UISheetPresentationControllerDelegate { self.isClosing = false self.isOpen = false self.sheetVc = nil - self.touchHandler?.detach(from: self.innerView) self.touchHandler = nil self.innerView = nil SheetManager.shared.remove(self) diff --git a/modules/bottom-sheet/ios/SurfaceTouchHandler.h b/modules/bottom-sheet/ios/SurfaceTouchHandler.h new file mode 100644 index 0000000000..784a5cbfba --- /dev/null +++ b/modules/bottom-sheet/ios/SurfaceTouchHandler.h @@ -0,0 +1,3 @@ +#if __has_include() +#import +#endif From beae4a5765fe0399b540e9495ccdb6d88b4d90b8 Mon Sep 17 00:00:00 2001 From: Samuel Newman Date: Fri, 2 May 2025 11:59:45 +0300 Subject: [PATCH 13/13] fix android padding --- app.config.js | 1 + src/components/forms/TextField.tsx | 14 +++++++------- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/app.config.js b/app.config.js index 6fd4422bca..6957197d0a 100644 --- a/app.config.js +++ b/app.config.js @@ -217,6 +217,7 @@ module.exports = function (_config) { compileSdkVersion: 35, targetSdkVersion: 35, buildToolsVersion: '35.0.0', + newArchEnabled: true, }, }, ], diff --git a/src/components/forms/TextField.tsx b/src/components/forms/TextField.tsx index e5fb338497..ea7f8e94ef 100644 --- a/src/components/forms/TextField.tsx +++ b/src/components/forms/TextField.tsx @@ -1,12 +1,12 @@ import React from 'react' import { - AccessibilityProps, + type AccessibilityProps, StyleSheet, TextInput, - TextInputProps, - TextStyle, + type TextInputProps, + type TextStyle, View, - ViewStyle, + type ViewStyle, } from 'react-native' import {HITSLOP_20} from '#/lib/constants' @@ -16,13 +16,13 @@ import { applyFonts, atoms as a, ios, - TextStyleProp, + type TextStyleProp, useAlf, useTheme, web, } from '#/alf' import {useInteractionState} from '#/components/hooks/useInteractionState' -import {Props as SVGIconProps} from '#/components/icons/common' +import {type Props as SVGIconProps} from '#/components/icons/common' import {Text} from '#/components/Typography' const Context = React.createContext<{ @@ -196,7 +196,7 @@ export function createInput(Component: typeof TextInput) { minWidth: 0, }, ios({paddingTop: 12, paddingBottom: 13}), - android(a.py_sm), + android(a.py_md), // fix for autofill styles covering border web({ paddingTop: 10,