From 585a78a6312e6c719e8775d277118bf444619226 Mon Sep 17 00:00:00 2001 From: Alex Hunt Date: Wed, 25 Sep 2024 13:52:38 +0100 Subject: [PATCH 1/4] Update Metro to 0.81.0-alpha.2 --- package.json | 4 +- packages/community-cli-plugin/package.json | 8 +- packages/metro-config/package.json | 4 +- packages/react-native/package.json | 4 +- yarn.lock | 207 ++++++++++----------- 5 files changed, 107 insertions(+), 120 deletions(-) diff --git a/package.json b/package.json index 3e62b69d32f0..dd776c61729e 100644 --- a/package.json +++ b/package.json @@ -86,8 +86,8 @@ "jest": "^29.6.3", "jest-junit": "^10.0.0", "jscodeshift": "^0.14.0", - "metro-babel-register": "^0.81.0-alpha.0", - "metro-memory-fs": "^0.81.0-alpha.0", + "metro-babel-register": "^0.81.0-alpha.2", + "metro-memory-fs": "^0.81.0-alpha.2", "micromatch": "^4.0.4", "mkdirp": "^0.5.1", "node-fetch": "^2.2.0", diff --git a/packages/community-cli-plugin/package.json b/packages/community-cli-plugin/package.json index d75a9c162576..81a8a992773d 100644 --- a/packages/community-cli-plugin/package.json +++ b/packages/community-cli-plugin/package.json @@ -26,14 +26,14 @@ "@react-native/metro-babel-transformer": "0.76.0-rc.2", "chalk": "^4.0.0", "execa": "^5.1.1", - "metro": "^0.81.0-alpha.0", - "metro-config": "^0.81.0-alpha.0", - "metro-core": "^0.81.0-alpha.0", + "metro": "^0.81.0-alpha.2", + "metro-config": "^0.81.0-alpha.2", + "metro-core": "^0.81.0-alpha.2", "node-fetch": "^2.2.0", "readline": "^1.3.0" }, "devDependencies": { - "metro-resolver": "^0.81.0-alpha.0" + "metro-resolver": "^0.81.0-alpha.2" }, "peerDependencies": { "@react-native-community/cli-server-api": "*" diff --git a/packages/metro-config/package.json b/packages/metro-config/package.json index a758fdce42dc..73f54c4f3d6d 100644 --- a/packages/metro-config/package.json +++ b/packages/metro-config/package.json @@ -28,7 +28,7 @@ "dependencies": { "@react-native/js-polyfills": "0.76.0-rc.2", "@react-native/metro-babel-transformer": "0.76.0-rc.2", - "metro-config": "^0.81.0-alpha.0", - "metro-runtime": "^0.81.0-alpha.0" + "metro-config": "^0.81.0-alpha.2", + "metro-runtime": "^0.81.0-alpha.2" } } diff --git a/packages/react-native/package.json b/packages/react-native/package.json index 25a1a49b3367..e917aca30c5b 100644 --- a/packages/react-native/package.json +++ b/packages/react-native/package.json @@ -131,8 +131,8 @@ "jest-environment-node": "^29.6.3", "jsc-android": "^250231.0.0", "memoize-one": "^5.0.0", - "metro-runtime": "^0.81.0-alpha.0", - "metro-source-map": "^0.81.0-alpha.0", + "metro-runtime": "^0.81.0-alpha.2", + "metro-source-map": "^0.81.0-alpha.2", "mkdirp": "^0.5.1", "nullthrows": "^1.1.1", "pretty-format": "^29.7.0", diff --git a/yarn.lock b/yarn.lock index 720ae169bcfb..6bad7e63b719 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1123,20 +1123,7 @@ "@babel/parser" "^7.25.0" "@babel/types" "^7.25.0" -"@babel/traverse--for-generate-function-map@npm:@babel/traverse@^7.25.3": - version "7.25.6" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.25.6.tgz#04fad980e444f182ecf1520504941940a90fea41" - integrity sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ== - dependencies: - "@babel/code-frame" "^7.24.7" - "@babel/generator" "^7.25.6" - "@babel/parser" "^7.25.6" - "@babel/template" "^7.25.0" - "@babel/types" "^7.25.6" - debug "^4.3.1" - globals "^11.1.0" - -"@babel/traverse@^7.24.7", "@babel/traverse@^7.24.8", "@babel/traverse@^7.25.0", "@babel/traverse@^7.25.1", "@babel/traverse@^7.25.2", "@babel/traverse@^7.25.3", "@babel/traverse@^7.25.4": +"@babel/traverse--for-generate-function-map@npm:@babel/traverse@^7.25.3", "@babel/traverse@^7.24.7", "@babel/traverse@^7.24.8", "@babel/traverse@^7.25.0", "@babel/traverse@^7.25.1", "@babel/traverse@^7.25.2", "@babel/traverse@^7.25.3", "@babel/traverse@^7.25.4": version "7.25.6" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.25.6.tgz#04fad980e444f182ecf1520504941940a90fea41" integrity sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ== @@ -6373,10 +6360,10 @@ merge2@^1.3.0, merge2@^1.4.1: resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== -metro-babel-register@^0.81.0-alpha.0: - version "0.81.0-alpha.0" - resolved "https://registry.yarnpkg.com/metro-babel-register/-/metro-babel-register-0.81.0-alpha.0.tgz#4b881d681b0b969729bb24ced566ecf8bedb8b40" - integrity sha512-3TaxkPuGdyDdtc213Vem1D+fmYZwgXpcvMgjVyjGiiCT4Wje1N2YOzMyfODLInEPe3LGVsl90xtjSibZQRAFGA== +metro-babel-register@^0.81.0-alpha.2: + version "0.81.0-alpha.2" + resolved "https://registry.yarnpkg.com/metro-babel-register/-/metro-babel-register-0.81.0-alpha.2.tgz#3ed905de8b7079a63483871e692bb17deabe656c" + integrity sha512-XBSStCShFqU487ee7gfj23N9tU65NN9axIv/BxL9Kl1bA91/lXn82X8QaAlcyzOv8+ulSm96h1JN/jnmCVotgA== dependencies: "@babel/core" "^7.25.2" "@babel/plugin-proposal-export-namespace-from" "^7.18.9" @@ -6390,59 +6377,59 @@ metro-babel-register@^0.81.0-alpha.0: escape-string-regexp "^1.0.5" flow-enums-runtime "^0.0.6" -metro-babel-transformer@0.81.0-alpha.0: - version "0.81.0-alpha.0" - resolved "https://registry.yarnpkg.com/metro-babel-transformer/-/metro-babel-transformer-0.81.0-alpha.0.tgz#50a9f4e701da439e8f3570ad997ff159f84f6604" - integrity sha512-Qku7finOf7izNbhuIw/7cXbHnLx01p2VtyU4shBAnqGOF5hsHXo9PM0fBM5RMYhFfNkb4mazEKjmtqs5vNbbAA== +metro-babel-transformer@0.81.0-alpha.2: + version "0.81.0-alpha.2" + resolved "https://registry.yarnpkg.com/metro-babel-transformer/-/metro-babel-transformer-0.81.0-alpha.2.tgz#b4e3173c342c986c0b98acd72c64ee4da4c37ee1" + integrity sha512-OGjDXZGthGnMKH6GGrCYomXl5JT3CXhbPQe9Q0T2+AvFG5OYj4/SAhxqPZ0LgJ+aGAubCD30WoYJ+CZ0H1eEmg== dependencies: "@babel/core" "^7.25.2" flow-enums-runtime "^0.0.6" hermes-parser "0.23.1" nullthrows "^1.1.1" -metro-cache-key@0.81.0-alpha.0: - version "0.81.0-alpha.0" - resolved "https://registry.yarnpkg.com/metro-cache-key/-/metro-cache-key-0.81.0-alpha.0.tgz#82e770e81cc2b559ea1a3e748bbfaceb85184287" - integrity sha512-ssXZLoFa2yJbAnFrGdX1RKB2WxHJZCQ0uBXI8NVWsR1mYa5QIr3C7twcDcuZyalllT1I8ML60poARiS3bY+uUQ== +metro-cache-key@0.81.0-alpha.2: + version "0.81.0-alpha.2" + resolved "https://registry.yarnpkg.com/metro-cache-key/-/metro-cache-key-0.81.0-alpha.2.tgz#85dff024d894b44f9d61422786063074e6345403" + integrity sha512-XE6LdsTrz5lBWznCKUBGrGlwQrbrHp37Q0SLRgG3xGDI33QmGD8U9DdY4siyGUdo+JD+h1T1RfAM72zWefn9Sw== dependencies: flow-enums-runtime "^0.0.6" -metro-cache@0.81.0-alpha.0: - version "0.81.0-alpha.0" - resolved "https://registry.yarnpkg.com/metro-cache/-/metro-cache-0.81.0-alpha.0.tgz#5e6d2aa51f855177bedfbfefa45054821e1c679c" - integrity sha512-/lgeqnHuENsf4OMdfRZQNZ+HZsOYN46Oh6Lat4AoigSVUCH+tzOwee2C0OtxqhThOacz81K9a6i3hzqC8/EQGg== +metro-cache@0.81.0-alpha.2: + version "0.81.0-alpha.2" + resolved "https://registry.yarnpkg.com/metro-cache/-/metro-cache-0.81.0-alpha.2.tgz#044d1132c66ffb6f49a4c5c70591296e0125908f" + integrity sha512-fAnaC/PTY0CxG4oaHWYd6JIKUF7lPswHEQvrAcULohdc7qdaOlLZwhIn5+IbhGoi2wYmygNtJAQ75dmaW5udQw== dependencies: exponential-backoff "^3.1.1" flow-enums-runtime "^0.0.6" - metro-core "0.81.0-alpha.0" + metro-core "0.81.0-alpha.2" -metro-config@0.81.0-alpha.0, metro-config@^0.81.0-alpha.0: - version "0.81.0-alpha.0" - resolved "https://registry.yarnpkg.com/metro-config/-/metro-config-0.81.0-alpha.0.tgz#4bd5a4a9caed10cc0f7a7b222d4a39da5d14e417" - integrity sha512-5CgIw4kEr0WyURaNpQT/QaWOFOstidtiBnyRcSFcx3MuwIByIY2Bz1a41JPXgDamBBdeMXpDKTtdoLOUsA+/oQ== +metro-config@0.81.0-alpha.2, metro-config@^0.81.0-alpha.2: + version "0.81.0-alpha.2" + resolved "https://registry.yarnpkg.com/metro-config/-/metro-config-0.81.0-alpha.2.tgz#a110744b72c1397d818568b3b4dc8e096fb58393" + integrity sha512-HcAxiXW3nahJBKB2RmM7v+Y1hDsBw0tQWIksmIoRTEm6LqF0XbrONEg0MS5sGvWSe3TH3+hG/CWA9Brs9kuKuA== dependencies: connect "^3.6.5" cosmiconfig "^5.0.5" flow-enums-runtime "^0.0.6" jest-validate "^29.6.3" - metro "0.81.0-alpha.0" - metro-cache "0.81.0-alpha.0" - metro-core "0.81.0-alpha.0" - metro-runtime "0.81.0-alpha.0" + metro "0.81.0-alpha.2" + metro-cache "0.81.0-alpha.2" + metro-core "0.81.0-alpha.2" + metro-runtime "0.81.0-alpha.2" -metro-core@0.81.0-alpha.0, metro-core@^0.81.0-alpha.0: - version "0.81.0-alpha.0" - resolved "https://registry.yarnpkg.com/metro-core/-/metro-core-0.81.0-alpha.0.tgz#3658ca21192de485569d572e581226c93d443dfb" - integrity sha512-kVshPXiIKuFzVkRQxZbTzVYrHfy+dJesWK4Ut5+0QeRy7cZv1n42EnATyW8ZxPXe5IJKxxqmvnoue1pW+L3Auw== +metro-core@0.81.0-alpha.2, metro-core@^0.81.0-alpha.2: + version "0.81.0-alpha.2" + resolved "https://registry.yarnpkg.com/metro-core/-/metro-core-0.81.0-alpha.2.tgz#bf997b05bda00491194c95934ce5b1374f8d093e" + integrity sha512-U8bknkQK0a15F5ZPku5QP/ZmnYxhbYY5X+Pw0Gx+rpkeWf8vdfB+4r/usuzIh9kaZErZHTZNEMI7dZ4/4boRpQ== dependencies: flow-enums-runtime "^0.0.6" lodash.throttle "^4.1.1" - metro-resolver "0.81.0-alpha.0" + metro-resolver "0.81.0-alpha.2" -metro-file-map@0.81.0-alpha.0: - version "0.81.0-alpha.0" - resolved "https://registry.yarnpkg.com/metro-file-map/-/metro-file-map-0.81.0-alpha.0.tgz#4a0a1677ed0661bf789a09529571f233ca6c09d9" - integrity sha512-gAvkZnU+XlCmp21piiIj9hsop8CG7LpToI6g7VGPe5Fot5YTYP0EXzyJECu4Ma8jZd/TJj9rtXfM+tXIJ89JVA== +metro-file-map@0.81.0-alpha.2: + version "0.81.0-alpha.2" + resolved "https://registry.yarnpkg.com/metro-file-map/-/metro-file-map-0.81.0-alpha.2.tgz#450310f28da447f6e6438acf1bc387895c58d416" + integrity sha512-bR/V5oKIk2OTNpTx9Xy2pYKDEUYbngUs/YsLFDkK4YFuO1FDJZxTcPr6sgMSJignz/AC2gx/oO3zpbO7I3GKJQ== dependencies: anymatch "^3.0.3" debug "^2.2.0" @@ -6458,69 +6445,69 @@ metro-file-map@0.81.0-alpha.0: optionalDependencies: fsevents "^2.3.2" -metro-memory-fs@^0.81.0-alpha.0: - version "0.81.0-alpha.0" - resolved "https://registry.yarnpkg.com/metro-memory-fs/-/metro-memory-fs-0.81.0-alpha.0.tgz#73297e4d0fc55d290ea7b2e02798f8624239c616" - integrity sha512-D8/ZFM6/s2mHy3OEr+FNWiuf7qqyq60BgPL7sWUohhrJSL8LptvFAuLx2ahalTPcK7Gesal+IFqShY452mk+pQ== +metro-memory-fs@^0.81.0-alpha.2: + version "0.81.0-alpha.2" + resolved "https://registry.yarnpkg.com/metro-memory-fs/-/metro-memory-fs-0.81.0-alpha.2.tgz#241280cc64ade326f1ffb1df6fc77506de7f9858" + integrity sha512-4owL5ha/vNmwZvHhIQ48lZ1gSqbaIHOpt1Mmv3iQoe/z9Foe+SYLTPbCU3Dt5yK9oWDvkBYKag66LxPoCsPLRA== dependencies: flow-enums-runtime "^0.0.6" -metro-minify-terser@0.81.0-alpha.0: - version "0.81.0-alpha.0" - resolved "https://registry.yarnpkg.com/metro-minify-terser/-/metro-minify-terser-0.81.0-alpha.0.tgz#7c6e9c4f72f28c0273f451c84ecfcc9d20f6ea4b" - integrity sha512-FgkPz2WOBBF/L+mW2NM2u4p5nkLV1FaGASaKtZr2gEJbVu6UzSrSrNWd4AQl/ltk+VWlU6EnpKyNs1Qy1YxoEg== +metro-minify-terser@0.81.0-alpha.2: + version "0.81.0-alpha.2" + resolved "https://registry.yarnpkg.com/metro-minify-terser/-/metro-minify-terser-0.81.0-alpha.2.tgz#bd844986ef08f6c5f7ae57828ae973256bb27000" + integrity sha512-cAqqFWP5UO0ImNu7c3xIrXCLltvm9OIng2kIe/+nU9CC70K7pATxdtWpC0PA9dt2MsfY2583i3pu/rr5qIY0Yw== dependencies: flow-enums-runtime "^0.0.6" terser "^5.15.0" -metro-resolver@0.81.0-alpha.0, metro-resolver@^0.81.0-alpha.0: - version "0.81.0-alpha.0" - resolved "https://registry.yarnpkg.com/metro-resolver/-/metro-resolver-0.81.0-alpha.0.tgz#f471e276022dd636665f5496f9d4aaf5775bb4f0" - integrity sha512-0OvFKzA1Sp70WI+2xMhRblDCvjPYOxBVzDsuMRt6zvcO/oyORw1AdAmRpFLUt3jr4eFQKc6UNsT74qQ+o7qTcg== +metro-resolver@0.81.0-alpha.2, metro-resolver@^0.81.0-alpha.2: + version "0.81.0-alpha.2" + resolved "https://registry.yarnpkg.com/metro-resolver/-/metro-resolver-0.81.0-alpha.2.tgz#30402262f96ee1f1aa43408b1f91508a50da1be5" + integrity sha512-C4KGAki0jeUq1wqFrsD0R6FgmYL+6weDuze/5SolMmBflaU03hY9ZiQUsNuEWgU7+OG+A0q6PBwcskBUXBpW6Q== dependencies: flow-enums-runtime "^0.0.6" -metro-runtime@0.81.0-alpha.0, metro-runtime@^0.81.0-alpha.0: - version "0.81.0-alpha.0" - resolved "https://registry.yarnpkg.com/metro-runtime/-/metro-runtime-0.81.0-alpha.0.tgz#38579a67d032f1e4fd15098281cb389909bc201d" - integrity sha512-KSplaHwM6r6LI/Nv1rlSYTsOKqrfoKFb8X7X2pksfgfpdHbVyYmmmMpps1UsXbQR+lDlZveIjbyN7r4AhEEuXw== +metro-runtime@0.81.0-alpha.2, metro-runtime@^0.81.0-alpha.2: + version "0.81.0-alpha.2" + resolved "https://registry.yarnpkg.com/metro-runtime/-/metro-runtime-0.81.0-alpha.2.tgz#216f02d5473799379403db71a0a6ec1b791197f6" + integrity sha512-uP+7ejq7R+WOV39TucJsgeRalA8jlw5l3JtID+Iu8zZvzJT0WO4VlINAFVS5n6Xk7tK+dkqGH1oF0lst1X+qNw== dependencies: "@babel/runtime" "^7.25.0" flow-enums-runtime "^0.0.6" -metro-source-map@0.81.0-alpha.0, metro-source-map@^0.81.0-alpha.0: - version "0.81.0-alpha.0" - resolved "https://registry.yarnpkg.com/metro-source-map/-/metro-source-map-0.81.0-alpha.0.tgz#a1fc6a3769292bffa9b3583c7ac41dfc1fb2cca1" - integrity sha512-C9tW8/a51m2Esq5ibzkHoXyMN+ztyonV5mhllZg9zus4KgjQCqkufZvDw4QbMGn2aZ/KZ1DAOcotYzweG6bi7A== +metro-source-map@0.81.0-alpha.2, metro-source-map@^0.81.0-alpha.2: + version "0.81.0-alpha.2" + resolved "https://registry.yarnpkg.com/metro-source-map/-/metro-source-map-0.81.0-alpha.2.tgz#c8264efda5e312cb87a9b0ac78b7eb0e6808c92a" + integrity sha512-R5obOY4guE8D2fckCjoYrf+NHWwiorOBPSLr9jXLKXqdo7c3dCG9Fp9U1vJc4qKTJjhHN+bHND/+Ih8UPHH9zg== dependencies: "@babel/traverse" "^7.25.3" "@babel/traverse--for-generate-function-map" "npm:@babel/traverse@^7.25.3" "@babel/types" "^7.25.2" flow-enums-runtime "^0.0.6" invariant "^2.2.4" - metro-symbolicate "0.81.0-alpha.0" + metro-symbolicate "0.81.0-alpha.2" nullthrows "^1.1.1" - ob1 "0.81.0-alpha.0" + ob1 "0.81.0-alpha.2" source-map "^0.5.6" vlq "^1.0.0" -metro-symbolicate@0.81.0-alpha.0: - version "0.81.0-alpha.0" - resolved "https://registry.yarnpkg.com/metro-symbolicate/-/metro-symbolicate-0.81.0-alpha.0.tgz#006d3db3ab072838e4ff4fb3f7091f5734763427" - integrity sha512-2/b4nqCz4Itfl6sQ5e8xLRRGUm/YZbhUo+t+BwJLHUpbiETzt1bEBwM3Ewtcc7uxBRdZ7ToDb9RolW3vO0Vp9w== +metro-symbolicate@0.81.0-alpha.2: + version "0.81.0-alpha.2" + resolved "https://registry.yarnpkg.com/metro-symbolicate/-/metro-symbolicate-0.81.0-alpha.2.tgz#7aebb285b516b03df09ac8b3cc57611f7642db94" + integrity sha512-S5v09d93mg3C8iGwAZwhDwiDg5kW7DnGi9OOvb8+gtBJ9EzxV9/z3BPG1NFkzQ/ymnIEUcaQ1N8BpEgrXnsI6g== dependencies: flow-enums-runtime "^0.0.6" invariant "^2.2.4" - metro-source-map "0.81.0-alpha.0" + metro-source-map "0.81.0-alpha.2" nullthrows "^1.1.1" source-map "^0.5.6" through2 "^2.0.1" vlq "^1.0.0" -metro-transform-plugins@0.81.0-alpha.0: - version "0.81.0-alpha.0" - resolved "https://registry.yarnpkg.com/metro-transform-plugins/-/metro-transform-plugins-0.81.0-alpha.0.tgz#3e11a0228ff3ee0f8d9c2dcd5ea53cccd1b6273f" - integrity sha512-w755wthmfeji4wRIOdotVUgKr5F1XFVaaAR8IEOziWBIfgdJJq4RRl9/iMHhO0x9qxa5N+uVceCwVS1ORybjlw== +metro-transform-plugins@0.81.0-alpha.2: + version "0.81.0-alpha.2" + resolved "https://registry.yarnpkg.com/metro-transform-plugins/-/metro-transform-plugins-0.81.0-alpha.2.tgz#7fd204f91975c4dc8145d613b54f982ec892ba84" + integrity sha512-VtK38ytQ9mK1v/JOm1wW1AvZjO/Fsd8krNZy6riRj2fstcKkNx6LL1j5TtwINBUjCY1WPrpunQtG+Wc98LMiHQ== dependencies: "@babel/core" "^7.25.2" "@babel/generator" "^7.25.0" @@ -6529,29 +6516,29 @@ metro-transform-plugins@0.81.0-alpha.0: flow-enums-runtime "^0.0.6" nullthrows "^1.1.1" -metro-transform-worker@0.81.0-alpha.0: - version "0.81.0-alpha.0" - resolved "https://registry.yarnpkg.com/metro-transform-worker/-/metro-transform-worker-0.81.0-alpha.0.tgz#8340396ab18e8a2059c48a6678bbaa1c5db9083f" - integrity sha512-1d0UE1O2mgbRIbxG3RDhIrsRya6/NRNSRbK2GZTabwUaZoeffbYxegaAZGG0ibZ+FfnqhR0Y/x/3fry/P4sw7A== +metro-transform-worker@0.81.0-alpha.2: + version "0.81.0-alpha.2" + resolved "https://registry.yarnpkg.com/metro-transform-worker/-/metro-transform-worker-0.81.0-alpha.2.tgz#a18a386139c9e74e189e5bc94c6d6028aba35ba7" + integrity sha512-DBzR0gf7rBB42NDFuZ9hfTrvpSNDnKSHsp+TKMBtsVRtb3UpbnuH1iiO7HNV7Dro5E8nNjkYuUnLE6tC6CNFYQ== dependencies: "@babel/core" "^7.25.2" "@babel/generator" "^7.25.0" "@babel/parser" "^7.25.3" "@babel/types" "^7.25.2" flow-enums-runtime "^0.0.6" - metro "0.81.0-alpha.0" - metro-babel-transformer "0.81.0-alpha.0" - metro-cache "0.81.0-alpha.0" - metro-cache-key "0.81.0-alpha.0" - metro-minify-terser "0.81.0-alpha.0" - metro-source-map "0.81.0-alpha.0" - metro-transform-plugins "0.81.0-alpha.0" + metro "0.81.0-alpha.2" + metro-babel-transformer "0.81.0-alpha.2" + metro-cache "0.81.0-alpha.2" + metro-cache-key "0.81.0-alpha.2" + metro-minify-terser "0.81.0-alpha.2" + metro-source-map "0.81.0-alpha.2" + metro-transform-plugins "0.81.0-alpha.2" nullthrows "^1.1.1" -metro@0.81.0-alpha.0, metro@^0.81.0-alpha.0: - version "0.81.0-alpha.0" - resolved "https://registry.yarnpkg.com/metro/-/metro-0.81.0-alpha.0.tgz#967a4841b21d302b806c1f7b040730e4af35421f" - integrity sha512-Ss0XGBTQkoLVoeuV/BspM71WhyXWJ6OJwUosD8vMLhAWCrxUEuW3+B6TIWds4wCKCqXNQnraPrOL7mBvcUphgA== +metro@0.81.0-alpha.2, metro@^0.81.0-alpha.2: + version "0.81.0-alpha.2" + resolved "https://registry.yarnpkg.com/metro/-/metro-0.81.0-alpha.2.tgz#69059bda8f4194809d206cfae89ff2f06a53e5a7" + integrity sha512-ZfL5IjEEuMtM5A5tVKL2LNv/WO6Gj1RhdIsW+3uz3BB0Y/ZqMdfp61qVWNCV7kGWMqunee3ER0P1EUuPHfIb0Q== dependencies: "@babel/code-frame" "^7.24.7" "@babel/core" "^7.25.2" @@ -6575,18 +6562,18 @@ metro@0.81.0-alpha.0, metro@^0.81.0-alpha.0: jest-worker "^29.6.3" jsc-safe-url "^0.2.2" lodash.throttle "^4.1.1" - metro-babel-transformer "0.81.0-alpha.0" - metro-cache "0.81.0-alpha.0" - metro-cache-key "0.81.0-alpha.0" - metro-config "0.81.0-alpha.0" - metro-core "0.81.0-alpha.0" - metro-file-map "0.81.0-alpha.0" - metro-resolver "0.81.0-alpha.0" - metro-runtime "0.81.0-alpha.0" - metro-source-map "0.81.0-alpha.0" - metro-symbolicate "0.81.0-alpha.0" - metro-transform-plugins "0.81.0-alpha.0" - metro-transform-worker "0.81.0-alpha.0" + metro-babel-transformer "0.81.0-alpha.2" + metro-cache "0.81.0-alpha.2" + metro-cache-key "0.81.0-alpha.2" + metro-config "0.81.0-alpha.2" + metro-core "0.81.0-alpha.2" + metro-file-map "0.81.0-alpha.2" + metro-resolver "0.81.0-alpha.2" + metro-runtime "0.81.0-alpha.2" + metro-source-map "0.81.0-alpha.2" + metro-symbolicate "0.81.0-alpha.2" + metro-transform-plugins "0.81.0-alpha.2" + metro-transform-worker "0.81.0-alpha.2" mime-types "^2.1.27" nullthrows "^1.1.1" serialize-error "^2.1.0" @@ -6864,10 +6851,10 @@ oauth-sign@~0.9.0: resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== -ob1@0.81.0-alpha.0: - version "0.81.0-alpha.0" - resolved "https://registry.yarnpkg.com/ob1/-/ob1-0.81.0-alpha.0.tgz#d3ed74eaac8c335e6f02188d542b08d52c9e6441" - integrity sha512-pQOlsgvqIzL0dlPSaZxvw3XEz6jKFxwdwTY/UxsxNk8gFuUFgUAyyHFjRKaGa+ZdJhXyCduM/3/mfXVlOrWEBg== +ob1@0.81.0-alpha.2: + version "0.81.0-alpha.2" + resolved "https://registry.yarnpkg.com/ob1/-/ob1-0.81.0-alpha.2.tgz#45ac7fc423577fee88425476908793905df6a3c5" + integrity sha512-wii3uNfV58CK6KzM6o1HzlUAYZJbsbNm3dQHMQJeTok6jZzF/aDYZrbuI4U4V4HkKxrHL2QgRf2rKDlDU9Au9g== dependencies: flow-enums-runtime "^0.0.6" From 62f04bb2612a18fa4ca271c7b933f66c8f6b6a16 Mon Sep 17 00:00:00 2001 From: Alex Hunt Date: Wed, 25 Sep 2024 13:58:03 +0100 Subject: [PATCH 2/4] Add CLI selection of multiple debug targets --- .../start/OpenDebuggerKeyboardHandler.js | 174 ++++++++++++++++++ .../src/commands/start/attachKeyHandlers.js | 18 +- .../src/commands/start/runServer.js | 1 + 3 files changed, 190 insertions(+), 3 deletions(-) create mode 100644 packages/community-cli-plugin/src/commands/start/OpenDebuggerKeyboardHandler.js diff --git a/packages/community-cli-plugin/src/commands/start/OpenDebuggerKeyboardHandler.js b/packages/community-cli-plugin/src/commands/start/OpenDebuggerKeyboardHandler.js new file mode 100644 index 000000000000..0fe4d46e0957 --- /dev/null +++ b/packages/community-cli-plugin/src/commands/start/OpenDebuggerKeyboardHandler.js @@ -0,0 +1,174 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @flow strict-local + * @format + * @oncall react_native + */ + +import type TerminalReporter from 'metro/src/lib/TerminalReporter'; + +import chalk from 'chalk'; +import fetch from 'node-fetch'; + +type PageDescription = $ReadOnly<{ + id: string, + title: string, + description: string, + deviceName: string, + ... +}>; + +export default class OpenDebuggerKeyboardHandler { + #devServerUrl: string; + #reporter: TerminalReporter; + #targetsShownForSelection: ?$ReadOnlyArray = null; + + constructor({ + devServerUrl, + reporter, + }: { + devServerUrl: string, + reporter: TerminalReporter, + }) { + this.#devServerUrl = devServerUrl; + this.#reporter = reporter; + } + + async #tryOpenDebuggerForTarget(target: PageDescription): Promise { + this.#targetsShownForSelection = null; + this.#clearTerminalMenu(); + + try { + await fetch( + new URL( + '/open-debugger?target=' + encodeURIComponent(target.id), + this.#devServerUrl, + ).href, + {method: 'POST'}, + ); + } catch (e) { + this.#log( + 'error', + 'Failed to open debugger for %s on %s debug targets: %s', + target.description, + target.deviceName, + e.message, + ); + this.#clearTerminalMenu(); + } + } + + /** + * Used in response to 'j' to debug - fetch the available debug targets and: + * - If no targets, warn + * - If one target, open it + * - If more, show a list. The keyboard listener should run subsequent key + * presses through maybeHandleTargetSelection, which will launch the + * debugger if a match is made. + */ + async handleOpenDebugger(): Promise { + this.#setTerminalMenu('Fetching available debugging targets...'); + this.#targetsShownForSelection = null; + + try { + const res = await fetch(this.#devServerUrl + '/json/list', { + method: 'POST', + }); + + if (res.status !== 200) { + throw new Error(`Unexpected status code: ${res.status}`); + } + const targets = (await res.json()) as $ReadOnlyArray; + if (!Array.isArray(targets)) { + throw new Error('Expected array.'); + } + + if (targets.length === 0) { + this.#log('warn', 'No connected targets'); + this.#clearTerminalMenu(); + } else if (targets.length === 1) { + const target = targets[0]; + // eslint-disable-next-line no-void + void this.#tryOpenDebuggerForTarget(target); + } else { + this.#targetsShownForSelection = targets; + + if (targets.length > 9) { + this.#log( + 'warn', + '10 or more debug targets available, showing the first 9.', + ); + } + + this.#setTerminalMenu( + `Multiple debug targets available, please select:\n ${targets + .slice(0, 9) + .map( + ({description, deviceName}, i) => + ` ${chalk.white.inverse(` ${i + 1} `)} - "${description}" on "${deviceName}"`, + ) + .join('\n ')}`, + ); + } + } catch (e) { + this.#log('error', `Failed to fetch debug targets: ${e.message}`); + this.#clearTerminalMenu(); + } + } + + /** + * Handle key presses that correspond to a valid selection from a visible + * selection list. + * + * @return true if we've handled the key as a target selection, false if the + * caller should handle the key. + */ + maybeHandleTargetSelection(keyName: string): boolean { + if (keyName >= '1' && keyName <= '9') { + const targetIndex = Number(keyName) - 1; + if ( + this.#targetsShownForSelection != null && + targetIndex < this.#targetsShownForSelection.length + ) { + const target = this.#targetsShownForSelection[targetIndex]; + // eslint-disable-next-line no-void + void this.#tryOpenDebuggerForTarget(target); + return true; + } + } + return false; + } + + /** + * Dismiss any target selection UI, if shown. + */ + dismiss() { + this.#clearTerminalMenu(); + this.#targetsShownForSelection = null; + } + + #log(level: 'info' | 'warn' | 'error', ...data: Array): void { + this.#reporter.update({ + type: 'unstable_server_log', + level, + data, + }); + } + + #setTerminalMenu(message: string) { + this.#reporter.update({ + type: 'unstable_server_menu_updated', + message, + }); + } + + #clearTerminalMenu() { + this.#reporter.update({ + type: 'unstable_server_menu_cleared', + }); + } +} diff --git a/packages/community-cli-plugin/src/commands/start/attachKeyHandlers.js b/packages/community-cli-plugin/src/commands/start/attachKeyHandlers.js index 82af11a67120..7b5398d80397 100644 --- a/packages/community-cli-plugin/src/commands/start/attachKeyHandlers.js +++ b/packages/community-cli-plugin/src/commands/start/attachKeyHandlers.js @@ -10,12 +10,13 @@ */ import type {Config} from '@react-native-community/cli-types'; +import type TerminalReporter from 'metro/src/lib/TerminalReporter'; import {KeyPressHandler} from '../../utils/KeyPressHandler'; import {logger} from '../../utils/logger'; +import OpenDebuggerKeyboardHandler from './OpenDebuggerKeyboardHandler'; import chalk from 'chalk'; import execa from 'execa'; -import fetch from 'node-fetch'; const CTRL_C = '\u0003'; const CTRL_D = '\u0004'; @@ -36,6 +37,7 @@ export default function attachKeyHandlers({ cliConfig, devServerUrl, messageSocket, + reporter, }: { cliConfig: Config, devServerUrl: string, @@ -43,6 +45,7 @@ export default function attachKeyHandlers({ broadcast: (type: string, params?: Record | null) => void, ... }>, + reporter: TerminalReporter, }) { if (process.stdin.isTTY !== true) { logger.debug('Interactive mode is not supported in this environment'); @@ -58,7 +61,16 @@ export default function attachKeyHandlers({ messageSocket.broadcast('reload', null); }, RELOAD_TIMEOUT); + const openDebuggerKeyboardHandler = new OpenDebuggerKeyboardHandler({ + reporter, + devServerUrl, + }); + const onPress = async (key: string) => { + if (openDebuggerKeyboardHandler.maybeHandleTargetSelection(key)) { + return; + } + switch (key.toLowerCase()) { case 'r': reload(); @@ -92,11 +104,11 @@ export default function attachKeyHandlers({ ).stdout?.pipe(process.stdout); break; case 'j': - // TODO(T192878199): Add multi-target selection - await fetch(devServerUrl + '/open-debugger', {method: 'POST'}); + await openDebuggerKeyboardHandler.handleOpenDebugger(); break; case CTRL_C: case CTRL_D: + openDebuggerKeyboardHandler.dismiss(); logger.info('Stopping server'); keyPressHandler.stopInterceptingKeyStrokes(); process.emit('SIGINT'); diff --git a/packages/community-cli-plugin/src/commands/start/runServer.js b/packages/community-cli-plugin/src/commands/start/runServer.js index 407800a72ead..60829c6adfbe 100644 --- a/packages/community-cli-plugin/src/commands/start/runServer.js +++ b/packages/community-cli-plugin/src/commands/start/runServer.js @@ -130,6 +130,7 @@ async function runServer( cliConfig: ctx, devServerUrl, messageSocket: messageSocketEndpoint, + reporter: terminalReporter, }); } }, From ca5d9b3f1c9c04672d53ef881ee92b54568598ed Mon Sep 17 00:00:00 2001 From: Alex Hunt Date: Wed, 25 Sep 2024 14:03:43 +0100 Subject: [PATCH 3/4] Simplify key handling in start command --- packages/community-cli-plugin/package.json | 1 + .../src/commands/start/attachKeyHandlers.js | 43 ++++++--- .../src/utils/KeyPressHandler.js | 90 ------------------- 3 files changed, 33 insertions(+), 101 deletions(-) delete mode 100644 packages/community-cli-plugin/src/utils/KeyPressHandler.js diff --git a/packages/community-cli-plugin/package.json b/packages/community-cli-plugin/package.json index 81a8a992773d..ea913ac24344 100644 --- a/packages/community-cli-plugin/package.json +++ b/packages/community-cli-plugin/package.json @@ -26,6 +26,7 @@ "@react-native/metro-babel-transformer": "0.76.0-rc.2", "chalk": "^4.0.0", "execa": "^5.1.1", + "invariant": "^2.2.4", "metro": "^0.81.0-alpha.2", "metro-config": "^0.81.0-alpha.2", "metro-core": "^0.81.0-alpha.2", diff --git a/packages/community-cli-plugin/src/commands/start/attachKeyHandlers.js b/packages/community-cli-plugin/src/commands/start/attachKeyHandlers.js index 7b5398d80397..c99750d6dacc 100644 --- a/packages/community-cli-plugin/src/commands/start/attachKeyHandlers.js +++ b/packages/community-cli-plugin/src/commands/start/attachKeyHandlers.js @@ -12,11 +12,13 @@ import type {Config} from '@react-native-community/cli-types'; import type TerminalReporter from 'metro/src/lib/TerminalReporter'; -import {KeyPressHandler} from '../../utils/KeyPressHandler'; import {logger} from '../../utils/logger'; import OpenDebuggerKeyboardHandler from './OpenDebuggerKeyboardHandler'; import chalk from 'chalk'; import execa from 'execa'; +import invariant from 'invariant'; +import readline from 'readline'; +import {ReadStream} from 'tty'; const CTRL_C = '\u0003'; const CTRL_D = '\u0004'; @@ -33,6 +35,14 @@ const throttle = (callback: () => void, timeout: number) => { }; }; +type KeyEvent = { + sequence: string, + name: string, + ctrl: boolean, + meta: boolean, + shift: boolean, +}; + export default function attachKeyHandlers({ cliConfig, devServerUrl, @@ -52,6 +62,9 @@ export default function attachKeyHandlers({ return; } + readline.emitKeypressEvents(process.stdin); + setRawMode(true); + const execaOptions = { env: {FORCE_COLOR: chalk.supportsColor ? 'true' : 'false'}, }; @@ -66,12 +79,14 @@ export default function attachKeyHandlers({ devServerUrl, }); - const onPress = async (key: string) => { - if (openDebuggerKeyboardHandler.maybeHandleTargetSelection(key)) { + process.stdin.on('keypress', (str: string, key: KeyEvent) => { + logger.debug(`Key pressed: ${key.sequence}`); + + if (openDebuggerKeyboardHandler.maybeHandleTargetSelection(key.name)) { return; } - switch (key.toLowerCase()) { + switch (key.sequence) { case 'r': reload(); break; @@ -104,21 +119,19 @@ export default function attachKeyHandlers({ ).stdout?.pipe(process.stdout); break; case 'j': - await openDebuggerKeyboardHandler.handleOpenDebugger(); + // eslint-disable-next-line no-void + void openDebuggerKeyboardHandler.handleOpenDebugger(); break; case CTRL_C: case CTRL_D: openDebuggerKeyboardHandler.dismiss(); logger.info('Stopping server'); - keyPressHandler.stopInterceptingKeyStrokes(); + setRawMode(false); + process.stdin.pause(); process.emit('SIGINT'); process.exit(); } - }; - - const keyPressHandler = new KeyPressHandler(onPress); - keyPressHandler.createInteractionListener(); - keyPressHandler.startInterceptingKeyStrokes(); + }); logger.log( [ @@ -132,3 +145,11 @@ export default function attachKeyHandlers({ ].join('\n'), ); } + +function setRawMode(enable: boolean) { + invariant( + process.stdin instanceof ReadStream, + 'process.stdin must be a readable stream to modify raw mode', + ); + process.stdin.setRawMode(enable); +} diff --git a/packages/community-cli-plugin/src/utils/KeyPressHandler.js b/packages/community-cli-plugin/src/utils/KeyPressHandler.js deleted file mode 100644 index af3609f8da44..000000000000 --- a/packages/community-cli-plugin/src/utils/KeyPressHandler.js +++ /dev/null @@ -1,90 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @flow strict-local - * @format - * @oncall react_native - */ - -import {CLIError} from './errors'; -import {logger} from './logger'; - -const CTRL_C = '\u0003'; - -/** An abstract key stroke interceptor. */ -export class KeyPressHandler { - _isInterceptingKeyStrokes = false; - _isHandlingKeyPress = false; - _onPress: (key: string) => Promise; - - constructor(onPress: (key: string) => Promise) { - this._onPress = onPress; - } - - /** Start observing interaction pause listeners. */ - createInteractionListener(): ({pause: boolean, ...}) => void { - // Support observing prompts. - let wasIntercepting = false; - - const listener = ({pause}: {pause: boolean, ...}) => { - if (pause) { - // Track if we were already intercepting key strokes before pausing, so we can - // resume after pausing. - wasIntercepting = this._isInterceptingKeyStrokes; - this.stopInterceptingKeyStrokes(); - } else if (wasIntercepting) { - // Only start if we were previously intercepting. - this.startInterceptingKeyStrokes(); - } - }; - - return listener; - } - - _handleKeypress = async (key: string): Promise => { - // Prevent sending another event until the previous event has finished. - if (this._isHandlingKeyPress && key !== CTRL_C) { - return; - } - this._isHandlingKeyPress = true; - try { - logger.debug(`Key pressed: ${key}`); - await this._onPress(key); - } catch (error) { - return new CLIError('There was an error with the key press handler.'); - } finally { - this._isHandlingKeyPress = false; - return; - } - }; - - /** Start intercepting all key strokes and passing them to the input `onPress` method. */ - startInterceptingKeyStrokes() { - if (this._isInterceptingKeyStrokes) { - return; - } - this._isInterceptingKeyStrokes = true; - const {stdin} = process; - // $FlowFixMe[prop-missing] - stdin.setRawMode(true); - stdin.resume(); - stdin.setEncoding('utf8'); - stdin.on('data', this._handleKeypress); - } - - /** Stop intercepting all key strokes. */ - stopInterceptingKeyStrokes() { - if (!this._isInterceptingKeyStrokes) { - return; - } - this._isInterceptingKeyStrokes = false; - const {stdin} = process; - stdin.removeListener('data', this._handleKeypress); - // $FlowFixMe[prop-missing] - stdin.setRawMode(false); - stdin.resume(); - } -} From 6382dc03e6879601f28c4a5e0f3ce52f997e2118 Mon Sep 17 00:00:00 2001 From: Alex Hunt Date: Wed, 25 Sep 2024 14:44:52 +0100 Subject: [PATCH 4/4] Use Metro terminal reporter for dev-middleware logs --- .../src/commands/start/runServer.js | 12 ++--- .../src/utils/createDevMiddlewareLogger.js | 44 +++++++++++++++++++ 2 files changed, 51 insertions(+), 5 deletions(-) create mode 100644 packages/community-cli-plugin/src/utils/createDevMiddlewareLogger.js diff --git a/packages/community-cli-plugin/src/commands/start/runServer.js b/packages/community-cli-plugin/src/commands/start/runServer.js index 60829c6adfbe..e27c5d8d2810 100644 --- a/packages/community-cli-plugin/src/commands/start/runServer.js +++ b/packages/community-cli-plugin/src/commands/start/runServer.js @@ -14,6 +14,7 @@ import type {Reporter} from 'metro/src/lib/reporting'; import type {TerminalReportableEvent} from 'metro/src/lib/TerminalReporter'; import typeof TerminalReporter from 'metro/src/lib/TerminalReporter'; +import createDevMiddlewareLogger from '../../utils/createDevMiddlewareLogger'; import isDevServerRunning from '../../utils/isDevServerRunning'; import loadMetroConfig from '../../utils/loadMetroConfig'; import {logger} from '../../utils/logger'; @@ -98,6 +99,11 @@ async function runServer( ); } + let reportEvent: (event: TerminalReportableEvent) => void; + const terminal = new Terminal(process.stdout); + const ReporterImpl = getReporterImpl(args.customLogReporterPath); + const terminalReporter = new ReporterImpl(terminal); + const { middleware: communityMiddleware, websocketEndpoints: communityWebsocketEndpoints, @@ -111,13 +117,9 @@ async function runServer( const {middleware, websocketEndpoints} = createDevMiddleware({ projectRoot, serverBaseUrl: devServerUrl, - logger, + logger: createDevMiddlewareLogger(terminalReporter), }); - let reportEvent: (event: TerminalReportableEvent) => void; - const terminal = new Terminal(process.stdout); - const ReporterImpl = getReporterImpl(args.customLogReporterPath); - const terminalReporter = new ReporterImpl(terminal); const reporter: Reporter = { update(event: TerminalReportableEvent) { terminalReporter.update(event); diff --git a/packages/community-cli-plugin/src/utils/createDevMiddlewareLogger.js b/packages/community-cli-plugin/src/utils/createDevMiddlewareLogger.js new file mode 100644 index 000000000000..2bbc0487b231 --- /dev/null +++ b/packages/community-cli-plugin/src/utils/createDevMiddlewareLogger.js @@ -0,0 +1,44 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @flow strict-local + * @format + * @oncall react_native + */ + +import type TerminalReporter from 'metro/src/lib/TerminalReporter'; + +type LoggerFn = (...message: $ReadOnlyArray) => void; + +/** + * Create a dev-middleware logger object that will emit logs via Metro's + * terminal reporter. + */ +export default function createDevMiddlewareLogger( + reporter: TerminalReporter, +): $ReadOnly<{ + info: LoggerFn, + error: LoggerFn, + warn: LoggerFn, +}> { + return { + info: makeLogger(reporter, 'info'), + warn: makeLogger(reporter, 'warn'), + error: makeLogger(reporter, 'error'), + }; +} + +function makeLogger( + reporter: TerminalReporter, + level: 'info' | 'warn' | 'error', +): LoggerFn { + return (...data: Array) => + reporter.update({ + type: 'unstable_server_log', + level, + data, + }); +}