Skip to content

Commit 630757e

Browse files
bgotinkmerceyz
authored andcommitted
feat(esbuild-plugin-pnp): resolve to ESM when requested (#4220)
1 parent 03e2f4a commit 630757e

File tree

2 files changed

+25
-1
lines changed

2 files changed

+25
-1
lines changed

.yarn/versions/2eafeb47.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
releases:
2+
"@yarnpkg/esbuild-plugin-pnp": patch
3+
4+
declined:
5+
- "@yarnpkg/builder"

packages/esbuild-plugin-pnp/sources/index.ts

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,12 +114,30 @@ export function pnpPlugin({
114114

115115
const externals = parseExternals(build.initialOptions.external ?? []);
116116

117-
const isPlatformNode = (build.initialOptions.platform ?? `browser`) === `node`;
117+
const platform = build.initialOptions.platform ?? `browser`;
118+
const isPlatformNode = platform === `node`;
119+
120+
// Reference: https://github.com/evanw/esbuild/blob/537195ae84bee1510fac14235906d588084c39cd/internal/resolver/resolver.go#L238-L253
121+
const conditionsDefault = new Set(build.initialOptions.conditions);
122+
conditionsDefault.add(`default`);
123+
if (platform === `browser` || platform === `node`)
124+
conditionsDefault.add(platform);
125+
const conditionsImport = new Set(conditionsDefault);
126+
conditionsImport.add(`import`);
127+
const conditionsRequire = new Set(conditionsDefault);
128+
conditionsRequire.add(`require`);
118129

119130
build.onResolve({filter}, args => {
120131
if (isExternal(args.path, externals))
121132
return {external: true};
122133

134+
// Reference: https://github.com/evanw/esbuild/blob/537195ae84bee1510fac14235906d588084c39cd/internal/resolver/resolver.go#L1495-L1502
135+
let conditions = conditionsDefault;
136+
if (args.kind === `dynamic-import` || args.kind === `import-statement`)
137+
conditions = conditionsImport;
138+
else if (args.kind === `require-call` || args.kind === `require-resolve`)
139+
conditions = conditionsRequire;
140+
123141
// The entry point resolution uses an empty string
124142
const effectiveImporter = args.importer
125143
? args.importer
@@ -134,6 +152,7 @@ export function pnpPlugin({
134152
let error;
135153
try {
136154
path = pnpApi.resolveRequest(args.path, effectiveImporter, {
155+
conditions,
137156
considerBuiltins: isPlatformNode,
138157
extensions,
139158
});

0 commit comments

Comments
 (0)