diff --git a/CHANGELOG.md b/CHANGELOG.md index 3bb453070fc..0ec716e8f42 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,36 @@ All notable changes to Parcel will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and Parcel adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). +## [2.13.3] - 2024-12-16 + +### Fixed + +- Resolver + - Ignore invalid package.json fields – [Details](https://github.com/parcel-bundler/parcel/pull/10053) + +## [2.13.2] - 2024-11-25 + +### Fixed + +- JavaScript + + - Fix HMR when asset is duplicated between multiple bundles – [Details](https://github.com/parcel-bundler/parcel/commit/bc43a4d9e7c6f3b2dc28bf115710fe8b2bf535cc) + +- SASS + - Fix SASS resolution with non `file:` URLs – [Details](https://github.com/parcel-bundler/parcel/commit/2a6bbc56d2ecad904a6a0dea4208b8cc6e6a3f07) + +## [2.13.1] - 2024-11-24 + +### Fixed + +- JavaScript + + - Improve HMR with dynamic imports – [Details](https://github.com/parcel-bundler/parcel/pull/10017) + - Update SWC – [Details](https://github.com/parcel-bundler/parcel/commit/15c77cbe7557fb441df5d0fc09dab220f55fa4db) + +- SASS + - Fix SASS resolution rules for modern API – [Details](https://github.com/parcel-bundler/parcel/pull/10018) + ## [2.13.0] - 2024-11-12 ### Added diff --git a/Cargo.lock b/Cargo.lock index ed6f230c179..6b9f6961fe2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -162,7 +162,7 @@ dependencies = [ "proc-macro2", "quote", "swc_macros_common", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -173,7 +173,7 @@ checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -274,9 +274,9 @@ dependencies = [ [[package]] name = "bstr" -version = "1.10.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40723b8fb387abc38f4f4a37c09073622e41dd12327033091ef8950659e6dc0c" +checksum = "1a68f1f47cdf0ec8ee4b941b2eee2a80cb796db73118c0dd09ac63fbe405be22" dependencies = [ "memchr", "serde", @@ -293,9 +293,9 @@ dependencies = [ [[package]] name = "bytemuck" -version = "1.19.0" +version = "1.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8334215b81e418a0a7bdb8ef0849474f40bb10c8b71f1c4ed315cff49f32494d" +checksum = "8b37c88a63ffd85d15b406896cc343916d7cf57838a847b3a6f2ca5d39a5695a" [[package]] name = "bytes" @@ -343,9 +343,9 @@ checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" [[package]] name = "cc" -version = "1.1.37" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40545c26d092346d8a8dab71ee48e7685a7a9cba76e634790c215b41a4a7b4cf" +checksum = "fd9de9f2205d5ef3fd67e685b0df337994ddd4495e2a28d185500d0e1edfea47" dependencies = [ "jobserver", "libc", @@ -399,18 +399,18 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.20" +version = "4.5.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b97f376d85a664d5837dbae44bf546e6477a679ff6610010f17276f686d867e8" +checksum = "fb3b4b9e5a7c7514dfa52869339ee98b3156b0bfb4e8a77c4ff4babb64b1604f" dependencies = [ "clap_builder", ] [[package]] name = "clap_builder" -version = "4.5.20" +version = "4.5.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19bc80abd44e4bed93ca373a0704ccbd1b710dc5749406201bb018272808dc54" +checksum = "b17a95aa67cc7b5ebd32aa5370189aa0d79069ef1c64ce893bd30fb24bff20ec" dependencies = [ "anstream", "anstyle", @@ -421,9 +421,9 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1462739cb27611015575c0c11df5df7601141071f07518d56fcc1be504cbec97" +checksum = "afb84c814227b90d6895e01398aee0d8033c00e7466aca416fb6a8e0eb19d8a7" [[package]] name = "clap_mangen" @@ -458,9 +458,9 @@ checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "cpufeatures" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ca741a962e1b0bff6d724a1a0958b686406e853bb14061f218562e1896f95e6" +checksum = "16b80225097f2e5ae4e7179dd2266824648f3e2f49d9134d584b76389d31c4c3" dependencies = [ "libc", ] @@ -562,12 +562,12 @@ dependencies = [ [[package]] name = "ctor" -version = "0.2.8" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edb49164822f3ee45b17acd4a208cfc1251410cf0cad9a833234c9890774dd9f" +checksum = "32a2785755761f3ddc1492979ce1e48d2c00d09311c39e4466429188f3dd6501" dependencies = [ "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -591,7 +591,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -602,7 +602,7 @@ checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ "darling_core", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -721,7 +721,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -731,7 +731,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c" dependencies = [ "derive_builder_core", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -861,7 +861,7 @@ checksum = "8d7ccf961415e7aa17ef93dcb6c2441faaa8e768abe09e659b908089546f74c5" dependencies = [ "proc-macro2", "swc_macros_common", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -932,7 +932,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -1056,9 +1056,9 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.15.1" +version = "0.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a9bfc1af68b1726ea47d3d5109de126281def866b33970e10fbab11b5dafab3" +checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" [[package]] name = "heck" @@ -1171,7 +1171,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da" dependencies = [ "equivalent", - "hashbrown 0.15.1", + "hashbrown 0.15.2", "rayon", "serde", ] @@ -1191,7 +1191,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -1240,9 +1240,9 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.11" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" +checksum = "540654e97a3f4470a492cd30ff187bc95d89557a903a2bbf112e2fae98104ef2" [[package]] name = "jemalloc-sys" @@ -1312,7 +1312,7 @@ dependencies = [ "proc-macro2", "quote", "regex", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -1323,9 +1323,9 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.162" +version = "0.2.164" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18d287de67fe55fd7e1581fe933d965a5a9477b38e949cfa9f8574ef01506398" +checksum = "433bfe06b8c75da9b2e3fbea6e5329ff87748f0b144ef75306e674c3f6f7c13f" [[package]] name = "libdeflate-sys" @@ -1496,7 +1496,7 @@ dependencies = [ "napi-derive-backend", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -1511,7 +1511,7 @@ dependencies = [ "quote", "regex", "semver 1.0.23", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -1638,13 +1638,12 @@ checksum = "7f222829ae9293e33a9f5e9f440c6760a3d450a64affe1846486b140db81c1f4" [[package]] name = "oxc_resolver" -version = "2.0.1" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aaa605931a9776ac77fe822bac420e8b0b72594daba8701bdcde50aecbde7ff6" +checksum = "da33ec82d0f4770f4b5c120d6a1d8e45de2d99ae2672a7ee6bd29092ada945f2" dependencies = [ "cfg-if", "dashmap 6.1.0", - "dunce", "indexmap 2.6.0", "json-strip-comments", "once_cell", @@ -1696,6 +1695,7 @@ name = "parcel-js-swc-core" version = "0.1.0" dependencies = [ "Inflector", + "bitflags 1.3.2", "data-encoding", "dunce", "indexmap 1.9.3", @@ -1857,7 +1857,7 @@ dependencies = [ "phf_shared", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -1956,18 +1956,18 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.89" +version = "1.0.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f139b0662de085916d1fb67d2b4169d1addddda1919e696f3252b740b629986e" +checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0" dependencies = [ "unicode-ident", ] [[package]] name = "psm" -version = "0.1.23" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa37f80ca58604976033fae9515a8a2989fc13797d953f7c04fb8fa36a11f205" +checksum = "200b9ff220857e53e184257720a14553b2f4aa02577d2ed9842d45d4b9654810" dependencies = [ "cc", ] @@ -2153,9 +2153,9 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.40" +version = "0.38.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99e4ea3e1cdc4b559b8e5650f9c8e5998e3e5c1343b4eaf034565f32318d63c0" +checksum = "d7f649912bc1495e167a6edee79151c84b1bad49748cb4f1f1167f459f6224f6" dependencies = [ "bitflags 2.6.0", "errno", @@ -2253,14 +2253,14 @@ checksum = "ad1e866f866923f252f05c889987993144fb74e722403468a4ebd70c3cd756c0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] name = "serde_json" -version = "1.0.132" +version = "1.0.133" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d726bfaff4b320266d395898905d0eba0345aae23b54aee3a737e260fd46db03" +checksum = "c7fceb2473b9166b2294ef05efcb65a3db80803f0b03ef86a5fc88a2b85ee377" dependencies = [ "indexmap 2.6.0", "itoa", @@ -2371,9 +2371,9 @@ dependencies = [ [[package]] name = "sourcemap" -version = "9.0.1" +version = "9.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86721155737d89818020dc35713595c6e7b21016073c101e6590c47ca58c2d16" +checksum = "4d146f02f4bbbabbbe3da0f9cd3ea2ab779defc4ed1f070b5bd83ea48ed78811" dependencies = [ "base64-simd", "bitvec", @@ -2425,7 +2425,7 @@ checksum = "710e9696ef338691287aeb937ee6ffe60022f579d3c8d2fd9d58973a9a10a466" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -2443,7 +2443,7 @@ dependencies = [ "proc-macro2", "quote", "swc_macros_common", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -2493,9 +2493,9 @@ dependencies = [ [[package]] name = "swc_common" -version = "4.0.0" +version = "4.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "053e784870430ba47043278626e75686e745ac16876a8f5f4d6c9f39354ee7e7" +checksum = "4f87a21612a324493fd065e9c6fea960b4031088a213db782e2ca71d2fabb3ec" dependencies = [ "ahash", "ast_node", @@ -2542,14 +2542,14 @@ dependencies = [ "proc-macro2", "quote", "swc_macros_common", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] name = "swc_core" -version = "5.0.4" +version = "6.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92086975747587872715a20f78fc51e7047bac58f3a6a17d4ed5a9643f3fd0a2" +checksum = "9b7891f75c3ecd9061dd9c70612cbfabaf8f06403d44f0094227ee29a29a7d2d" dependencies = [ "swc_allocator", "swc_atoms", @@ -2616,7 +2616,7 @@ dependencies = [ "proc-macro2", "quote", "swc_macros_common", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -2651,9 +2651,9 @@ dependencies = [ [[package]] name = "swc_ecma_compat_es2015" -version = "5.0.0" +version = "5.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27be5007d501b111706bb5e055a57388aeda89b5b13613831a285e4571575400" +checksum = "0bb74db30bb816a950ebd453af38654660149df25e3b0ae26dc0d902a4295f17" dependencies = [ "arrayvec", "indexmap 2.6.0", @@ -2748,9 +2748,9 @@ dependencies = [ [[package]] name = "swc_ecma_compat_es2020" -version = "5.0.0" +version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74b6f3a00525d801fd9c019570886edd9e4057aae45349bcf934260b0e1fb13f" +checksum = "4e3cdf2d9eceb73ecf6bb7253c6ebf291c777b4abf4d1f1157beeceb0452625f" dependencies = [ "serde", "swc_atoms", @@ -2782,9 +2782,9 @@ dependencies = [ [[package]] name = "swc_ecma_compat_es2022" -version = "5.0.0" +version = "6.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0947eca60f422bf25f926e06ebcde5f3189df7fb7fc9c4f0d07fcb6a90bd0acf" +checksum = "df6241137f02e9bae0111e3461e230db6bafde458ad2eb9a5df1c5bb2c0df068" dependencies = [ "swc_atoms", "swc_common", @@ -2838,9 +2838,9 @@ dependencies = [ [[package]] name = "swc_ecma_preset_env" -version = "5.0.0" +version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "536d242fcc9ae6dfcb3bf0fb1a0b087b20feca33e070aa51d585acbf8ac1ba5d" +checksum = "4feb3982daf0b3b09640678d1ad1569dd50aed1e1992856418dc9c81aca7ec1a" dependencies = [ "anyhow", "dashmap 5.5.3", @@ -2863,9 +2863,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms" -version = "5.0.0" +version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1600bc245ac36783f219678d0831ffb8aeee7ab06908c394fc1da9be1b0fd16a" +checksum = "f3570a4bbd8596ee82ad6cb35e25b3ba57deda503191c104af98cf9994922fdb" dependencies = [ "swc_atoms", "swc_common", @@ -2916,9 +2916,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_compat" -version = "5.0.0" +version = "6.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09ca64973f33eb69cc29b9d1a432e6eebfbffa281be128318f8754013557a69e" +checksum = "918ef66efa6466a0c670a50d5257402b6f22476f1a33775200432890a1f4aef6" dependencies = [ "arrayvec", "indexmap 2.6.0", @@ -2959,7 +2959,7 @@ dependencies = [ "proc-macro2", "quote", "swc_macros_common", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -2988,9 +2988,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_proposal" -version = "5.0.0" +version = "5.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc94b9be02d6ce4754b56222375be1684c9135cfea76bda13820d97beffbd804" +checksum = "f963693bb6510f2bdb8227e918730bca30be29a9880614858f0c14ffe702fbf8" dependencies = [ "either", "rustc-hash 1.1.0", @@ -3050,9 +3050,9 @@ dependencies = [ [[package]] name = "swc_ecma_utils" -version = "5.0.0" +version = "5.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "024a9ee9a19f448b31af002b90c43b9dfdb4e1fad23c76c21fe26a7c6e0f78a7" +checksum = "0eb9a28511d17d1e6c5dfcf209368a1da4a542270c450fba7f27faf22c34df22" dependencies = [ "indexmap 2.6.0", "num_cpus", @@ -3070,9 +3070,9 @@ dependencies = [ [[package]] name = "swc_ecma_visit" -version = "4.0.0" +version = "4.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "642c58202491c273ea984e0d7e923319afe0f94195d2985b3e7f71f7d8232e06" +checksum = "c5af5332117aa0424e418556f74e9cee335dc47eb7ae35dddbd9fd65fc01452c" dependencies = [ "new_debug_unreachable", "num-bigint", @@ -3091,7 +3091,7 @@ checksum = "e96e15288bf385ab85eb83cff7f9e2d834348da58d0a31b33bdb572e66ee413e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -3114,7 +3114,7 @@ checksum = "a509f56fca05b39ba6c15f3e58636c3924c78347d63853632ed2ffcb6f5a0ac7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -3125,7 +3125,7 @@ checksum = "4c78717a841565df57f811376a3d19c9156091c55175e12d378f3a522de70cef" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -3151,9 +3151,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.87" +version = "2.0.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25aa4ce346d03a6dcd68dd8b4010bcb74e54e62c90c573f394c46eae99aba32d" +checksum = "44d46482f1c1c87acd84dea20c1bf5ebff4c757009ed6bf19cfd36fb10e92c4e" dependencies = [ "proc-macro2", "quote", @@ -3212,7 +3212,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -3266,7 +3266,7 @@ checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -3288,7 +3288,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -3342,9 +3342,9 @@ checksum = "2f322b60f6b9736017344fa0635d64be2f458fbc04eef65f6be22976dd1ffd5b" [[package]] name = "unicode-ident" -version = "1.0.13" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" +checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" [[package]] name = "unicode-normalization" @@ -3460,7 +3460,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", "wasm-bindgen-shared", ] @@ -3482,7 +3482,7 @@ checksum = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -3657,7 +3657,7 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] diff --git a/crates/macros/Cargo.toml b/crates/macros/Cargo.toml index d12b0ca833e..8cfecee7e1d 100644 --- a/crates/macros/Cargo.toml +++ b/crates/macros/Cargo.toml @@ -9,7 +9,7 @@ napi = ["dep:napi", "dep:napi-derive", "dep:crossbeam-channel"] [dependencies] indexmap = "1.9.2" -swc_core = { version = "5.0.4", features = [ +swc_core = { version = "6.0.1", features = [ "common", "common_ahash", "common_sourcemap", diff --git a/crates/macros/src/lib.rs b/crates/macros/src/lib.rs index e2e91095d10..aa65097fb25 100644 --- a/crates/macros/src/lib.rs +++ b/crates/macros/src/lib.rs @@ -1,5 +1,6 @@ #![deny(unused_crate_dependencies)] +use serde::{Deserialize, Serialize}; use std::{ collections::{HashMap, HashSet}, sync::Arc, @@ -44,9 +45,8 @@ pub type MacroCallback = pub struct Macros<'a> { /// Mapping of imported identifiers to import metadata. macros: HashMap, - constants: HashMap>, + evaluator: Evaluator<'a>, callback: MacroCallback, - source_map: &'a SourceMap, errors: &'a mut Vec, load_errors: HashSet, assignment_span: Option, @@ -70,10 +70,9 @@ impl<'a> Macros<'a> { ) -> Self { Macros { macros: HashMap::new(), - constants: HashMap::new(), + evaluator: Evaluator::new(source_map), load_errors: HashSet::new(), callback, - source_map, errors, assignment_span: None, in_call: false, @@ -137,7 +136,7 @@ impl<'a> Macros<'a> { // Try to statically evaluate all of the function arguments. let mut args = Vec::with_capacity(call.args.len()); for arg in &call.args { - match self.eval(&*arg.expr) { + match self.evaluator.eval(&*arg.expr) { Ok(val) => { if arg.spread.is_none() { args.push(val); @@ -154,13 +153,13 @@ impl<'a> Macros<'a> { } // If that was successful, call the function callback (on the JS thread). - let loc = self.source_map.lookup_char_pos(call.span.lo); + let loc = self.evaluator.source_map.lookup_char_pos(call.span.lo); let loc = Location { line: loc.line as u32, col: loc.col_display as u32, }; match (self.callback)(src.clone(), export, args, loc) { - Ok(val) => Ok(self.value_to_expr(val)?), + Ok(val) => Ok(self.evaluator.value_to_expr(val)?), Err(err) => match err { MacroError::LoadError(err, _) => { self.load_errors.insert(src); @@ -224,7 +223,7 @@ impl<'a> Fold for Macros<'a> { let imported = match &member.prop { MemberProp::Ident(id) => id.sym.to_string(), MemberProp::Computed(s) => { - if let Ok(JsValue::String(s)) = self.eval(&s.expr) { + if let Ok(JsValue::String(s)) = self.evaluator.eval(&s.expr) { s } else { break 'block; @@ -263,8 +262,8 @@ impl<'a> Fold for Macros<'a> { if node.kind == VarDeclKind::Const { for decl in &node.decls { if let Some(expr) = &decl.init { - let val = self.eval(&*expr); - self.eval_pat(val, &decl.name); + let val = self.evaluator.eval(&*expr); + self.evaluator.eval_pat(val, &decl.name); } } } @@ -286,7 +285,7 @@ impl<'a> Fold for Macros<'a> { // Error when re-assigning a property of a constant that's used in a macro. let node = node.fold_children_with(self); if let Expr::Ident(id) = &*node.obj { - if let Some(constant) = self.constants.get_mut(&id.to_id()) { + if let Some(constant) = self.evaluator.constants.get_mut(&id.to_id()) { if constant.is_ok() { *constant = Err(assignment_span.clone()); } @@ -299,8 +298,9 @@ impl<'a> Fold for Macros<'a> { // If the member expression evaluates to an object, continue traversing so we error in fold_ident. // Otherwise, return early to allow other properties to be accessed without error. let value = self + .evaluator .eval(&*node.obj) - .and_then(|obj| self.eval_member_prop(obj, &node)); + .and_then(|obj| self.evaluator.eval_member_prop(obj, &node)); if !matches!( value, Err(..) | Ok(JsValue::Object(..) | JsValue::Array(..)) @@ -314,7 +314,7 @@ impl<'a> Fold for Macros<'a> { fn fold_ident(&mut self, node: Ident) -> Ident { if self.in_call { - if let Some(constant) = self.constants.get_mut(&node.to_id()) { + if let Some(constant) = self.evaluator.constants.get_mut(&node.to_id()) { if matches!(constant, Ok(JsValue::Object(..) | JsValue::Array(..))) { // Mark access to constant object inside a call as an error since it could potentially be mutated. *constant = Err(node.span.clone()); @@ -362,7 +362,8 @@ fn handle_error(result: Result, errors: &mut Vec) } /// A type that represents a basic JS value. -#[derive(Clone, Debug)] +#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] +#[serde(untagged)] pub enum JsValue { Undefined, Null, @@ -375,9 +376,21 @@ pub enum JsValue { Function(String), } -impl<'a> Macros<'a> { +pub struct Evaluator<'a> { + constants: HashMap>, + source_map: &'a SourceMap, +} + +impl<'a> Evaluator<'a> { + pub fn new(source_map: &'a SourceMap) -> Evaluator<'_> { + Evaluator { + constants: HashMap::new(), + source_map, + } + } + /// Statically evaluate a JS expression to a value, if possible. - fn eval(&self, expr: &Expr) -> Result { + pub fn eval(&self, expr: &Expr) -> Result { match expr.unwrap_parens() { Expr::Lit(lit) => match lit { Lit::Null(_) => Ok(JsValue::Null), @@ -437,49 +450,7 @@ impl<'a> Macros<'a> { } Ok(JsValue::Array(res)) } - Expr::Object(obj) => { - let mut res = IndexMap::with_capacity(obj.props.len()); - for prop in &obj.props { - match prop { - PropOrSpread::Prop(prop) => match &**prop { - Prop::KeyValue(kv) => { - let v = self.eval(&*kv.value)?; - let k = match &kv.key { - PropName::Ident(IdentName { sym, .. }) - | PropName::Str(Str { value: sym, .. }) => sym.to_string(), - PropName::Num(n) => n.value.to_string(), - PropName::Computed(c) => match self.eval(&*c.expr) { - Err(e) => return Err(e), - Ok(JsValue::String(s)) => s, - Ok(JsValue::Number(n)) => n.to_string(), - Ok(JsValue::Bool(b)) => b.to_string(), - _ => return Err(c.span), - }, - PropName::BigInt(v) => return Err(v.span), - }; - - res.insert(k.to_string(), v); - } - Prop::Shorthand(s) => { - if let Some(val) = self.constants.get(&s.to_id()) { - res.insert(s.sym.to_string(), val.clone()?); - } else { - return Err(s.span); - } - } - _ => return Err(obj.span), - }, - PropOrSpread::Spread(spread) => { - let v = self.eval(&*spread.expr)?; - match v { - JsValue::Object(o) => res.extend(o), - _ => return Err(obj.span), - } - } - } - } - Ok(JsValue::Object(res)) - } + Expr::Object(obj) => self.eval_object(obj), Expr::Bin(bin) => match (bin.op, self.eval(&*bin.left), self.eval(&*bin.right)) { (BinaryOp::Add, Ok(JsValue::String(a)), Ok(JsValue::String(b))) => { Ok(JsValue::String(format!("{}{}", a, b))) @@ -676,7 +647,52 @@ impl<'a> Macros<'a> { } } - fn eval_member_prop(&self, obj: JsValue, member: &MemberExpr) -> Result { + pub fn eval_object(&self, obj: &ObjectLit) -> Result { + let mut res = IndexMap::with_capacity(obj.props.len()); + for prop in &obj.props { + match prop { + PropOrSpread::Prop(prop) => match &**prop { + Prop::KeyValue(kv) => { + let v = self.eval(&*kv.value)?; + let k = match &kv.key { + PropName::Ident(IdentName { sym, .. }) | PropName::Str(Str { value: sym, .. }) => { + sym.to_string() + } + PropName::Num(n) => n.value.to_string(), + PropName::Computed(c) => match self.eval(&*c.expr) { + Err(e) => return Err(e), + Ok(JsValue::String(s)) => s, + Ok(JsValue::Number(n)) => n.to_string(), + Ok(JsValue::Bool(b)) => b.to_string(), + _ => return Err(c.span), + }, + PropName::BigInt(v) => return Err(v.span), + }; + + res.insert(k.to_string(), v); + } + Prop::Shorthand(s) => { + if let Some(val) = self.constants.get(&s.to_id()) { + res.insert(s.sym.to_string(), val.clone()?); + } else { + return Err(s.span); + } + } + _ => return Err(obj.span), + }, + PropOrSpread::Spread(spread) => { + let v = self.eval(&*spread.expr)?; + match v { + JsValue::Object(o) => res.extend(o), + _ => return Err(obj.span), + } + } + } + } + Ok(JsValue::Object(res)) + } + + pub fn eval_member_prop(&self, obj: JsValue, member: &MemberExpr) -> Result { match &member.prop { MemberProp::Ident(id) => obj.get_id(id.as_ref()).ok_or(member.span), MemberProp::Computed(prop) => { @@ -688,7 +704,7 @@ impl<'a> Macros<'a> { } /// Convert JS value to AST. - fn value_to_expr(&self, value: JsValue) -> Result { + pub fn value_to_expr(&self, value: JsValue) -> Result { Ok(match value { JsValue::Null => Expr::Lit(Lit::Null(Null::dummy())), JsValue::Undefined => Expr::Ident(Ident::new_no_ctxt(js_word!("undefined"), DUMMY_SP)), @@ -764,7 +780,7 @@ impl<'a> Macros<'a> { }) } - fn eval_pat(&mut self, value: Result, pat: &Pat) { + pub fn eval_pat(&mut self, value: Result, pat: &Pat) { match pat { Pat::Ident(name) => { self.constants.insert(name.to_id(), value); diff --git a/crates/node-bindings/src/resolver.rs b/crates/node-bindings/src/resolver.rs index d70551f6d9f..c9f2c4bbeb1 100644 --- a/crates/node-bindings/src/resolver.rs +++ b/crates/node-bindings/src/resolver.rs @@ -33,7 +33,7 @@ pub struct JsFileSystemOptions { pub struct JsResolverOptions { pub fs: Option, pub include_node_modules: Option, - pub conditions: Option, + pub conditions: Option, pub module_dir_resolver: Option, pub mode: u8, pub entries: Option, diff --git a/crates/parcel-resolver/Cargo.toml b/crates/parcel-resolver/Cargo.toml index a84220826d7..ee6844dd88c 100644 --- a/crates/parcel-resolver/Cargo.toml +++ b/crates/parcel-resolver/Cargo.toml @@ -27,7 +27,7 @@ oxc_resolver = "2" node_resolver = "0.15.0" criterion = { version = "*", features = ["html_reports"] } url = "*" -deno_package_json = "*" +deno_package_json = "0.1.2" rspack_resolver = "*" [target.'cfg(windows)'.dev-dependencies] diff --git a/crates/parcel-resolver/src/package_json.rs b/crates/parcel-resolver/src/package_json.rs index 268e89fc6f4..0b507e57e25 100644 --- a/crates/parcel-resolver/src/package_json.rs +++ b/crates/parcel-resolver/src/package_json.rs @@ -41,28 +41,40 @@ bitflags! { #[derive(serde::Deserialize, Debug, Default)] #[serde(rename_all = "camelCase")] struct SerializedPackageJson { - #[serde(default)] + #[serde(default, deserialize_with = "ok_or_default")] pub name: String, - #[serde(rename = "type", default)] + #[serde(rename = "type", default, deserialize_with = "ok_or_default")] pub module_type: ModuleType, + #[serde(default, deserialize_with = "ok_or_default")] main: Option, + #[serde(default, deserialize_with = "ok_or_default")] module: Option, + #[serde(default, deserialize_with = "ok_or_default")] tsconfig: Option, + #[serde(default, deserialize_with = "ok_or_default")] types: Option, - #[serde(default)] + #[serde(default, deserialize_with = "ok_or_default")] pub source: SourceField, - #[serde(default)] + #[serde(default, deserialize_with = "ok_or_default")] browser: BrowserField, - #[serde(default)] + #[serde(default, deserialize_with = "ok_or_default")] alias: IndexMap, AliasValue<'static>>, - #[serde(default)] + #[serde(default, deserialize_with = "ok_or_default")] exports: ExportsField, - #[serde(default)] + #[serde(default, deserialize_with = "ok_or_default")] imports: IndexMap, ExportsField>, - #[serde(default)] + #[serde(default, deserialize_with = "ok_or_default")] side_effects: SideEffects, } +fn ok_or_default<'de, T, D>(deserializer: D) -> Result +where + T: serde::Deserialize<'de> + Default, + D: serde::Deserializer<'de>, +{ + Ok(T::deserialize(deserializer).unwrap_or_default()) +} + #[derive(Debug)] pub struct PackageJson { pub path: CachedPath, @@ -124,7 +136,12 @@ pub enum ExportsField { } impl ExportsField { - fn convert_paths(&mut self, base: &CachedPath, cache: &Cache) { + fn convert_paths bool>( + &mut self, + base: &CachedPath, + cache: &Cache, + is_source: &mut F, + ) { match self { ExportsField::String(target) => { if target.starts_with("./") && !target.contains('*') { @@ -150,12 +167,16 @@ impl ExportsField { } ExportsField::Array(arr) => { for item in arr { - item.convert_paths(base, cache); + item.convert_paths(base, cache, is_source); } } ExportsField::Map(map) => { - for val in map.values_mut() { - val.convert_paths(base, cache); + for (key, val) in map.iter_mut() { + if matches!(key, ExportsKey::Condition(ExportsCondition::SOURCE)) && !is_source() { + *val = ExportsField::None; + } else { + val.convert_paths(base, cache, is_source); + } } } _ => {} @@ -165,7 +186,7 @@ impl ExportsField { bitflags! { /// A common package.json "exports" field. - pub struct ExportsCondition: u16 { + pub struct ExportsCondition: u32 { /// The "import" condition. True when the package was referenced using the ESM `import` syntax. const IMPORT = 1 << 0; /// The "require" condition. True when the package was referenced using the CommonJS `require` function. @@ -198,6 +219,10 @@ bitflags! { const LESS = 1 << 14; /// The "stylus" condition. True when the package was referenced from a Stylus stylesheet. const STYLUS = 1 << 15; + /// The "react-server" condition. + const REACT_SERVER = 1 << 16; + /// The "source" condition. + const SOURCE = 1 << 17; } } @@ -227,6 +252,8 @@ impl TryFrom<&str> for ExportsCondition { "sass" => ExportsCondition::SASS, "less" => ExportsCondition::LESS, "stylus" => ExportsCondition::STYLUS, + "react-server" => ExportsCondition::REACT_SERVER, + "source" => ExportsCondition::SOURCE, _ => return Err(()), }) } @@ -310,21 +337,8 @@ pub enum ExportsResolution<'a> { impl PackageJson { pub fn read(path: &CachedPath, cache: &Cache) -> Result { let contents = cache.fs.read_to_string(path.as_path())?; - let mut pkg = PackageJson::parse(path.clone(), contents, cache) + let pkg = PackageJson::parse(path.clone(), contents, cache) .map_err(|e| JsonError::new(path.as_path().into(), e))?; - - // If the package has a `source` field, make sure - // - the package is behind symlinks - // - and the realpath to the packages does not includes `node_modules`. - // Since such package is likely a pre-compiled module - // installed with package managers, rather than including a source code. - if !matches!(pkg.source, SourceField::None) { - let realpath = pkg.path.canonicalize(&cache)?; - if realpath == pkg.path || realpath.in_node_modules() { - pkg.source = SourceField::None; - } - } - Ok(pkg) } @@ -338,7 +352,38 @@ impl PackageJson { mut parsed: SerializedPackageJson, cache: &Cache, ) -> PackageJson { - parsed.exports.convert_paths(&path, cache); + // If the package has a `source` field, make sure + // - the package is behind symlinks + // - and the realpath to the packages does not includes `node_modules`. + // Since such package is likely a pre-compiled module + // installed with package managers, rather than including a source code. + let mut is_source = None; + + let mut check_in_source = || { + if let Some(is_source) = is_source { + return is_source; + } + + if let Ok(realpath) = path.canonicalize(&cache) { + let is_src = realpath != path && !realpath.in_node_modules(); + is_source = Some(is_src); + is_src + } else { + is_source = Some(false); + false + } + }; + + if !matches!(parsed.source, SourceField::None) { + if !check_in_source() { + parsed.source = SourceField::None; + } + } + + parsed + .exports + .convert_paths(&path, cache, &mut check_in_source); + PackageJson { name: parsed.name, module_type: parsed.module_type, @@ -1932,5 +1977,7 @@ mod tests { assert_eq!(pkg.module_type, ModuleType::CommonJs); let pkg: SerializedPackageJson = serde_json::from_str(r#"{"name":"foo"}"#).unwrap(); assert_eq!(pkg.module_type, ModuleType::CommonJs); + let pkg: SerializedPackageJson = serde_json::from_str(r#"{"main":false}"#).unwrap(); + assert_eq!(pkg.main, None); } } diff --git a/packages/bundlers/default/package.json b/packages/bundlers/default/package.json index 3c69125e413..19341eb5bd5 100644 --- a/packages/bundlers/default/package.json +++ b/packages/bundlers/default/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/bundler-default", - "version": "2.13.0", + "version": "2.13.3", "license": "MIT", "publishConfig": { "access": "public" @@ -17,14 +17,14 @@ "source": "src/DefaultBundler.js", "engines": { "node": ">= 16.0.0", - "parcel": "^2.13.0" + "parcel": "^2.13.3" }, "dependencies": { - "@parcel/diagnostic": "2.13.0", - "@parcel/graph": "3.3.0", - "@parcel/plugin": "2.13.0", - "@parcel/rust": "2.13.0", - "@parcel/utils": "2.13.0", + "@parcel/diagnostic": "2.13.3", + "@parcel/graph": "3.3.3", + "@parcel/plugin": "2.13.3", + "@parcel/rust": "2.13.3", + "@parcel/utils": "2.13.3", "nullthrows": "^1.1.1" } } diff --git a/packages/bundlers/default/src/DefaultBundler.js b/packages/bundlers/default/src/DefaultBundler.js index f5e0d4987c4..7751cfca74c 100644 --- a/packages/bundlers/default/src/DefaultBundler.js +++ b/packages/bundlers/default/src/DefaultBundler.js @@ -584,7 +584,9 @@ function createIdealGraph( } if ( dependency.priority === 'lazy' || - childAsset.bundleBehavior === 'isolated' // An isolated Dependency, or Bundle must contain all assets it needs to load. + (dependency.priority !== 'parallel' && + (dependency.bundleBehavior === 'isolated' || + childAsset.bundleBehavior === 'isolated')) // An isolated Dependency, or Bundle must contain all assets it needs to load. ) { if (bundleId == null) { let firstBundleGroup = nullthrows( @@ -645,6 +647,16 @@ function createIdealGraph( ), dependencyPriorityEdges[dependency.priority], ); + + // If this is a sync dependency on a JS asset that won't be replaced with a URL runtime, + // add a reference so the bundle is loaded by the parent. This happens with React Server Components. + if ( + dependency.priority === 'sync' && + childAsset.type === 'js' && + childAsset?.meta.jsRuntime !== 'url' + ) { + assetReference.get(childAsset).push([dependency, bundle]); + } } else if ( dependency.priority === 'parallel' || childAsset.bundleBehavior === 'inline' @@ -1089,11 +1101,10 @@ function createIdealGraph( if (assetId == null) return; // deleted let a = assets[assetId]; if ( - entries.has(a) || !a.isBundleSplittable || (bundleRoots.get(a) && - (getBundleFromBundleRoot(a).needsStableName || - getBundleFromBundleRoot(a).bundleBehavior === 'isolated')) + getBundleFromBundleRoot(a).needsStableName && + a.env.context === asset.env.context) ) { // Add asset to non-splittable bundles. addAssetToBundleRoot(asset, a); @@ -1126,7 +1137,7 @@ function createIdealGraph( uniqueKey: manualSharedBundleKey, target: firstSourceBundle.target, type: asset.type, - env: firstSourceBundle.env, + env: asset.env, manualSharedBundle: manualSharedObject?.name, }); bundle.sourceBundles = new Set(sourceBundles); @@ -1233,7 +1244,12 @@ function createIdealGraph( let sourceBundles = reachableArray.map( a => nullthrows(bundleRoots.get(a))[0], ); - let key = reachableArray.map(a => a.id).join(',') + '.' + asset.type; + let key = + reachableArray.map(a => a.id).join(',') + + '.' + + asset.env.context + + '.' + + asset.type; let bundleId = bundles.get(key); let bundle; if (bundleId == null) { @@ -1244,7 +1260,7 @@ function createIdealGraph( bundle = createBundle({ target: firstSourceBundle.target, type: asset.type, - env: firstSourceBundle.env, + env: asset.env, }); bundle.sourceBundles = new Set(sourceBundles); let sharedInternalizedAssets = firstSourceBundle.internalizedAssets @@ -1539,19 +1555,30 @@ function createIdealGraph( let bundle = nullthrows(bundleGraph.getNode(bundleId)); invariant(bundle !== 'root'); - if (asset.type !== bundle.type) { + if ( + asset.type !== bundle.type || + asset.env.context !== bundle.env.context + ) { let bundleGroup = nullthrows(bundleGraph.getNode(bundleGroupId)); invariant(bundleGroup !== 'root'); - let key = nullthrows(bundleGroup.mainEntryAsset).id + '.' + asset.type; + let key = + nullthrows(bundleGroup.mainEntryAsset).id + + '.' + + asset.env.context + + '.' + + asset.type; let typeChangeBundleId = bundles.get(key); if (typeChangeBundleId == null) { let typeChangeBundle = createBundle({ uniqueKey: key, - needsStableName: bundle.needsStableName, + needsStableName: + asset.env.context !== bundle.env.context + ? false + : bundle.needsStableName, bundleBehavior: bundle.bundleBehavior, type: asset.type, target: bundle.target, - env: bundle.env, + env: asset.env, }); typeChangeBundleId = bundleGraph.addNode(typeChangeBundle); bundleGraph.addEdge(bundleId, typeChangeBundleId); diff --git a/packages/bundlers/library/package.json b/packages/bundlers/library/package.json index 0c5bc7a69ea..7d03bf41b5f 100644 --- a/packages/bundlers/library/package.json +++ b/packages/bundlers/library/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/bundler-library", - "version": "2.12.0", + "version": "2.13.3", "license": "MIT", "publishConfig": { "access": "public" @@ -17,10 +17,10 @@ "source": "src/LibraryBundler.js", "engines": { "node": ">= 16.0.0", - "parcel": "^2.13.0" + "parcel": "^2.13.3" }, "dependencies": { - "@parcel/plugin": "2.13.0", + "@parcel/plugin": "2.13.3", "nullthrows": "^1.1.1" } } diff --git a/packages/bundlers/library/src/LibraryBundler.js b/packages/bundlers/library/src/LibraryBundler.js index d6ee74177ba..5e74f09fe81 100644 --- a/packages/bundlers/library/src/LibraryBundler.js +++ b/packages/bundlers/library/src/LibraryBundler.js @@ -10,26 +10,36 @@ export default (new Bundler({ // Collect dependencies from the graph. // We do not want to mutate the graph while traversing, so this must be done first. let dependencies = []; + let entryDeps = []; bundleGraph.traverse((node, context) => { if (node.type === 'dependency') { let dependency = node.value; if (bundleGraph.isDependencySkipped(dependency)) { return; } + let assets = bundleGraph.getDependencyAssets(dependency); dependencies.push([ dependency, nullthrows(dependency.target ?? context), + assets, ]); if (dependency.target) { + entryDeps.push(dependency); return dependency.target; } } }); + let bundleGroupsByTarget = new Map(); + for (let dep of entryDeps) { + let target = nullthrows(dep.target); + let bundleGroup = bundleGraph.createBundleGroup(dep, target); + bundleGroupsByTarget.set(target, bundleGroup); + } + // Create bundles for each asset. let bundles = new Map(); - for (let [dependency, target] of dependencies) { - let assets = bundleGraph.getDependencyAssets(dependency); + for (let [dependency, target, assets] of dependencies) { if (assets.length === 0) { continue; } @@ -40,14 +50,13 @@ export default (new Bundler({ let parentKey = getBundleKey(parentAsset, target); parentBundle = bundles.get(parentKey); } - let bundleGroup; // Create a separate bundle group/bundle for each asset. for (let asset of assets) { let key = getBundleKey(asset, target); let bundle = bundles.get(key); if (!bundle) { - bundleGroup ??= bundleGraph.createBundleGroup(dependency, target); + let bundleGroup = nullthrows(bundleGroupsByTarget.get(target)); bundle = bundleGraph.createBundle({ entryAsset: asset, needsStableName: dependency.isEntry, diff --git a/packages/compressors/brotli/package.json b/packages/compressors/brotli/package.json index ec1425d7f95..776e9fff469 100644 --- a/packages/compressors/brotli/package.json +++ b/packages/compressors/brotli/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/compressor-brotli", - "version": "2.13.0", + "version": "2.13.3", "license": "MIT", "publishConfig": { "access": "public" @@ -17,9 +17,9 @@ "source": "src/BrotliCompressor.js", "engines": { "node": ">= 16.0.0", - "parcel": "^2.13.0" + "parcel": "^2.13.3" }, "dependencies": { - "@parcel/plugin": "2.13.0" + "@parcel/plugin": "2.13.3" } } diff --git a/packages/compressors/gzip/package.json b/packages/compressors/gzip/package.json index 573bbc88258..89d8bf8de91 100644 --- a/packages/compressors/gzip/package.json +++ b/packages/compressors/gzip/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/compressor-gzip", - "version": "2.13.0", + "version": "2.13.3", "license": "MIT", "publishConfig": { "access": "public" @@ -17,9 +17,9 @@ "source": "src/GzipCompressor.js", "engines": { "node": ">= 16.0.0", - "parcel": "^2.13.0" + "parcel": "^2.13.3" }, "dependencies": { - "@parcel/plugin": "2.13.0" + "@parcel/plugin": "2.13.3" } } diff --git a/packages/compressors/raw/package.json b/packages/compressors/raw/package.json index 5fc9af4df0e..fdee11bda84 100644 --- a/packages/compressors/raw/package.json +++ b/packages/compressors/raw/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/compressor-raw", - "version": "2.13.0", + "version": "2.13.3", "license": "MIT", "publishConfig": { "access": "public" @@ -17,9 +17,9 @@ "source": "src/RawCompressor.js", "engines": { "node": ">= 16.0.0", - "parcel": "^2.13.0" + "parcel": "^2.13.3" }, "dependencies": { - "@parcel/plugin": "2.13.0" + "@parcel/plugin": "2.13.3" } } diff --git a/packages/configs/default/index.json b/packages/configs/default/index.json index 974ad645f0f..8c49b485d01 100644 --- a/packages/configs/default/index.json +++ b/packages/configs/default/index.json @@ -48,9 +48,9 @@ }, "namers": ["@parcel/namer-default"], "runtimes": [ + "@parcel/runtime-rsc", "@parcel/runtime-js", "@parcel/runtime-browser-hmr", - "@parcel/runtime-react-refresh", "@parcel/runtime-service-worker" ], "optimizers": { diff --git a/packages/configs/default/package.json b/packages/configs/default/package.json index 4f562518c76..686f6484360 100644 --- a/packages/configs/default/package.json +++ b/packages/configs/default/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/config-default", - "version": "2.13.0", + "version": "2.13.3", "license": "MIT", "publishConfig": { "access": "public" @@ -18,64 +18,64 @@ "test-ci": "mocha" }, "dependencies": { - "@parcel/bundler-default": "2.13.0", - "@parcel/compressor-raw": "2.13.0", - "@parcel/namer-default": "2.13.0", - "@parcel/optimizer-css": "2.13.0", - "@parcel/optimizer-htmlnano": "2.13.0", - "@parcel/optimizer-image": "2.13.0", - "@parcel/optimizer-svgo": "2.13.0", - "@parcel/optimizer-swc": "2.13.0", - "@parcel/packager-css": "2.13.0", - "@parcel/packager-html": "2.13.0", - "@parcel/packager-js": "2.13.0", - "@parcel/packager-raw": "2.13.0", - "@parcel/packager-svg": "2.13.0", - "@parcel/packager-wasm": "2.13.0", - "@parcel/reporter-dev-server": "2.13.0", - "@parcel/resolver-default": "2.13.0", - "@parcel/runtime-browser-hmr": "2.13.0", - "@parcel/runtime-js": "2.13.0", - "@parcel/runtime-react-refresh": "2.13.0", - "@parcel/runtime-service-worker": "2.13.0", - "@parcel/transformer-babel": "2.13.0", - "@parcel/transformer-css": "2.13.0", - "@parcel/transformer-html": "2.13.0", - "@parcel/transformer-image": "2.13.0", - "@parcel/transformer-js": "2.13.0", - "@parcel/transformer-json": "2.13.0", - "@parcel/transformer-postcss": "2.13.0", - "@parcel/transformer-posthtml": "2.13.0", - "@parcel/transformer-raw": "2.13.0", - "@parcel/transformer-react-refresh-wrap": "2.13.0", - "@parcel/transformer-svg": "2.13.0" + "@parcel/bundler-default": "2.13.3", + "@parcel/compressor-raw": "2.13.3", + "@parcel/namer-default": "2.13.3", + "@parcel/optimizer-css": "2.13.3", + "@parcel/optimizer-htmlnano": "2.13.3", + "@parcel/optimizer-image": "2.13.3", + "@parcel/optimizer-svgo": "2.13.3", + "@parcel/optimizer-swc": "2.13.3", + "@parcel/packager-css": "2.13.3", + "@parcel/packager-html": "2.13.3", + "@parcel/packager-js": "2.13.3", + "@parcel/packager-raw": "2.13.3", + "@parcel/packager-svg": "2.13.3", + "@parcel/packager-wasm": "2.13.3", + "@parcel/reporter-dev-server": "2.13.3", + "@parcel/resolver-default": "2.13.3", + "@parcel/runtime-browser-hmr": "2.13.3", + "@parcel/runtime-js": "2.13.3", + "@parcel/runtime-rsc": "2.13.3", + "@parcel/runtime-service-worker": "2.13.3", + "@parcel/transformer-babel": "2.13.3", + "@parcel/transformer-css": "2.13.3", + "@parcel/transformer-html": "2.13.3", + "@parcel/transformer-image": "2.13.3", + "@parcel/transformer-js": "2.13.3", + "@parcel/transformer-json": "2.13.3", + "@parcel/transformer-postcss": "2.13.3", + "@parcel/transformer-posthtml": "2.13.3", + "@parcel/transformer-raw": "2.13.3", + "@parcel/transformer-react-refresh-wrap": "2.13.3", + "@parcel/transformer-svg": "2.13.3" }, "parcelDependencies": { - "@parcel/optimizer-data-url": "2.13.0", - "@parcel/packager-raw-url": "2.13.0", - "@parcel/packager-ts": "2.13.0", - "@parcel/packager-xml": "2.13.0", - "@parcel/transformer-coffeescript": "2.13.0", - "@parcel/transformer-elm": "2.13.0", - "@parcel/transformer-glsl": "2.13.0", - "@parcel/transformer-graphql": "2.13.0", - "@parcel/transformer-inline-string": "2.13.0", - "@parcel/transformer-jsonld": "2.13.0", - "@parcel/transformer-less": "2.13.0", - "@parcel/transformer-mdx": "2.13.0", - "@parcel/transformer-pug": "2.13.0", - "@parcel/transformer-sass": "2.13.0", - "@parcel/transformer-stylus": "2.13.0", - "@parcel/transformer-sugarss": "2.13.0", - "@parcel/transformer-toml": "2.13.0", - "@parcel/transformer-typescript-types": "2.13.0", - "@parcel/transformer-vue": "2.13.0", - "@parcel/transformer-webmanifest": "2.13.0", - "@parcel/transformer-worklet": "2.13.0", - "@parcel/transformer-xml": "2.13.0", - "@parcel/transformer-yaml": "2.13.0" + "@parcel/optimizer-data-url": "2.13.3", + "@parcel/packager-raw-url": "2.13.3", + "@parcel/packager-ts": "2.13.3", + "@parcel/packager-xml": "2.13.3", + "@parcel/transformer-coffeescript": "2.13.3", + "@parcel/transformer-elm": "2.13.3", + "@parcel/transformer-glsl": "2.13.3", + "@parcel/transformer-graphql": "2.13.3", + "@parcel/transformer-inline-string": "2.13.3", + "@parcel/transformer-jsonld": "2.13.3", + "@parcel/transformer-less": "2.13.3", + "@parcel/transformer-mdx": "2.13.3", + "@parcel/transformer-pug": "2.13.3", + "@parcel/transformer-sass": "2.13.3", + "@parcel/transformer-stylus": "2.13.3", + "@parcel/transformer-sugarss": "2.13.3", + "@parcel/transformer-toml": "2.13.3", + "@parcel/transformer-typescript-types": "2.13.3", + "@parcel/transformer-vue": "2.13.3", + "@parcel/transformer-webmanifest": "2.13.3", + "@parcel/transformer-worklet": "2.13.3", + "@parcel/transformer-xml": "2.13.3", + "@parcel/transformer-yaml": "2.13.3" }, "peerDependencies": { - "@parcel/core": "^2.13.0" + "@parcel/core": "^2.13.3" } } diff --git a/packages/configs/react-static/index.json b/packages/configs/react-static/index.json new file mode 100644 index 00000000000..7181328f5ad --- /dev/null +++ b/packages/configs/react-static/index.json @@ -0,0 +1,7 @@ +{ + "extends": "@parcel/config-default", + "namers": ["@parcel/namer-static", "..."], + "packagers": { + "*.html": "@parcel/packager-react-static" + } +} diff --git a/packages/configs/react-static/package.json b/packages/configs/react-static/package.json new file mode 100644 index 00000000000..0261a83aba7 --- /dev/null +++ b/packages/configs/react-static/package.json @@ -0,0 +1,15 @@ +{ + "name": "@parcel/config-react-static", + "version": "2.13.3", + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/parcel-bundler/parcel.git" + }, + "main": "index.json", + "dependencies": { + "@parcel/config-default": "2.13.3", + "@parcel/namer-static": "2.13.3", + "@parcel/packager-react-static": "2.13.3" + } +} diff --git a/packages/configs/repl/index.json b/packages/configs/repl/index.json index 09b050094f0..b98cc0a56e6 100644 --- a/packages/configs/repl/index.json +++ b/packages/configs/repl/index.json @@ -16,11 +16,7 @@ "url:*": ["@parcel/transformer-raw"] }, "namers": ["@parcel/namer-default"], - "runtimes": [ - "@parcel/runtime-js", - "@parcel/runtime-browser-hmr", - "@parcel/runtime-react-refresh" - ], + "runtimes": ["@parcel/runtime-js", "@parcel/runtime-browser-hmr"], "optimizers": { "*.{js,mjs,cjs}": ["@parcel/optimizer-terser"], "*.css": ["@parcel/optimizer-css"] diff --git a/packages/configs/repl/package.json b/packages/configs/repl/package.json index 1e2cf15ea8e..542c7c1e827 100644 --- a/packages/configs/repl/package.json +++ b/packages/configs/repl/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/config-repl", - "version": "2.13.0", + "version": "2.13.3", "license": "MIT", "private": true, "repository": { @@ -12,30 +12,29 @@ "test-ci": "mocha" }, "dependencies": { - "@parcel/bundler-default": "2.13.0", - "@parcel/compressor-raw": "2.13.0", - "@parcel/namer-default": "2.13.0", - "@parcel/optimizer-terser": "2.13.0", - "@parcel/packager-css": "2.13.0", - "@parcel/packager-html": "2.13.0", - "@parcel/packager-js": "2.13.0", - "@parcel/packager-raw": "2.13.0", - "@parcel/reporter-dev-server-sw": "2.13.0", - "@parcel/reporter-json": "2.13.0", - "@parcel/resolver-default": "2.13.0", - "@parcel/resolver-repl-runtimes": "2.13.0", - "@parcel/runtime-browser-hmr": "2.13.0", - "@parcel/runtime-js": "2.13.0", - "@parcel/runtime-react-refresh": "2.13.0", - "@parcel/transformer-babel": "2.13.0", - "@parcel/transformer-css": "2.13.0", - "@parcel/transformer-html": "2.13.0", - "@parcel/transformer-inline-string": "2.13.0", - "@parcel/transformer-js": "2.13.0", - "@parcel/transformer-json": "2.13.0", - "@parcel/transformer-postcss": "2.13.0", - "@parcel/transformer-posthtml": "2.13.0", - "@parcel/transformer-raw": "2.13.0", - "@parcel/transformer-react-refresh-wrap": "2.13.0" + "@parcel/bundler-default": "2.13.3", + "@parcel/compressor-raw": "2.13.3", + "@parcel/namer-default": "2.13.3", + "@parcel/optimizer-terser": "2.13.3", + "@parcel/packager-css": "2.13.3", + "@parcel/packager-html": "2.13.3", + "@parcel/packager-js": "2.13.3", + "@parcel/packager-raw": "2.13.3", + "@parcel/reporter-dev-server-sw": "2.13.3", + "@parcel/reporter-json": "2.13.3", + "@parcel/resolver-default": "2.13.3", + "@parcel/resolver-repl-runtimes": "2.13.3", + "@parcel/runtime-browser-hmr": "2.13.3", + "@parcel/runtime-js": "2.13.3", + "@parcel/transformer-babel": "2.13.3", + "@parcel/transformer-css": "2.13.3", + "@parcel/transformer-html": "2.13.3", + "@parcel/transformer-inline-string": "2.13.3", + "@parcel/transformer-js": "2.13.3", + "@parcel/transformer-json": "2.13.3", + "@parcel/transformer-postcss": "2.13.3", + "@parcel/transformer-posthtml": "2.13.3", + "@parcel/transformer-raw": "2.13.3", + "@parcel/transformer-react-refresh-wrap": "2.13.3" } } diff --git a/packages/configs/webextension/package.json b/packages/configs/webextension/package.json index f4d21146bdb..9c50d9e3531 100644 --- a/packages/configs/webextension/package.json +++ b/packages/configs/webextension/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/config-webextension", - "version": "2.13.0", + "version": "2.13.3", "license": "MIT", "publishConfig": { "access": "public" @@ -15,13 +15,13 @@ }, "main": "index.json", "dependencies": { - "@parcel/config-default": "2.13.0", - "@parcel/packager-webextension": "2.13.0", - "@parcel/runtime-webextension": "2.13.0", - "@parcel/transformer-raw": "2.13.0", - "@parcel/transformer-webextension": "2.13.0" + "@parcel/config-default": "2.13.3", + "@parcel/packager-webextension": "2.13.3", + "@parcel/runtime-webextension": "2.13.3", + "@parcel/transformer-raw": "2.13.3", + "@parcel/transformer-webextension": "2.13.3" }, "peerDependencies": { - "@parcel/core": "^2.13.0" + "@parcel/core": "^2.13.3" } } diff --git a/packages/core/cache/package.json b/packages/core/cache/package.json index bf389cb4252..f2f55d8fc52 100644 --- a/packages/core/cache/package.json +++ b/packages/core/cache/package.json @@ -1,7 +1,7 @@ { "name": "@parcel/cache", "description": "Interface for defining caches and file-system, IDB and LMDB implementations.", - "version": "2.13.0", + "version": "2.13.3", "license": "MIT", "publishConfig": { "access": "public" @@ -25,13 +25,13 @@ "check-ts": "tsc --noEmit index.d.ts" }, "dependencies": { - "@parcel/fs": "2.13.0", - "@parcel/logger": "2.13.0", - "@parcel/utils": "2.13.0", + "@parcel/fs": "2.13.3", + "@parcel/logger": "2.13.3", + "@parcel/utils": "2.13.3", "lmdb": "2.8.5" }, "peerDependencies": { - "@parcel/core": "^2.13.0" + "@parcel/core": "^2.13.3" }, "devDependencies": { "idb": "^5.0.8" diff --git a/packages/core/codeframe/package.json b/packages/core/codeframe/package.json index 93c75bee727..2f761819c0f 100644 --- a/packages/core/codeframe/package.json +++ b/packages/core/codeframe/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/codeframe", - "version": "2.13.0", + "version": "2.13.3", "description": "Blazing fast, zero configuration web application bundler", "license": "MIT", "publishConfig": { diff --git a/packages/core/core/package.json b/packages/core/core/package.json index a290fe309c0..13401811b05 100644 --- a/packages/core/core/package.json +++ b/packages/core/core/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/core", - "version": "2.13.0", + "version": "2.13.3", "license": "MIT", "publishConfig": { "access": "public" @@ -25,21 +25,21 @@ }, "dependencies": { "@mischnic/json-sourcemap": "^0.1.0", - "@parcel/cache": "2.13.0", - "@parcel/diagnostic": "2.13.0", - "@parcel/events": "2.13.0", - "@parcel/feature-flags": "2.13.0", - "@parcel/fs": "2.13.0", - "@parcel/graph": "3.3.0", - "@parcel/logger": "2.13.0", - "@parcel/package-manager": "2.13.0", - "@parcel/plugin": "2.13.0", - "@parcel/profiler": "2.13.0", - "@parcel/rust": "2.13.0", + "@parcel/cache": "2.13.3", + "@parcel/diagnostic": "2.13.3", + "@parcel/events": "2.13.3", + "@parcel/feature-flags": "2.13.3", + "@parcel/fs": "2.13.3", + "@parcel/graph": "3.3.3", + "@parcel/logger": "2.13.3", + "@parcel/package-manager": "2.13.3", + "@parcel/plugin": "2.13.3", + "@parcel/profiler": "2.13.3", + "@parcel/rust": "2.13.3", "@parcel/source-map": "^2.1.1", - "@parcel/types": "2.13.0", - "@parcel/utils": "2.13.0", - "@parcel/workers": "2.13.0", + "@parcel/types": "2.13.3", + "@parcel/utils": "2.13.3", + "@parcel/workers": "2.13.3", "base-x": "^3.0.8", "browserslist": "^4.6.6", "clone": "^2.1.1", @@ -51,7 +51,7 @@ "semver": "^7.5.2" }, "devDependencies": { - "@parcel/babel-register": "2.13.0", + "@parcel/babel-register": "2.13.3", "@types/node": ">= 18", "graphviz": "^0.0.9", "tempy": "^0.2.1" diff --git a/packages/core/core/src/AssetGraph.js b/packages/core/core/src/AssetGraph.js index 2d674e86693..3769e2ddc70 100644 --- a/packages/core/core/src/AssetGraph.js +++ b/packages/core/core/src/AssetGraph.js @@ -530,6 +530,14 @@ export default class AssetGraph extends ContentGraph { ...depNode.value.meta, ...existing.value.resolverMeta, }; + depNode.value.resolverMeta = existing.value.resolverMeta; + } + if ( + existing?.type === 'dependency' && + existing.value.resolverPriority != null + ) { + depNode.value.priority = existing.value.resolverPriority; + depNode.value.resolverPriority = existing.value.resolverPriority; } let dependentAsset = dependentAssets.find( a => a.uniqueKey === dep.specifier, diff --git a/packages/core/core/src/BundleGraph.js b/packages/core/core/src/BundleGraph.js index 22847dcf00c..cb8d9bd03e5 100644 --- a/packages/core/core/src/BundleGraph.js +++ b/packages/core/core/src/BundleGraph.js @@ -1115,13 +1115,20 @@ export default class BundleGraph { if ( this._graph .getNodeIdsConnectedTo(assetNodeId, bundleGraphEdgeTypes.references) - .map(id => this._graph.getNode(id)) - .some( - node => + .some(id => { + let node = this._graph.getNode(id); + return ( node?.type === 'dependency' && - node.value.priority === Priority.lazy && - node.value.specifierType !== SpecifierType.url, - ) + !node.value.isEntry && + (this._graph + .getNodeIdsConnectedFrom(id) + .some(id => this._graph.getNode(id)?.type === 'bundle_group') || + this._graph.getNodeIdsConnectedTo( + id, + bundleGraphEdgeTypes.internal_async, + ).length > 0) + ); + }) ) { // If this asset is referenced by any async dependency, it's referenced. return true; @@ -1172,7 +1179,7 @@ export default class BundleGraph { if ( descendant.type !== bundle.type || - descendant.env.context !== bundle.env.context + ISOLATED_ENVS.has(descendant.env.context) ) { actions.skipChildren(); return; @@ -1191,7 +1198,13 @@ export default class BundleGraph { hasParentBundleOfType(bundle: Bundle, type: string): boolean { let parents = this.getParentBundles(bundle); - return parents.length > 0 && parents.every(parent => parent.type === type); + return ( + parents.length > 0 && + parents.every( + parent => + parent.type === type && parent.env.context === bundle.env.context, + ) + ); } getParentBundles(bundle: Bundle): Array { @@ -1265,7 +1278,7 @@ export default class BundleGraph { node.type === 'root' || (node.type === 'bundle' && (node.value.id === bundle.id || - node.value.env.context !== bundle.env.context)) + ISOLATED_ENVS.has(node.value.env.context))) ) { isReachable = false; actions.stop(); @@ -2094,4 +2107,33 @@ export default class BundleGraph { this._targetEntryRoots.set(target.distDir, root); return root; } + + getEntryBundles(): Array { + let entryBundleGroupIds = this._graph.getNodeIdsConnectedFrom( + nullthrows(this._graph.rootNodeId), + bundleGraphEdgeTypes.bundle, + ); + + let entries = []; + for (let bundleGroupId of entryBundleGroupIds) { + let bundleGroupNode = this._graph.getNode(bundleGroupId); + invariant(bundleGroupNode?.type === 'bundle_group'); + + let entryBundle = this.getBundlesInBundleGroup( + bundleGroupNode.value, + ).find(b => { + let mainEntryId = b.entryAssetIds[b.entryAssetIds.length - 1]; + return ( + mainEntryId != null && + bundleGroupNode.value.entryAssetId === mainEntryId + ); + }); + + if (entryBundle) { + entries.push(entryBundle); + } + } + + return entries; + } } diff --git a/packages/core/core/src/Environment.js b/packages/core/core/src/Environment.js index 2c471350d60..099f222b8cb 100644 --- a/packages/core/core/src/Environment.js +++ b/packages/core/core/src/Environment.js @@ -12,7 +12,7 @@ import {environmentToInternalEnvironment} from './public/Environment'; const DEFAULT_ENGINES = { browsers: ['> 0.25%'], - node: '>= 8.0.0', + node: '>= 18.0.0', }; type EnvironmentOpts = {| @@ -48,6 +48,7 @@ export function createEnvironment({ switch (context) { case 'node': case 'electron-main': + case 'react-server': engines = { node: DEFAULT_ENGINES.node, }; @@ -56,6 +57,7 @@ export function createEnvironment({ case 'web-worker': case 'service-worker': case 'electron-renderer': + case 'react-client': engines = { browsers: DEFAULT_ENGINES.browsers, }; @@ -86,6 +88,7 @@ export function createEnvironment({ case 'node': case 'electron-main': case 'electron-renderer': + case 'react-server': outputFormat = 'commonjs'; break; default: diff --git a/packages/core/core/src/PackagerRunner.js b/packages/core/core/src/PackagerRunner.js index a7dc9ac27fe..87d7a8be08e 100644 --- a/packages/core/core/src/PackagerRunner.js +++ b/packages/core/core/src/PackagerRunner.js @@ -72,7 +72,7 @@ type Opts = {| |}; export type RunPackagerRunnerResult = {| - bundleInfo: BundleInfo, + bundleInfo: BundleInfo[], configRequests: Array, devDepRequests: Array, invalidations: Array, @@ -91,7 +91,6 @@ export type BundleInfo = {| type CacheKeyMap = {| content: string, map: string, - info: string, |}; const BOUNDARY_LENGTH = HASH_REF_PREFIX.length + 32 - 1; @@ -146,14 +145,21 @@ export default class PackagerRunner { invalidateDevDeps(invalidDevDeps, this.options, this.config); let {configs, bundleConfigs} = await this.loadConfigs(bundleGraph, bundle); - let bundleInfo = - (await this.getBundleInfoFromCache( - bundleGraph, + let bundleInfo = await this.getBundleInfoFromCache( + bundleGraph, + bundle, + configs, + bundleConfigs, + ); + + if (bundleInfo.length === 0) { + bundleInfo = await this.getBundleInfo( bundle, + bundleGraph, configs, bundleConfigs, - )) ?? - (await this.getBundleInfo(bundle, bundleGraph, configs, bundleConfigs)); + ); + } let configRequests = getConfigRequests([ ...configs.values(), @@ -287,9 +293,9 @@ export default class PackagerRunner { bundle: InternalBundle, configs: Map, bundleConfigs: Map, - ): Async { + ): Promise { if (this.options.shouldDisableCache) { - return; + return []; } let cacheKey = await this.getCacheKey( @@ -300,7 +306,8 @@ export default class PackagerRunner { this.previousInvalidations, ); let infoKey = PackagerRunner.getInfoKey(cacheKey); - return this.options.cache.get(infoKey); + let res = await this.options.cache.get(infoKey); + return res ?? []; } async getBundleInfo( @@ -308,8 +315,8 @@ export default class PackagerRunner { bundleGraph: InternalBundleGraph, configs: Map, bundleConfigs: Map, - ): Promise { - let {type, contents, map} = await this.getBundleResult( + ): Promise { + let results = await this.getBundleResult( bundle, bundleGraph, configs, @@ -324,13 +331,8 @@ export default class PackagerRunner { bundleConfigs, [...this.invalidations.values()], ); - let cacheKeys = { - content: PackagerRunner.getContentKey(cacheKey), - map: PackagerRunner.getMapKey(cacheKey), - info: PackagerRunner.getInfoKey(cacheKey), - }; - return this.writeToCache(cacheKeys, type, contents, map); + return this.writeToCache(cacheKey, results); } async getBundleResult( @@ -338,35 +340,43 @@ export default class PackagerRunner { bundleGraph: InternalBundleGraph, configs: Map, bundleConfigs: Map, - ): Promise<{| - type: string, - contents: Blob, - map: ?string, - |}> { - let packaged = await this.package( + ): Promise< + {| + type: string, + contents: Blob, + map: ?string, + |}[], + > { + let packagedResults = await this.package( bundle, bundleGraph, configs, bundleConfigs, ); - let type = packaged.type ?? bundle.type; - let res = await this.optimize( - bundle, - bundleGraph, - type, - packaged.contents, - packaged.map, - configs, - bundleConfigs, - ); + return Promise.all( + packagedResults.map(async packaged => { + let type = packaged.type ?? bundle.type; + let res = await this.optimize( + bundle, + bundleGraph, + type, + packaged.contents, + packaged.map, + configs, + bundleConfigs, + ); - let map = - res.map != null ? await this.generateSourceMap(bundle, res.map) : null; - return { - type: res.type ?? type, - contents: res.contents, - map, - }; + let map = + res.map != null + ? await this.generateSourceMap(bundle, res.map) + : null; + return { + type: res.type ?? type, + contents: res.contents, + map, + }; + }), + ); } getSourceMapReference(bundle: NamedBundle, map: ?SourceMap): Async { @@ -386,7 +396,7 @@ export default class PackagerRunner { bundleGraph: InternalBundleGraph, configs: Map, bundleConfigs: Map, - ): Promise { + ): Promise { let bundle = NamedBundle.get(internalBundle, bundleGraph, this.options); this.report({ type: 'buildProgress', @@ -401,7 +411,7 @@ export default class PackagerRunner { measurement = tracer.createMeasurement(name, 'packaging', bundle.name, { type: bundle.type, }); - return await plugin.package({ + let res = await plugin.package({ config: configs.get(name)?.result, bundleConfig: bundleConfigs.get(name)?.result, bundle, @@ -434,9 +444,13 @@ export default class PackagerRunner { bundleConfigs, ); - return {contents: res.contents}; + return {contents: res[0].contents}; }, }); + if (Array.isArray(res)) { + return res; + } + return [res]; } catch (e) { throw new ThrowableDiagnostic({ diagnostic: errorToDiagnostic(e, { @@ -482,12 +496,16 @@ export default class PackagerRunner { NamedBundle.get.bind(NamedBundle), this.options, ); + let name = bundle.name; + if (type !== bundle.type) { + name = name.slice(0, -path.extname(name).length) + '.' + type; + } let optimizers = await this.config.getOptimizers( - bundle.name, + name, internalBundle.pipeline, ); if (!optimizers.length) { - return {type: bundle.type, contents, map}; + return {type, contents, map}; } this.report({ @@ -691,97 +709,82 @@ export default class PackagerRunner { return devDepHashes; } - async readFromCache(cacheKey: string): Promise { - let contentKey = PackagerRunner.getContentKey(cacheKey); - let mapKey = PackagerRunner.getMapKey(cacheKey); - - let isLargeBlob = await this.options.cache.hasLargeBlob(contentKey); - let contentExists = - isLargeBlob || (await this.options.cache.has(contentKey)); - if (!contentExists) { - return null; - } - - let mapExists = await this.options.cache.has(mapKey); - - return { - contents: isLargeBlob - ? this.options.cache.getStream(contentKey) - : blobToStream(await this.options.cache.getBlob(contentKey)), - map: mapExists - ? blobToStream(await this.options.cache.getBlob(mapKey)) - : null, - }; - } - async writeToCache( - cacheKeys: CacheKeyMap, - type: string, - contents: Blob, - map: ?string, - ): Promise { - let size = 0; - let hash; - let hashReferences = []; - let isLargeBlob = false; - - // TODO: don't replace hash references in binary files?? - if (contents instanceof Readable) { - isLargeBlob = true; - let boundaryStr = ''; - let h = new Hash(); - await this.options.cache.setStream( - cacheKeys.content, - blobToStream(contents).pipe( - new TapStream(buf => { - let str = boundaryStr + buf.toString(); - hashReferences = hashReferences.concat( - str.match(HASH_REF_REGEX) ?? [], - ); - size += buf.length; - h.writeBuffer(buf); - boundaryStr = str.slice(str.length - BOUNDARY_LENGTH); - }), - ), - ); - hash = h.finish(); - } else if (typeof contents === 'string') { - let buffer = Buffer.from(contents); - size = buffer.byteLength; - hash = hashBuffer(buffer); - hashReferences = contents.match(HASH_REF_REGEX) ?? []; - await this.options.cache.setBlob(cacheKeys.content, buffer); - } else { - size = contents.length; - hash = hashBuffer(contents); - hashReferences = contents.toString().match(HASH_REF_REGEX) ?? []; - await this.options.cache.setBlob(cacheKeys.content, contents); - } + cacheKey: string, + results: Array<{| + contents: Blob, + map: ?string, + type: string, + |}>, + ): Promise { + let info = await Promise.all( + results.map(async ({contents, map, type}, index) => { + let size = 0; + let hash; + let hashReferences = []; + let isLargeBlob = false; + let cacheKeys = { + content: PackagerRunner.getContentKey(cacheKey, index), + map: PackagerRunner.getMapKey(cacheKey, index), + }; - if (map != null) { - await this.options.cache.setBlob(cacheKeys.map, map); - } - let info = { - type, - size, - hash, - hashReferences, - cacheKeys, - isLargeBlob, - }; - await this.options.cache.set(cacheKeys.info, info); + // TODO: don't replace hash references in binary files?? + if (contents instanceof Readable) { + isLargeBlob = true; + let boundaryStr = ''; + let h = new Hash(); + await this.options.cache.setStream( + cacheKeys.content, + blobToStream(contents).pipe( + new TapStream(buf => { + let str = boundaryStr + buf.toString(); + hashReferences = hashReferences.concat( + str.match(HASH_REF_REGEX) ?? [], + ); + size += buf.length; + h.writeBuffer(buf); + boundaryStr = str.slice(str.length - BOUNDARY_LENGTH); + }), + ), + ); + hash = h.finish(); + } else if (typeof contents === 'string') { + let buffer = Buffer.from(contents); + size = buffer.byteLength; + hash = hashBuffer(buffer); + hashReferences = contents.match(HASH_REF_REGEX) ?? []; + await this.options.cache.setBlob(cacheKeys.content, buffer); + } else { + size = contents.length; + hash = hashBuffer(contents); + hashReferences = contents.toString().match(HASH_REF_REGEX) ?? []; + await this.options.cache.setBlob(cacheKeys.content, contents); + } + + if (map != null) { + await this.options.cache.setBlob(cacheKeys.map, map); + } + let info: BundleInfo = { + type, + size, + hash, + hashReferences, + cacheKeys, + isLargeBlob, + }; + return info; + }), + ); + await this.options.cache.set(PackagerRunner.getInfoKey(cacheKey), info); return info; } - static getContentKey(cacheKey: string): string { - return hashString(`${cacheKey}:content`); + static getContentKey(cacheKey: string, index: number): string { + return hashString(`${cacheKey}:${index}:content`); } - static getMapKey(cacheKey: string): string { - return hashString(`${cacheKey}:map`); + static getMapKey(cacheKey: string, index: number): string { + return hashString(`${cacheKey}:${index}:map`); } static getInfoKey(cacheKey: string): string { diff --git a/packages/core/core/src/TargetDescriptor.schema.js b/packages/core/core/src/TargetDescriptor.schema.js index 02d93b5ffcb..7285d892d4e 100644 --- a/packages/core/core/src/TargetDescriptor.schema.js +++ b/packages/core/core/src/TargetDescriptor.schema.js @@ -36,6 +36,8 @@ export const PACKAGE_DESCRIPTOR_SCHEMA: SchemaObject = { 'electron-main', 'electron-renderer', 'service-worker', + 'react-server', + 'react-client', ], }, includeNodeModules: { diff --git a/packages/core/core/src/applyRuntimes.js b/packages/core/core/src/applyRuntimes.js index b8090d3a41d..5c9364af5a3 100644 --- a/packages/core/core/src/applyRuntimes.js +++ b/packages/core/core/src/applyRuntimes.js @@ -38,6 +38,7 @@ type RuntimeConnection = {| assetGroup: AssetGroup, dependency: ?Dependency, isEntry: ?boolean, + shouldReplaceResolution: ?boolean, |}; export default async function applyRuntimes({ @@ -99,10 +100,11 @@ export default async function applyRuntimes({ filePath, isEntry, env, + shouldReplaceResolution, } of runtimeAssets) { let sourceName = path.join( path.dirname(filePath), - `runtime-${hashString(code)}.${bundle.type}`, + `runtime-${hashString(code)}${path.extname(filePath)}`, ); let assetGroup = { @@ -119,6 +121,7 @@ export default async function applyRuntimes({ assetGroup, dependency, isEntry, + shouldReplaceResolution, }); } } @@ -170,7 +173,13 @@ export default async function applyRuntimes({ bundleGraph._assetPublicIds.add(publicId); } - for (let {bundle, assetGroup, dependency, isEntry} of connections) { + for (let { + bundle, + assetGroup, + dependency, + isEntry, + shouldReplaceResolution, + } of connections) { let assetGroupNode = nodeFromAssetGroup(assetGroup); let assetGroupAssetNodeIds = runtimesAssetGraph.getNodeIdsConnectedFrom( runtimesAssetGraph.getNodeIdByContentKey(assetGroupNode.id), @@ -257,6 +266,15 @@ export default async function applyRuntimes({ dependency.id, ); bundleGraph._graph.addEdge(dependencyNodeId, bundleGraphRuntimeNodeId); + + if (shouldReplaceResolution && resolution) { + let resolutionNodeId = bundleGraph._graph.getNodeIdByContentKey( + resolution.id, + ); + bundleGraph._graph.removeEdge(dependencyNodeId, resolutionNodeId); + bundleGraph._graph.addEdge(dependencyNodeId, resolutionNodeId); + // TODO: remove asset from bundle? + } } } diff --git a/packages/core/core/src/public/Bundle.js b/packages/core/core/src/public/Bundle.js index 9e9b29dac91..6e1fda606d8 100644 --- a/packages/core/core/src/public/Bundle.js +++ b/packages/core/core/src/public/Bundle.js @@ -17,6 +17,7 @@ import type { Stats, Target as ITarget, BundleBehavior, + PackagedBundleFile, } from '@parcel/types'; import type BundleGraph from '../BundleGraph'; @@ -263,7 +264,7 @@ export class PackagedBundle extends NamedBundle implements IPackagedBundle { #bundle /*: InternalBundle */; #bundleGraph /*: BundleGraph */; #options /*: ParcelOptions */; - #bundleInfo /*: ?PackagedBundleInfo */; + #bundleInfo /*: ?PackagedBundleInfo[] */; constructor( sentinel: mixed, @@ -307,7 +308,7 @@ export class PackagedBundle extends NamedBundle implements IPackagedBundle { internalBundle: InternalBundle, bundleGraph: BundleGraph, options: ParcelOptions, - bundleInfo: ?PackagedBundleInfo, + bundleInfo: ?(PackagedBundleInfo[]), ): PackagedBundle { let packagedBundle = PackagedBundle.get( internalBundle, @@ -321,17 +322,26 @@ export class PackagedBundle extends NamedBundle implements IPackagedBundle { get filePath(): string { return fromProjectPath( this.#options.projectRoot, - nullthrows(this.#bundleInfo).filePath, + nullthrows(this.#bundleInfo)[0].filePath, ); } get type(): string { // The bundle type may be overridden in the packager. // However, inline bundles will not have a bundleInfo here since they are not written to the filesystem. - return this.#bundleInfo ? this.#bundleInfo.type : this.#bundle.type; + return this.#bundleInfo ? this.#bundleInfo[0].type : this.#bundle.type; } get stats(): Stats { - return nullthrows(this.#bundleInfo).stats; + return nullthrows(this.#bundleInfo)[0].stats; + } + + get files(): PackagedBundleFile[] { + return this.#bundleInfo + ? this.#bundleInfo.map(i => ({ + filePath: fromProjectPath(this.#options.projectRoot, i.filePath), + stats: i.stats, + })) + : []; } } diff --git a/packages/core/core/src/public/BundleGraph.js b/packages/core/core/src/public/BundleGraph.js index 6b6aeb1327c..4ffeb09603f 100644 --- a/packages/core/core/src/public/BundleGraph.js +++ b/packages/core/core/src/public/BundleGraph.js @@ -332,4 +332,10 @@ export default class BundleGraph targetToInternalTarget(target), ); } + + getEntryBundles(): Array { + return this.#graph + .getEntryBundles() + .map(b => this.#createBundle(b, this.#graph, this.#options)); + } } diff --git a/packages/core/core/src/public/Environment.js b/packages/core/core/src/public/Environment.js index 8123280447d..c415138ce1e 100644 --- a/packages/core/core/src/public/Environment.js +++ b/packages/core/core/src/public/Environment.js @@ -25,11 +25,13 @@ export const BROWSER_ENVS: Set = new Set([ 'service-worker', 'worklet', 'electron-renderer', + 'react-client', ]); const ELECTRON_ENVS = new Set(['electron-main', 'electron-renderer']); -const NODE_ENVS = new Set(['node', ...ELECTRON_ENVS]); +const NODE_ENVS = new Set(['node', 'react-server', ...ELECTRON_ENVS]); const WORKER_ENVS = new Set(['web-worker', 'service-worker']); export const ISOLATED_ENVS: Set = new Set([...WORKER_ENVS, 'worklet']); +const SERVER_ENVS = new Set(['node', 'react-server']); const ALL_BROWSERS = [ 'chrome', @@ -81,6 +83,7 @@ const supportData = { samsung: '8', and_qq: '10.4', op_mob: '64', + node: '13.2.0', }, 'worker-module': { edge: '80', @@ -105,6 +108,7 @@ const supportData = { samsung: '9.2', and_qq: '10.4', op_mob: '64', + node: '10.4.0', }, 'arrow-functions': { chrome: '47', @@ -232,6 +236,10 @@ export default class Environment implements IEnvironment { return NODE_ENVS.has(this.#environment.context); } + isServer(): boolean { + return SERVER_ENVS.has(this.#environment.context); + } + isElectron(): boolean { return ELECTRON_ENVS.has(this.#environment.context); } diff --git a/packages/core/core/src/requests/PackageRequest.js b/packages/core/core/src/requests/PackageRequest.js index 666298cb780..2169a809bf0 100644 --- a/packages/core/core/src/requests/PackageRequest.js +++ b/packages/core/core/src/requests/PackageRequest.js @@ -24,7 +24,7 @@ type PackageRequestInput = {| useMainThread?: boolean, |}; -export type PackageRequestResult = BundleInfo; +export type PackageRequestResult = BundleInfo[]; type RunInput = {| input: PackageRequestInput, @@ -34,7 +34,7 @@ type RunInput = {| export type PackageRequest = {| id: ContentKey, +type: typeof requestTypes.package_request, - run: (RunInput) => Async, + run: (RunInput) => Async, input: PackageRequestInput, |}; @@ -95,8 +95,10 @@ async function run({input, api, farm}) { } } - // $FlowFixMe[cannot-write] time is marked read-only, but this is the exception - bundleInfo.time = Date.now() - start; + for (let info of bundleInfo) { + // $FlowFixMe[cannot-write] time is marked read-only, but this is the exception + info.time = Date.now() - start; + } api.storeResult(bundleInfo); return bundleInfo; diff --git a/packages/core/core/src/requests/ParcelBuildRequest.js b/packages/core/core/src/requests/ParcelBuildRequest.js index a3bb384c9ec..b80e584ecb4 100644 --- a/packages/core/core/src/requests/ParcelBuildRequest.js +++ b/packages/core/core/src/requests/ParcelBuildRequest.js @@ -31,7 +31,7 @@ type ParcelBuildRequestInput = {| export type ParcelBuildRequestResult = {| bundleGraph: BundleGraph, - bundleInfo: Map, + bundleInfo: Map, changedAssets: Map, assetRequests: Array, |}; diff --git a/packages/core/core/src/requests/PathRequest.js b/packages/core/core/src/requests/PathRequest.js index f0dca3d9f38..bf51e1c1005 100644 --- a/packages/core/core/src/requests/PathRequest.js +++ b/packages/core/core/src/requests/PathRequest.js @@ -315,7 +315,8 @@ export class ResolverRunner { } if (result.priority != null) { - dependency.priority = Priority[result.priority]; + dependency.priority = dependency.resolverPriority = + Priority[result.priority]; } if (result.invalidateOnEnvChange) { diff --git a/packages/core/core/src/requests/TargetRequest.js b/packages/core/core/src/requests/TargetRequest.js index f7e583ac5ed..3dfc3b510b2 100644 --- a/packages/core/core/src/requests/TargetRequest.js +++ b/packages/core/core/src/requests/TargetRequest.js @@ -45,10 +45,10 @@ import { PACKAGE_DESCRIPTOR_SCHEMA, ENGINES_SCHEMA, } from '../TargetDescriptor.schema'; -import {BROWSER_ENVS} from '../public/Environment'; import {optionsProxy, toInternalSourceLocation} from '../utils'; import {fromProjectPath, toProjectPath, joinProjectPath} from '../projectPath'; import {requestTypes} from '../RequestTracker'; +import {BROWSER_ENVS} from '../public/Environment'; type RunOpts = {| input: Entry, @@ -79,7 +79,7 @@ const COMMON_TARGETS = { }; const DEFAULT_ENGINES = { - node: 'current', + node: process.versions.node, browsers: [ 'last 1 Chrome version', 'last 1 Safari version', @@ -340,40 +340,48 @@ export class TargetResolver { }, }); } - if (!BROWSER_ENVS.has(targets[0].env.context)) { - throw new ThrowableDiagnostic({ - diagnostic: { - message: `Only browser targets are supported in serve mode`, - origin: '@parcel/core', - }, - }); - } targets[0].distDir = toProjectPath( this.options.projectRoot, serve.distDir, ); } } else { + targets = Array.from(packageTargets.values()) + .filter(Boolean) + .filter(descriptor => { + return ( + descriptor && + !skipTarget(descriptor.name, exclusiveTarget, descriptor.source) + ); + }); + // Explicit targets were not provided. Either use a modern target for server // mode, or simply use the package.json targets. if (this.options.serveOptions) { // In serve mode, we only support a single browser target. Since the user // hasn't specified a target, use one targeting modern browsers for development + let distDir = toProjectPath( + this.options.projectRoot, + this.options.serveOptions.distDir, + ); + let mainTarget = targets.length === 1 ? targets[0] : null; + let context = mainTarget?.env.context ?? 'browser'; + let engines = BROWSER_ENVS.has(context) + ? {browsers: DEFAULT_ENGINES.browsers} + : {node: DEFAULT_ENGINES.node}; targets = [ { name: 'default', - distDir: toProjectPath( - this.options.projectRoot, - this.options.serveOptions.distDir, - ), + distDir, publicUrl: this.options.defaultTargetOptions.publicUrl ?? '/', env: createEnvironment({ - context: 'browser', - engines: { - browsers: DEFAULT_ENGINES.browsers, - }, + context, + engines, + includeNodeModules: mainTarget?.env.includeNodeModules, shouldOptimize: this.options.defaultTargetOptions.shouldOptimize, - outputFormat: this.options.defaultTargetOptions.outputFormat, + outputFormat: + mainTarget?.env.outputFormat ?? + this.options.defaultTargetOptions.outputFormat, shouldScopeHoist: this.options.defaultTargetOptions.shouldScopeHoist, sourceMap: this.options.defaultTargetOptions.sourceMaps @@ -382,15 +390,6 @@ export class TargetResolver { }), }, ]; - } else { - targets = Array.from(packageTargets.values()) - .filter(Boolean) - .filter(descriptor => { - return ( - descriptor && - !skipTarget(descriptor.name, exclusiveTarget, descriptor.source) - ); - }); } } diff --git a/packages/core/core/src/requests/WriteBundleRequest.js b/packages/core/core/src/requests/WriteBundleRequest.js index d6c7fe1d733..836fa5640ec 100644 --- a/packages/core/core/src/requests/WriteBundleRequest.js +++ b/packages/core/core/src/requests/WriteBundleRequest.js @@ -2,7 +2,7 @@ import type {FileSystem, FileOptions} from '@parcel/fs'; import type {ContentKey} from '@parcel/graph'; -import type {Async, FilePath, Compressor} from '@parcel/types'; +import type {Async, Compressor} from '@parcel/types'; import type {RunAPI, StaticRunOpts} from '../RequestTracker'; import type {Bundle, PackagedBundleInfo, ParcelOptions} from '../types'; @@ -51,7 +51,7 @@ type WriteBundleRequestInput = {| hashRefToNameHash: Map, |}; -export type WriteBundleRequestResult = PackagedBundleInfo; +export type WriteBundleRequestResult = PackagedBundleInfo[]; type RunInput = {| input: WriteBundleRequestInput, @@ -61,7 +61,7 @@ type RunInput = {| export type WriteBundleRequest = {| id: ContentKey, +type: typeof requestTypes.write_bundle_request, - run: (RunInput) => Async, + run: (RunInput) => Async, input: WriteBundleRequestInput, |}; @@ -137,12 +137,6 @@ async function run({input, options, api}) { await options.cache.getBlob(cacheKeys.content), ); } - let size = 0; - contentStream = contentStream.pipe( - new TapStream(buf => { - size += buf.length; - }), - ); let configResult = nullthrows( await api.runRequest(createParcelConfigRequest()), @@ -152,7 +146,7 @@ async function run({input, options, api}) { let {devDeps, invalidDevDeps} = await getDevDepRequests(api); invalidateDevDeps(invalidDevDeps, options, config); - await writeFiles( + let files = await writeFiles( contentStream, info, hashRefToNameHash, @@ -171,7 +165,7 @@ async function run({input, options, api}) { !bundle.env.sourceMap.inline && (await options.cache.has(mapKey)) ) { - await writeFiles( + let mapFiles = await writeFiles( blobToStream(await options.cache.getBlob(mapKey)), info, hashRefToNameHash, @@ -183,19 +177,11 @@ async function run({input, options, api}) { devDeps, api, ); + files.push(...mapFiles); } - let res = { - filePath, - type: info.type, - stats: { - size, - time: info.time ?? 0, - }, - }; - - api.storeResult(res); - return res; + api.storeResult(files); + return files; } async function writeFiles( @@ -208,12 +194,11 @@ async function writeFiles( filePath: ProjectPath, writeOptions: ?FileOptions, devDeps: Map, - api: RunAPI, -) { + api: RunAPI, +): Promise { let compressors = await config.getCompressors( fromProjectPathRelative(filePath), ); - let fullPath = fromProjectPath(options.projectRoot, filePath); let stream = info.hashReferences.length ? inputStream.pipe(replaceStream(hashRefToNameHash)) @@ -224,10 +209,11 @@ async function writeFiles( promises.push( runCompressor( compressor, + info, cloneStream(stream), options, outputFS, - fullPath, + filePath, writeOptions, devDeps, api, @@ -235,25 +221,27 @@ async function writeFiles( ); } - await Promise.all(promises); + let results = await Promise.all(promises); + return results.filter(Boolean); } async function runCompressor( compressor: LoadedPlugin, + info: BundleInfo, stream: stream$Readable, options: ParcelOptions, outputFS: FileSystem, - filePath: FilePath, + inputFilePath: ProjectPath, writeOptions: ?FileOptions, devDeps: Map, - api: RunAPI, -) { + api: RunAPI, +): Promise { let measurement; try { measurement = tracer.createMeasurement( compressor.name, 'compress', - path.relative(options.projectRoot, filePath), + fromProjectPathRelative(inputFilePath), ); let res = await compressor.plugin.compress({ stream, @@ -262,21 +250,45 @@ async function runCompressor( tracer: new PluginTracer({origin: compressor.name, category: 'compress'}), }); + let filePath = inputFilePath; if (res != null) { + if (res.type != null) { + let type = res.type; + filePath = toProjectPathUnsafe( + fromProjectPathRelative(filePath) + '.' + type, + ); + } + + let size = 0; + let stream = res.stream.pipe( + new TapStream(buf => { + size += buf.length; + }), + ); + + let fullPath = fromProjectPath(options.projectRoot, filePath); await new Promise((resolve, reject) => pipeline( - res.stream, - outputFS.createWriteStream( - filePath + (res.type != null ? '.' + res.type : ''), - writeOptions, - ), + stream, + outputFS.createWriteStream(fullPath, writeOptions), err => { if (err) reject(err); else resolve(); }, ), ); + + return { + filePath, + type: info.type, + stats: { + size, + time: info.time ?? 0, + }, + }; } + + return null; } catch (err) { throw new ThrowableDiagnostic({ diagnostic: errorToDiagnostic(err, { diff --git a/packages/core/core/src/requests/WriteBundlesRequest.js b/packages/core/core/src/requests/WriteBundlesRequest.js index 8a50b04e349..2da496e4a84 100644 --- a/packages/core/core/src/requests/WriteBundlesRequest.js +++ b/packages/core/core/src/requests/WriteBundlesRequest.js @@ -21,7 +21,7 @@ type WriteBundlesRequestInput = {| optionsRef: SharedReference, |}; -export type WriteBundlesRequestResult = Map; +export type WriteBundlesRequestResult = Map; type RunInput = {| input: WriteBundlesRequestInput, @@ -59,9 +59,9 @@ async function run({input, api, farm, options}) { let res = new Map(); let bundleInfoMap: {| - [string]: BundleInfo, + [string]: BundleInfo[], |} = {}; - let writeEarlyPromises = {}; + let writeEarlyPromises: {[string]: Promise} = {}; let hashRefToNameHash = new Map(); let bundles = bundleGraph.getBundles().filter(bundle => { // Do not package and write placeholder bundles to disk. We just @@ -73,14 +73,16 @@ async function run({input, api, farm, options}) { bundle.name, `Expected ${bundle.type} bundle to have a name`, ).replace(bundle.hashReference, hash); - res.set(bundle.id, { - filePath: joinProjectPath(bundle.target.distDir, name), - type: bundle.type, // FIXME: this is wrong if the packager changes the type... - stats: { - time: 0, - size: 0, + res.set(bundle.id, [ + { + filePath: joinProjectPath(bundle.target.distDir, name), + type: bundle.type, // FIXME: this is wrong if the packager changes the type... + stats: { + time: 0, + size: 0, + }, }, - }); + ]); return false; } @@ -105,7 +107,7 @@ async function run({input, api, farm, options}) { useMainThread, }); - let info = await api.runRequest(request); + let infos = await api.runRequest(request); if (!useMainThread) { // Force a refresh of the cache to avoid a race condition @@ -119,42 +121,51 @@ async function run({input, api, farm, options}) { options.cache.refresh(); } - bundleInfoMap[bundle.id] = info; - if (!info.hashReferences.length) { + bundleInfoMap[bundle.id] = infos; + if (infos.every(info => info.hashReferences.length === 0)) { hashRefToNameHash.set( bundle.hashReference, options.shouldContentHash - ? info.hash.slice(-8) + ? infos.length === 1 + ? infos[0].hash.slice(-8) + : hashString(infos.map(i => i.hash).join(':')).slice(-8) : bundle.id.slice(-8), ); - let writeBundleRequest = createWriteBundleRequest({ - bundle, - info, - hashRefToNameHash, - bundleGraph, - }); - let promise = api.runRequest(writeBundleRequest); - // If the promise rejects before we await it (below), we don't want to crash the build. - promise.catch(() => {}); - writeEarlyPromises[bundle.id] = promise; + for (let info of infos) { + let writeBundleRequest = createWriteBundleRequest({ + bundle, + info, + hashRefToNameHash, + bundleGraph, + }); + let promise = api.runRequest(writeBundleRequest); + // If the promise rejects before we await it (below), we don't want to crash the build. + promise.catch(() => {}); + writeEarlyPromises[info.cacheKeys.content] = promise; + } } }), ); assignComplexNameHashes(hashRefToNameHash, bundles, bundleInfoMap, options); await Promise.all( bundles.map(bundle => { - let promise = - writeEarlyPromises[bundle.id] ?? - api.runRequest( - createWriteBundleRequest({ - bundle, - info: bundleInfoMap[bundle.id], - hashRefToNameHash, - bundleGraph, - }), - ); - - return promise.then(r => res.set(bundle.id, r)); + let promise = Promise.all( + bundleInfoMap[bundle.id].map(info => { + return ( + writeEarlyPromises[info.cacheKeys.content] ?? + api.runRequest( + createWriteBundleRequest({ + bundle, + info, + hashRefToNameHash, + bundleGraph, + }), + ) + ); + }), + ); + + return promise.then(r => res.set(bundle.id, r.flat())); }), ); @@ -180,7 +191,7 @@ function assignComplexNameHashes( options.shouldContentHash ? hashString( [...getBundlesIncludedInHash(bundle.id, bundleInfoMap)] - .map(bundleId => bundleInfoMap[bundleId].hash) + .flatMap(bundleId => bundleInfoMap[bundleId].map(i => i.hash)) .join(':'), ).slice(-8) : bundle.id.slice(-8), @@ -194,10 +205,12 @@ function getBundlesIncludedInHash( included = new Set(), ) { included.add(bundleId); - for (let hashRef of bundleInfoMap[bundleId].hashReferences) { - let referencedId = getIdFromHashRef(hashRef); - if (!included.has(referencedId)) { - getBundlesIncludedInHash(referencedId, bundleInfoMap, included); + for (let info of bundleInfoMap[bundleId]) { + for (let hashRef of info.hashReferences) { + let referencedId = getIdFromHashRef(hashRef); + if (!included.has(referencedId)) { + getBundlesIncludedInHash(referencedId, bundleInfoMap, included); + } } } diff --git a/packages/core/core/src/types.js b/packages/core/core/src/types.js index 50c6a49ec2a..856c7edb5e4 100644 --- a/packages/core/core/src/types.js +++ b/packages/core/core/src/types.js @@ -142,6 +142,7 @@ export type Dependency = {| customPackageConditions?: Array, meta: Meta, resolverMeta?: ?Meta, + resolverPriority?: $Values, target: ?Target, sourceAssetId: ?string, sourcePath: ?ProjectPath, diff --git a/packages/core/core/test/Environment.test.js b/packages/core/core/test/Environment.test.js index 67643f1e4e1..649d1e5db41 100644 --- a/packages/core/core/test/Environment.test.js +++ b/packages/core/core/test/Environment.test.js @@ -63,10 +63,10 @@ describe('Environment', () => { it('assigns default engines for node', () => { assert.deepEqual(createEnvironment({context: 'node'}), { - id: 'f7c9644283a8698f', + id: 'b9b60fc7dcc0ae9c', context: 'node', engines: { - node: '>= 8.0.0', + node: '>= 18.0.0', }, includeNodeModules: false, outputFormat: 'commonjs', diff --git a/packages/core/diagnostic/package.json b/packages/core/diagnostic/package.json index b605f83918e..059eb8f376d 100644 --- a/packages/core/diagnostic/package.json +++ b/packages/core/diagnostic/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/diagnostic", - "version": "2.13.0", + "version": "2.13.3", "description": "Types and utilities for printing source-code located errors, warning and information messages.", "license": "MIT", "publishConfig": { diff --git a/packages/core/feature-flags/package.json b/packages/core/feature-flags/package.json index 23cb087bf91..8178108cdcd 100644 --- a/packages/core/feature-flags/package.json +++ b/packages/core/feature-flags/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/feature-flags", - "version": "2.13.0", + "version": "2.13.3", "description": "Provides internal feature-flags for the parcel codebase.", "license": "MIT", "publishConfig": { diff --git a/packages/core/fs/package.json b/packages/core/fs/package.json index a978c521dde..f175037fb19 100644 --- a/packages/core/fs/package.json +++ b/packages/core/fs/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/fs", - "version": "2.13.0", + "version": "2.13.3", "description": "Blazing fast, zero configuration web application bundler", "license": "MIT", "publishConfig": { @@ -52,22 +52,22 @@ "check-ts": "tsc --noEmit index.d.ts" }, "dependencies": { - "@parcel/feature-flags": "2.13.0", - "@parcel/rust": "2.13.0", - "@parcel/types-internal": "2.13.0", - "@parcel/utils": "2.13.0", + "@parcel/feature-flags": "2.13.3", + "@parcel/rust": "2.13.3", + "@parcel/types-internal": "2.13.3", + "@parcel/utils": "2.13.3", "@parcel/watcher": "^2.0.7", - "@parcel/workers": "2.13.0" + "@parcel/workers": "2.13.3" }, "devDependencies": { - "@parcel/watcher-watchman-js": "2.13.0", + "@parcel/watcher-watchman-js": "2.13.3", "graceful-fs": "^4.2.4", "ncp": "^2.0.0", "nullthrows": "^1.1.1", "utility-types": "^3.10.0" }, "peerDependencies": { - "@parcel/core": "^2.13.0" + "@parcel/core": "^2.13.3" }, "browser": { "@parcel/fs": "./lib/browser.js", diff --git a/packages/core/graph/package.json b/packages/core/graph/package.json index 7273888e0b5..a0a329798bf 100644 --- a/packages/core/graph/package.json +++ b/packages/core/graph/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/graph", - "version": "3.3.0", + "version": "3.3.3", "description": "Blazing fast, zero configuration web application bundler", "license": "MIT", "publishConfig": { @@ -20,7 +20,7 @@ "node": ">= 16.0.0" }, "dependencies": { - "@parcel/feature-flags": "2.13.0", + "@parcel/feature-flags": "2.13.3", "nullthrows": "^1.1.1" } } diff --git a/packages/core/integration-tests/package.json b/packages/core/integration-tests/package.json index c3f27f090ee..6e1b53e0c1c 100644 --- a/packages/core/integration-tests/package.json +++ b/packages/core/integration-tests/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/integration-tests", - "version": "2.13.0", + "version": "2.13.3", "private": true, "license": "MIT", "repository": { @@ -38,15 +38,15 @@ "ncp": "^2.0.0", "nib": "^1.1.2", "node-elm-compiler": "^5.0.5", - "parcel": "2.13.0", + "parcel": "2.13.3", "postcss": "^8.4.5", "postcss-custom-properties": "^12.1.2", "postcss-import": "^16.1.0", "posthtml-include": "^2.0.1", "posthtml-obfuscate": "^0.1.5", "preact": "^10.5.9", - "react": "^17.0.2", - "react-dom": "^17.0.2", + "react": "^19", + "react-dom": "^19", "sugarss": "^4.0.1", "tailwindcss": "^3.0.2", "tempy": "^0.3.0", diff --git a/packages/core/integration-tests/test/bundler.js b/packages/core/integration-tests/test/bundler.js index 65c13fdf223..3199d123339 100644 --- a/packages/core/integration-tests/test/bundler.js +++ b/packages/core/integration-tests/test/bundler.js @@ -1226,12 +1226,11 @@ describe('bundler', function () { { assets: [ 'bundle-manifest.js', - 'bundle-url.js', 'cacheLoader.js', 'css-loader.js', 'esmodule-helpers.js', 'index.js', - 'js-loader.js', + 'esm-js-loader.js', ], }, { @@ -1389,12 +1388,11 @@ describe('bundler', function () { { assets: [ 'bundle-manifest.js', - 'bundle-url.js', 'cacheLoader.js', 'css-loader.js', 'esmodule-helpers.js', 'index.js', - 'js-loader.js', + 'esm-js-loader.js', ], }, { @@ -1696,13 +1694,13 @@ describe('bundler', function () { assets: ['index.html'], }, { - assets: ['a.js', 'i.js'], + assets: ['a.js', 'b.js', 'c.js', 'h.js', 'j.js'], }, { - assets: ['vendor.js', 'b.js', 'j.js'], + assets: ['vendor.js', 'd.js', 'i.js'], }, { - assets: ['c.js', 'd.js', 'e.js', 'f.js', 'g.js', 'h.js'], + assets: ['e.js', 'f.js', 'g.js'], }, { assets: ['esmodule-helpers.js', 'index.js'], diff --git a/packages/core/integration-tests/test/hmr.js b/packages/core/integration-tests/test/hmr.js index 0565e4eef18..317bbfbb81d 100644 --- a/packages/core/integration-tests/test/hmr.js +++ b/packages/core/integration-tests/test/hmr.js @@ -516,15 +516,64 @@ module.hot.dispose((data) => { }); it('should work across bundles', async function () { - let {reloaded} = await testHMRClient('hmr-dynamic', outputs => { + let {reloaded, outputs} = await testHMRClient('hmr-dynamic', outputs => { assert.deepEqual(outputs, [3]); return { 'local.js': 'exports.a = 5; exports.b = 5;', }; }); - // assert.deepEqual(outputs, [3, 10]); - assert(reloaded); // TODO: this should eventually not reload... + assert.deepEqual(outputs, [3, 10]); + assert(!reloaded); + }); + + it('should work when an asset is duplicated', async function () { + let {reloaded, outputs} = await testHMRClient( + 'hmr-duplicate', + outputs => { + assert.deepEqual(outputs, [7]); + return { + 'shared.js': 'exports.a = 5;', + }; + }, + ); + + assert.deepEqual(outputs, [7, 13]); + assert(!reloaded); + }); + + it('should bubble to parents if child returns additional parents', async function () { + let {reloaded, outputs} = await testHMRClient('hmr-parents', outputs => { + assert.deepEqual(outputs, ['child 2', 'root']); + return { + 'updated.js': 'exports.a = 3;', + }; + }); + + assert.deepEqual(outputs, [ + 'child 2', + 'root', + 'child 3', + 'accept child', + 'root', + 'accept root', + ]); + assert(!reloaded); + }); + + it('should bubble to parents and reload if they do not accept', async function () { + let {reloaded, outputs} = await testHMRClient( + 'hmr-parents-reload', + outputs => { + assert.deepEqual(outputs, ['child 2', 'root']); + return { + 'updated.js': 'exports.a = 3;', + }; + }, + ); + + assert.deepEqual(outputs, []); + assert(reloaded); }); it('should work with urls', async function () { @@ -879,6 +928,14 @@ module.hot.dispose((data) => { let bundleEvent = await getNextBuild(b); assert.equal(bundleEvent.type, 'buildSuccess'); + // JSDOM doesn't support type=module + // https://github.com/jsdom/jsdom/issues/2475 + let htmlPath = nullthrows(bundleEvent.bundleGraph).getBundles()[0] + .filePath; + let html = await outputFS.readFile(htmlPath, 'utf8'); + html = html.replace(/type="module"/g, ''); + await outputFS.writeFile(htmlPath, html); + let window; try { let dom = await JSDOM.JSDOM.fromURL( @@ -942,6 +999,14 @@ module.hot.dispose((data) => { let bundleEvent = await getNextBuild(b); assert.equal(bundleEvent.type, 'buildSuccess'); + // JSDOM doesn't support type=module + // https://github.com/jsdom/jsdom/issues/2475 + let htmlPath = nullthrows(bundleEvent.bundleGraph).getBundles()[0] + .filePath; + let html = await outputFS.readFile(htmlPath, 'utf8'); + html = html.replace(/type="module"/g, ''); + await outputFS.writeFile(htmlPath, html); + let window; try { let dom = await JSDOM.JSDOM.fromURL( diff --git a/packages/core/integration-tests/test/html.js b/packages/core/integration-tests/test/html.js index 11d7e4c1cf9..1829ab9e64e 100644 --- a/packages/core/integration-tests/test/html.js +++ b/packages/core/integration-tests/test/html.js @@ -507,7 +507,7 @@ describe('html', function () { ); assert( - /^\s*\n`; + } + + code += ';\n}\n'; + + let filePath = nullthrows(node.value.sourcePath); + runtimes.push({ + filePath: replaceExtension(filePath), + code, + dependency: node.value, + env: {sourceType: 'module'}, + shouldReplaceResolution: true, + }); + } + } + }); + + // Register server actions in the server entry point. + if ( + bundle.env.isServer() && + bundleGraph.getParentBundles(bundle).length === 0 + ) { + let serverActions = ''; + bundleGraph.traverse(node => { + if ( + node.type === 'asset' && + Array.isArray(node.value.meta?.directives) && + node.value.meta.directives.includes('use server') + ) { + let bundlesWithAsset = bundleGraph.getBundlesWithAsset(node.value); + let bundles = new Set(); + let referenced = bundleGraph.getReferencedBundles( + bundlesWithAsset[0], + ); + bundles.add(normalizeSeparators(bundlesWithAsset[0].name)); + for (let r of referenced) { + if (r.type === 'js' && r.env.context === bundle.env.context) { + bundles.add(normalizeSeparators(r.name)); + } + } + serverActions += ` ${JSON.stringify( + bundleGraph.getAssetPublicId(node.value), + )}: ${JSON.stringify([...bundles])},\n`; + } + }); + + let code = ''; + if (serverActions.length > 0) { + code += + 'import {registerServerActions} from "react-server-dom-parcel/server.edge";\n'; + code += `registerServerActions({\n`; + code += serverActions; + code += '});\n'; + } + + // React needs AsyncLocalStorage defined as a global for the edge environment. + // Without this, preinit scripts won't be inserted during SSR. + code += 'if (typeof AsyncLocalHooks === "undefined") {\n'; + code += ' try {\n'; + code += + ' globalThis.AsyncLocalStorage = require("node:async_hooks").AsyncLocalStorage;\n'; + code += ' } catch {}\n'; + code += '}\n'; + + runtimes.push({ + filePath: replaceExtension( + bundle.getMainEntry()?.filePath ?? __filename, + ), + code, + isEntry: true, + env: {sourceType: 'module'}, + }); + } + + return runtimes; + }, +}): Runtime); + +function replaceExtension(filePath, extension = '.jsx') { + let ext = path.extname(filePath); + return filePath.slice(0, -ext.length) + extension; +} diff --git a/packages/runtimes/service-worker/package.json b/packages/runtimes/service-worker/package.json index bafd6a95f44..086ab0c3bd3 100644 --- a/packages/runtimes/service-worker/package.json +++ b/packages/runtimes/service-worker/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/runtime-service-worker", - "version": "2.13.0", + "version": "2.13.3", "license": "MIT", "publishConfig": { "access": "public" @@ -17,11 +17,11 @@ "source": "./src/ServiceWorkerRuntime.js", "engines": { "node": ">= 16.0.0", - "parcel": "^2.13.0" + "parcel": "^2.13.3" }, "dependencies": { - "@parcel/plugin": "2.13.0", - "@parcel/utils": "2.13.0", + "@parcel/plugin": "2.13.3", + "@parcel/utils": "2.13.3", "nullthrows": "^1.1.1" } } diff --git a/packages/runtimes/webextension/package.json b/packages/runtimes/webextension/package.json index 08b0b55e61c..f8e1c44999f 100644 --- a/packages/runtimes/webextension/package.json +++ b/packages/runtimes/webextension/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/runtime-webextension", - "version": "2.13.0", + "version": "2.13.3", "license": "MIT", "publishConfig": { "access": "public" @@ -17,11 +17,11 @@ "source": "src/WebExtensionRuntime.js", "engines": { "node": ">= 16.0.0", - "parcel": "^2.13.0" + "parcel": "^2.13.3" }, "dependencies": { - "@parcel/plugin": "2.13.0", - "@parcel/utils": "2.13.0", + "@parcel/plugin": "2.13.3", + "@parcel/utils": "2.13.3", "nullthrows": "^1.1.1" } } diff --git a/packages/transformers/babel/package.json b/packages/transformers/babel/package.json index c239e50afa7..3cae9e39f46 100644 --- a/packages/transformers/babel/package.json +++ b/packages/transformers/babel/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/transformer-babel", - "version": "2.13.0", + "version": "2.13.3", "license": "MIT", "publishConfig": { "access": "public" @@ -17,13 +17,13 @@ "source": "src/BabelTransformer.js", "engines": { "node": ">= 16.0.0", - "parcel": "^2.13.0" + "parcel": "^2.13.3" }, "dependencies": { - "@parcel/diagnostic": "2.13.0", - "@parcel/plugin": "2.13.0", + "@parcel/diagnostic": "2.13.3", + "@parcel/plugin": "2.13.3", "@parcel/source-map": "^2.1.1", - "@parcel/utils": "2.13.0", + "@parcel/utils": "2.13.3", "browserslist": "^4.6.6", "json5": "^2.2.0", "nullthrows": "^1.1.1", @@ -33,6 +33,6 @@ "@babel/core": "^7.22.11", "@babel/preset-env": "^7.22.14", "@babel/types": "^7.22.11", - "@parcel/types": "2.13.0" + "@parcel/types": "2.13.3" } } diff --git a/packages/transformers/coffeescript/package.json b/packages/transformers/coffeescript/package.json index 89b60c50266..a23d0ddce96 100644 --- a/packages/transformers/coffeescript/package.json +++ b/packages/transformers/coffeescript/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/transformer-coffeescript", - "version": "2.13.0", + "version": "2.13.3", "license": "MIT", "publishConfig": { "access": "public" @@ -17,12 +17,12 @@ "source": "src/CoffeeScriptTransformer.js", "engines": { "node": ">= 16.0.0", - "parcel": "^2.13.0" + "parcel": "^2.13.3" }, "dependencies": { - "@parcel/plugin": "2.13.0", + "@parcel/plugin": "2.13.3", "@parcel/source-map": "^2.1.1", - "@parcel/utils": "2.13.0", + "@parcel/utils": "2.13.3", "coffeescript": "^2.0.3", "nullthrows": "^1.1.1", "semver": "^7.5.2" diff --git a/packages/transformers/css/package.json b/packages/transformers/css/package.json index 3fafe5f1e85..df75b40f691 100644 --- a/packages/transformers/css/package.json +++ b/packages/transformers/css/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/transformer-css", - "version": "2.13.0", + "version": "2.13.3", "license": "MIT", "publishConfig": { "access": "public" @@ -17,13 +17,13 @@ "source": "src/CSSTransformer.js", "engines": { "node": ">= 16.0.0", - "parcel": "^2.13.0" + "parcel": "^2.13.3" }, "dependencies": { - "@parcel/diagnostic": "2.13.0", - "@parcel/plugin": "2.13.0", + "@parcel/diagnostic": "2.13.3", + "@parcel/plugin": "2.13.3", "@parcel/source-map": "^2.1.1", - "@parcel/utils": "2.13.0", + "@parcel/utils": "2.13.3", "browserslist": "^4.6.6", "lightningcss": "^1.22.1", "nullthrows": "^1.1.1" diff --git a/packages/transformers/css/src/CSSTransformer.js b/packages/transformers/css/src/CSSTransformer.js index 32ab86a1396..9f3d30a910c 100644 --- a/packages/transformers/css/src/CSSTransformer.js +++ b/packages/transformers/css/src/CSSTransformer.js @@ -44,7 +44,19 @@ export default (new Transformer({ async transform({asset, config, options, logger}) { // Normalize the asset's environment so that properties that only affect JS don't cause CSS to be duplicated. // For example, with ESModule and CommonJS targets, only a single shared CSS bundle should be produced. - let env = asset.env; + let env = { + context: asset.env.context, + outputFormat: asset.env.outputFormat, + engines: asset.env.engines, + includeNodeModules: asset.env.includeNodeModules, + sourceType: asset.env.sourceType, + isLibrary: asset.env.isLibrary, + shouldOptimize: asset.env.shouldOptimize, + shouldScopeHoist: asset.env.shouldScopeHoist, + sourceMap: asset.env.sourceMap, + loc: asset.env.loc, + }; + asset.setEnvironment({ context: 'browser', engines: { @@ -268,6 +280,7 @@ export default (new Transformer({ symbols: new Map([ [exported, {local: ref.name, isWeak: false, loc: null}], ]), + env, }); } else if (ref.type === 'global') { s += ref.name; @@ -284,6 +297,7 @@ export default (new Transformer({ specifier: ref.specifier, specifierType: 'esm', packageConditions: ['style'], + env, }); } s += '${' + `${d}[${JSON.stringify(ref.name)}]` + '}'; @@ -302,6 +316,7 @@ export default (new Transformer({ symbols: new Map([ [key, {local: exports[key].name, isWeak: false, loc: null}], ]), + env, }); } @@ -338,6 +353,7 @@ export default (new Transformer({ symbols: new Map([ [reference.name, {local: symbol, isWeak: false, loc: null}], ]), + env, }); asset.meta.hasReferences = true; diff --git a/packages/transformers/elm/package.json b/packages/transformers/elm/package.json index ffe827d4529..a1630ee5243 100644 --- a/packages/transformers/elm/package.json +++ b/packages/transformers/elm/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/transformer-elm", - "version": "2.13.0", + "version": "2.13.3", "license": "MIT", "publishConfig": { "access": "public" @@ -17,11 +17,11 @@ "source": "src/ElmTransformer.js", "engines": { "node": ">= 16.0.0", - "parcel": "^2.13.0" + "parcel": "^2.13.3" }, "dependencies": { - "@parcel/diagnostic": "2.13.0", - "@parcel/plugin": "2.13.0", + "@parcel/diagnostic": "2.13.3", + "@parcel/plugin": "2.13.3", "command-exists": "^1.2.8", "cross-spawn": "^7.0.3", "elm-hot": "^1.1.5", diff --git a/packages/transformers/glsl/package.json b/packages/transformers/glsl/package.json index 22b160ca67c..94e11ca4377 100644 --- a/packages/transformers/glsl/package.json +++ b/packages/transformers/glsl/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/transformer-glsl", - "version": "2.13.0", + "version": "2.13.3", "license": "MIT", "publishConfig": { "access": "public" @@ -17,10 +17,10 @@ "source": "src/GLSLTransformer.js", "engines": { "node": ">= 16.0.0", - "parcel": "^2.13.0" + "parcel": "^2.13.3" }, "dependencies": { - "@parcel/plugin": "2.13.0", + "@parcel/plugin": "2.13.3", "glslify-bundle": "^5.1.1", "glslify-deps": "^1.3.2" } diff --git a/packages/transformers/graphql/package.json b/packages/transformers/graphql/package.json index 8e9b6a6b291..289a02d5052 100644 --- a/packages/transformers/graphql/package.json +++ b/packages/transformers/graphql/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/transformer-graphql", - "version": "2.13.0", + "version": "2.13.3", "license": "MIT", "publishConfig": { "access": "public" @@ -17,10 +17,10 @@ "source": "src/GraphQLTransformer.js", "engines": { "node": ">= 16.0.0", - "parcel": "^2.13.0" + "parcel": "^2.13.3" }, "dependencies": { - "@parcel/plugin": "2.13.0", + "@parcel/plugin": "2.13.3", "graphql": "^15.0.0", "graphql-import-macro": "^1.0.0" } diff --git a/packages/transformers/html/package.json b/packages/transformers/html/package.json index bd00c8a0f9d..e039ceadaf8 100644 --- a/packages/transformers/html/package.json +++ b/packages/transformers/html/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/transformer-html", - "version": "2.13.0", + "version": "2.13.3", "license": "MIT", "publishConfig": { "access": "public" @@ -17,12 +17,12 @@ "source": "src/HTMLTransformer.js", "engines": { "node": ">= 16.0.0", - "parcel": "^2.13.0" + "parcel": "^2.13.3" }, "dependencies": { - "@parcel/diagnostic": "2.13.0", - "@parcel/plugin": "2.13.0", - "@parcel/rust": "2.13.0", + "@parcel/diagnostic": "2.13.3", + "@parcel/plugin": "2.13.3", + "@parcel/rust": "2.13.3", "nullthrows": "^1.1.1", "posthtml": "^0.16.5", "posthtml-parser": "^0.12.1", diff --git a/packages/transformers/html/src/dependencies.js b/packages/transformers/html/src/dependencies.js index 1254e2ee9ef..4a0bbb3fa14 100644 --- a/packages/transformers/html/src/dependencies.js +++ b/packages/transformers/html/src/dependencies.js @@ -185,7 +185,10 @@ export default function collectDependencies( : undefined; let outputFormat = 'global'; - if (attrs.type === 'module' && asset.env.shouldScopeHoist) { + if ( + attrs.type === 'module' && + (asset.env.shouldScopeHoist || asset.env.supports('esmodules', true)) + ) { outputFormat = 'esmodule'; } else { if (attrs.type === 'module') { diff --git a/packages/transformers/image/package.json b/packages/transformers/image/package.json index 289b7183e58..5b4ef4b19a6 100644 --- a/packages/transformers/image/package.json +++ b/packages/transformers/image/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/transformer-image", - "version": "2.13.0", + "version": "2.13.3", "license": "MIT", "publishConfig": { "access": "public" @@ -13,18 +13,18 @@ "source": "src/ImageTransformer.js", "engines": { "node": ">= 16.0.0", - "parcel": "^2.13.0" + "parcel": "^2.13.3" }, "dependencies": { - "@parcel/plugin": "2.13.0", - "@parcel/utils": "2.13.0", - "@parcel/workers": "2.13.0", + "@parcel/plugin": "2.13.3", + "@parcel/utils": "2.13.3", + "@parcel/workers": "2.13.3", "nullthrows": "^1.1.1" }, "devDependencies": { "sharp": "^0.33.5" }, "peerDependencies": { - "@parcel/core": "^2.13.0" + "@parcel/core": "^2.13.3" } } diff --git a/packages/transformers/inline-string/package.json b/packages/transformers/inline-string/package.json index 4f7a5e05db4..0a56b6a51fb 100644 --- a/packages/transformers/inline-string/package.json +++ b/packages/transformers/inline-string/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/transformer-inline-string", - "version": "2.13.0", + "version": "2.13.3", "license": "MIT", "publishConfig": { "access": "public" @@ -17,9 +17,9 @@ "source": "src/InlineStringTransformer.js", "engines": { "node": ">= 16.0.0", - "parcel": "^2.13.0" + "parcel": "^2.13.3" }, "dependencies": { - "@parcel/plugin": "2.13.0" + "@parcel/plugin": "2.13.3" } } diff --git a/packages/transformers/inline/package.json b/packages/transformers/inline/package.json index 367d4da8402..b7709aa86d1 100644 --- a/packages/transformers/inline/package.json +++ b/packages/transformers/inline/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/transformer-inline", - "version": "2.13.0", + "version": "2.13.3", "license": "MIT", "publishConfig": { "access": "public" @@ -17,9 +17,9 @@ "source": "src/InlineTransformer.js", "engines": { "node": ">= 16.0.0", - "parcel": "^2.13.0" + "parcel": "^2.13.3" }, "dependencies": { - "@parcel/plugin": "2.13.0" + "@parcel/plugin": "2.13.3" } } diff --git a/packages/transformers/js/core/Cargo.toml b/packages/transformers/js/core/Cargo.toml index 8291e975ec2..96398a10d97 100644 --- a/packages/transformers/js/core/Cargo.toml +++ b/packages/transformers/js/core/Cargo.toml @@ -8,7 +8,7 @@ edition = "2021" crate-type = ["rlib"] [dependencies] -swc_core = { version = "5.0.4", features = [ +swc_core = { version = "6.0.1", features = [ "common", "common_ahash", "common_sourcemap", @@ -38,3 +38,4 @@ path-slash = "0.1.4" indexmap = "1.9.2" parcel-macros = { path = "../../../../crates/macros" } parking_lot = "0.12" +bitflags = "1.3.2" diff --git a/packages/transformers/js/core/src/dependency_collector.rs b/packages/transformers/js/core/src/dependency_collector.rs index 65f27fe5605..0ff1004f5bd 100644 --- a/packages/transformers/js/core/src/dependency_collector.rs +++ b/packages/transformers/js/core/src/dependency_collector.rs @@ -1,18 +1,20 @@ use std::{ - collections::{hash_map::DefaultHasher, HashMap}, + collections::hash_map::DefaultHasher, fmt, hash::{Hash, Hasher}, path::Path, }; +use bitflags::bitflags; +use parcel_macros::{Evaluator, JsValue}; use path_slash::PathBufExt; use serde::{Deserialize, Serialize}; use swc_core::{ common::{sync::Lrc, Mark, SourceMap, Span, SyntaxContext, DUMMY_SP}, ecma::{ - ast::{self, Callee, IdentName, MemberProp}, + ast::{self, Callee, MemberProp, Module}, atoms::{js_word, JsWord}, - utils::stack_size::maybe_grow_default, + utils::{member_expr, stack_size::maybe_grow_default}, visit::{Fold, FoldWith}, }, }; @@ -93,6 +95,21 @@ pub enum DependencyKind { /// /// * https://parceljs.org/features/node-emulation/#inlining-fs.readfilesync File, + /// `parcelRequire` call. + Id, +} + +bitflags! { + #[derive(Serialize, Deserialize, Default)] + #[serde(transparent)] + pub struct Helpers: u8 { + /// `import.meta.distDir` – a relative path from the current bundle to the distDir + const DIST_DIR = 1 << 0; + /// `import.meta.publicUrl` - absolute public URL + const PUBLIC_URL = 1 << 1; + /// `parcelRequire.load` + const LOAD = 1 << 2; + } } impl fmt::Display for DependencyKind { @@ -101,13 +118,13 @@ impl fmt::Display for DependencyKind { } } -#[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize)] +#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] pub struct DependencyDescriptor { pub kind: DependencyKind, pub loc: SourceLocation, /// The text specifier associated with the import/export statement. pub specifier: swc_core::ecma::atoms::JsWord, - pub attributes: Option>, + pub attributes: Option, pub is_optional: bool, pub is_helper: bool, pub source_type: Option, @@ -116,14 +133,15 @@ pub struct DependencyDescriptor { /// This pass collects dependencies in a module and compiles references as needed to work with Parcel's JSRuntime. pub fn dependency_collector<'a>( + module: Module, source_map: Lrc, items: &'a mut Vec, ignore_mark: swc_core::common::Mark, unresolved_mark: swc_core::common::Mark, config: &'a Config, diagnostics: &'a mut Vec, -) -> impl Fold + 'a { - DependencyCollector { +) -> (Module, Helpers) { + let mut collector = DependencyCollector { source_map, items, in_try: false, @@ -134,7 +152,11 @@ pub fn dependency_collector<'a>( config, diagnostics, import_meta: None, - } + helpers: Helpers::empty(), + }; + + let module = module.fold_with(&mut collector); + (module, collector.helpers) } struct DependencyCollector<'a> { @@ -148,6 +170,7 @@ struct DependencyCollector<'a> { config: &'a Config, diagnostics: &'a mut Vec, import_meta: Option, + helpers: Helpers, } impl<'a> DependencyCollector<'a> { @@ -156,7 +179,7 @@ impl<'a> DependencyCollector<'a> { mut specifier: JsWord, span: swc_core::common::Span, kind: DependencyKind, - attributes: Option>, + attributes: Option, is_optional: bool, source_type: SourceType, ) -> Option { @@ -342,11 +365,17 @@ impl<'a> Fold for DependencyCollector<'a> { return node; } + let evaluator = Evaluator::new(&self.source_map); + let attributes = node + .with + .as_ref() + .and_then(|attrs| evaluator.eval_object(&*attrs).ok()); + let rewritten = self.add_dependency( node.src.value.clone(), node.src.span, DependencyKind::Import, - None, + attributes, false, self.config.source_type, ); @@ -364,11 +393,17 @@ impl<'a> Fold for DependencyCollector<'a> { return node; } + let evaluator = Evaluator::new(&self.source_map); + let attributes = node + .with + .as_ref() + .and_then(|attrs| evaluator.eval_object(&*attrs).ok()); + let rewritten = self.add_dependency( src.value.clone(), src.span, DependencyKind::Export, - None, + attributes, false, self.config.source_type, ); @@ -382,11 +417,17 @@ impl<'a> Fold for DependencyCollector<'a> { } fn fold_export_all(&mut self, mut node: ast::ExportAll) -> ast::ExportAll { + let evaluator = Evaluator::new(&self.source_map); + let attributes = node + .with + .as_ref() + .and_then(|attrs| evaluator.eval_object(&*attrs).ok()); + let rewritten = self.add_dependency( node.src.value.clone(), node.src.span, DependencyKind::Export, - None, + attributes, false, self.config.source_type, ); @@ -437,7 +478,7 @@ impl<'a> Fold for DependencyCollector<'a> { } } "importScripts" => { - if self.config.is_worker { + if self.config.is_worker() { let (msg, span) = if self.config.source_type == SourceType::Script { // Ignore if argument is not a string literal. let span = if let Some(ast::ExprOrSpread { expr, .. }) = node.args.first() { @@ -516,13 +557,52 @@ impl<'a> Fold for DependencyCollector<'a> { )))); return call; } + "parcelRequire" => { + if let Some(ast::ExprOrSpread { expr, .. }) = node.args.first() { + if let Some((id, span)) = match_str(expr) { + self.items.push(DependencyDescriptor { + kind: DependencyKind::Id, + loc: SourceLocation::from(&self.source_map, span), + specifier: id, + attributes: None, + is_optional: false, + is_helper: false, + source_type: None, + placeholder: None, + }); + } + } + let mut call = node.fold_children_with(self); + if !self.config.scope_hoist { + call.callee = ast::Callee::Expr(Box::new(ast::Expr::Member(member_expr!( + Default::default(), + call.span, + module.bundle.root + )))); + } + return call; + } _ => return node.fold_children_with(self), } } Member(member) => { - if match_member_expr(member, vec!["module", "require"], self.unresolved_mark) { + if match_member_expr(member, vec!["parcelRequire", "load"], self.unresolved_mark) { + let mut call = node.fold_children_with(self); + let callee = if self.config.scope_hoist { + ast::Expr::Ident(ast::Ident::new_no_ctxt("$parcel$import".into(), call.span)) + } else { + ast::Expr::Member(member_expr!( + Default::default(), + call.span, + module.bundle.load + )) + }; + call.callee = ast::Callee::Expr(Box::new(callee)); + self.helpers |= Helpers::DIST_DIR | Helpers::LOAD; + return call; + } else if match_member_expr(member, vec!["module", "require"], self.unresolved_mark) { DependencyKind::Require - } else if self.config.is_browser + } else if self.config.is_browser() && match_member_expr( member, vec!["navigator", "serviceWorker", "register"], @@ -530,7 +610,7 @@ impl<'a> Fold for DependencyCollector<'a> { ) { DependencyKind::ServiceWorker - } else if self.config.is_browser + } else if self.config.is_browser() && match_member_expr( member, vec!["CSS", "paintWorklet", "addModule"], @@ -610,38 +690,14 @@ impl<'a> Fold for DependencyCollector<'a> { let mut attributes = None; if kind == DependencyKind::DynamicImport { if let Some(arg) = node.args.get(1) { - if let Object(arg) = &*arg.expr { - let mut attrs = HashMap::new(); - for key in &arg.props { - let prop = match key { - ast::PropOrSpread::Prop(prop) => prop, - _ => continue, - }; - - let kv = match &**prop { - ast::Prop::KeyValue(kv) => kv, - _ => continue, - }; - - let k = match &kv.key { - ast::PropName::Ident(IdentName { sym, .. }) - | ast::PropName::Str(ast::Str { value: sym, .. }) => sym.clone(), - _ => continue, - }; - - let v = match &*kv.value { - Lit(ast::Lit::Bool(ast::Bool { value, .. })) => *value, - _ => continue, - }; - - attrs.insert(k, v); - } - - attributes = Some(attrs); + if let Object(_) = &*arg.expr { + let evaluator = Evaluator::new(&self.source_map); + attributes = evaluator.eval(&*arg.expr).ok(); } } } + let mut is_specifier_str = false; let node = if let Some(arg) = node.args.first() { if kind == DependencyKind::ServiceWorker || kind == DependencyKind::Worklet { let (source_type, opts) = if kind == DependencyKind::ServiceWorker { @@ -699,6 +755,7 @@ impl<'a> Fold for DependencyCollector<'a> { } if let Some((specifier, span)) = match_str(&arg.expr) { + is_specifier_str = true; // require() calls aren't allowed in scripts, flag as an error. if kind == DependencyKind::Require && self.config.source_type == SourceType::Script { self.add_script_error(node.span); @@ -734,8 +791,8 @@ impl<'a> Fold for DependencyCollector<'a> { // Replace import() with require() if kind == DependencyKind::DynamicImport { - let mut call = node; - if !self.config.scope_hoist && !self.config.standalone { + let mut call = node.fold_children_with(self); + if !self.config.scope_hoist && !self.config.standalone && is_specifier_str { let name = match &self.config.source_type { SourceType::Module => "require", SourceType::Script => "__parcel__require__", @@ -786,7 +843,7 @@ impl<'a> Fold for DependencyCollector<'a> { Ident(id) => { if id.sym == "Worker" || id.sym == "SharedWorker" { // Bail if defined in scope - self.config.is_browser && is_unresolved(&id, self.unresolved_mark) + self.config.is_browser() && is_unresolved(&id, self.unresolved_mark) } else if id.sym == "Promise" { // Match requires inside promises (e.g. Rollup compiled dynamic imports) // new Promise(resolve => resolve(require('foo'))) @@ -893,6 +950,10 @@ impl<'a> Fold for DependencyCollector<'a> { return self.get_import_meta_url(); } + if let Some(expr) = self.match_import_meta_prop(&node) { + return expr; + } + if let Some((specifier, span)) = self.match_new_url(&node) { let url = self.add_url_dependency( specifier, @@ -1316,10 +1377,66 @@ impl<'a> DependencyCollector<'a> { } true } + Expr::Member(member) => { + match_member_expr(member, vec!["parcelRequire", "meta"], self.unresolved_mark) + } _ => false, } } + fn match_import_meta_prop(&mut self, expr: &ast::Expr) -> Option { + use ast::*; + + match expr { + Expr::Member(member) => { + if !self.is_import_meta(&member.obj) { + return None; + } + + let name = match_property_name(member); + + if let Some((name, span)) = name { + match name.as_str() { + "distDir" => { + self.helpers |= Helpers::DIST_DIR; + if self.config.scope_hoist { + Some(Expr::Ident(Ident::new_no_ctxt( + "$parcel$distDir".into(), + span, + ))) + } else { + Some(Expr::Member(member_expr!( + Default::default(), + span, + module.bundle.distDir + ))) + } + } + "publicUrl" => { + self.helpers |= Helpers::PUBLIC_URL; + if self.config.scope_hoist { + Some(Expr::Ident(Ident::new_no_ctxt( + "$parcel$publicUrl".into(), + span, + ))) + } else { + Some(Expr::Member(member_expr!( + Default::default(), + span, + module.bundle.publicUrl + ))) + } + } + _ => None, + } + } else { + None + } + } + _ => None, + } + } + fn get_project_relative_filename(&self) -> String { if let Some(relative) = pathdiff::diff_paths(&self.config.filename, &self.config.project_root) { relative.to_slash_lossy() @@ -1505,13 +1622,12 @@ mod test { config, diagnostics, import_meta: None, + helpers: Helpers::empty(), } } fn make_config() -> Config { - let mut config = Config::default(); - config.is_browser = true; - config + Config::default() } fn make_placeholder_hash(specifier: &str, dependency_kind: DependencyKind) -> String { diff --git a/packages/transformers/js/core/src/lib.rs b/packages/transformers/js/core/src/lib.rs index e0582e8f1f5..b84681709aa 100644 --- a/packages/transformers/js/core/src/lib.rs +++ b/packages/transformers/js/core/src/lib.rs @@ -21,6 +21,7 @@ use std::{ pub use collect::CollectImportedSymbol; use collect::{Collect, CollectResult}; use constant_module::ConstantModule; +use dependency_collector::Helpers; pub use dependency_collector::{dependency_collector, DependencyDescriptor, DependencyKind}; use env_replacer::*; use fs::inline_fs; @@ -39,7 +40,7 @@ use swc_core::{ source_map::SourceMapGenConfig, sync::Lrc, FileName, Globals, Mark, SourceMap, }, ecma::{ - ast::{Module, ModuleItem, Program}, + ast::{Expr, ExprStmt, Lit, Module, ModuleItem, Program, Stmt, Str}, codegen::text_writer::JsWriter, parser::{error::Error, lexer::Lexer, EsSyntax, Parser, StringInput, Syntax, TsSyntax}, preset_env::{preset_env, Mode::Entry, Targets, Version, Versions}, @@ -74,13 +75,9 @@ pub struct Config { pub code: Vec, pub module_id: String, pub project_root: String, - pub replace_env: bool, pub env: HashMap, pub inline_fs: bool, - pub insert_node_globals: bool, - pub node_replacer: bool, - pub is_browser: bool, - pub is_worker: bool, + pub context: EnvContext, pub is_type_script: bool, pub is_jsx: bool, pub jsx_pragma: Option, @@ -104,6 +101,79 @@ pub struct Config { pub inline_constants: bool, } +#[derive(Default, Serialize, Debug, Deserialize)] +#[serde(rename_all = "kebab-case")] +pub enum EnvContext { + #[default] + Browser, + WebWorker, + ServiceWorker, + Worklet, + Node, + ElectronRenderer, + ElectronMain, + EdgeRoutine, + ReactClient, + ReactServer, +} + +impl Config { + fn is_browser(&self) -> bool { + use EnvContext::*; + matches!( + self.context, + Browser | WebWorker | ServiceWorker | Worklet | ElectronRenderer | ReactClient + ) + } + + fn is_node(&self) -> bool { + use EnvContext::*; + matches!( + self.context, + Node | ElectronMain | ElectronRenderer | ReactServer + ) + } + + fn is_server(&self) -> bool { + use EnvContext::*; + matches!(self.context, Node | ReactServer) + } + + fn is_worker(&self) -> bool { + use EnvContext::*; + matches!(self.context, WebWorker | ServiceWorker) + } + + fn is_worklet(&self) -> bool { + use EnvContext::*; + matches!(self.context, Worklet) + } + + fn react_refresh(&self) -> bool { + self.is_browser() + && !self.is_library + && !self.is_worker() + && !self.is_worklet() + && self.react_refresh + } + + fn inline_fs(&self) -> bool { + self.inline_fs && !self.is_node() && self.source_type != SourceType::Script + } + + fn node_replacer(&self) -> bool { + self.is_node() + } + + fn insert_node_globals(&self) -> bool { + !self.is_node() && self.source_type != SourceType::Script + } + + fn replace_env(&self) -> bool { + !self.is_node() || matches!(self.context, EnvContext::ReactServer) + } +} + #[derive(Serialize, Debug, Default)] #[non_exhaustive] pub struct TransformResult { @@ -119,6 +189,8 @@ pub struct TransformResult { pub used_env: HashSet, pub has_node_replacements: bool, pub is_constant_module: bool, + pub directives: Vec, + pub helpers: Helpers, } fn targets_to_versions(targets: &Option>) -> Option { @@ -152,7 +224,7 @@ fn targets_to_versions(targets: &Option>) -> Option, ) -> Result { let mut result = TransformResult::default(); @@ -186,9 +258,48 @@ pub fn transform( Program::Script(script) => script.shebang.take().map(|s| s.to_string()), }; + match &module { + Program::Module(module) => { + for item in &module.body { + if let ModuleItem::Stmt(Stmt::Expr(ExprStmt { expr, .. })) = item { + if let Expr::Lit(Lit::Str(Str { value, .. })) = &**expr { + result.directives.push(value.clone()); + continue; + } + } + break; + } + } + Program::Script(script) => { + for item in &script.body { + if let Stmt::Expr(ExprStmt { expr, .. }) = item { + if let Expr::Lit(Lit::Str(Str { value, .. })) = &**expr { + result.directives.push(value.clone()); + continue; + } + } + break; + } + } + } + + if config.is_server() + && !config.is_library + && result.directives.contains(&"use client".into()) + { + config.context = EnvContext::ReactClient; + config.is_esm_output = true; + } else if !config.is_server() + && !config.is_library + && result.directives.contains(&"use server".into()) + { + config.context = EnvContext::ReactServer; + config.is_esm_output = false; + } + let mut global_deps = vec![]; let mut fs_deps = vec![]; - let should_inline_fs = config.inline_fs + let should_inline_fs = config.inline_fs() && config.source_type != SourceType::Script && code.contains("readFileSync"); let should_import_swc_helpers = match config.source_type { @@ -214,7 +325,7 @@ pub fn transform( react_options.pragma_frag = Some(jsx_pragma_frag.clone()); } react_options.development = Some(config.is_development); - react_options.refresh = if config.react_refresh { + react_options.refresh = if config.react_refresh() { Some(react::RefreshOptions::default()) } else { None @@ -331,15 +442,15 @@ pub fn transform( module.visit_mut_with(&mut ( Optional::new( - TypeofReplacer::new(unresolved_mark), + TypeofReplacer::new(unresolved_mark, config.is_node()), config.source_type != SourceType::Script, ), // Inline process.env and process.browser, Optional::new( EnvReplacer { - replace_env: config.replace_env, + replace_env: config.replace_env(), env: &config.env, - is_browser: config.is_browser, + is_browser: config.is_browser(), used_env: &mut result.used_env, source_map: source_map.clone(), diagnostics: &mut diagnostics, @@ -379,7 +490,7 @@ pub fn transform( unresolved_mark, has_node_replacements: &mut result.has_node_replacements, }, - config.node_replacer, + config.node_replacer(), ), ); @@ -396,7 +507,7 @@ pub fn transform( unresolved_mark, scope_hoist: config.scope_hoist, }, - config.insert_node_globals, + config.insert_node_globals(), ), ); @@ -428,19 +539,19 @@ pub fn transform( .visit_mut_with(&mut (hygiene(), resolver(unresolved_mark, global_mark, false))) } + // Collect dependencies let ignore_mark = Mark::fresh(Mark::root()); - let module = module.fold_with( - // Collect dependencies - &mut dependency_collector( - source_map.clone(), - &mut result.dependencies, - ignore_mark, - unresolved_mark, - &config, - &mut diagnostics, - ), + let (module, helpers) = dependency_collector( + module, + source_map.clone(), + &mut result.dependencies, + ignore_mark, + unresolved_mark, + &config, + &mut diagnostics, ); + result.helpers = helpers; diagnostics.extend(error_buffer_to_diagnostics(&error_buffer, &source_map)); if diagnostics diff --git a/packages/transformers/js/core/src/typeof_replacer.rs b/packages/transformers/js/core/src/typeof_replacer.rs index 03d5dfc9fad..799d7c73721 100644 --- a/packages/transformers/js/core/src/typeof_replacer.rs +++ b/packages/transformers/js/core/src/typeof_replacer.rs @@ -18,11 +18,15 @@ use crate::utils::is_unresolved; /// the global `module`, `exports` and `require` symbols. pub struct TypeofReplacer { unresolved_mark: Mark, + is_node: bool, } impl TypeofReplacer { - pub fn new(unresolved_mark: Mark) -> Self { - Self { unresolved_mark } + pub fn new(unresolved_mark: Mark, is_node: bool) -> Self { + Self { + unresolved_mark, + is_node, + } } } @@ -66,6 +70,18 @@ impl TypeofReplacer { }))); } + // Replace `typeof process` with "undefined" in browser builds to avoid pulling in the polyfill. + if !self.is_node + && ident.sym == js_word!("process") + && is_unresolved(&ident, self.unresolved_mark) + { + return Some(Expr::Lit(Lit::Str(Str { + span: unary.span, + value: js_word!("undefined"), + raw: None, + }))); + } + None } } @@ -93,10 +109,12 @@ mod test { const x = typeof require; const m = typeof module; const e = typeof exports; +const p = typeof process; "#; let output_code = run_visit(code, |context| TypeofReplacer { unresolved_mark: context.unresolved_mark, + is_node: false, }) .output_code; @@ -104,6 +122,7 @@ const e = typeof exports; const x = "function"; const m = "object"; const e = "object"; +const p = "undefined"; "# .trim_start(); assert_eq!(output_code, expected_code); @@ -117,6 +136,7 @@ const x = typeof require === 'function'; let output_code = run_visit(code, |context| TypeofReplacer { unresolved_mark: context.unresolved_mark, + is_node: false, }) .output_code; @@ -139,6 +159,7 @@ function wrapper({ require, exports }) { let output_code = run_visit(code, |context| TypeofReplacer { unresolved_mark: context.unresolved_mark, + is_node: false, }) .output_code; diff --git a/packages/transformers/js/package.json b/packages/transformers/js/package.json index b4e6b76c681..1f98fa9e7a0 100644 --- a/packages/transformers/js/package.json +++ b/packages/transformers/js/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/transformer-js", - "version": "2.13.0", + "version": "2.13.3", "license": "MIT", "publishConfig": { "access": "public" @@ -19,7 +19,7 @@ "test": "mocha" }, "engines": { - "parcel": "^2.13.0", + "parcel": "^2.13.3", "node": ">= 16.0.0" }, "files": [ @@ -27,12 +27,12 @@ "src" ], "dependencies": { - "@parcel/diagnostic": "2.13.0", - "@parcel/plugin": "2.13.0", - "@parcel/rust": "2.13.0", + "@parcel/diagnostic": "2.13.3", + "@parcel/plugin": "2.13.3", + "@parcel/rust": "2.13.3", "@parcel/source-map": "^2.1.1", - "@parcel/utils": "2.13.0", - "@parcel/workers": "2.13.0", + "@parcel/utils": "2.13.3", + "@parcel/workers": "2.13.3", "@swc/helpers": "^0.5.0", "browserslist": "^4.6.6", "nullthrows": "^1.1.1", @@ -40,6 +40,6 @@ "semver": "^7.5.2" }, "peerDependencies": { - "@parcel/core": "^2.13.0" + "@parcel/core": "^2.13.3" } } diff --git a/packages/transformers/js/src/JSTransformer.js b/packages/transformers/js/src/JSTransformer.js index 5db4ac97947..f1c993ce41e 100644 --- a/packages/transformers/js/src/JSTransformer.js +++ b/packages/transformers/js/src/JSTransformer.js @@ -14,6 +14,7 @@ import {transform, transformAsync} from '@parcel/rust'; import browserslist from 'browserslist'; import semver from 'semver'; import nullthrows from 'nullthrows'; +import invariant from 'assert'; import ThrowableDiagnostic, { encodeJSONKeyComponent, convertSourceLocationToHighlight, @@ -419,18 +420,15 @@ export default (new Transformer({ used_env, has_node_replacements, is_constant_module, + directives, + helpers, } = await (transformAsync || transform)({ filename: asset.filePath, code, module_id: asset.id, project_root: options.projectRoot, - replace_env: !asset.env.isNode(), - inline_fs: Boolean(config?.inlineFS) && !asset.env.isNode(), - insert_node_globals: - !asset.env.isNode() && asset.env.sourceType !== 'script', - node_replacer: asset.env.isNode(), - is_browser: asset.env.isBrowser(), - is_worker: asset.env.isWorker(), + inline_fs: Boolean(config?.inlineFS), + context: asset.env.context, env, is_type_script: asset.type === 'ts' || asset.type === 'tsx', is_jsx: isJSX, @@ -439,12 +437,7 @@ export default (new Transformer({ automatic_jsx_runtime: Boolean(config?.automaticJSXRuntime), jsx_import_source: config?.jsxImportSource, is_development: options.mode === 'development', - react_refresh: - asset.env.isBrowser() && - !asset.env.isLibrary && - !asset.env.isWorker() && - !asset.env.isWorklet() && - Boolean(config?.reactRefresh), + react_refresh: Boolean(config?.reactRefresh), decorators: Boolean(config?.decorators), use_define_for_class_fields: Boolean(config?.useDefineForClassFields), targets, @@ -686,6 +679,56 @@ export default (new Transformer({ asset.invalidateOnEnvChange(env); } + asset.meta.id = asset.id; + asset.meta.directives = directives; + asset.meta.usedHelpers = helpers; + if ( + asset.env.isServer() && + !asset.env.isLibrary && + (directives.includes('use client') || + directives.includes('use client-entry')) + ) { + asset.setEnvironment({ + context: 'react-client', + sourceType: 'module', + outputFormat: 'esmodule', + engines: asset.env.engines, + includeNodeModules: true, + isLibrary: false, + sourceMap: asset.env.sourceMap, + shouldOptimize: asset.env.shouldOptimize, + shouldScopeHoist: asset.env.shouldScopeHoist, + }); + } else if ( + !asset.env.isServer() && + !asset.env.isLibrary && + directives.includes('use server') + ) { + asset.setEnvironment({ + context: 'react-server', + sourceType: 'module', + outputFormat: 'commonjs', + engines: asset.env.engines, + includeNodeModules: false, + isLibrary: false, + sourceMap: asset.env.sourceMap, + shouldOptimize: asset.env.shouldOptimize, + shouldScopeHoist: asset.env.shouldScopeHoist, + }); + } else if (directives.includes('use server-entry')) { + if (!asset.env.isServer()) { + throw new Error( + 'use server-entry must be imported in a server environment', + ); + } + asset.bundleBehavior = 'isolated'; + } + + // Server actions must always be wrapped so they can be parcelRequired. + if (directives.includes('use server')) { + asset.meta.shouldWrap = true; + } + for (let dep of dependencies) { if (dep.kind === 'WebWorker') { // Use native ES module output if the worker was created with `type: 'module'` and all targets @@ -756,6 +799,13 @@ export default (new Transformer({ }); } else if (dep.kind === 'File') { asset.invalidateOnFileChange(dep.specifier); + } else if (dep.kind === 'Id') { + // Record parcelRequire calls so that the dev packager can add them as dependencies. + // This allows the HMR runtime to collect parents across async boundaries (through runtimes). + // TODO: ideally this would result as an actual dep in the graph rather than asset.meta. + asset.meta.hmrDeps ??= []; + invariant(Array.isArray(asset.meta.hmrDeps)); + asset.meta.hmrDeps.push(dep.specifier); } else { let meta: JSONObject = {kind: dep.kind}; if (dep.attributes) { @@ -846,6 +896,25 @@ export default (new Transformer({ range = pkg.dependencies[module]; } + if (dep.attributes?.env === 'react-server') { + env = { + ...env, + context: 'react-server', + outputFormat: 'commonjs', + }; + } else if (dep.attributes?.env === 'react-client') { + env = { + ...env, + context: 'react-client', + outputFormat: 'esmodule', + includeNodeModules: true, + }; + + // This is a hack to prevent creating unnecessary shared bundles between actual client code + // and server code that runs in the client environment (e.g. react). + asset.isBundleSplittable = false; + } + asset.addDependency({ specifier: dep.specifier, specifierType: dep.kind === 'Require' ? 'commonjs' : 'esm', @@ -860,7 +929,6 @@ export default (new Transformer({ } } - asset.meta.id = asset.id; if (hoist_result) { asset.symbols.ensure(); for (let { @@ -971,7 +1039,7 @@ export default (new Transformer({ asset.meta.hasCJSExports = hoist_result.has_cjs_exports; asset.meta.staticExports = hoist_result.static_cjs_exports; - asset.meta.shouldWrap = hoist_result.should_wrap; + asset.meta.shouldWrap ||= hoist_result.should_wrap; } else { if (symbol_result) { let deps = new Map( diff --git a/packages/transformers/json/package.json b/packages/transformers/json/package.json index c4bca234e24..7c343f260c8 100644 --- a/packages/transformers/json/package.json +++ b/packages/transformers/json/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/transformer-json", - "version": "2.13.0", + "version": "2.13.3", "license": "MIT", "publishConfig": { "access": "public" @@ -17,10 +17,10 @@ "source": "src/JSONTransformer.js", "engines": { "node": ">= 16.0.0", - "parcel": "^2.13.0" + "parcel": "^2.13.3" }, "dependencies": { - "@parcel/plugin": "2.13.0", + "@parcel/plugin": "2.13.3", "json5": "^2.2.0" } } diff --git a/packages/transformers/jsonld/package.json b/packages/transformers/jsonld/package.json index 91934f1a4f1..90e602673b7 100644 --- a/packages/transformers/jsonld/package.json +++ b/packages/transformers/jsonld/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/transformer-jsonld", - "version": "2.13.0", + "version": "2.13.3", "license": "MIT", "publishConfig": { "access": "public" @@ -17,14 +17,14 @@ "source": "src/JSONLDTransformer.js", "engines": { "node": ">= 16.0.0", - "parcel": "^2.13.0" + "parcel": "^2.13.3" }, "scripts": { "test": "yarn workspace @parcel/integration-tests test -g jsonld" }, "dependencies": { - "@parcel/plugin": "2.13.0", - "@parcel/types": "2.13.0", + "@parcel/plugin": "2.13.3", + "@parcel/types": "2.13.3", "json5": "^2.2.0" } } diff --git a/packages/transformers/less/package.json b/packages/transformers/less/package.json index 75a7c6fad1a..92efb1e4901 100644 --- a/packages/transformers/less/package.json +++ b/packages/transformers/less/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/transformer-less", - "version": "2.13.0", + "version": "2.13.3", "license": "MIT", "publishConfig": { "access": "public" @@ -17,10 +17,10 @@ "source": "src/LessTransformer.js", "engines": { "node": ">= 16.0.0", - "parcel": "^2.13.0" + "parcel": "^2.13.3" }, "dependencies": { - "@parcel/plugin": "2.13.0", + "@parcel/plugin": "2.13.3", "@parcel/source-map": "^2.1.1", "less": "^4.1.1" } diff --git a/packages/transformers/mdx/package.json b/packages/transformers/mdx/package.json index b8032109854..7eed8264485 100644 --- a/packages/transformers/mdx/package.json +++ b/packages/transformers/mdx/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/transformer-mdx", - "version": "2.13.0", + "version": "2.13.3", "license": "MIT", "publishConfig": { "access": "public" @@ -17,11 +17,11 @@ "source": "src/MDXTransformer.js", "engines": { "node": ">= 16.0.0", - "parcel": "^2.13.0" + "parcel": "^2.13.3" }, "dependencies": { "@mdx-js/mdx": "^1.6.22", - "@parcel/plugin": "2.13.0" + "@parcel/plugin": "2.13.3" }, "peerDependencies": { "@mdx-js/react": "^1.6.22" diff --git a/packages/transformers/postcss/package.json b/packages/transformers/postcss/package.json index ba53c45049c..08953ad6bcf 100644 --- a/packages/transformers/postcss/package.json +++ b/packages/transformers/postcss/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/transformer-postcss", - "version": "2.13.0", + "version": "2.13.3", "license": "MIT", "publishConfig": { "access": "public" @@ -17,13 +17,13 @@ "source": "src/PostCSSTransformer.js", "engines": { "node": ">= 16.0.0", - "parcel": "^2.13.0" + "parcel": "^2.13.3" }, "dependencies": { - "@parcel/diagnostic": "2.13.0", - "@parcel/plugin": "2.13.0", - "@parcel/rust": "2.13.0", - "@parcel/utils": "2.13.0", + "@parcel/diagnostic": "2.13.3", + "@parcel/plugin": "2.13.3", + "@parcel/rust": "2.13.3", + "@parcel/utils": "2.13.3", "clone": "^2.1.1", "nullthrows": "^1.1.1", "postcss-value-parser": "^4.2.0", diff --git a/packages/transformers/posthtml/package.json b/packages/transformers/posthtml/package.json index f4452c6af69..51cd8350a28 100644 --- a/packages/transformers/posthtml/package.json +++ b/packages/transformers/posthtml/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/transformer-posthtml", - "version": "2.13.0", + "version": "2.13.3", "license": "MIT", "publishConfig": { "access": "public" @@ -17,11 +17,11 @@ "source": "src/PostHTMLTransformer.js", "engines": { "node": ">= 16.0.0", - "parcel": "^2.13.0" + "parcel": "^2.13.3" }, "dependencies": { - "@parcel/plugin": "2.13.0", - "@parcel/utils": "2.13.0", + "@parcel/plugin": "2.13.3", + "@parcel/utils": "2.13.3", "nullthrows": "^1.1.1", "posthtml": "^0.16.5", "posthtml-parser": "^0.12.1", diff --git a/packages/transformers/pug/package.json b/packages/transformers/pug/package.json index 31fb9acae18..3fbf4225d18 100644 --- a/packages/transformers/pug/package.json +++ b/packages/transformers/pug/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/transformer-pug", - "version": "2.13.0", + "version": "2.13.3", "license": "MIT", "publishConfig": { "access": "public" @@ -17,10 +17,10 @@ "source": "src/PugTransformer.js", "engines": { "node": ">= 16.0.0", - "parcel": "^2.13.0" + "parcel": "^2.13.3" }, "dependencies": { - "@parcel/plugin": "2.13.0", + "@parcel/plugin": "2.13.3", "pug": "^3.0.2" } } diff --git a/packages/transformers/raw/package.json b/packages/transformers/raw/package.json index e6ba6faf2e7..cd02c69b389 100644 --- a/packages/transformers/raw/package.json +++ b/packages/transformers/raw/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/transformer-raw", - "version": "2.13.0", + "version": "2.13.3", "license": "MIT", "publishConfig": { "access": "public" @@ -17,9 +17,9 @@ "source": "src/RawTransformer.js", "engines": { "node": ">= 16.0.0", - "parcel": "^2.13.0" + "parcel": "^2.13.3" }, "dependencies": { - "@parcel/plugin": "2.13.0" + "@parcel/plugin": "2.13.3" } } diff --git a/packages/transformers/raw/src/RawTransformer.js b/packages/transformers/raw/src/RawTransformer.js index cf010820f11..42dfe2eb4e5 100644 --- a/packages/transformers/raw/src/RawTransformer.js +++ b/packages/transformers/raw/src/RawTransformer.js @@ -5,6 +5,7 @@ import {Transformer} from '@parcel/plugin'; export default (new Transformer({ transform({asset}) { asset.bundleBehavior = 'isolated'; + asset.meta.jsRuntime = 'url'; return [asset]; }, }): Transformer); diff --git a/packages/transformers/react-refresh-wrap/package.json b/packages/transformers/react-refresh-wrap/package.json index 9be76c36a69..7699d0470ee 100644 --- a/packages/transformers/react-refresh-wrap/package.json +++ b/packages/transformers/react-refresh-wrap/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/transformer-react-refresh-wrap", - "version": "2.13.0", + "version": "2.13.3", "license": "MIT", "publishConfig": { "access": "public" @@ -17,11 +17,12 @@ "source": "src/ReactRefreshWrapTransformer.js", "engines": { "node": ">= 16.0.0", - "parcel": "^2.13.0" + "parcel": "^2.13.3" }, "dependencies": { - "@parcel/plugin": "2.13.0", - "@parcel/utils": "2.13.0", - "react-refresh": ">=0.9 <=0.14" + "@parcel/plugin": "2.13.3", + "@parcel/utils": "2.13.3", + "react-error-overlay": "6.0.9", + "react-refresh": ">=0.9 <=0.16" } } diff --git a/packages/transformers/react-refresh-wrap/src/ReactRefreshWrapTransformer.js b/packages/transformers/react-refresh-wrap/src/ReactRefreshWrapTransformer.js index b0df28bd206..6b8a7a0ef4e 100644 --- a/packages/transformers/react-refresh-wrap/src/ReactRefreshWrapTransformer.js +++ b/packages/transformers/react-refresh-wrap/src/ReactRefreshWrapTransformer.js @@ -41,16 +41,17 @@ export default (new Transformer({ let name = `$parcel$ReactRefreshHelpers$${asset.id.slice(-4)}`; code = `var ${name} = require(${JSON.stringify(wrapperPath)}); -var prevRefreshReg = window.$RefreshReg$; -var prevRefreshSig = window.$RefreshSig$; +${name}.init(); +var prevRefreshReg = globalThis.$RefreshReg$; +var prevRefreshSig = globalThis.$RefreshSig$; ${name}.prelude(module); try { ${code} ${name}.postlude(module); } finally { - window.$RefreshReg$ = prevRefreshReg; - window.$RefreshSig$ = prevRefreshSig; + globalThis.$RefreshReg$ = prevRefreshReg; + globalThis.$RefreshSig$ = prevRefreshSig; }`; asset.setCode(code); diff --git a/packages/transformers/react-refresh-wrap/src/helpers/helpers.js b/packages/transformers/react-refresh-wrap/src/helpers/helpers.js index 5955e935861..382237c96aa 100644 --- a/packages/transformers/react-refresh-wrap/src/helpers/helpers.js +++ b/packages/transformers/react-refresh-wrap/src/helpers/helpers.js @@ -1,5 +1,4 @@ var Refresh = require('react-refresh/runtime'); -var {version} = require('react-refresh/package.json'); function debounce(func, delay) { if (process.env.NODE_ENV === 'test') { @@ -33,30 +32,52 @@ var enqueueUpdate = debounce(function () { Refresh.performReactRefresh(); }, 30); +module.exports.init = function () { + if (!globalThis.$RefreshReg$) { + Refresh.injectIntoGlobalHook(globalThis); + globalThis.$RefreshReg$ = function () {}; + globalThis.$RefreshSig$ = function () { + return function (type) { + return type; + }; + }; + + if (typeof window !== 'undefined') { + let ErrorOverlay = require('react-error-overlay'); + ErrorOverlay.setEditorHandler(function editorHandler(errorLocation) { + let file = `${errorLocation.fileName}:${ + errorLocation.lineNumber || 1 + }:${errorLocation.colNumber || 1}`; + fetch(`/__parcel_launch_editor?file=${encodeURIComponent(file)}`); + }); + + ErrorOverlay.startReportingRuntimeErrors({ + onError: function () {}, + }); + + window.addEventListener('parcelhmraccept', () => { + ErrorOverlay.dismissRuntimeErrors(); + }); + } + } +}; + // Everything below is either adapted or copied from // https://github.com/facebook/metro/blob/61de16bd1edd7e738dd0311c89555a644023ab2d/packages/metro/src/lib/polyfills/require.js // MIT License - Copyright (c) Facebook, Inc. and its affiliates. module.exports.prelude = function (module) { - window.__REACT_REFRESH_VERSION_TRANSFORMER = version; - window.$RefreshReg$ = function (type, id) { - if ( - window.__REACT_REFRESH_VERSION_TRANSFORMER && - window.__REACT_REFRESH_VERSION_RUNTIME && - window.__REACT_REFRESH_VERSION_TRANSFORMER !== - window.__REACT_REFRESH_VERSION_RUNTIME - ) { - // Both versions were set and they did not match - throw new Error( - `react-refresh versions did not match between transformer and runtime. Please check your dependencies. Transformer: ${window.__REACT_REFRESH_VERSION_TRANSFORMER}, Runtime: ${window.__REACT_REFRESH_VERSION_RUNTIME}`, - ); - } + globalThis.$RefreshReg$ = function (type, id) { Refresh.register(type, module.id + ' ' + id); }; - window.$RefreshSig$ = Refresh.createSignatureFunctionForTransform; + globalThis.$RefreshSig$ = Refresh.createSignatureFunctionForTransform; }; module.exports.postlude = function (module) { + if (typeof window === 'undefined') { + return; + } + if (isReactRefreshBoundary(module.exports)) { registerExportsForReactRefresh(module); diff --git a/packages/transformers/sass/package.json b/packages/transformers/sass/package.json index 34aecb95b76..0493389ae0d 100644 --- a/packages/transformers/sass/package.json +++ b/packages/transformers/sass/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/transformer-sass", - "version": "2.13.0", + "version": "2.13.3", "license": "MIT", "publishConfig": { "access": "public" @@ -17,10 +17,10 @@ "source": "src/SassTransformer.js", "engines": { "node": ">= 16.0.0", - "parcel": "^2.13.0" + "parcel": "^2.13.3" }, "dependencies": { - "@parcel/plugin": "2.13.0", + "@parcel/plugin": "2.13.3", "@parcel/source-map": "^2.1.1", "sass": "^1.38.0" } diff --git a/packages/transformers/sass/src/modern.js b/packages/transformers/sass/src/modern.js index 10aaf04d36d..4bf6732399d 100644 --- a/packages/transformers/sass/src/modern.js +++ b/packages/transformers/sass/src/modern.js @@ -95,7 +95,15 @@ function resolvePathImporter({ See also: https://github.com/sass/dart-sass/blob/006e6aa62f2417b5267ad5cdb5ba050226fab511/lib/src/importer/node/implementation.dart */ - let containingPath = fileURLToPath(containingUrl); + let containingPath = containingUrl + ? fileURLToPath(containingUrl) + : asset.filePath; + if (!containingUrl && url.startsWith('file:')) { + // If containingUrl is not provided, then url should be an absolute file:/// URL. + let filePath = fileURLToPath(url); + url = path.relative(path.dirname(containingPath), filePath); + } + let paths = [path.dirname(containingPath)]; if (loadPaths) { paths.push(...loadPaths); @@ -110,17 +118,39 @@ function resolvePathImporter({ ); } + // The importer should look for stylesheets by adding the prefix _ to the URL's basename, + // and by adding the extensions .sass and .scss if the URL doesn't already have one of those extensions. const urls = [url]; const urlFileName = path.basename(url); if (urlFileName[0] !== '_') { - urls.push(path.join(path.dirname(url), `_${urlFileName}`)); + urls.push(path.posix.join(path.dirname(url), `_${urlFileName}`)); } + let ext = path.extname(urlFileName); + if (ext !== '.sass' && ext !== '.scss') { + for (let url of [...urls]) { + urls.push(url + '.sass'); + urls.push(url + '.scss'); + } + } + + // If none of the possible paths is valid, the importer should perform the same resolution on the URL followed by /index. + urls.push(path.posix.join(url, 'index.sass')); + urls.push(path.posix.join(url, 'index.scss')); + urls.push(path.posix.join(url, '_index.sass')); + urls.push(path.posix.join(url, '_index.scss')); + if (url[0] !== '~') { for (let p of paths) { for (let u of urls) { - const filePath = path.resolve(p, u); - if (await asset.fs.exists(filePath)) { + let filePath = path.resolve(p, u); + let stat; + try { + stat = await asset.fs.stat(filePath); + } catch (err) { + // ignore. + } + if (stat?.isFile()) { return pathToFileURL(filePath); } diff --git a/packages/transformers/stylus/package.json b/packages/transformers/stylus/package.json index 8d637864d38..561abfb5351 100644 --- a/packages/transformers/stylus/package.json +++ b/packages/transformers/stylus/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/transformer-stylus", - "version": "2.13.0", + "version": "2.13.3", "license": "MIT", "publishConfig": { "access": "public" @@ -17,11 +17,11 @@ "source": "src/StylusTransformer.js", "engines": { "node": ">= 16.0.0", - "parcel": "^2.13.0" + "parcel": "^2.13.3" }, "dependencies": { - "@parcel/plugin": "2.13.0", - "@parcel/utils": "2.13.0", + "@parcel/plugin": "2.13.3", + "@parcel/utils": "2.13.3", "stylus": "^0.63.0" } } diff --git a/packages/transformers/sugarss/package.json b/packages/transformers/sugarss/package.json index c75301b63d6..7e42472c944 100644 --- a/packages/transformers/sugarss/package.json +++ b/packages/transformers/sugarss/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/transformer-sugarss", - "version": "2.13.0", + "version": "2.13.3", "license": "MIT", "publishConfig": { "access": "public" @@ -17,10 +17,10 @@ "source": "src/SugarssTransformer.js", "engines": { "node": ">= 16.0.0", - "parcel": "^2.13.0" + "parcel": "^2.13.3" }, "dependencies": { - "@parcel/plugin": "2.13.0", + "@parcel/plugin": "2.13.3", "postcss": "^8.4.5", "sugarss": "^4.0.1" } diff --git a/packages/transformers/svg-react/package.json b/packages/transformers/svg-react/package.json index 7f5b664af85..8253eb1e59e 100644 --- a/packages/transformers/svg-react/package.json +++ b/packages/transformers/svg-react/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/transformer-svg-react", - "version": "2.13.0", + "version": "2.13.3", "license": "MIT", "publishConfig": { "access": "public" @@ -17,12 +17,12 @@ "source": "src/SvgReactTransformer.js", "engines": { "node": ">= 16.0.0", - "parcel": "^2.13.0" + "parcel": "^2.13.3" }, "dependencies": { - "@parcel/diagnostic": "2.13.0", - "@parcel/plugin": "2.13.0", - "@parcel/utils": "2.13.0", + "@parcel/diagnostic": "2.13.3", + "@parcel/plugin": "2.13.3", + "@parcel/utils": "2.13.3", "@svgr/core": "^8.0.0", "@svgr/plugin-jsx": "^8.0.0" } diff --git a/packages/transformers/svg/package.json b/packages/transformers/svg/package.json index 037f6d542ca..f13641ecad1 100644 --- a/packages/transformers/svg/package.json +++ b/packages/transformers/svg/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/transformer-svg", - "version": "2.13.0", + "version": "2.13.3", "license": "MIT", "publishConfig": { "access": "public" @@ -17,12 +17,12 @@ "source": "src/SVGTransformer.js", "engines": { "node": ">= 16.0.0", - "parcel": "^2.13.0" + "parcel": "^2.13.3" }, "dependencies": { - "@parcel/diagnostic": "2.13.0", - "@parcel/plugin": "2.13.0", - "@parcel/rust": "2.13.0", + "@parcel/diagnostic": "2.13.3", + "@parcel/plugin": "2.13.3", + "@parcel/rust": "2.13.3", "nullthrows": "^1.1.1", "posthtml": "^0.16.5", "posthtml-parser": "^0.12.1", diff --git a/packages/transformers/toml/package.json b/packages/transformers/toml/package.json index d219916ab86..a7b17ddc130 100644 --- a/packages/transformers/toml/package.json +++ b/packages/transformers/toml/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/transformer-toml", - "version": "2.13.0", + "version": "2.13.3", "license": "MIT", "publishConfig": { "access": "public" @@ -17,10 +17,10 @@ "source": "src/TOMLTransformer.js", "engines": { "node": ">= 16.0.0", - "parcel": "^2.13.0" + "parcel": "^2.13.3" }, "dependencies": { "@iarna/toml": "^2.2.3", - "@parcel/plugin": "2.13.0" + "@parcel/plugin": "2.13.3" } } diff --git a/packages/transformers/typescript-tsc/package.json b/packages/transformers/typescript-tsc/package.json index be1a4b1a00c..1ea50450acd 100644 --- a/packages/transformers/typescript-tsc/package.json +++ b/packages/transformers/typescript-tsc/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/transformer-typescript-tsc", - "version": "2.13.0", + "version": "2.13.3", "license": "MIT", "publishConfig": { "access": "public" @@ -17,12 +17,12 @@ "source": "src/TSCTransformer.js", "engines": { "node": ">= 16.0.0", - "parcel": "^2.13.0" + "parcel": "^2.13.3" }, "dependencies": { - "@parcel/plugin": "2.13.0", + "@parcel/plugin": "2.13.3", "@parcel/source-map": "^2.1.1", - "@parcel/ts-utils": "2.13.0" + "@parcel/ts-utils": "2.13.3" }, "devDependencies": { "typescript": ">=3.0.0" diff --git a/packages/transformers/typescript-types/package.json b/packages/transformers/typescript-types/package.json index 88b3c0dfbf3..c7bcb248e42 100644 --- a/packages/transformers/typescript-types/package.json +++ b/packages/transformers/typescript-types/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/transformer-typescript-types", - "version": "2.13.0", + "version": "2.13.3", "license": "MIT", "publishConfig": { "access": "public" @@ -17,14 +17,14 @@ "source": "src/TSTypesTransformer.js", "engines": { "node": ">= 16.0.0", - "parcel": "^2.13.0" + "parcel": "^2.13.3" }, "dependencies": { - "@parcel/diagnostic": "2.13.0", - "@parcel/plugin": "2.13.0", + "@parcel/diagnostic": "2.13.3", + "@parcel/plugin": "2.13.3", "@parcel/source-map": "^2.1.1", - "@parcel/ts-utils": "2.13.0", - "@parcel/utils": "2.13.0", + "@parcel/ts-utils": "2.13.3", + "@parcel/utils": "2.13.3", "nullthrows": "^1.1.1" }, "devDependencies": { diff --git a/packages/transformers/vue/package.json b/packages/transformers/vue/package.json index 0391a65c228..f8a0448c619 100644 --- a/packages/transformers/vue/package.json +++ b/packages/transformers/vue/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/transformer-vue", - "version": "2.13.0", + "version": "2.13.3", "license": "MIT", "publishConfig": { "access": "public" @@ -17,14 +17,14 @@ "source": "src/VueTransformer.js", "engines": { "node": ">= 16.0.0", - "parcel": "^2.13.0" + "parcel": "^2.13.3" }, "dependencies": { "@ladjs/consolidate": "^1.0.3", - "@parcel/diagnostic": "2.13.0", - "@parcel/plugin": "2.13.0", + "@parcel/diagnostic": "2.13.3", + "@parcel/plugin": "2.13.3", "@parcel/source-map": "^2.1.1", - "@parcel/utils": "2.13.0", + "@parcel/utils": "2.13.3", "@vue/compiler-sfc": "^3.2.27", "nullthrows": "^1.1.1", "semver": "^7.5.2" diff --git a/packages/transformers/webextension/package.json b/packages/transformers/webextension/package.json index 02b1a40ebcd..0bf2d4de6e4 100644 --- a/packages/transformers/webextension/package.json +++ b/packages/transformers/webextension/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/transformer-webextension", - "version": "2.13.0", + "version": "2.13.3", "license": "MIT", "publishConfig": { "access": "public" @@ -16,13 +16,13 @@ "main": "lib/WebExtensionTransformer.js", "source": "src/WebExtensionTransformer.js", "engines": { - "parcel": "^2.13.0" + "parcel": "^2.13.3" }, "dependencies": { "@mischnic/json-sourcemap": "^0.1.0", - "@parcel/diagnostic": "2.13.0", - "@parcel/plugin": "2.13.0", - "@parcel/utils": "2.13.0", + "@parcel/diagnostic": "2.13.3", + "@parcel/plugin": "2.13.3", + "@parcel/utils": "2.13.3", "content-security-policy-parser": "^0.6.0" } } diff --git a/packages/transformers/webmanifest/package.json b/packages/transformers/webmanifest/package.json index 0b89a85c2c5..29698736075 100644 --- a/packages/transformers/webmanifest/package.json +++ b/packages/transformers/webmanifest/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/transformer-webmanifest", - "version": "2.13.0", + "version": "2.13.3", "license": "MIT", "publishConfig": { "access": "public" @@ -16,12 +16,12 @@ "main": "lib/WebManifestTransformer.js", "source": "src/WebManifestTransformer.js", "engines": { - "parcel": "^2.13.0" + "parcel": "^2.13.3" }, "dependencies": { "@mischnic/json-sourcemap": "^0.1.0", - "@parcel/diagnostic": "2.13.0", - "@parcel/plugin": "2.13.0", - "@parcel/utils": "2.13.0" + "@parcel/diagnostic": "2.13.3", + "@parcel/plugin": "2.13.3", + "@parcel/utils": "2.13.3" } } diff --git a/packages/transformers/worklet/package.json b/packages/transformers/worklet/package.json index 4d3393bf506..72a355c3c3e 100644 --- a/packages/transformers/worklet/package.json +++ b/packages/transformers/worklet/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/transformer-worklet", - "version": "2.13.0", + "version": "2.13.3", "license": "MIT", "publishConfig": { "access": "public" @@ -17,9 +17,9 @@ "source": "src/WorkletTransformer.js", "engines": { "node": ">= 16.0.0", - "parcel": "^2.13.0" + "parcel": "^2.13.3" }, "dependencies": { - "@parcel/plugin": "2.13.0" + "@parcel/plugin": "2.13.3" } } diff --git a/packages/transformers/worklet/src/WorkletTransformer.js b/packages/transformers/worklet/src/WorkletTransformer.js index 94c66ffd5e5..b1742b77ca5 100644 --- a/packages/transformers/worklet/src/WorkletTransformer.js +++ b/packages/transformers/worklet/src/WorkletTransformer.js @@ -5,6 +5,7 @@ import {Transformer} from '@parcel/plugin'; export default (new Transformer({ transform({asset}) { asset.bundleBehavior = 'isolated'; + asset.meta.jsRuntime = 'url'; asset.setEnvironment({ context: 'worklet', sourceType: 'module', diff --git a/packages/transformers/xml/package.json b/packages/transformers/xml/package.json index 140d2181d49..d975dfeba70 100644 --- a/packages/transformers/xml/package.json +++ b/packages/transformers/xml/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/transformer-xml", - "version": "2.13.0", + "version": "2.13.3", "license": "MIT", "publishConfig": { "access": "public" @@ -17,10 +17,10 @@ "source": "src/XMLTransformer.js", "engines": { "node": ">= 16.0.0", - "parcel": "^2.13.0" + "parcel": "^2.13.3" }, "dependencies": { - "@parcel/plugin": "2.13.0", + "@parcel/plugin": "2.13.3", "@xmldom/xmldom": "^0.9.3" } } diff --git a/packages/transformers/yaml/package.json b/packages/transformers/yaml/package.json index 7bb5aa1fcc2..2a768550a7e 100644 --- a/packages/transformers/yaml/package.json +++ b/packages/transformers/yaml/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/transformer-yaml", - "version": "2.13.0", + "version": "2.13.3", "license": "MIT", "publishConfig": { "access": "public" @@ -17,10 +17,10 @@ "source": "src/YAMLTransformer.js", "engines": { "node": ">= 16.0.0", - "parcel": "^2.13.0" + "parcel": "^2.13.3" }, "dependencies": { - "@parcel/plugin": "2.13.0", + "@parcel/plugin": "2.13.3", "js-yaml": "^4.1.0" } } diff --git a/packages/utils/babel-plugin-transform-runtime/package.json b/packages/utils/babel-plugin-transform-runtime/package.json index e99e23d1958..bb1f5813237 100644 --- a/packages/utils/babel-plugin-transform-runtime/package.json +++ b/packages/utils/babel-plugin-transform-runtime/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/babel-plugin-transform-runtime", - "version": "2.13.0", + "version": "2.13.3", "license": "MIT", "publishConfig": { "access": "public" @@ -23,6 +23,6 @@ }, "devDependencies": { "@babel/core": "^7.22.11", - "@parcel/babel-preset-env": "2.13.0" + "@parcel/babel-preset-env": "2.13.3" } } diff --git a/packages/utils/babel-preset-env/package.json b/packages/utils/babel-preset-env/package.json index ca1cc6d10f1..0798686e186 100644 --- a/packages/utils/babel-preset-env/package.json +++ b/packages/utils/babel-preset-env/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/babel-preset-env", - "version": "2.13.0", + "version": "2.13.3", "license": "MIT", "publishConfig": { "access": "public" diff --git a/packages/utils/create-react-app/package.json b/packages/utils/create-react-app/package.json index 8df8f0926db..f4dc15438cb 100644 --- a/packages/utils/create-react-app/package.json +++ b/packages/utils/create-react-app/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/create-react-app", - "version": "2.13.0", + "version": "2.13.3", "bin": { "parcel-create-react-app": "src/bin.js" }, @@ -32,6 +32,6 @@ }, "devDependencies": { "@babel/core": "^7.22.11", - "@parcel/babel-register": "2.13.0" + "@parcel/babel-register": "2.13.3" } } diff --git a/packages/utils/events/package.json b/packages/utils/events/package.json index 9e1d417287e..9a79dea940c 100644 --- a/packages/utils/events/package.json +++ b/packages/utils/events/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/events", - "version": "2.13.0", + "version": "2.13.3", "license": "MIT", "publishConfig": { "access": "public" diff --git a/packages/utils/macros/package.json b/packages/utils/macros/package.json index cbbc8c1bf45..06c181f7d21 100644 --- a/packages/utils/macros/package.json +++ b/packages/utils/macros/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/macros", - "version": "2.13.0", + "version": "2.13.3", "license": "MIT", "publishConfig": { "access": "public" @@ -17,6 +17,6 @@ "sideEffects": false, "engines": { "node": ">= 16.0.0", - "parcel": "^2.13.0" + "parcel": "^2.13.3" } } diff --git a/packages/utils/node-resolver-core/package.json b/packages/utils/node-resolver-core/package.json index e2537a42f53..2cab69ad193 100644 --- a/packages/utils/node-resolver-core/package.json +++ b/packages/utils/node-resolver-core/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/node-resolver-core", - "version": "3.4.0", + "version": "3.4.3", "license": "MIT", "publishConfig": { "access": "public" @@ -26,10 +26,10 @@ ], "dependencies": { "@mischnic/json-sourcemap": "^0.1.0", - "@parcel/diagnostic": "2.13.0", - "@parcel/fs": "2.13.0", - "@parcel/rust": "2.13.0", - "@parcel/utils": "2.13.0", + "@parcel/diagnostic": "2.13.3", + "@parcel/fs": "2.13.3", + "@parcel/rust": "2.13.3", + "@parcel/utils": "2.13.3", "nullthrows": "^1.1.1", "semver": "^7.5.2" }, diff --git a/packages/utils/node-resolver-core/src/Wrapper.js b/packages/utils/node-resolver-core/src/Wrapper.js index 6c54a1e1186..da424864cba 100644 --- a/packages/utils/node-resolver-core/src/Wrapper.js +++ b/packages/utils/node-resolver-core/src/Wrapper.js @@ -125,7 +125,10 @@ export default class NodeResolver { options.env, this.options.mode, ), - packageExports: this.options.packageExports ?? false, + packageExports: + this.options.packageExports || + options.env.context === 'react-server' || + options.env.context === 'react-client', moduleDirResolver: process.versions.pnp != null ? (module, from) => { @@ -252,7 +255,7 @@ export default class NodeResolver { name: string, options: ResolveOptions, ): Promise { - if (options.env.isNode()) { + if (options.env.isNode() || options.env.context === 'react-server') { return {isExcluded: true}; } @@ -779,8 +782,10 @@ function environmentToExportsConditions( const ELECTRON = 1 << 7; const DEVELOPMENT = 1 << 8; const PRODUCTION = 1 << 9; + const REACT_SERVER = 1 << 16; + const SOURCE = 1 << 17; - let conditions = 0; + let conditions = SOURCE; if (env.isBrowser()) { conditions |= BROWSER; } @@ -801,6 +806,10 @@ function environmentToExportsConditions( conditions |= NODE; } + if (env.context === 'react-server') { + conditions |= REACT_SERVER; + } + if (mode === 'production') { conditions |= PRODUCTION; } else if (mode === 'development') { diff --git a/packages/utils/parcel-lsp-protocol/package.json b/packages/utils/parcel-lsp-protocol/package.json index aa1bd0225f4..b3f7b0d87e6 100644 --- a/packages/utils/parcel-lsp-protocol/package.json +++ b/packages/utils/parcel-lsp-protocol/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/lsp-protocol", - "version": "2.13.0", + "version": "2.13.3", "license": "MIT", "publishConfig": { "access": "public" diff --git a/packages/utils/parcel-lsp/package.json b/packages/utils/parcel-lsp/package.json index 3f03c499a96..bcb69ebeab5 100644 --- a/packages/utils/parcel-lsp/package.json +++ b/packages/utils/parcel-lsp/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/lsp", - "version": "2.13.0", + "version": "2.13.3", "license": "MIT", "publishConfig": { "access": "public" @@ -22,10 +22,10 @@ }, "engines": { "node": ">= 16.0.0", - "parcel": "^2.13.0" + "parcel": "^2.13.3" }, "dependencies": { - "@parcel/lsp-protocol": "2.13.0", + "@parcel/lsp-protocol": "2.13.3", "@parcel/watcher": "^2.0.7", "common-path-prefix": "^3.0.0", "nullthrows": "^1.1.1", diff --git a/packages/utils/parcel-watcher-watchman-js/package.json b/packages/utils/parcel-watcher-watchman-js/package.json index c9145aac3df..dbec44fb465 100644 --- a/packages/utils/parcel-watcher-watchman-js/package.json +++ b/packages/utils/parcel-watcher-watchman-js/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/watcher-watchman-js", - "version": "2.13.0", + "version": "2.13.3", "license": "MIT", "main": "lib/index.js", "source": "src/index.js", @@ -8,8 +8,8 @@ "access": "public" }, "dependencies": { - "@parcel/logger": "2.13.0", - "@parcel/utils": "2.13.0", + "@parcel/logger": "2.13.3", + "@parcel/utils": "2.13.3", "fb-watchman": "^2.0.2" }, "devDependencies": { diff --git a/packages/utils/parcelforvscode/package.json b/packages/utils/parcelforvscode/package.json index 0e70dbf66c2..a9cf22d5df6 100644 --- a/packages/utils/parcelforvscode/package.json +++ b/packages/utils/parcelforvscode/package.json @@ -1,6 +1,6 @@ { "name": "parcel-for-vscode", - "version": "2.13.0", + "version": "2.13.3", "license": "MIT", "publisher": "parcel", "icon": "logo.png", @@ -107,8 +107,8 @@ "lint": "eslint src --ext ts" }, "devDependencies": { - "@parcel/lsp": "2.13.0", - "@parcel/lsp-protocol": "2.13.0", + "@parcel/lsp": "2.13.3", + "@parcel/lsp-protocol": "2.13.3", "@types/mocha": "^8.0.4", "@types/node": ">= 18", "@types/vscode": "^1.67.0", diff --git a/packages/utils/service-worker/package.json b/packages/utils/service-worker/package.json index 92220db272b..a0d70bf8562 100644 --- a/packages/utils/service-worker/package.json +++ b/packages/utils/service-worker/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/service-worker", - "version": "2.13.0", + "version": "2.13.3", "license": "MIT", "publishConfig": { "access": "public" @@ -18,6 +18,6 @@ "sideEffects": false, "engines": { "node": ">= 16.0.0", - "parcel": "^2.13.0" + "parcel": "^2.13.3" } } diff --git a/packages/utils/ts-utils/package.json b/packages/utils/ts-utils/package.json index 82bc2db6358..fbeca072e86 100644 --- a/packages/utils/ts-utils/package.json +++ b/packages/utils/ts-utils/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/ts-utils", - "version": "2.13.0", + "version": "2.13.3", "license": "MIT", "publishConfig": { "access": "public" diff --git a/packages/validators/eslint/package.json b/packages/validators/eslint/package.json index e3edbea699c..db336039daf 100644 --- a/packages/validators/eslint/package.json +++ b/packages/validators/eslint/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/validator-eslint", - "version": "2.13.0", + "version": "2.13.3", "license": "MIT", "publishConfig": { "access": "public" @@ -17,12 +17,12 @@ "source": "src/EslintValidator.js", "engines": { "node": ">= 16.0.0", - "parcel": "^2.13.0" + "parcel": "^2.13.3" }, "dependencies": { - "@parcel/diagnostic": "2.13.0", - "@parcel/plugin": "2.13.0", - "@parcel/utils": "2.13.0", + "@parcel/diagnostic": "2.13.3", + "@parcel/plugin": "2.13.3", + "@parcel/utils": "2.13.3", "chalk": "^4.1.2" }, "devDependencies": { diff --git a/packages/validators/typescript/package.json b/packages/validators/typescript/package.json index 77f9e93ce86..c1b5b4e11a7 100644 --- a/packages/validators/typescript/package.json +++ b/packages/validators/typescript/package.json @@ -1,6 +1,6 @@ { "name": "@parcel/validator-typescript", - "version": "2.13.0", + "version": "2.13.3", "license": "MIT", "publishConfig": { "access": "public" @@ -17,14 +17,14 @@ "source": "src/TypeScriptValidator.js", "engines": { "node": ">= 16.0.0", - "parcel": "^2.13.0" + "parcel": "^2.13.3" }, "dependencies": { - "@parcel/diagnostic": "2.13.0", - "@parcel/plugin": "2.13.0", - "@parcel/ts-utils": "2.13.0", - "@parcel/types": "2.13.0", - "@parcel/utils": "2.13.0" + "@parcel/diagnostic": "2.13.3", + "@parcel/plugin": "2.13.3", + "@parcel/ts-utils": "2.13.3", + "@parcel/types": "2.13.3", + "@parcel/utils": "2.13.3" }, "devDependencies": { "typescript": ">=3.0.0" diff --git a/yarn.lock b/yarn.lock index 2d77b5ab93a..ad4b90ff850 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1112,9 +1112,9 @@ commander "^2.15.1" "@codemirror/autocomplete@^6.0.0", "@codemirror/autocomplete@^6.7.1": - version "6.18.2" - resolved "https://registry.yarnpkg.com/@codemirror/autocomplete/-/autocomplete-6.18.2.tgz#bf3f15f1bf0fdfa3b4fac560e419adae1ece8a94" - integrity sha512-wJGylKtMFR/Ds6Gh01+OovXE/pncPiKZNNBKuC39pKnH+XK5d9+WsNqcrdxPjFPFTigRBqse0rfxw9UxrfyhPg== + version "6.18.3" + resolved "https://registry.yarnpkg.com/@codemirror/autocomplete/-/autocomplete-6.18.3.tgz#f9ea79a2f369662516f71bc0b2f819454d3c8e00" + integrity sha512-1dNIOmiM0z4BIBwxmxEfA1yoxh1MF/6KPBbh20a5vphGV0ictKlgQsbJs6D6SkR6iJpGbpwRsa6PFMNlg9T9pQ== dependencies: "@codemirror/language" "^6.0.0" "@codemirror/state" "^6.0.0" @@ -1179,9 +1179,9 @@ "@lezer/json" "^1.0.0" "@codemirror/language@^6.0.0", "@codemirror/language@^6.4.0", "@codemirror/language@^6.6.0": - version "6.10.3" - resolved "https://registry.yarnpkg.com/@codemirror/language/-/language-6.10.3.tgz#eb25fc5ade19032e7bf1dcaa957804e5f1660585" - integrity sha512-kDqEU5sCP55Oabl6E7m5N+vZRoc0iWqgDVhEKifcHzPzjqCegcO4amfrYVL9PmPZpl4G0yjkpTpUO/Ui8CzO8A== + version "6.10.4" + resolved "https://registry.yarnpkg.com/@codemirror/language/-/language-6.10.4.tgz#8791824f06eaa428d9c0291902b2461c005c5ad1" + integrity sha512-qjt7Wn/nxGuI278GYVlqE5V93Xn8ZQwzqZtgS0FaWr7K2yWgd5/FlBNqNi4jtUvBVvWJzAGfnggIlpyjTOaF4A== dependencies: "@codemirror/state" "^6.0.0" "@codemirror/view" "^6.23.0" @@ -1191,18 +1191,18 @@ style-mod "^4.0.0" "@codemirror/lint@^6.0.0", "@codemirror/lint@^6.2.1": - version "6.8.2" - resolved "https://registry.yarnpkg.com/@codemirror/lint/-/lint-6.8.2.tgz#7864b03583e9efd18554cff1dd4504da10338ab1" - integrity sha512-PDFG5DjHxSEjOXk9TQYYVjZDqlZTFaDBfhQixHnQOEVDDNHUbEh/hstAjcQJaA6FQdZTD1hquXTK0rVBLADR1g== + version "6.8.3" + resolved "https://registry.yarnpkg.com/@codemirror/lint/-/lint-6.8.3.tgz#5988b4afc0717da2ccec6ddd33c5cfc0de5ba4d9" + integrity sha512-GSGfKxCo867P7EX1k2LoCrjuQFeqVgPGRRsSl4J4c0KMkD+k1y6WYvTQkzv0iZ8JhLJDujEvlnMchv4CZQLh3Q== dependencies: "@codemirror/state" "^6.0.0" - "@codemirror/view" "^6.0.0" + "@codemirror/view" "^6.35.0" crelt "^1.0.5" "@codemirror/search@^6.4.0": - version "6.5.7" - resolved "https://registry.yarnpkg.com/@codemirror/search/-/search-6.5.7.tgz#fb60f6637437a8264f86079621a56290dc3814c4" - integrity sha512-6+iLsXvITWKHYlkgHPCs/qiX4dNzn8N78YfhOFvPtPYCkuXqZq10rAfsUMhOq7O/1VjJqdXRflyExlfVcu/9VQ== + version "6.5.8" + resolved "https://registry.yarnpkg.com/@codemirror/search/-/search-6.5.8.tgz#b59b3659b46184cc75d6108d7c050a4ca344c3a0" + integrity sha512-PoWtZvo7c1XFeZWmmyaOp2G0XVbOnm+fJzvghqGAktBW3cufwJUWvSCcNG0ppXiBEM05mZu6RhMtXPv2hpllig== dependencies: "@codemirror/state" "^6.0.0" "@codemirror/view" "^6.0.0" @@ -1223,10 +1223,10 @@ "@codemirror/view" "^6.0.0" "@lezer/highlight" "^1.0.0" -"@codemirror/view@^6.0.0", "@codemirror/view@^6.12.0", "@codemirror/view@^6.17.0", "@codemirror/view@^6.23.0", "@codemirror/view@^6.27.0": - version "6.34.2" - resolved "https://registry.yarnpkg.com/@codemirror/view/-/view-6.34.2.tgz#c6cc1387be217f448af585f05f23e681f76aeda7" - integrity sha512-d6n0WFvL970A9Z+l9N2dO+Hk9ev4hDYQzIx+B9tCyBP0W5wPEszi1rhuyFesNSkLZzXbQE5FPH7F/z/TMJfoPA== +"@codemirror/view@^6.0.0", "@codemirror/view@^6.12.0", "@codemirror/view@^6.17.0", "@codemirror/view@^6.23.0", "@codemirror/view@^6.27.0", "@codemirror/view@^6.35.0": + version "6.35.0" + resolved "https://registry.yarnpkg.com/@codemirror/view/-/view-6.35.0.tgz#890e8e31a58edf65cdf193049fe9f3fdec20cc82" + integrity sha512-I0tYy63q5XkaWsJ8QRv5h6ves7kvtrBWjBcnf/bzohFJQc5c14a1AQRdE8QpPF9eMp5Mq2FMm59TCj1gDfE7kw== dependencies: "@codemirror/state" "^6.4.0" style-mod "^4.1.0" @@ -2576,74 +2576,74 @@ "@svgr/hast-util-to-babel-ast" "8.0.0" svg-parser "^2.0.4" -"@swc/core-darwin-arm64@1.9.2": - version "1.9.2" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.9.2.tgz#98b60a56229c4341c1263723f985e04f3f82d499" - integrity sha512-nETmsCoY29krTF2PtspEgicb3tqw7Ci5sInTI03EU5zpqYbPjoPH99BVTjj0OsF53jP5MxwnLI5Hm21lUn1d6A== - -"@swc/core-darwin-x64@1.9.2": - version "1.9.2" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.9.2.tgz#6bb1be573878acf42aa6abd6b602ef0136cc00de" - integrity sha512-9gD+bwBz8ZByjP6nZTXe/hzd0tySIAjpDHgkFiUrc+5zGF+rdTwhcNrzxNHJmy6mw+PW38jqII4uspFHUqqxuQ== - -"@swc/core-linux-arm-gnueabihf@1.9.2": - version "1.9.2" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.9.2.tgz#e63f57f2e214f06d711bed830d53af0597749647" - integrity sha512-kYq8ief1Qrn+WmsTWAYo4r+Coul4dXN6cLFjiPZ29Cv5pyU+GFvSPAB4bEdMzwy99rCR0u2P10UExaeCjurjvg== - -"@swc/core-linux-arm64-gnu@1.9.2": - version "1.9.2" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.9.2.tgz#cb26240fe5769c1675ac75717ec836e99a7f7e93" - integrity sha512-n0W4XiXlmEIVqxt+rD3ZpkogsEWUk1jJ+i5bQNgB+1JuWh0fBE8c/blDgTQXa0GB5lTPVDZQussgdNOCnAZwiA== - -"@swc/core-linux-arm64-musl@1.9.2": - version "1.9.2" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.9.2.tgz#0e4733e4e4398bee0c030a4e97279f78a65d4e61" - integrity sha512-8xzrOmsyCC1zrx2Wzx/h8dVsdewO1oMCwBTLc1gSJ/YllZYTb04pNm6NsVbzUX2tKddJVRgSJXV10j/NECLwpA== - -"@swc/core-linux-x64-gnu@1.9.2": - version "1.9.2" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.9.2.tgz#6b4b86d06537004cc4477915b67f7d94d1b6ba33" - integrity sha512-kZrNz/PjRQKcchWF6W292jk3K44EoVu1ad5w+zbS4jekIAxsM8WwQ1kd+yjUlN9jFcF8XBat5NKIs9WphJCVXg== - -"@swc/core-linux-x64-musl@1.9.2": - version "1.9.2" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.9.2.tgz#d6de84dbdcf69b1fdb45c8ae232b7d23ba92c7e2" - integrity sha512-TTIpR4rjMkhX1lnFR+PSXpaL83TrQzp9znRdp2TzYrODlUd/R20zOwSo9vFLCyH6ZoD47bccY7QeGZDYT3nlRg== - -"@swc/core-win32-arm64-msvc@1.9.2": - version "1.9.2" - resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.9.2.tgz#a5c477f0296e499890f55cfaa7c0100152b1900b" - integrity sha512-+Eg2d4icItKC0PMjZxH7cSYFLWk0aIp94LNmOw6tPq0e69ax6oh10upeq0D1fjWsKLmOJAWEvnXlayZcijEXDw== - -"@swc/core-win32-ia32-msvc@1.9.2": - version "1.9.2" - resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.9.2.tgz#66bbfea8cfcf6b602b8fb0d9ee788e92c8a736ed" - integrity sha512-nLWBi4vZDdM/LkiQmPCakof8Dh1/t5EM7eudue04V1lIcqx9YHVRS3KMwEaCoHLGg0c312Wm4YgrWQd9vwZ5zQ== - -"@swc/core-win32-x64-msvc@1.9.2": - version "1.9.2" - resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.9.2.tgz#f609fefac8f412b445cb0a2bfec73a657e41d4db" - integrity sha512-ik/k+JjRJBFkXARukdU82tSVx0CbExFQoQ78qTO682esbYXzjdB5eLVkoUbwen299pnfr88Kn4kyIqFPTje8Xw== +"@swc/core-darwin-arm64@1.9.3": + version "1.9.3" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.9.3.tgz#cca13f7ce6e1099612a7ba017f4923857d3a4d5f" + integrity sha512-hGfl/KTic/QY4tB9DkTbNuxy5cV4IeejpPD4zo+Lzt4iLlDWIeANL4Fkg67FiVceNJboqg48CUX+APhDHO5G1w== + +"@swc/core-darwin-x64@1.9.3": + version "1.9.3" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.9.3.tgz#01376c6c2caea5dd0c235f21ebc7e41238153c86" + integrity sha512-IaRq05ZLdtgF5h9CzlcgaNHyg4VXuiStnOFpfNEMuI5fm5afP2S0FHq8WdakUz5WppsbddTdplL+vpeApt/WCQ== + +"@swc/core-linux-arm-gnueabihf@1.9.3": + version "1.9.3" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.9.3.tgz#4a9705903cebfc8e3e2bee71a42f7c88896e61df" + integrity sha512-Pbwe7xYprj/nEnZrNBvZfjnTxlBIcfApAGdz2EROhjpPj+FBqBa3wOogqbsuGGBdCphf8S+KPprL1z+oDWkmSQ== + +"@swc/core-linux-arm64-gnu@1.9.3": + version "1.9.3" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.9.3.tgz#722aefc00a7abfb031fae7539226c7d7683f5c8d" + integrity sha512-AQ5JZiwNGVV/2K2TVulg0mw/3LYfqpjZO6jDPtR2evNbk9Yt57YsVzS+3vHSlUBQDRV9/jqMuZYVU3P13xrk+g== + +"@swc/core-linux-arm64-musl@1.9.3": + version "1.9.3" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.9.3.tgz#6643f683311cc1dcee00970e3d6b4872225bdbd8" + integrity sha512-tzVH480RY6RbMl/QRgh5HK3zn1ZTFsThuxDGo6Iuk1MdwIbdFYUY034heWUTI4u3Db97ArKh0hNL0xhO3+PZdg== + +"@swc/core-linux-x64-gnu@1.9.3": + version "1.9.3" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.9.3.tgz#e6f5cefa244409abe1451fbb4575696a870cbd7a" + integrity sha512-ivXXBRDXDc9k4cdv10R21ccBmGebVOwKXT/UdH1PhxUn9m/h8erAWjz5pcELwjiMf27WokqPgaWVfaclDbgE+w== + +"@swc/core-linux-x64-musl@1.9.3": + version "1.9.3" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.9.3.tgz#4d45399f7a01389add61febd02da9b12f16abc81" + integrity sha512-ILsGMgfnOz1HwdDz+ZgEuomIwkP1PHT6maigZxaCIuC6OPEhKE8uYna22uU63XvYcLQvZYDzpR3ms47WQPuNEg== + +"@swc/core-win32-arm64-msvc@1.9.3": + version "1.9.3" + resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.9.3.tgz#8c352bcea558b9a950877cd724f132d7d51a4d80" + integrity sha512-e+XmltDVIHieUnNJHtspn6B+PCcFOMYXNJB1GqoCcyinkEIQNwC8KtWgMqUucUbEWJkPc35NHy9k8aCXRmw9Kg== + +"@swc/core-win32-ia32-msvc@1.9.3": + version "1.9.3" + resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.9.3.tgz#656f78b9c56413dbd590ac259dbe0d563cd8e166" + integrity sha512-rqpzNfpAooSL4UfQnHhkW8aL+oyjqJniDP0qwZfGnjDoJSbtPysHg2LpcOBEdSnEH+uIZq6J96qf0ZFD8AGfXA== + +"@swc/core-win32-x64-msvc@1.9.3": + version "1.9.3" + resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.9.3.tgz#9595c177d2c11909558da93b18f37e7c5ae1909c" + integrity sha512-3YJJLQ5suIEHEKc1GHtqVq475guiyqisKSoUnoaRtxkDaW5g1yvPt9IoSLOe2mRs7+FFhGGU693RsBUSwOXSdQ== "@swc/core@^1.7.26": - version "1.9.2" - resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.9.2.tgz#226bdc5033ba0af85c0bf814b16bdc1df0070d35" - integrity sha512-dYyEkO6mRYtZFpnOsnYzv9rY69fHAHoawYOjGOEcxk9WYtaJhowMdP/w6NcOKnz2G7GlZaenjkzkMa6ZeQeMsg== + version "1.9.3" + resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.9.3.tgz#e5bc9b35df2f4a60026c6759c1a6575070339d4f" + integrity sha512-oRj0AFePUhtatX+BscVhnzaAmWjpfAeySpM1TCbxA1rtBDeH/JDhi5yYzAKneDYtVtBvA7ApfeuzhMC9ye4xSg== dependencies: "@swc/counter" "^0.1.3" - "@swc/types" "^0.1.15" + "@swc/types" "^0.1.17" optionalDependencies: - "@swc/core-darwin-arm64" "1.9.2" - "@swc/core-darwin-x64" "1.9.2" - "@swc/core-linux-arm-gnueabihf" "1.9.2" - "@swc/core-linux-arm64-gnu" "1.9.2" - "@swc/core-linux-arm64-musl" "1.9.2" - "@swc/core-linux-x64-gnu" "1.9.2" - "@swc/core-linux-x64-musl" "1.9.2" - "@swc/core-win32-arm64-msvc" "1.9.2" - "@swc/core-win32-ia32-msvc" "1.9.2" - "@swc/core-win32-x64-msvc" "1.9.2" + "@swc/core-darwin-arm64" "1.9.3" + "@swc/core-darwin-x64" "1.9.3" + "@swc/core-linux-arm-gnueabihf" "1.9.3" + "@swc/core-linux-arm64-gnu" "1.9.3" + "@swc/core-linux-arm64-musl" "1.9.3" + "@swc/core-linux-x64-gnu" "1.9.3" + "@swc/core-linux-x64-musl" "1.9.3" + "@swc/core-win32-arm64-msvc" "1.9.3" + "@swc/core-win32-ia32-msvc" "1.9.3" + "@swc/core-win32-x64-msvc" "1.9.3" "@swc/counter@^0.1.3": version "0.1.3" @@ -2657,10 +2657,10 @@ dependencies: tslib "^2.8.0" -"@swc/types@^0.1.15": - version "0.1.15" - resolved "https://registry.yarnpkg.com/@swc/types/-/types-0.1.15.tgz#9a3b3873d93382750b823aaeabca787bd3fa7c96" - integrity sha512-XKaZ+dzDIQ9Ot9o89oJQ/aluI17+VvUnIpYJTcZtvv1iYX6MzHh3Ik2CSR7MdPKpPwfZXHBeCingb2b4PoDVdw== +"@swc/types@^0.1.17": + version "0.1.17" + resolved "https://registry.yarnpkg.com/@swc/types/-/types-0.1.17.tgz#bd1d94e73497f27341bf141abdf4c85230d41e7c" + integrity sha512-V5gRru+aD8YVyCOMAjMpWR1Ui577DD5KSJsHP8RAxopAH22jFz6GZd/qxqjO6MJHQhcsjvjOFXyDhyLQUnMveQ== dependencies: "@swc/counter" "^0.1.3" @@ -2744,9 +2744,9 @@ integrity sha512-ekGvFhFgrc2zYQoX4JeZPmVzZxw6Dtllga7iGHzfbYIYkAMUx/sAFP2GdFpLff+vdHXu5fl7WX9AT+TtqYcsyw== "@types/node@*", "@types/node@>= 18": - version "22.9.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-22.9.0.tgz#b7f16e5c3384788542c72dc3d561a7ceae2c0365" - integrity sha512-vuyHg81vvWA1Z1ELfvLko2c8f34gyA0zaic0+Rllc5lbCnbSyuvb2Oxpm6TAUAC/2xZN3QGqxBNggD1nNR2AfQ== + version "22.9.3" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.9.3.tgz#08f3d64b3bc6d74b162d36f60213e8a6704ef2b4" + integrity sha512-F3u1fs/fce3FFk+DAxbxc78DF8x0cY09RRL8GnXLmkJ1jvx3TtPdWoTT5/NiYfI5ASqXBmfqJi9dZ3gxMx4lzw== dependencies: undici-types "~6.19.8" @@ -3038,6 +3038,14 @@ abbrev@^2.0.0: resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-2.0.0.tgz#cf59829b8b4f03f89dda2771cb7f3653828c89bf" integrity sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ== +accepts@~1.3.8: + version "1.3.8" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" + integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== + dependencies: + mime-types "~2.1.34" + negotiator "0.6.3" + acorn-jsx@^5.3.2: version "5.3.2" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" @@ -3312,6 +3320,11 @@ array-each@^1.0.0, array-each@^1.0.1: resolved "https://registry.yarnpkg.com/array-each/-/array-each-1.0.1.tgz#a794af0c05ab1752846ee753a1f211a05ba0c44f" integrity sha512-zHjL5SZa68hkKHBFBK6DJCTtr9sfTCPCaph/L7tMSLcTFgy+zX7E+6q5UArbtOtMBCtxdICpfTCspRse+ywyXA== +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== + array-from@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/array-from/-/array-from-2.1.1.tgz#cfe9d8c26628b9dc5aecc62a9f5d8f1f352c1195" @@ -3830,6 +3843,24 @@ bn.js@^5.2.1: resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== +body-parser@1.20.3: + version "1.20.3" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.3.tgz#1953431221c6fb5cd63c4b36d53fab0928e548c6" + integrity sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g== + dependencies: + bytes "3.1.2" + content-type "~1.0.5" + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + http-errors "2.0.0" + iconv-lite "0.4.24" + on-finished "2.4.1" + qs "6.13.0" + raw-body "2.5.2" + type-is "~1.6.18" + unpipe "1.0.0" + boolbase@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" @@ -4035,6 +4066,11 @@ bytes@3.0.0: resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw== +bytes@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== + cacache@^16.1.0: version "16.1.3" resolved "https://registry.yarnpkg.com/cacache/-/cacache-16.1.3.tgz#a02b9f34ecfaf9a78c9f4bc16fceb94d5d67a38e" @@ -4148,9 +4184,9 @@ caniuse-api@^3.0.0: lodash.uniq "^4.5.0" caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001646, caniuse-lite@^1.0.30001669: - version "1.0.30001680" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001680.tgz#5380ede637a33b9f9f1fc6045ea99bd142f3da5e" - integrity sha512-rPQy70G6AGUMnbwS1z6Xg+RkHYPAi18ihs47GH0jcxIG7wArmPgY3XbS2sRdBbxJljp3thdT8BIqv9ccCypiPA== + version "1.0.30001684" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001684.tgz#0eca437bab7d5f03452ff0ef9de8299be6b08e16" + integrity sha512-G1LRwLIQjBQoyq0ZJGqGIJUXzJ8irpbjHLpVRXDvBEScFJ9b17sgK6vlx0GAJFE21okD7zXl08rRRUfq6HdoEQ== ccount@^1.0.0: version "1.1.0" @@ -4284,7 +4320,7 @@ chokidar@^2.0.0: optionalDependencies: fsevents "^1.2.7" -chokidar@^3.5.3: +chokidar@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== @@ -4327,12 +4363,12 @@ ci-info@^3.6.1, ci-info@^3.7.0: integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" - integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== + version "1.0.5" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.5.tgz#749f80731c7821e9a5fabd51f6998b696f296686" + integrity sha512-xq7ICKB4TMHUx7Tz1L9O2SGKOhYMOTR32oir45Bq28/AQTpHogKgHcoYFSdRbMtddl+ozNXfXY9jWcgYKmde0w== dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" + inherits "^2.0.4" + safe-buffer "^5.2.1" class-utils@^0.3.5: version "0.3.6" @@ -4707,11 +4743,23 @@ content-disposition@0.5.2: resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" integrity sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA== +content-disposition@0.5.4: + version "0.5.4" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" + integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== + dependencies: + safe-buffer "5.2.1" + content-security-policy-parser@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/content-security-policy-parser/-/content-security-policy-parser-0.6.0.tgz#b361d8587dee0e92def19d308cb23e8d32cc26f6" integrity sha512-wejtC/p+HLNQ7uaWgg1o3CKHhE8QXC9fJ2GCY0X82L5HUNtZSq1dmUvNSHHEb6R7LS02fpmRBq/vP8i4/+9KCg== +content-type@~1.0.4, content-type@~1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" + integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== + conventional-changelog-angular@5.0.12: version "5.0.12" resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.12.tgz#c979b8b921cbfe26402eb3da5bbfda02d865a2b9" @@ -4804,6 +4852,16 @@ convert-source-map@^2.0.0: resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== + +cookie@0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.1.tgz#2f73c42142d5d5cf71310a74fc4ae61670e5dbc9" + integrity sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w== + copy-anything@^2.0.1: version "2.0.6" resolved "https://registry.yarnpkg.com/copy-anything/-/copy-anything-2.0.6.tgz#092454ea9584a7b7ad5573062b2a87f5900fc480" @@ -4945,9 +5003,9 @@ cross-spawn@6.0.5: which "^1.2.9" cross-spawn@^7.0.0, cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.3: - version "7.0.5" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.5.tgz#910aac880ff5243da96b728bc6521a5f6c2f2f82" - integrity sha512-ZVJrKKYunU38/76t0RMOulHOnUcbU9GbpWKAOZ0mhjr7CX6FVrH+4FrAapSOekrgFQ3f/8gwMEuIft0aKq6Hug== + version "7.0.6" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" + integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== dependencies: path-key "^3.1.0" shebang-command "^2.0.0" @@ -5333,6 +5391,11 @@ denodeify@^1.2.1: resolved "https://registry.yarnpkg.com/denodeify/-/denodeify-1.2.1.tgz#3a36287f5034e699e7577901052c2e6c94251631" integrity sha512-KNTihKNmQENUZeKu5fzfpzRqR5S2VMp4gl9RFHiWzj9DfvYQPMJ6XHKNaQxaGCXwPk6y9yme3aUoaiAe+KX+vg== +depd@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + deprecation@^2.0.0, deprecation@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" @@ -5346,6 +5409,11 @@ des.js@^1.0.0: inherits "^2.0.1" minimalistic-assert "^1.0.0" +destroy@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" + integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== + detab@2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/detab/-/detab-2.0.4.tgz#b927892069aff405fbb9a186fe97a44a92a94b43" @@ -5518,13 +5586,13 @@ dot-prop@^5.1.0: is-obj "^2.0.0" dotenv-expand@^11.0.6: - version "11.0.6" - resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-11.0.6.tgz#f2c840fd924d7c77a94eff98f153331d876882d3" - integrity sha512-8NHi73otpWsZGBSZwwknTXS5pqMOrk9+Ssrna8xCaxkzEpU9OTf9R5ArQGVw03//Zmk9MOwLPng9WwndvpAJ5g== + version "11.0.7" + resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-11.0.7.tgz#af695aea007d6fdc84c86cd8d0ad7beb40a0bd08" + integrity sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA== dependencies: - dotenv "^16.4.4" + dotenv "^16.4.5" -dotenv@^16.4.4, dotenv@^16.4.5: +dotenv@^16.4.5: version "16.4.5" resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.5.tgz#cdd3b3b604cb327e286b4762e13502f717cb099f" integrity sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg== @@ -5587,14 +5655,14 @@ ejs@^3.1.6, ejs@^3.1.7: jake "^10.8.5" electron-to-chromium@^1.5.41: - version "1.5.56" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.56.tgz#3213f369efc3a41091c3b2c05bc0f406108ac1df" - integrity sha512-7lXb9dAvimCFdvUMTyucD4mnIndt/xhRKFAlky0CyFogdnNmdPQNoHI23msF/2V4mpTxMzgMdjK4+YRlFlRQZw== + version "1.5.64" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.64.tgz#ac8c4c89075d35a1514b620f47dfe48a71ec3697" + integrity sha512-IXEuxU+5ClW2IGEYFC2T7szbyVgehupCWQe5GNh+H065CD6U6IFN0s4KeAMFGNmQolRU4IV7zGBWSYMmZ8uuqQ== elliptic@^6.5.3, elliptic@^6.5.5: - version "6.6.0" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.6.0.tgz#5919ec723286c1edf28685aa89261d4761afa210" - integrity sha512-dpwoQcLc/2WLQvJvLRHKZ+f9FgOdjnq11rurqwekGQygGPsYSK29OMMD2WalatiqQ+XGFDglTNixpPfI+lpaAA== + version "6.6.1" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.6.1.tgz#3b8ffb02670bf69e382c7f65bf524c97c5405c06" + integrity sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g== dependencies: bn.js "^4.11.9" brorand "^1.1.0" @@ -5643,6 +5711,11 @@ encodeurl@~1.0.2: resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== +encodeurl@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-2.0.0.tgz#7b8ea898077d7e409d3ac45474ea38eaf0857a58" + integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg== + encoding-sniffer@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/encoding-sniffer/-/encoding-sniffer-0.2.0.tgz#799569d66d443babe82af18c9f403498365ef1d5" @@ -5736,10 +5809,10 @@ error-stack-parser@^2.0.6: dependencies: stackframe "^1.3.4" -es-abstract@^1.17.5, es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23.1, es-abstract@^1.23.2, es-abstract@^1.23.3: - version "1.23.3" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.3.tgz#8f0c5a35cd215312573c5a27c87dfd6c881a0aa0" - integrity sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A== +es-abstract@^1.17.5, es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23.2, es-abstract@^1.23.3, es-abstract@^1.23.5: + version "1.23.5" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.5.tgz#f4599a4946d57ed467515ed10e4f157289cd52fb" + integrity sha512-vlmniQ0WNPwXqA0BnmwV3Ng7HxiGlh6r5U6JcTMNx8OilcAGqVJBHJcPjqOMaczU9fRuRK5Px2BdVyPRnKMMVQ== dependencies: array-buffer-byte-length "^1.0.1" arraybuffer.prototype.slice "^1.0.3" @@ -5756,7 +5829,7 @@ es-abstract@^1.17.5, es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23 function.prototype.name "^1.1.6" get-intrinsic "^1.2.4" get-symbol-description "^1.0.2" - globalthis "^1.0.3" + globalthis "^1.0.4" gopd "^1.0.1" has-property-descriptors "^1.0.2" has-proto "^1.0.3" @@ -5772,10 +5845,10 @@ es-abstract@^1.17.5, es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23 is-string "^1.0.7" is-typed-array "^1.1.13" is-weakref "^1.0.2" - object-inspect "^1.13.1" + object-inspect "^1.13.3" object-keys "^1.1.1" object.assign "^4.1.5" - regexp.prototype.flags "^1.5.2" + regexp.prototype.flags "^1.5.3" safe-array-concat "^1.1.2" safe-regex-test "^1.0.3" string.prototype.trim "^1.2.9" @@ -6246,6 +6319,11 @@ esutils@^2.0.2: resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== + event-emitter@^0.3.5: version "0.3.5" resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" @@ -6352,6 +6430,43 @@ exponential-backoff@^3.1.1: resolved "https://registry.yarnpkg.com/exponential-backoff/-/exponential-backoff-3.1.1.tgz#64ac7526fe341ab18a39016cd22c787d01e00bf6" integrity sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw== +express@^4.18.2: + version "4.21.1" + resolved "https://registry.yarnpkg.com/express/-/express-4.21.1.tgz#9dae5dda832f16b4eec941a4e44aa89ec481b281" + integrity sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ== + dependencies: + accepts "~1.3.8" + array-flatten "1.1.1" + body-parser "1.20.3" + content-disposition "0.5.4" + content-type "~1.0.4" + cookie "0.7.1" + cookie-signature "1.0.6" + debug "2.6.9" + depd "2.0.0" + encodeurl "~2.0.0" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "1.3.1" + fresh "0.5.2" + http-errors "2.0.0" + merge-descriptors "1.0.3" + methods "~1.1.2" + on-finished "2.4.1" + parseurl "~1.3.3" + path-to-regexp "0.1.10" + proxy-addr "~2.0.7" + qs "6.13.0" + range-parser "~1.2.1" + safe-buffer "5.2.1" + send "0.19.0" + serve-static "1.16.2" + setprototypeof "1.2.0" + statuses "2.0.1" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + ext@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/ext/-/ext-1.7.0.tgz#0ea4383c0103d60e70be99e9a7f11027a33c4f5f" @@ -6428,7 +6543,7 @@ fast-glob@3.2.7: merge2 "^1.3.0" micromatch "^4.0.4" -fast-glob@^3.2.12, fast-glob@^3.2.9, fast-glob@^3.3.0: +fast-glob@^3.2.12, fast-glob@^3.2.9, fast-glob@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== @@ -6573,6 +6688,19 @@ finalhandler@1.1.2: statuses "~1.5.0" unpipe "~1.0.0" +finalhandler@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.3.1.tgz#0c575f1d1d324ddd1da35ad7ece3df7d19088019" + integrity sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ== + dependencies: + debug "2.6.9" + encodeurl "~2.0.0" + escape-html "~1.0.3" + on-finished "2.4.1" + parseurl "~1.3.3" + statuses "2.0.1" + unpipe "~1.0.0" + find-cache-dir@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" @@ -6691,9 +6819,9 @@ flat@^5.0.2: integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== flatted@^3.2.9: - version "3.3.1" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a" - integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== + version "3.3.2" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.2.tgz#adba1448a9841bec72b42c532ea23dbbedef1a27" + integrity sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA== flow-bin@0.184.0: version "0.184.0" @@ -6754,6 +6882,11 @@ format@^0.2.0: resolved "https://registry.yarnpkg.com/format/-/format-0.2.2.tgz#d6170107e9efdc4ed30c9dc39016df942b5cb58b" integrity sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww== +forwarded@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" + integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== + fraction.js@^4.3.7: version "4.3.7" resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.3.7.tgz#06ca0085157e42fda7f9e726e79fefc4068840f7" @@ -6766,7 +6899,7 @@ fragment-cache@^0.2.1: dependencies: map-cache "^0.2.2" -fresh@^0.5.2: +fresh@0.5.2, fresh@^0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== @@ -7191,7 +7324,7 @@ globals@^13.19.0, globals@^13.2.0: dependencies: type-fest "^0.20.2" -globalthis@^1.0.3, globalthis@^1.0.4: +globalthis@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236" integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ== @@ -7535,12 +7668,12 @@ hash-base@^3.0.0: safe-buffer "^5.2.0" hash-base@~3.0, hash-base@~3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" - integrity sha512-EeeoJKjTyt868liAlVmcv2ZsUfGHlE3Q+BICOXcZiwN3osr5Q/zFGYmTJpoIzuaSTAwndFy+GqhEwlU4L3j4Ow== + version "3.0.5" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.5.tgz#52480e285395cf7fba17dc4c9e47acdc7f248a8a" + integrity sha512-vXm0l45VbcHEVlTCzs8M+s0VeYsB2lnlAaThoLKGXr3bE/VWDOelNUnycUPEhKEaXARL2TEFjBOyUiM6+55KBg== dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" + inherits "^2.0.4" + safe-buffer "^5.2.1" hash.js@^1.0.0, hash.js@^1.0.3: version "1.1.7" @@ -7678,9 +7811,9 @@ hosted-git-info@^5.0.0: lru-cache "^7.5.1" hosted-git-info@^6.0.0, hosted-git-info@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-6.1.1.tgz#629442c7889a69c05de604d52996b74fe6f26d58" - integrity sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w== + version "6.1.3" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-6.1.3.tgz#2ee1a14a097a1236bddf8672c35b613c46c55946" + integrity sha512-HVJyzUrLIL1c0QmviVh5E8VGyUS7xCFPS6yydaVd1UegW+ibV/CohqTH9MkOLDp5o+rb82DMo77PTuc9F/8GKw== dependencies: lru-cache "^7.5.1" @@ -7730,6 +7863,17 @@ http-cache-semantics@^4.1.0, http-cache-semantics@^4.1.1: resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== +http-errors@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== + dependencies: + depd "2.0.0" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses "2.0.1" + toidentifier "1.0.1" + http-proxy-agent@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" @@ -7824,6 +7968,13 @@ hyphenate-style-name@^1.0.3: resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.1.0.tgz#1797bf50369588b47b72ca6d5e65374607cf4436" integrity sha512-WDC/ui2VVRrz3jOVi+XtjqkDjiVjTtFaAGiW37k6b+ohyQ5wYDOGkvCZa8+H0nx3gyvv0+BST9xuOgIyGQ00gw== +iconv-lite@0.4.24, iconv-lite@^0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + iconv-lite@0.6.3, iconv-lite@^0.6.2, iconv-lite@^0.6.3: version "0.6.3" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" @@ -7831,13 +7982,6 @@ iconv-lite@0.6.3, iconv-lite@^0.6.2, iconv-lite@^0.6.3: dependencies: safer-buffer ">= 2.1.2 < 3.0.0" -iconv-lite@^0.4.24: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - icss-utils@^5.0.0, icss-utils@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" @@ -7887,10 +8031,10 @@ immediate@~3.0.5: resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" integrity sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ== -immutable@^4.0.0: - version "4.3.7" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.7.tgz#c70145fc90d89fb02021e65c84eb0226e4e5a381" - integrity sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw== +immutable@^5.0.2: + version "5.0.3" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-5.0.3.tgz#aa037e2313ea7b5d400cd9298fa14e404c933db1" + integrity sha512-P8IdPQHq3lA1xVeBRi5VPqUm5HDgKnx0Ru51wZz5mjxHr5n3RWhjIpOFU7ybkUxfB+5IToy+OLaHYDBIWsv+uw== import-fresh@^3.2.1, import-fresh@^3.3.0: version "3.3.0" @@ -7931,7 +8075,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.0, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3, inherits@~2.0.4: +inherits@2, inherits@2.0.4, inherits@^2.0.0, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3, inherits@~2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -8035,6 +8179,11 @@ ip-address@^9.0.5: jsbn "1.1.0" sprintf-js "^1.1.3" +ipaddr.js@1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + is-absolute@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-1.0.0.tgz#395e1ae84b11f26ad1795e73c17378e48a301576" @@ -8226,12 +8375,12 @@ is-extglob@^2.1.0, is-extglob@^2.1.1: resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== -is-finalizationregistry@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz#c8749b65f17c133313e661b1289b95ad3dbd62e6" - integrity sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw== +is-finalizationregistry@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-finalizationregistry/-/is-finalizationregistry-1.1.0.tgz#d74a7d0c5f3578e34a20729e69202e578d495dc2" + integrity sha512-qfMdqbAQEwBw78ZyReKnlA8ezmPdb9BemzIIip/JkjaZUhitfXDkkr+3QTboW0JrSXT1QWyYShpvnNHGZ4c4yA== dependencies: - call-bind "^1.0.2" + call-bind "^1.0.7" is-fullwidth-code-point@^1.0.0: version "1.0.0" @@ -8621,7 +8770,7 @@ jake@^10.8.5: filelist "^1.0.4" minimatch "^3.1.2" -jiti@^1.21.0: +jiti@^1.21.6: version "1.21.6" resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.6.tgz#6c7f7398dd4b3142767f9a168af2f317a428d268" integrity sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w== @@ -9632,6 +9781,11 @@ mdurl@^1.0.0, mdurl@^1.0.1: resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" integrity sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g== +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== + meow@^8.0.0: version "8.1.2" resolved "https://registry.yarnpkg.com/meow/-/meow-8.1.2.tgz#bcbe45bda0ee1729d350c03cffc8395a36c4e897" @@ -9649,6 +9803,11 @@ meow@^8.0.0: type-fest "^0.18.0" yargs-parser "^20.2.3" +merge-descriptors@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.3.tgz#d80319a65f3c7935351e5cfdac8f9318504dbed5" + integrity sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ== + merge-stream@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" @@ -9659,6 +9818,11 @@ 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== +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== + micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" @@ -9678,7 +9842,7 @@ micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: snapdragon "^0.8.1" to-regex "^3.0.2" -micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5: +micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5, micromatch@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== @@ -9711,14 +9875,14 @@ mime-types@2.1.18: dependencies: mime-db "~1.33.0" -mime-types@^2.1.12: +mime-types@^2.1.12, mime-types@~2.1.24, mime-types@~2.1.34: version "2.1.35" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== dependencies: mime-db "1.52.0" -mime@^1.3.4, mime@^1.4.1: +mime@1.6.0, mime@^1.3.4, mime@^1.4.1: version "1.6.0" resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== @@ -10133,6 +10297,11 @@ needle@^3.1.0: iconv-lite "^0.6.3" sax "^1.2.4" +negotiator@0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + negotiator@^0.6.3: version "0.6.4" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.4.tgz#777948e2452651c570b712dd01c23e262713fff7" @@ -10594,7 +10763,7 @@ object-hash@^3.0.0: resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-3.0.0.tgz#73f97f753e7baffc0e2cc9d6e079079744ac82e9" integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw== -object-inspect@^1.13.1: +object-inspect@^1.13.1, object-inspect@^1.13.3: version "1.13.3" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.3.tgz#f14c183de51130243d6d18ae149375ff50ea488a" integrity sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA== @@ -10699,6 +10868,13 @@ object.values@^1.1.6, object.values@^1.2.0: define-properties "^1.2.1" es-object-atoms "^1.0.0" +on-finished@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" + integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== + dependencies: + ee-first "1.1.1" + on-finished@~2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" @@ -11224,6 +11400,11 @@ path-scurry@^1.11.1, path-scurry@^1.6.1: lru-cache "^10.2.0" minipass "^5.0.0 || ^6.0.2 || ^7.0.0" +path-to-regexp@0.1.10: + version "0.1.10" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.10.tgz#67e9108c5c0551b9e5326064387de4763c4d5f8b" + integrity sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w== + path-to-regexp@3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-3.3.0.tgz#f7f31d32e8518c2660862b644414b6d5c63a611b" @@ -11441,7 +11622,7 @@ postcss-js@^4.0.1: dependencies: camelcase-css "^2.0.1" -postcss-load-config@^4.0.1: +postcss-load-config@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-4.0.2.tgz#7159dcf626118d33e299f485d6afe4aff7c4a3e3" integrity sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ== @@ -11542,7 +11723,7 @@ postcss-modules@^6.0.0: postcss-modules-values "^4.0.0" string-hash "^1.1.3" -postcss-nested@^6.0.1: +postcss-nested@^6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-6.2.0.tgz#4c2d22ab5f20b9cb61e2c5c5915950784d068131" integrity sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ== @@ -11634,7 +11815,7 @@ postcss-reduce-transforms@^7.0.0: dependencies: postcss-value-parser "^4.2.0" -postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.1.1, postcss-selector-parser@^6.1.2: +postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.1.1, postcss-selector-parser@^6.1.2: version "6.1.2" resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz#27ecb41fb0e3b6ba7a1ec84fff347f734c7929de" integrity sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg== @@ -11670,7 +11851,7 @@ postcss-value-parser@^4.0.0, postcss-value-parser@^4.1.0, postcss-value-parser@^ resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== -postcss@^8.1.10, postcss@^8.4.23, postcss@^8.4.5: +postcss@^8.1.10, postcss@^8.4.47, postcss@^8.4.5: version "8.4.49" resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.49.tgz#4ea479048ab059ab3ae61d082190fabfd994fe19" integrity sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA== @@ -11746,9 +11927,9 @@ posthtml@^0.16.4, posthtml@^0.16.5, posthtml@^0.16.6: posthtml-render "^3.0.0" preact@^10.5.9: - version "10.24.3" - resolved "https://registry.yarnpkg.com/preact/-/preact-10.24.3.tgz#086386bd47071e3b45410ef20844c21e23828f64" - integrity sha512-Z2dPnBnMUfyQfSQ+GBdsGa16hz35YmLmtTLhM169uW944hYL6xzTYkJjC07j+Wosz733pMWx0fgON3JNw1jJQA== + version "10.25.0" + resolved "https://registry.yarnpkg.com/preact/-/preact-10.25.0.tgz#22a1c93ce97336c5d01d74f363433ab0cd5cde64" + integrity sha512-6bYnzlLxXV3OSpUxLdaxBmE7PMOu0aR3pG6lryK/0jmvcDFPlcXGQAt5DpK3RITWiDrfYZRI0druyaK/S9kYLg== prelude-ls@^1.2.1: version "1.2.1" @@ -11862,6 +12043,14 @@ protocols@^2.0.0, protocols@^2.0.1: resolved "https://registry.yarnpkg.com/protocols/-/protocols-2.0.1.tgz#8f155da3fc0f32644e83c5782c8e8212ccf70a86" integrity sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q== +proxy-addr@~2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" + integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== + dependencies: + forwarded "0.2.0" + ipaddr.js "1.9.1" + proxy-from-env@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" @@ -12034,13 +12223,20 @@ q@^1.5.1: resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" integrity sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw== -qs@^6.12.3: +qs@6.13.0: version "6.13.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.13.0.tgz#6ca3bd58439f7e245655798997787b0d88a51906" integrity sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg== dependencies: side-channel "^1.0.6" +qs@^6.12.3: + version "6.13.1" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.13.1.tgz#3ce5fc72bd3a8171b85c99b93c65dd20b7d1b16e" + integrity sha512-EJPeIn0CYrGu+hli1xilKAPXODtJ12T0sP63Ijx2/khC2JtuaN3JyNIpvmnkmaEtha9ocbG4A4cMcr+TvqvwQg== + dependencies: + side-channel "^1.0.6" + querystring-es3@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" @@ -12081,14 +12277,20 @@ range-parser@1.2.0: resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" integrity sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A== -react-dom@^17.0.2: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.2.tgz#ecffb6845e3ad8dbfcdc498f0d0a939736502c23" - integrity sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA== +range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.5.2: + version "2.5.2" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" + integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - scheduler "^0.20.2" + bytes "3.1.2" + http-errors "2.0.0" + iconv-lite "0.4.24" + unpipe "1.0.0" react-dom@^18.2.0: version "18.3.1" @@ -12098,6 +12300,13 @@ react-dom@^18.2.0: loose-envify "^1.1.0" scheduler "^0.23.2" +react-dom@^19: + version "19.0.0" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-19.0.0.tgz#43446f1f01c65a4cd7f7588083e686a6726cfb57" + integrity sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ== + dependencies: + scheduler "^0.25.0" + react-error-overlay@6.0.9: version "6.0.9" resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.9.tgz#3c743010c9359608c375ecd6bc76f35d93995b0a" @@ -12113,16 +12322,21 @@ react-is@^18.0.0: resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.3.1.tgz#e83557dc12eae63a99e003a46388b1dcbb44db7e" integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg== -"react-refresh@>=0.9 <=0.14": - version "0.14.2" - resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.14.2.tgz#3833da01ce32da470f1f936b9d477da5c7028bf9" - integrity sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA== +"react-refresh@>=0.9 <=0.16": + version "0.16.0" + resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.16.0.tgz#e7d45625f05c9709466d09348a25d22f79b2ad23" + integrity sha512-FPvF2XxTSikpJxcr+bHut2H4gJ17+18Uy20D5/F+SKzFap62R3cM5wH6b8WN3LyGSYeQilLEcJcR1fjBSI2S1A== react-resizable-panels@^0.0.61: version "0.0.61" resolved "https://registry.yarnpkg.com/react-resizable-panels/-/react-resizable-panels-0.0.61.tgz#2260ec8ca591431d367d172bced49733cc3308aa" integrity sha512-Vk2a4LEHWkI6hGPnPmXxa/2twLYMAMMUTyA2PtR1ijvH2Nkg/AhGqrPsIi/eI85uVWtYCFNZKEsbR3uGuJl/yg== +react-server-dom-parcel@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/react-server-dom-parcel/-/react-server-dom-parcel-0.0.1.tgz#2653c2b39a857fbd17770d27d6f08bd139803f09" + integrity sha512-f93wv8gycm4ltcQRqpSlgYyT6cJxmjJdRmXw3deQoXowDlP44W4RRzwHQ70u1xseCpHFIORmuHVXk7+Fk8RFtQ== + react-universal-interface@^0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/react-universal-interface/-/react-universal-interface-0.6.2.tgz#5e8d438a01729a4dbbcbeeceb0b86be146fe2b3b" @@ -12148,14 +12362,6 @@ react-use@^17.4.0: ts-easing "^0.2.0" tslib "^2.1.0" -react@^17.0.2: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037" - integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - react@^18.2.0: version "18.3.1" resolved "https://registry.yarnpkg.com/react/-/react-18.3.1.tgz#49ab892009c53933625bd16b2533fc754cab2891" @@ -12163,6 +12369,11 @@ react@^18.2.0: dependencies: loose-envify "^1.1.0" +react@^19: + version "19.0.0" + resolved "https://registry.yarnpkg.com/react/-/react-19.0.0.tgz#6e1969251b9f108870aa4bff37a0ce9ddfaaabdd" + integrity sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ== + read-cache@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774" @@ -12377,18 +12588,18 @@ redent@^3.0.0: indent-string "^4.0.0" strip-indent "^3.0.0" -reflect.getprototypeof@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz#3ab04c32a8390b770712b7a8633972702d278859" - integrity sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg== +reflect.getprototypeof@^1.0.4, reflect.getprototypeof@^1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.7.tgz#04311b33a1b713ca5eb7b5aed9950a86481858e5" + integrity sha512-bMvFGIUKlc/eSfXNX+aZ+EL95/EgZzuwA0OBPTbZZDEJw/0AkentjMuM1oiRfwHrshqk4RzdgiTg5CcDalXN5g== dependencies: call-bind "^1.0.7" define-properties "^1.2.1" - es-abstract "^1.23.1" + es-abstract "^1.23.5" es-errors "^1.3.0" get-intrinsic "^1.2.4" - globalthis "^1.0.3" - which-builtin-type "^1.1.3" + gopd "^1.0.1" + which-builtin-type "^1.1.4" regenerate-unicode-properties@^10.2.0: version "10.2.0" @@ -12422,7 +12633,7 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" -regexp.prototype.flags@^1.5.2: +regexp.prototype.flags@^1.5.2, regexp.prototype.flags@^1.5.3: version "1.5.3" resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz#b3ae40b1d2499b8350ab2c3fe6ef3845d3a96f42" integrity sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ== @@ -12433,14 +12644,14 @@ regexp.prototype.flags@^1.5.2: set-function-name "^2.0.2" regexpu-core@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-6.1.1.tgz#b469b245594cb2d088ceebc6369dceb8c00becac" - integrity sha512-k67Nb9jvwJcJmVpw0jPttR1/zVfnKf8Km0IPatrU/zJ5XeG3+Slx0xLXs9HByJSzXzrlz5EDvN6yLNMDc2qdnw== + version "6.2.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-6.2.0.tgz#0e5190d79e542bf294955dccabae04d3c7d53826" + integrity sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA== dependencies: regenerate "^1.4.2" regenerate-unicode-properties "^10.2.0" regjsgen "^0.8.0" - regjsparser "^0.11.0" + regjsparser "^0.12.0" unicode-match-property-ecmascript "^2.0.0" unicode-match-property-value-ecmascript "^2.1.0" @@ -12449,10 +12660,10 @@ regjsgen@^0.8.0: resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.8.0.tgz#df23ff26e0c5b300a6470cad160a9d090c3a37ab" integrity sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q== -regjsparser@^0.11.0: - version "0.11.2" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.11.2.tgz#7404ad42be00226d72bcf1f003f1f441861913d8" - integrity sha512-3OGZZ4HoLJkkAZx/48mTXJNlmqTGOzc0o9OWQPuWpkOlXXPbyN6OafCcoXUnBqE2D3f/T5L+pWc1kdEmnfnRsA== +regjsparser@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.12.0.tgz#0e846df6c6530586429377de56e0475583b088dc" + integrity sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ== dependencies: jsesc "~3.0.2" @@ -12617,7 +12828,7 @@ resolve@^0.6.1: resolved "https://registry.yarnpkg.com/resolve/-/resolve-0.6.3.tgz#dd957982e7e736debdf53b58a4dd91754575dd46" integrity sha512-UHBY3viPlJKf85YijDUcikKX6tmF4SokIDp518ZDVT92JNDcG5uKIthaT/owt3Sar0lwtOafsQuwrg22/v2Dwg== -resolve@^1.0.0, resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.12.0, resolve@^1.14.2, resolve@^1.15.1, resolve@^1.19.0, resolve@^1.22.2, resolve@^1.22.4, resolve@^1.3.2, resolve@^1.4.0: +resolve@^1.0.0, resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.12.0, resolve@^1.14.2, resolve@^1.15.1, resolve@^1.19.0, resolve@^1.22.4, resolve@^1.22.8, resolve@^1.3.2, resolve@^1.4.0: version "1.22.8" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== @@ -12711,6 +12922,11 @@ rrweb-cssom@^0.7.1: resolved "https://registry.yarnpkg.com/rrweb-cssom/-/rrweb-cssom-0.7.1.tgz#c73451a484b86dd7cfb1e0b2898df4b703183e4b" integrity sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg== +rsc-html-stream@^0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/rsc-html-stream/-/rsc-html-stream-0.0.4.tgz#0ae70518eeac305852533b9ad60aefacce72ed95" + integrity sha512-1isiXIrlTI/vRLTvS3O4fMrO9qIHje1FSphufrIV5QfzHUgBDCZFwP9b8+rH63nbhxtcKTqfyziwM+2khfX0Uw== + rtl-css-js@^1.16.1: version "1.16.1" resolved "https://registry.yarnpkg.com/rtl-css-js/-/rtl-css-js-1.16.1.tgz#4b48b4354b0ff917a30488d95100fbf7219a3e80" @@ -12747,7 +12963,7 @@ safe-array-concat@^1.1.2: has-symbols "^1.0.3" isarray "^2.0.5" -safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@^5.2.1, safe-buffer@~5.2.0: +safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@^5.2.1, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== @@ -12779,12 +12995,12 @@ safe-regex@^1.1.0: integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== sass@^1.38.0: - version "1.80.6" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.80.6.tgz#5d0aa55763984effe41e40019c9571ab73e6851f" - integrity sha512-ccZgdHNiBF1NHBsWvacvT5rju3y1d/Eu+8Ex6c21nHp2lZGLBEtuwc415QfiI1PJa1TpCo3iXwwSRjRpn2Ckjg== + version "1.81.0" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.81.0.tgz#a9010c0599867909dfdbad057e4a6fbdd5eec941" + integrity sha512-Q4fOxRfhmv3sqCLoGfvrC9pRV8btc0UtqL9mN6Yrv6Qi9ScL55CVH1vlPP863ISLEEMNLLuu9P+enCeGHlnzhA== dependencies: chokidar "^4.0.0" - immutable "^4.0.0" + immutable "^5.0.2" source-map-js ">=0.6.2 <2.0.0" optionalDependencies: "@parcel/watcher" "^2.4.1" @@ -12806,14 +13022,6 @@ saxes@^6.0.0: dependencies: xmlchars "^2.2.0" -scheduler@^0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91" - integrity sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - scheduler@^0.23.2: version "0.23.2" resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.2.tgz#414ba64a3b282892e944cf2108ecc078d115cdc3" @@ -12821,6 +13029,11 @@ scheduler@^0.23.2: dependencies: loose-envify "^1.1.0" +scheduler@^0.25.0: + version "0.25.0" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.25.0.tgz#336cd9768e8cceebf52d3c80e3dcf5de23e7e015" + integrity sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA== + screenfull@^5.1.0: version "5.2.0" resolved "https://registry.yarnpkg.com/screenfull/-/screenfull-5.2.0.tgz#6533d524d30621fc1283b9692146f3f13a93d1ba" @@ -12867,6 +13080,25 @@ semver@^7.0.0, semver@^7.1.1, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semve resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== +send@0.19.0: + version "0.19.0" + resolved "https://registry.yarnpkg.com/send/-/send-0.19.0.tgz#bbc5a388c8ea6c048967049dbeac0e4a3f09d7f8" + integrity sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw== + dependencies: + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "2.0.0" + mime "1.6.0" + ms "2.1.3" + on-finished "2.4.1" + range-parser "~1.2.1" + statuses "2.0.1" + serialize-javascript@5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-5.0.1.tgz#7886ec848049a462467a97d3d918ebb2aaf934f4" @@ -12887,6 +13119,16 @@ serve-handler@^6.0.0: path-to-regexp "3.3.0" range-parser "1.2.0" +serve-static@1.16.2: + version "1.16.2" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.16.2.tgz#b6a5343da47f6bdd2673848bf45754941e803296" + integrity sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw== + dependencies: + encodeurl "~2.0.0" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.19.0" + set-blocking@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" @@ -12934,6 +13176,11 @@ setimmediate@^1.0.4, setimmediate@^1.0.5, setimmediate@~1.0.4: resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + sha.js@^2.4.0, sha.js@^2.4.8: version "2.4.11" resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" @@ -13369,6 +13616,11 @@ static-extend@^0.1.1: define-property "^0.2.5" object-copy "^0.1.0" +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + statuses@~1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" @@ -13650,7 +13902,7 @@ stylus@^0.63.0: sax "~1.3.0" source-map "^0.7.3" -sucrase@^3.32.0: +sucrase@^3.35.0: version "3.35.0" resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.35.0.tgz#57f17a3d7e19b36d8995f06679d121be914ae263" integrity sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA== @@ -13752,32 +14004,32 @@ table@^6.8.1: strip-ansi "^6.0.1" tailwindcss@^3.0.2: - version "3.4.14" - resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.4.14.tgz#6dd23a7f54ec197b19159e91e3bb1e55e7aa73ac" - integrity sha512-IcSvOcTRcUtQQ7ILQL5quRDg7Xs93PdJEk1ZLbhhvJc7uj/OAhYOnruEiwnGgBvUtaUAJ8/mhSw1o8L2jCiENA== + version "3.4.15" + resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.4.15.tgz#04808bf4bf1424b105047d19e7d4bfab368044a9" + integrity sha512-r4MeXnfBmSOuKUWmXe6h2CcyfzJCEk4F0pptO5jlnYSIViUkVmsawj80N5h2lO3gwcmSb4n3PuN+e+GC1Guylw== dependencies: "@alloc/quick-lru" "^5.2.0" arg "^5.0.2" - chokidar "^3.5.3" + chokidar "^3.6.0" didyoumean "^1.2.2" dlv "^1.1.3" - fast-glob "^3.3.0" + fast-glob "^3.3.2" glob-parent "^6.0.2" is-glob "^4.0.3" - jiti "^1.21.0" + jiti "^1.21.6" lilconfig "^2.1.0" - micromatch "^4.0.5" + micromatch "^4.0.8" normalize-path "^3.0.0" object-hash "^3.0.0" - picocolors "^1.0.0" - postcss "^8.4.23" + picocolors "^1.1.1" + postcss "^8.4.47" postcss-import "^15.1.0" postcss-js "^4.0.1" - postcss-load-config "^4.0.1" - postcss-nested "^6.0.1" - postcss-selector-parser "^6.0.11" - resolve "^1.22.2" - sucrase "^3.32.0" + postcss-load-config "^4.0.2" + postcss-nested "^6.2.0" + postcss-selector-parser "^6.1.2" + resolve "^1.22.8" + sucrase "^3.35.0" tar-stream@~2.2.0: version "2.2.0" @@ -13969,17 +14221,17 @@ timsort@^0.3.0: resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" integrity sha512-qsdtZH+vMoCARQtyod4imc2nIJwg9Cc7lPRrw9CzF8ZKR0khdr8+2nX80PBhET3tcyTtJDxAffGh2rXH4tyU8A== -tldts-core@^6.1.60: - version "6.1.60" - resolved "https://registry.yarnpkg.com/tldts-core/-/tldts-core-6.1.60.tgz#b3f0a2106e575e972bfca98880758c85c7557d02" - integrity sha512-XHjoxak8SFQnHnmYHb3PcnW5TZ+9ErLZemZei3azuIRhQLw4IExsVbL3VZJdHcLeNaXq6NqawgpDPpjBOg4B5g== +tldts-core@^6.1.64: + version "6.1.64" + resolved "https://registry.yarnpkg.com/tldts-core/-/tldts-core-6.1.64.tgz#0b017a7fefb92d8542b1078c793c00cc28ad9eac" + integrity sha512-uqnl8vGV16KsyflHOzqrYjjArjfXaU6rMPXYy2/ZWoRKCkXtghgB4VwTDXUG+t0OTGeSewNAG31/x1gCTfLt+Q== tldts@^6.1.32: - version "6.1.60" - resolved "https://registry.yarnpkg.com/tldts/-/tldts-6.1.60.tgz#5011770e6946fd2edec582ab4686247c66c97e8a" - integrity sha512-TYVHm7G9NCnhgqOsFalbX6MG1Po5F4efF+tLfoeiOGQq48Oqgwcgz8upY2R1BHWa4aDrj28RYx0dkYJ63qCFMg== + version "6.1.64" + resolved "https://registry.yarnpkg.com/tldts/-/tldts-6.1.64.tgz#bfeaa17f881944c943f1f6647494af418901d73f" + integrity sha512-ph4AE5BXWIOsSy9stpoeo7bYe/Cy7VfpciIH4RhVZUPItCJmhqWCN0EVzxd8BOHiyNb42vuJc6NWTjJkg91Tuw== dependencies: - tldts-core "^6.1.60" + tldts-core "^6.1.64" tmp@0.0.29: version "0.0.29" @@ -14052,6 +14304,11 @@ toggle-selection@^1.0.6: resolved "https://registry.yarnpkg.com/toggle-selection/-/toggle-selection-1.0.6.tgz#6e45b1263f2017fa0acc7d89d78b15b8bf77da32" integrity sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ== +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + token-stream@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/token-stream/-/token-stream-1.0.0.tgz#cc200eab2613f4166d27ff9afc7ca56d49df6eb4" @@ -14228,6 +14485,14 @@ type-fest@^0.8.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== +type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + type@^2.7.2: version "2.7.3" resolved "https://registry.yarnpkg.com/type/-/type-2.7.3.tgz#436981652129285cc3ba94f392886c2637ea0486" @@ -14254,9 +14519,9 @@ typed-array-byte-length@^1.0.1: is-typed-array "^1.1.13" typed-array-byte-offset@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz#f9ec1acb9259f395093e4567eb3c28a580d02063" - integrity sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA== + version "1.0.3" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.3.tgz#3fa9f22567700cc86aaf86a1e7176f74b59600f2" + integrity sha512-GsvTyUHTriq6o/bHcTd0vM7OQ9JEdlvluu9YISaA7+KzDzPaIzEeDFNkTfhdE3MYcNhNi0vq/LlegYgIs5yPAw== dependencies: available-typed-arrays "^1.0.7" call-bind "^1.0.7" @@ -14264,18 +14529,19 @@ typed-array-byte-offset@^1.0.2: gopd "^1.0.1" has-proto "^1.0.3" is-typed-array "^1.1.13" + reflect.getprototypeof "^1.0.6" typed-array-length@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.6.tgz#57155207c76e64a3457482dfdc1c9d1d3c4c73a3" - integrity sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g== + version "1.0.7" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.7.tgz#ee4deff984b64be1e118b0de8c9c877d5ce73d3d" + integrity sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg== dependencies: call-bind "^1.0.7" for-each "^0.3.3" gopd "^1.0.1" - has-proto "^1.0.3" is-typed-array "^1.1.13" possible-typed-array-names "^1.0.0" + reflect.getprototypeof "^1.0.6" typed-rest-client@1.2.0: version "1.2.0" @@ -14291,9 +14557,9 @@ typedarray@^0.0.6: integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== typescript@>=3.0.0: - version "5.6.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.6.3.tgz#5f3449e31c9d94febb17de03cc081dd56d81db5b" - integrity sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw== + version "5.7.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.7.2.tgz#3169cf8c4c8a828cde53ba9ecb3d2b1d5dd67be6" + integrity sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg== "typescript@^3 || ^4": version "4.9.5" @@ -14357,9 +14623,9 @@ undici-types@~6.19.8: integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw== undici@^6.19.5: - version "6.20.1" - resolved "https://registry.yarnpkg.com/undici/-/undici-6.20.1.tgz#fbb87b1e2b69d963ff2d5410a40ffb4c9e81b621" - integrity sha512-AjQF1QsmqfJys+LXfGTNum+qw4S88CojRInG/6t31W/1fk6G59s92bnAvGz5Cmur+kQv2SURXEvvudLmbrE8QA== + version "6.21.0" + resolved "https://registry.yarnpkg.com/undici/-/undici-6.21.0.tgz#4b3d3afaef984e07b48e7620c34ed8a285ed4cd4" + integrity sha512-BUgJXc752Kou3oOIuU1i+yZZypyZRqNPW0vqoMPl8VaoalSfeR0D8/t4iAS3yirs79SSMTxTag+ZC86uswv+Cw== unherit@^1.0.4: version "1.1.3" @@ -14532,7 +14798,7 @@ universalify@^2.0.0: resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== -unpipe@~1.0.0: +unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== @@ -14689,6 +14955,11 @@ value-or-function@^3.0.0: resolved "https://registry.yarnpkg.com/value-or-function/-/value-or-function-3.0.0.tgz#1c243a50b595c1be54a754bfece8563b9ff8d813" integrity sha512-jdBB2FrWvQC/pnPtIqcLsMaQgjhdb6B7tk1MMyTKapox+tQZbdRP4uLxu/JY0t7fbfDCUMnuelzEYv5GsxHhdg== +vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== + vfile-location@^3.0.0, vfile-location@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-3.2.0.tgz#d8e41fbcbd406063669ebf6c33d56ae8721d0f3c" @@ -14961,16 +15232,17 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" -which-builtin-type@^1.1.3: - version "1.1.4" - resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.1.4.tgz#592796260602fc3514a1b5ee7fa29319b72380c3" - integrity sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w== +which-builtin-type@^1.1.4: + version "1.2.0" + resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.2.0.tgz#58042ac9602d78a6d117c7e811349df1268ba63c" + integrity sha512-I+qLGQ/vucCby4tf5HsLmGueEla4ZhwTBSqaooS+Y0BuxN4Cp+okmGuV+8mXZ84KDI9BA+oklo+RzKg0ONdSUA== dependencies: + call-bind "^1.0.7" function.prototype.name "^1.1.6" has-tostringtag "^1.0.2" is-async-function "^2.0.0" is-date-object "^1.0.5" - is-finalizationregistry "^1.0.2" + is-finalizationregistry "^1.1.0" is-generator-function "^1.0.10" is-regex "^1.1.4" is-weakref "^1.0.2" @@ -15207,9 +15479,9 @@ yaml@^1.10.0: integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== yaml@^2.2.2, yaml@^2.3.4: - version "2.6.0" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.6.0.tgz#14059ad9d0b1680d0f04d3a60fe00f3a857303c3" - integrity sha512-a6ae//JvKDEra2kdi1qzCyrJW/WZCgFi8ydDV+eXExl95t+5R+ijnqHJbz9tmMh8FUjx3iv2fCQ4dclAQlO2UQ== + version "2.6.1" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.6.1.tgz#42f2b1ba89203f374609572d5349fb8686500773" + integrity sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg== yargs-parser@20.2.4: version "20.2.4"