From 7e7654de10b552a3486289f2e9e677546aafe464 Mon Sep 17 00:00:00 2001 From: Kris Kowal Date: Tue, 7 May 2024 17:15:12 -0700 Subject: [PATCH] fix(compartment-mapper): Take only first matching tag of package exports --- packages/compartment-mapper/NEWS.md | 6 +++ .../compartment-mapper/src/infer-exports.js | 2 + .../test/snapshots/infer-exports.test.js.md | 44 +++++++++--------- .../test/snapshots/infer-exports.test.js.snap | Bin 1215 -> 1257 bytes 4 files changed, 30 insertions(+), 22 deletions(-) diff --git a/packages/compartment-mapper/NEWS.md b/packages/compartment-mapper/NEWS.md index c043aaef61..e060bf8a4c 100644 --- a/packages/compartment-mapper/NEWS.md +++ b/packages/compartment-mapper/NEWS.md @@ -1,5 +1,11 @@ User-visible changes to the compartment mapper: +# Next release + +- Fixes incompatible behavior with Node.js package conditional exports #2276. + Previously, the last matching tag would override all prior matches, often + causing a bundle to adopt the `default` instead of a more specific condition. + # 0.9.0 (2023-08-07) - Introduces support for source map generation. diff --git a/packages/compartment-mapper/src/infer-exports.js b/packages/compartment-mapper/src/infer-exports.js index a41a908675..5b3a051223 100644 --- a/packages/compartment-mapper/src/infer-exports.js +++ b/packages/compartment-mapper/src/infer-exports.js @@ -83,6 +83,8 @@ function* interpretExports(name, exports, tags) { } } else if (tags.has(key)) { yield* interpretExports(name, value, tags); + // Take only the first matching tag. + break; } } } diff --git a/packages/compartment-mapper/test/snapshots/infer-exports.test.js.md b/packages/compartment-mapper/test/snapshots/infer-exports.test.js.md index a4e98fb4a0..66313752c5 100644 --- a/packages/compartment-mapper/test/snapshots/infer-exports.test.js.md +++ b/packages/compartment-mapper/test/snapshots/infer-exports.test.js.md @@ -24,7 +24,7 @@ Generated by [AVA](https://avajs.dev). { exports: { - '.': './underscore-umd.js', + '.': './underscore-node.mjs', './amd/*': './amd/*', './cjs/*': './cjs/*', './modules/*': './modules/*', @@ -42,7 +42,7 @@ Generated by [AVA](https://avajs.dev). { exports: { - '.': './dist/vue.runtime.esm-bundler.js', + '.': './index.mjs', './compiler-sfc': './compiler-sfc/index.mjs', './dist/*': './dist/*', './macros': './macros.d.ts', @@ -62,7 +62,7 @@ Generated by [AVA](https://avajs.dev). { exports: { - '.': './build/esm/index.js', + '.': './build/esm-debug/index.js', './dist/socket.io.js': './dist/socket.io.js', './dist/socket.io.js.map': './dist/socket.io.js.map', './package.json': './package.json', @@ -78,7 +78,7 @@ Generated by [AVA](https://avajs.dev). { exports: { - '.': './lib/index.js', + '.': './esm/index.mjs', './package.json': './package.json', }, types: {}, @@ -90,7 +90,7 @@ Generated by [AVA](https://avajs.dev). { exports: { - '.': './dist/index.exports.require.cjs.js', + '.': './dist/index.exports.import.es.mjs', './package.json': './package.json', }, types: { @@ -104,36 +104,36 @@ Generated by [AVA](https://avajs.dev). { exports: { - './_sha2': './_sha2.js', - './blake2b': './blake2b.js', + './_sha2': './esm/_sha2.js', + './blake2b': './esm/blake2b.js', './blake2b.d.ts': './blake2b.d.ts', - './blake2s': './blake2s.js', + './blake2s': './esm/blake2s.js', './blake2s.d.ts': './blake2s.d.ts', - './blake3': './blake3.js', + './blake3': './esm/blake3.js', './blake3.d.ts': './blake3.d.ts', - './crypto': './crypto.js', - './eskdf': './eskdf.js', + './crypto': './esm/crypto.js', + './eskdf': './esm/eskdf.js', './eskdf.d.ts': './eskdf.d.ts', - './hkdf': './hkdf.js', + './hkdf': './esm/hkdf.js', './hkdf.d.ts': './hkdf.d.ts', - './hmac': './hmac.js', + './hmac': './esm/hmac.js', './hmac.d.ts': './hmac.d.ts', - './index': './index.js', - './pbkdf2': './pbkdf2.js', + './index': './esm/index.js', + './pbkdf2': './esm/pbkdf2.js', './pbkdf2.d.ts': './pbkdf2.d.ts', - './ripemd160': './ripemd160.js', + './ripemd160': './esm/ripemd160.js', './ripemd160.d.ts': './ripemd160.d.ts', - './scrypt': './scrypt.js', + './scrypt': './esm/scrypt.js', './scrypt.d.ts': './scrypt.d.ts', - './sha256': './sha256.js', + './sha256': './esm/sha256.js', './sha256.d.ts': './sha256.d.ts', - './sha3': './sha3.js', - './sha3-addons': './sha3-addons.js', + './sha3': './esm/sha3.js', + './sha3-addons': './esm/sha3-addons.js', './sha3-addons.d.ts': './sha3-addons.d.ts', './sha3.d.ts': './sha3.d.ts', - './sha512': './sha512.js', + './sha512': './esm/sha512.js', './sha512.d.ts': './sha512.d.ts', - './utils': './utils.js', + './utils': './esm/utils.js', './utils.d.ts': './utils.d.ts', }, types: {}, diff --git a/packages/compartment-mapper/test/snapshots/infer-exports.test.js.snap b/packages/compartment-mapper/test/snapshots/infer-exports.test.js.snap index 913a7b6cd5c2b9fbece99921116267ed357e86e2..77917b55d005c2b923390c51ef9e86440c42dcd4 100644 GIT binary patch literal 1257 zcmV2RzV8a#-jXVA@RMNzulofxOIj>N)^J;k-# zq+I0$FdvHu00000000BUS4)T-MHv37=NUHp%5K!vNY;Q6SGzhpOJYzDUOb9;lAN?3 zH8Z`_kD;r3*#$uqM9^bU4_=HOJ>?V#2r(zgWyO<64<1DD;zhxPB>kH0uByp|jjMB+ z>FkomKWM1{_)o=c4Lq2o^gXdi*&X-4x^Z__rqxYwZ0dcu^SBZ#5J7I zcX?or`7n(62Ui@&jLl1A)IbO6hjdA!2jC)rw*ah=_A+U|X>Bt*CS>w+X=w>$9z+9K zAY=$&l{7$F%cN5Q#ptrtcUV;LURRLGU9!j6bsS&ZhUSHyJ6;x3zQ-iZ;hedkCQXR9Xv^*tQswGtD{F$O| zI|-vv62z|0()&}llECp;H02&uyzzKwk629IP`5po1+n6d_s7v3fG?E?pmh_#4*+fh zc!dBT&b~#j5#YPow`g;!;Gd+1mAIZ`q$PBil?;mVO9Eag>OLu3rP3;!5dOHrh5F`r zmi^y*`L0&BI@zR3E9YdbSf<51ee5LzH_*qSx7T+)PiI``L)YgD<(&LaXQitEt^xRE z)~s~+5owWD>ZZIMAEGa1h1cW?+o2amy^*4n-v2Uo-kv>nZW7?7M;SZM6q?VAS}cyb ze)>%rKXjRu@?Wcw<)cDMqCNws75@-|(DIluH2IJzB;R@dX!_J4sy?khOMn*$aESn) z65s{_{v^P28t}FTd~$zcxUK=eX~0?oc)bC{4dAN=u-^dgGyuH`yxRmmZvy*G;BFJ> zwE(LHeAWWKZvp?bfQxNl&<4I}1Gn11-|a^{W~b%(^Bq1kdzF5shb_b8tMnK(EYBRV zo>d}CxqpEw|FV>}^yNGSo<_r!H2eWHTuq}K4Z4MOOSoxrP$ro#{c9X`RHm?_y>T20 z6genUbW-!k=?m@1FxmTf;ayu#4HN>})EHK>&*#~P%H(soZ!LEfQ>6AyTTJbnwmNlc z5L1_!T$JqU5Q;KoTIf<^Y>k|LPbhf~D!W>kgsxUldHs<)X1=p|;arKG$XO=1Ote&q zs&PpMc}F}GjIg5|RPLxS2|KEw3W}lGJAXl>$UrqkZW1XDP+1^+Xl@AtNug=!w{+8S z!eEkq^&q6M$dM;%k+sz+Ombhd^$5D0V9KJM-xQUWgVT1En&hIDs4V>?c0DdgKf{#w TL2eQ5g9Gp$Yfm7;kP`p^oljdg literal 1215 zcmV;w1VH;iRzVd{A(buQpBwRV&g6zUv#P9fyn z9(HkcARmhe00000000BUSG{i>MHJsT=RQp0#Ksno1Qhd;0*9SV&T^EJj)H;@2>}(_ zk2&Ao&E76MyOA9zKokgCM3pK;LP8W#B%~l35EY^!q6!rfQh>hznndDv`*EJ#ndKrU z21`HL^LuaJn|<#$yU$k!4iDY2`0z89_z7n_Px+Gpi%qr@g>fR*2VuPa{D6mc;!n2C z)VI7a@WsTA#4t?6`&T^APV6_yc){oz(;w0!3w`{)0K5XMlFkb0yyT3Sn-DVlb9s5$ zAWH^m8RRG-LpZLH1%tF#NVmwG89tE=?PND%B1`ZM=j_%b1U=Gvju=Lt)Z7+y z=QswRR+)^@@~RZ`tNy4uZ3VF z%1%A5b}F5CEEaAUGqp#p69?0ytJ)rQe*}FKxC=ak2D}Jd0bb(r9k;(6M>Ruhn?n-hHX|2(@B1Fsnygkx5-DI0zPBM2%uL zRX2-E%Spu|mr$er`Hj=PTQy%nfzKpMs2`dx_Zb4IU%@{P=2~3VUW@kkpnm}V0=94! z-ktwuy$+Wf^WUt88m|F#;-o(JER?V)ydvGzqT;iHNj28lYTF;xxX{3k=GhSSNoSRITV(14#qnWk;baJ{5`Uddpyvb?*0~0FDeWytr z_tuuOz{k}ByCDzb{#aAV;D4Dx@6Mk=r}O89`OMO1FiwT0PRCKBrpQ50zUz*wqa1f20jA51?~W6I)?E&@G9np&rS94d#ox1 z7&j#$OqWfeH%;5~!iiiPiB)$!T(!%m(wNj9W@o8sZ^mg0wRNsv^##%NG*gpWsFGEs dohCjPlC-n6_KxS4+8y5`{{f=)eK=YZ006nPQ_}zd