diff --git a/.yarn/versions/2eafeb47.yml b/.yarn/versions/2eafeb47.yml new file mode 100644 index 000000000000..dc98e73ee2c0 --- /dev/null +++ b/.yarn/versions/2eafeb47.yml @@ -0,0 +1,5 @@ +releases: + "@yarnpkg/esbuild-plugin-pnp": patch + +declined: + - "@yarnpkg/builder" diff --git a/packages/esbuild-plugin-pnp/sources/index.ts b/packages/esbuild-plugin-pnp/sources/index.ts index 363566d4e942..5a4053b98e57 100644 --- a/packages/esbuild-plugin-pnp/sources/index.ts +++ b/packages/esbuild-plugin-pnp/sources/index.ts @@ -104,12 +104,30 @@ export function pnpPlugin({ const externals = parseExternals(build.initialOptions.external ?? []); - const isPlatformNode = (build.initialOptions.platform ?? `browser`) === `node`; + const platform = build.initialOptions.platform ?? `browser`; + const isPlatformNode = platform === `node`; + + // Reference: https://github.com/evanw/esbuild/blob/537195ae84bee1510fac14235906d588084c39cd/internal/resolver/resolver.go#L238-L253 + const conditionsDefault = new Set(build.initialOptions.conditions); + conditionsDefault.add(`default`); + if (platform === `browser` || platform === `node`) + conditionsDefault.add(platform); + const conditionsImport = new Set(conditionsDefault); + conditionsImport.add(`import`); + const conditionsRequire = new Set(conditionsDefault); + conditionsRequire.add(`require`); build.onResolve({filter}, args => { if (isExternal(args.path, externals)) return {external: true}; + // Reference: https://github.com/evanw/esbuild/blob/537195ae84bee1510fac14235906d588084c39cd/internal/resolver/resolver.go#L1495-L1502 + let conditions = conditionsDefault; + if (args.kind === `dynamic-import` || args.kind === `import-statement`) + conditions = conditionsImport; + else if (args.kind === `require-call` || args.kind === `require-resolve`) + conditions = conditionsRequire; + // The entry point resolution uses an empty string const effectiveImporter = args.importer ? args.importer @@ -124,6 +142,7 @@ export function pnpPlugin({ let error; try { path = pnpApi.resolveRequest(args.path, effectiveImporter, { + conditions, considerBuiltins: isPlatformNode, extensions, });