From 8e82a6936fd88850ead2f16a9bf971e843839c7c Mon Sep 17 00:00:00 2001 From: Joel Chen Date: Thu, 10 Aug 2023 14:06:03 -0700 Subject: [PATCH 1/6] feat(node-resolve): pass original importee to secondary resolve --- packages/node-resolve/src/index.js | 2 +- .../test/snapshots/prefer-builtins.js.md | 1 - .../test/snapshots/prefer-builtins.js.snap | Bin 388 -> 356 bytes .../node-resolve/test/snapshots/test.mjs.md | 1 - .../node-resolve/test/snapshots/test.mjs.snap | Bin 867 -> 823 bytes packages/node-resolve/test/test.mjs | 18 ++++++++++++------ 6 files changed, 13 insertions(+), 9 deletions(-) diff --git a/packages/node-resolve/src/index.js b/packages/node-resolve/src/index.js index 559ae1516..462a6a907 100644 --- a/packages/node-resolve/src/index.js +++ b/packages/node-resolve/src/index.js @@ -301,7 +301,7 @@ export function nodeResolve(opts = {}) { // `moduleSideEffects` information. const resolvedResolved = await this.resolve(resolved.id, importer, { ...resolveOptions, - custom: { ...custom, 'node-resolve': { ...custom['node-resolve'], resolved } } + custom: { ...custom, 'node-resolve': { ...custom['node-resolve'], resolved, importee } } }); if (resolvedResolved) { // Handle plugins that manually make the result external diff --git a/packages/node-resolve/test/snapshots/prefer-builtins.js.md b/packages/node-resolve/test/snapshots/prefer-builtins.js.md index e7555b12c..5c7fcbdce 100644 --- a/packages/node-resolve/test/snapshots/prefer-builtins.js.md +++ b/packages/node-resolve/test/snapshots/prefer-builtins.js.md @@ -15,6 +15,5 @@ Generated by [AVA](https://avajs.dev). names: [ 'prefer-builtin', ], - toString: Function {}, }, ] diff --git a/packages/node-resolve/test/snapshots/prefer-builtins.js.snap b/packages/node-resolve/test/snapshots/prefer-builtins.js.snap index d6da3e281c2b09e9da94589fe3c36116546af784..2c81c55fc998a23313955fb02b23f97c9dc72bcc 100644 GIT binary patch literal 356 zcmV-q0h|6oRzVDbp`EAPfzFyNr3QW2JZpWo7V?DKm$8Ozj<_2QFFWF)^2CnPl^NtwRuU1_2ow!L=h=qFk^A zwPRb)toESUg~nx`(;T33uImce761Zv04}PgdTi^f)rZwr)!e)vzp!thwzi(<3D_0j z2yiV^+b>qrYjV|3x$uDj1vj4_a;oe)c0K3{ob9ni{InDDlDN zh%)LpCTOCGmn)1L$tEUN*31`S$SfPcSDDmEwxABB z6X(yJ?L)NiUl-6OZ)grJ* zphCcROz8m11iUs>0u^GBGFN3%1*N2;a?;lu8&=@vav&VNRQ8SAnWs+htu`?RP zsT^O>&O~E``gEm0=ZruT;K&VEG<%s$CNE!Yl!+IAGyVY*#k`9B0RRBVx2L%P diff --git a/packages/node-resolve/test/snapshots/test.mjs.md b/packages/node-resolve/test/snapshots/test.mjs.md index f9eda1d17..7eccb2357 100644 --- a/packages/node-resolve/test/snapshots/test.mjs.md +++ b/packages/node-resolve/test/snapshots/test.mjs.md @@ -19,7 +19,6 @@ Generated by [AVA](https://avajs.dev). code: 'PLUGIN_WARNING', message: 'node-resolve: The `customResolveOptions.moduleDirectory` option has been deprecated. Use `moduleDirectories`, which must be an array.', plugin: 'node-resolve', - toString: Function {}, }, ] diff --git a/packages/node-resolve/test/snapshots/test.mjs.snap b/packages/node-resolve/test/snapshots/test.mjs.snap index 84b2de596e380c8c7ce0eb6ed1b510b03acfc6fb..84c150452384f0b6ee8303f0be5c734a9d30e0a6 100644 GIT binary patch literal 823 zcmV-71IYYARzVEbKoG~h=?n2nD>!f*<;0;45<)_PR?rt!BxtKbRXCB2 zy@|J3d(G~;X^tE?^98t+FT+D1gv2-Ci!gTL^pP6u60420+I4nj_n+U)ICIc!2x+(V z`;W|UBiR0J<0{$Fz?6~-coT4&3g8ZK4Zbv>n3iIXIb8cR(5^K4?SbP^Ltie9SyNW@ zArsaNxwkAs;T&~=O7%`t$_g}<^q>;@$x(Ch9o1c3NmOi7AtDuas14eB(g_7y;fmQt zD$X=?xN$+S7PY&5qpjXy8-d}{*VW@L-66HFh&PaXiIiq>zKi1qnVcaLi%QWhA<3#- zE?eZXMTkYN5Hg=Qjkj@rgX05^CDM1E+-U6Louo8aPESu;c!F+;{} z>9FMC`sUN^wc7gYoyD#7+WOiF(O7C`H?_3|?19;&wsAu6&2N`dGOEokY z^TA;O?oq>>Dr{>!W(anD7CJ7sUGVS%bOP!Fjkr`#sGJN$*y4Wjc=f2pB(kf=@~eqM zF;8L=oE}EhrkUDf&%2)Bep~nD4=3O6K{RiX(tVs4;%H(NCRU@XdV!6XabV+B5*d;c z_vxrlYOVK51}n&KF%?nkiLb&A!|yvlMTd4Zgh<_B0F@LX44^)IPTwzKIG>MUgK8{S zm5T05f#`_HLawhc9ayaiT^WMU@HZNl>sbf{Lnk!A6h=d?b;!;ND4=#5C0}4beT5?f z^e7)7wr`lPqh%_iZ$&baSr{FP92usye3-azi_l@qQn6?8OEewVuOe}EvfvsPJ2Gqw z`LHQQohMwR*WcG7VR>0#B@#!5=wZ&x(tic?xky0mOxdJIisx}&Jc9-&mC^Si83oxG z9cjbPt<*$7v30)Cr4~yZ8KR{#H3OK=hNbsRKZ@j}aX( z(}Vn&(tCkVMH1T0N@#R{|0`!IxEjWX;=3^w)6XI?nH(jTDE)6>e*oHta4LNf002y% Bh4}yg literal 867 zcmV-p1DyOpRzVSAF60SO3c(A;cHm}6>G1r(g zTnxd9?;nc@00000000Bcmd$R{KoG~hY13AGG>PB!vw!;KYGfpgaOE!G}Nyi8tUy7&~#AHZ|DARvT&Mb#`X=@88VWbJVDF zVYbw}4^%VF>ERu1OVLr7N+~2}4GhbKV`gEdup=~5iyu7zi2YDnj$2Q(nN;gYh258ZwMmsK3F)W_=&dMY+MWSS%Xox`DXa5cS~90;pxgc?r5?ViHP119g=lQ(1`vknv3ep&8!#ko3&^Cia{(Ss zQF%ajx^2#!mg+zMXa@ftq{J%e^Y=PuU45+U#H9(J&0iuVR zI?A6$GWwP!BN2zuvB=agttZ389Fuz%T^5o)4c@}hxPE1cs}l#;sMyr7EhNJxDY4cV zkFLM3S;A_^ffY(j4bj7dnWg>;=yR5UTCuW8rHbcqQapnWDU#9mEE&1+7!CDt7glQA zCD4Cg>QW0NriN(gT+INav!>BK(~m4U$pkGyPv=E727aLaLF(cggJY4YVVX;hDY_T< tlqI44xP;RC{I8s=;HnTG0`JC1Oh2>4q!W}}sPw;q{Q=vSZ8^db004SVp7{U( diff --git a/packages/node-resolve/test/test.mjs b/packages/node-resolve/test/test.mjs index ff6fbb8b2..4c31da465 100755 --- a/packages/node-resolve/test/test.mjs +++ b/packages/node-resolve/test/test.mjs @@ -538,7 +538,7 @@ test('marks a module as external if the resolved version is external', async (t) }); }); -test('passes on "isEntry" flag', async (t) => { +test('passes on "isEntry" flag and original importee', async (t) => { const resolveOptions = []; await rollup({ input: 'entry/main.js', @@ -561,6 +561,7 @@ test('passes on "isEntry" flag', async (t) => { } ] }); + t.deepEqual(resolveOptions, [ ['other.js', 'main.js', { assertions: {}, custom: {}, isEntry: true }], ['main.js', void 0, { assertions: {}, custom: {}, isEntry: true }], @@ -574,7 +575,8 @@ test('passes on "isEntry" flag', async (t) => { resolved: { id: join(DIRNAME, 'fixtures', 'entry', 'other.js'), moduleSideEffects: null - } + }, + importee: './other.js' } }, isEntry: true @@ -590,7 +592,8 @@ test('passes on "isEntry" flag', async (t) => { resolved: { id: join(DIRNAME, 'fixtures', 'entry', 'main.js'), moduleSideEffects: null - } + }, + importee: 'entry/main.js' } }, isEntry: true @@ -607,7 +610,8 @@ test('passes on "isEntry" flag', async (t) => { resolved: { id: join(DIRNAME, 'fixtures', 'entry', 'dep.js'), moduleSideEffects: null - } + }, + importee: './dep.js' } }, isEntry: false @@ -651,7 +655,8 @@ test('passes on custom options', async (t) => { resolved: { id: join(DIRNAME, 'fixtures', 'entry', 'main.js'), moduleSideEffects: null - } + }, + importee: 'entry/main.js', } }, isEntry: false @@ -668,7 +673,8 @@ test('passes on custom options', async (t) => { resolved: { id: join(DIRNAME, 'fixtures', 'entry', 'other.js'), moduleSideEffects: null - } + }, + importee: 'entry/other.js', } }, isEntry: true From 97bbed580952d031d41dae1e63137c87c62c2e8d Mon Sep 17 00:00:00 2001 From: Joel Chen Date: Fri, 11 Aug 2023 18:44:58 -0700 Subject: [PATCH 2/6] reverse snapshot updates --- .../test/snapshots/prefer-builtins.js.md | 1 + .../test/snapshots/prefer-builtins.js.snap | Bin 356 -> 388 bytes 2 files changed, 1 insertion(+) diff --git a/packages/node-resolve/test/snapshots/prefer-builtins.js.md b/packages/node-resolve/test/snapshots/prefer-builtins.js.md index 5c7fcbdce..e7555b12c 100644 --- a/packages/node-resolve/test/snapshots/prefer-builtins.js.md +++ b/packages/node-resolve/test/snapshots/prefer-builtins.js.md @@ -15,5 +15,6 @@ Generated by [AVA](https://avajs.dev). names: [ 'prefer-builtin', ], + toString: Function {}, }, ] diff --git a/packages/node-resolve/test/snapshots/prefer-builtins.js.snap b/packages/node-resolve/test/snapshots/prefer-builtins.js.snap index 2c81c55fc998a23313955fb02b23f97c9dc72bcc..d6da3e281c2b09e9da94589fe3c36116546af784 100644 GIT binary patch literal 388 zcmV-~0ek*IRzVqrYjV|3x$uDj1vj4_a;oe)c0K3{ob9ni{InDDlDN zh%)LpCTOCGmn)1L$tEUN*31`S$SfPcSDDmEwxABB z6X(yJ?L)NiUl-6OZ)grJ* zphCcROz8m11iUs>0u^GBGFN3%1*N2;a?;lu8&=@vav&VNRQ8SAnWs+htu`?RP zsT^O>&O~E``gEm0=ZruT;K&VEG<%s$CNE!Yl!+IAGyVY*#k`9B0RRBVx2L%P literal 356 zcmV-q0h|6oRzVDbp`EAPfzFyNr3QW2JZpWo7V?DKm$8Ozj<_2QFFWF)^2CnPl^NtwRuU1_2ow!L=h=qFk^A zwPRb)toESUg~nx`(;T33uImce761Zv04}PgdTi^f)rZwr)!e)vzp!thwzi(<3D_0j z2yiV^+b> Date: Fri, 11 Aug 2023 18:45:53 -0700 Subject: [PATCH 3/6] reverse test.mjs snapshot updates --- .../node-resolve/test/snapshots/test.mjs.md | 1 + .../node-resolve/test/snapshots/test.mjs.snap | Bin 823 -> 867 bytes 2 files changed, 1 insertion(+) diff --git a/packages/node-resolve/test/snapshots/test.mjs.md b/packages/node-resolve/test/snapshots/test.mjs.md index 7eccb2357..f9eda1d17 100644 --- a/packages/node-resolve/test/snapshots/test.mjs.md +++ b/packages/node-resolve/test/snapshots/test.mjs.md @@ -19,6 +19,7 @@ Generated by [AVA](https://avajs.dev). code: 'PLUGIN_WARNING', message: 'node-resolve: The `customResolveOptions.moduleDirectory` option has been deprecated. Use `moduleDirectories`, which must be an array.', plugin: 'node-resolve', + toString: Function {}, }, ] diff --git a/packages/node-resolve/test/snapshots/test.mjs.snap b/packages/node-resolve/test/snapshots/test.mjs.snap index 84c150452384f0b6ee8303f0be5c734a9d30e0a6..84b2de596e380c8c7ce0eb6ed1b510b03acfc6fb 100644 GIT binary patch literal 867 zcmV-p1DyOpRzVSAF60SO3c(A;cHm}6>G1r(g zTnxd9?;nc@00000000Bcmd$R{KoG~hY13AGG>PB!vw!;KYGfpgaOE!G}Nyi8tUy7&~#AHZ|DARvT&Mb#`X=@88VWbJVDF zVYbw}4^%VF>ERu1OVLr7N+~2}4GhbKV`gEdup=~5iyu7zi2YDnj$2Q(nN;gYh258ZwMmsK3F)W_=&dMY+MWSS%Xox`DXa5cS~90;pxgc?r5?ViHP119g=lQ(1`vknv3ep&8!#ko3&^Cia{(Ss zQF%ajx^2#!mg+zMXa@ftq{J%e^Y=PuU45+U#H9(J&0iuVR zI?A6$GWwP!BN2zuvB=agttZ389Fuz%T^5o)4c@}hxPE1cs}l#;sMyr7EhNJxDY4cV zkFLM3S;A_^ffY(j4bj7dnWg>;=yR5UTCuW8rHbcqQapnWDU#9mEE&1+7!CDt7glQA zCD4Cg>QW0NriN(gT+INav!>BK(~m4U$pkGyPv=E727aLaLF(cggJY4YVVX;hDY_T< tlqI44xP;RC{I8s=;HnTG0`JC1Oh2>4q!W}}sPw;q{Q=vSZ8^db004SVp7{U( literal 823 zcmV-71IYYARzVEbKoG~h=?n2nD>!f*<;0;45<)_PR?rt!BxtKbRXCB2 zy@|J3d(G~;X^tE?^98t+FT+D1gv2-Ci!gTL^pP6u60420+I4nj_n+U)ICIc!2x+(V z`;W|UBiR0J<0{$Fz?6~-coT4&3g8ZK4Zbv>n3iIXIb8cR(5^K4?SbP^Ltie9SyNW@ zArsaNxwkAs;T&~=O7%`t$_g}<^q>;@$x(Ch9o1c3NmOi7AtDuas14eB(g_7y;fmQt zD$X=?xN$+S7PY&5qpjXy8-d}{*VW@L-66HFh&PaXiIiq>zKi1qnVcaLi%QWhA<3#- zE?eZXMTkYN5Hg=Qjkj@rgX05^CDM1E+-U6Louo8aPESu;c!F+;{} z>9FMC`sUN^wc7gYoyD#7+WOiF(O7C`H?_3|?19;&wsAu6&2N`dGOEokY z^TA;O?oq>>Dr{>!W(anD7CJ7sUGVS%bOP!Fjkr`#sGJN$*y4Wjc=f2pB(kf=@~eqM zF;8L=oE}EhrkUDf&%2)Bep~nD4=3O6K{RiX(tVs4;%H(NCRU@XdV!6XabV+B5*d;c z_vxrlYOVK51}n&KF%?nkiLb&A!|yvlMTd4Zgh<_B0F@LX44^)IPTwzKIG>MUgK8{S zm5T05f#`_HLawhc9ayaiT^WMU@HZNl>sbf{Lnk!A6h=d?b;!;ND4=#5C0}4beT5?f z^e7)7wr`lPqh%_iZ$&baSr{FP92usye3-azi_l@qQn6?8OEewVuOe}EvfvsPJ2Gqw z`LHQQohMwR*WcG7VR>0#B@#!5=wZ&x(tic?xky0mOxdJIisx}&Jc9-&mC^Si83oxG z9cjbPt<*$7v30)Cr4~yZ8KR{#H3OK=hNbsRKZ@j}aX( z(}Vn&(tCkVMH1T0N@#R{|0`!IxEjWX;=3^w)6XI?nH(jTDE)6>e*oHta4LNf002y% Bh4}yg From 6d8447b3287554e29a65eb02e646ae19e0cd6360 Mon Sep 17 00:00:00 2001 From: Joel Chen Date: Sat, 12 Aug 2023 13:31:15 -0700 Subject: [PATCH 4/6] fix styles --- packages/node-resolve/test/test.mjs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/node-resolve/test/test.mjs b/packages/node-resolve/test/test.mjs index 4c31da465..dbe574347 100755 --- a/packages/node-resolve/test/test.mjs +++ b/packages/node-resolve/test/test.mjs @@ -561,7 +561,7 @@ test('passes on "isEntry" flag and original importee', async (t) => { } ] }); - + t.deepEqual(resolveOptions, [ ['other.js', 'main.js', { assertions: {}, custom: {}, isEntry: true }], ['main.js', void 0, { assertions: {}, custom: {}, isEntry: true }], @@ -656,7 +656,7 @@ test('passes on custom options', async (t) => { id: join(DIRNAME, 'fixtures', 'entry', 'main.js'), moduleSideEffects: null }, - importee: 'entry/main.js', + importee: 'entry/main.js' } }, isEntry: false @@ -674,7 +674,7 @@ test('passes on custom options', async (t) => { id: join(DIRNAME, 'fixtures', 'entry', 'other.js'), moduleSideEffects: null }, - importee: 'entry/other.js', + importee: 'entry/other.js' } }, isEntry: true From fd89677fd6ea1e3c03ba6690422f1739a2f4d6ab Mon Sep 17 00:00:00 2001 From: Joel Chen Date: Mon, 14 Aug 2023 07:07:03 -0700 Subject: [PATCH 5/6] update README --- packages/node-resolve/README.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/packages/node-resolve/README.md b/packages/node-resolve/README.md index 566d4fe71..4edab72df 100755 --- a/packages/node-resolve/README.md +++ b/packages/node-resolve/README.md @@ -234,6 +234,23 @@ this.resolve(importee, importer, { }); ``` +## Resolve Options + +After this plugin resolved an import id to its target file in `node_modules`, it will invoke `this.resolve` again with the resolved id. It will pass the following information in the resolve options: + +```js +this.resolve(resolved.id, importer, { + custom: { + 'node-resolve': { + resolved, // the object with information from node.js resolve + importee // the original import id + } + } +}); +``` + +Your plugin can use the `importee` information to map an original import to its resolved file in `node_modules`, in a plugin hook such as `resolveId`. + ## Meta [CONTRIBUTING](/.github/CONTRIBUTING.md) From e81b32e4987dfa045c73524add8a74c79e7700d4 Mon Sep 17 00:00:00 2001 From: Joel Chen Date: Mon, 14 Aug 2023 08:33:28 -0700 Subject: [PATCH 6/6] add info about moduleSideEffects in resolved object --- packages/node-resolve/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/node-resolve/README.md b/packages/node-resolve/README.md index 4edab72df..b4943a7eb 100755 --- a/packages/node-resolve/README.md +++ b/packages/node-resolve/README.md @@ -251,6 +251,8 @@ this.resolve(resolved.id, importer, { Your plugin can use the `importee` information to map an original import to its resolved file in `node_modules`, in a plugin hook such as `resolveId`. +The `resolved` object contains the resolved id, which is passed as the first parameter. It also has a property `moduleSideEffects`, which may contain the value from the npm `package.json` field `sideEffects` or `null`. + ## Meta [CONTRIBUTING](/.github/CONTRIBUTING.md)