diff --git a/.github/workflows/e2e-esbuild-workflow.yml b/.github/workflows/e2e-esbuild-workflow.yml index f631f9a26d08..b2657846549d 100644 --- a/.github/workflows/e2e-esbuild-workflow.yml +++ b/.github/workflows/e2e-esbuild-workflow.yml @@ -26,9 +26,9 @@ jobs: source scripts/e2e-setup-ci.sh yarn init -p - yarn add -D esbuild @yarnpkg/esbuild-plugin-pnp@portal:"$HERE_DIR/../packages/esbuild-plugin-pnp" ts-node typescript + yarn add -D esbuild ts-node typescript - echo "require('esbuild').build({bundle: true, format: 'cjs', target: 'node14', entryPoints: ['./src/main.js'], outfile: './dist/bundle.js', plugins: [require('@yarnpkg/esbuild-plugin-pnp').pnpPlugin()]})" > build.js + echo "require('esbuild').build({bundle: true, format: 'cjs', target: 'node14', entryPoints: ['./src/main.js'], outfile: './dist/bundle.js'})" > build.js # Tree-shaking echo "export default {input: 'src/main.js', output: {file: 'dist/bundle.js', format: 'cjs'}};" | tee rollup.config.js @@ -50,7 +50,7 @@ jobs: [[ "$(node dist/bundle.js)" = "Hello webpack" ]] # Make sure we play nicely with esbuild plugins that create virtual modules with resolveDirs - echo "require('esbuild').build({bundle: true, format: 'cjs', target: 'node14', entryPoints: ['./src/main.js'], outfile: './dist/bundle.js', plugins: [require('./virtualModulePlugin'), require('@yarnpkg/esbuild-plugin-pnp').pnpPlugin()]})" > build.js + echo "require('esbuild').build({bundle: true, format: 'cjs', target: 'node14', entryPoints: ['./src/main.js'], outfile: './dist/bundle.js', plugins: [require('./virtualModulePlugin')]})" > build.js cat <<- "EOF" | tee virtualModulePlugin.js const { resolve, dirname } = require('path'); module.exports = { @@ -70,4 +70,4 @@ jobs: echo "import {virtual} from './maths.js?virtual'; console.log(virtual.cube(6));" | tee src/main.js yarn ts-node --transpile-only build.js - [[ "$(node dist/bundle.js)" = "216" ]] \ No newline at end of file + [[ "$(node dist/bundle.js)" = "216" ]] diff --git a/.pnp.cjs b/.pnp.cjs index 0ff8413382e2..20ded160e54b 100755 --- a/.pnp.cjs +++ b/.pnp.cjs @@ -22,10 +22,6 @@ const RAW_RUNTIME_STATE = "name": "acceptance-tests",\ "reference": "workspace:packages/acceptance-tests"\ },\ - {\ - "name": "@yarnpkg/esbuild-plugin-pnp",\ - "reference": "workspace:packages/esbuild-plugin-pnp"\ - },\ {\ "name": "@yarnpkg/eslint-config",\ "reference": "workspace:packages/eslint-config"\ @@ -206,7 +202,6 @@ const RAW_RUNTIME_STATE = ["@yarnpkg/cli", ["virtual:142f2540721377707149f0b1d7ad0188d020f822e234abcdca162642d42824b344a1ac44bd6035644a0ca9babd62eb7d72923350ac75b876b51e87eb92b3e464#workspace:packages/yarnpkg-cli", "virtual:14a22fb3831dfc762a1bb8a042d17886271c56698e1a83233f09eaacff5a5b83fe6f87adb9255774eab3586392c18ff98cf87aa6b374d572d9b72f88829f6d9e#workspace:packages/yarnpkg-cli", "virtual:27ebb8cf1fa70157f710b4926b6d25c44192e74dbac3a766c8dc6505a59ebc433221bfb4b5aabc8cca814bbe95fcb6e1ecffcf94ba96ee6112a57c89364571ac#workspace:packages/yarnpkg-cli", "virtual:35104c47575f2fe378d8d20383ae667f19d4dd801df8cc4c76848603aa6b4a2234a00142ff12fd557f6f48bd2810880e31c40c767010ea61a31fca302c2cc5e0#workspace:packages/yarnpkg-cli", "virtual:3f21a2572d1fa6d1ff8d16d86e25bcefcbff7d17161c440fdbddbd871d9d675c377d66a2cbd98ddb8f2c024060bc7bc6c01e8ae328fa1fef861c72a9b2c30755#workspace:packages/yarnpkg-cli", "virtual:4a733c8d9614e2148392368219d98ec1a70b4e8ce99164edd551241b22f6c5233e9d0ccf9f6d83265c8a5aafc617cfd3c4100b3efef1e092a42053c23770ed9a#workspace:packages/yarnpkg-cli", "virtual:5fe64685a823dfbb7fb4a2b3276cfc4aa0db65837fed2fdadbcc54cab047059324a7d9490b3913073dcf62fc9a7db324f81bcd6b03e1175843cddeba54bfcd85#workspace:packages/yarnpkg-cli", "virtual:616a2ba0d005227805d037f4c8ec29f1dd09fdb3e3f49f7b5c4a07a62139a147d373d38bc5ebcb31bddab3956c3fc25d54edf8722741d9ebdbe9d36d21968f91#workspace:packages/yarnpkg-cli", "virtual:712d04b0098634bdb13868ff8f85b327022bd7d3880873ada8c0ae56847ed36cf9da1fd74a88519380129cec528fe2bd2201426bc28ac9d4a8cc6734ff25c538#workspace:packages/yarnpkg-cli", "virtual:743b60015fc887fe314a7ee01ea4843b516ac512d77939f47dc39d50bc7db742dc8994fe9bb2245ada0b3ce6f8aa58329d603fbc24093050cd499cb16a1a995f#workspace:packages/yarnpkg-cli", "virtual:86c95fabbcd56c56f5f2d2e080e64a1095e3fe233877aa9f7958f317f88a95627e0be2765e89c0cff02c9f08f27b64b7cbc9d5c3960c1df509d5e6ea98cca4f4#workspace:packages/yarnpkg-cli", "virtual:a027ddc7edcbf74025e90effce333897039d2c6f8e1ebe319fb72c52c5be1b885da91acc56476d19bb6ce2e31cbc2d5b11241940b82f833a2cac262496c0088f#workspace:packages/yarnpkg-cli", "virtual:a4e4e792796cefb4fb82f09187fa18bf4c97a9cb5b106da0eab6189e1895a4bb9bf068e5c91168fec85cee1392df48e4a120f3bae6cbbbde019ff2c21186a374#workspace:packages/yarnpkg-cli", "virtual:baf8bf095598663073ea5e8bd5af72409e894f8926160bf6fe0a24c693d417f91b536d9e3bbb0ea5f3d0ad8cd2f1ec38b71e964f9475ba719a1f5a8505cf10c3#workspace:packages/yarnpkg-cli", "virtual:cfce476fbcac37853570c2d41665757b5f868b1c2f089ee6edbc8bb5aa32141e156cae7d75350d1095258d90afbabe2b2bb142142b995d133c3ee535c89d459b#workspace:packages/yarnpkg-cli", "virtual:e3ce0ce4b7f0796ca44011528cb9cdc133fc62a76363fea6de68497bae04bdbe5a6dd47e6b9f23c282eb8e4533d75e96cf378c943d07a4e78aae0b715f06a450#workspace:packages/yarnpkg-cli", "virtual:ef8e1544cc953676e27fe7445218564293b5a190d023e4610c14767688870b772297269e2848a1d8d72f54605aacc9da3b2b7dc56dca754d297b70b14e6a665e#workspace:packages/yarnpkg-cli", "virtual:f4e4f4a9a0213f122880195b39adaee7de5cb560c1d806ebc8bace6a3124e5b8f820bbb89ebecd4d535caeb6f527d343143210aa405689c118ff2813b78998a0#workspace:packages/yarnpkg-cli", "workspace:packages/yarnpkg-cli"]],\ ["@yarnpkg/core", ["workspace:packages/yarnpkg-core"]],\ ["@yarnpkg/doctor", ["workspace:packages/yarnpkg-doctor"]],\ - ["@yarnpkg/esbuild-plugin-pnp", ["virtual:5d170a96e3bd35439131aba7820e7b850e9381656d638624d34e228d96fc2f134ebf73b7eb6235db8cb822a7bcd252e04750d4dfcaeb49408c4e561390950138#workspace:packages/esbuild-plugin-pnp", "workspace:packages/esbuild-plugin-pnp"]],\ ["@yarnpkg/eslint-config", ["virtual:e470d99b1e4fdf4c5db5d090ff5472cdeba0404b7ffd31cd2efab3493dd184c67bc45f60c2ef1c040e2c41afe38c6280bffc5df2fbe3aefaa2b6eacf685ab07c#workspace:packages/eslint-config", "workspace:packages/eslint-config"]],\ ["@yarnpkg/extensions", ["virtual:278bc71407223dd2bc9ed6dcaec459b0cf9f599d3a54c3151d28f79fb3a427390fad08553f7c1ad9311ccd3a081e35dfd4095a517d349ec05b8b41552b547315#workspace:packages/yarnpkg-extensions", "workspace:packages/yarnpkg-extensions"]],\ ["@yarnpkg/fslib", ["workspace:packages/yarnpkg-fslib"]],\ @@ -9865,14 +9860,13 @@ const RAW_RUNTIME_STATE = ["@types/semver", "npm:7.1.0"],\ ["@yarnpkg/cli", "virtual:712d04b0098634bdb13868ff8f85b327022bd7d3880873ada8c0ae56847ed36cf9da1fd74a88519380129cec528fe2bd2201426bc28ac9d4a8cc6734ff25c538#workspace:packages/yarnpkg-cli"],\ ["@yarnpkg/core", "workspace:packages/yarnpkg-core"],\ - ["@yarnpkg/esbuild-plugin-pnp", "virtual:5d170a96e3bd35439131aba7820e7b850e9381656d638624d34e228d96fc2f134ebf73b7eb6235db8cb822a7bcd252e04750d4dfcaeb49408c4e561390950138#workspace:packages/esbuild-plugin-pnp"],\ ["@yarnpkg/fslib", "workspace:packages/yarnpkg-fslib"],\ ["@yarnpkg/monorepo", "workspace:."],\ ["chalk", "npm:3.0.0"],\ ["clipanion", "virtual:576bf3e379b293160348e4cadfbd6541796e6f78477b0875c4437065090cec6f78b6ec2281b8e15d1c870d61578dc7dee16a5ae49a65701fec83e592ce2ebdeb#npm:3.2.0-rc.10"],\ ["esbuild", [\ "esbuild-wasm",\ - "npm:0.11.20"\ + "npm:0.15.5"\ ]],\ ["semver", "npm:7.3.5"],\ ["tslib", "npm:2.4.0"],\ @@ -10863,7 +10857,7 @@ const RAW_RUNTIME_STATE = ["diff", "npm:5.1.0"],\ ["esbuild", [\ "esbuild-wasm",\ - "npm:0.11.20"\ + "npm:0.15.5"\ ]],\ ["globby", "npm:11.0.4"],\ ["got", "npm:11.8.2"],\ @@ -10904,39 +10898,6 @@ const RAW_RUNTIME_STATE = "linkType": "SOFT"\ }]\ ]],\ - ["@yarnpkg/esbuild-plugin-pnp", [\ - ["virtual:5d170a96e3bd35439131aba7820e7b850e9381656d638624d34e228d96fc2f134ebf73b7eb6235db8cb822a7bcd252e04750d4dfcaeb49408c4e561390950138#workspace:packages/esbuild-plugin-pnp", {\ - "packageLocation": "./.yarn/__virtual__/@yarnpkg-esbuild-plugin-pnp-virtual-80e7b5980d/1/packages/esbuild-plugin-pnp/",\ - "packageDependencies": [\ - ["@yarnpkg/esbuild-plugin-pnp", "virtual:5d170a96e3bd35439131aba7820e7b850e9381656d638624d34e228d96fc2f134ebf73b7eb6235db8cb822a7bcd252e04750d4dfcaeb49408c4e561390950138#workspace:packages/esbuild-plugin-pnp"],\ - ["@types/esbuild", null],\ - ["@yarnpkg/pnp", "workspace:packages/yarnpkg-pnp"],\ - ["esbuild", [\ - "esbuild-wasm",\ - "npm:0.11.20"\ - ]],\ - ["tslib", "npm:2.4.0"]\ - ],\ - "packagePeers": [\ - "@types/esbuild",\ - "esbuild"\ - ],\ - "linkType": "SOFT"\ - }],\ - ["workspace:packages/esbuild-plugin-pnp", {\ - "packageLocation": "./packages/esbuild-plugin-pnp/",\ - "packageDependencies": [\ - ["@yarnpkg/esbuild-plugin-pnp", "workspace:packages/esbuild-plugin-pnp"],\ - ["@yarnpkg/pnp", "workspace:packages/yarnpkg-pnp"],\ - ["esbuild", [\ - "esbuild-wasm",\ - "npm:0.11.20"\ - ]],\ - ["tslib", "npm:2.4.0"]\ - ],\ - "linkType": "SOFT"\ - }]\ - ]],\ ["@yarnpkg/eslint-config", [\ ["virtual:e470d99b1e4fdf4c5db5d090ff5472cdeba0404b7ffd31cd2efab3493dd184c67bc45f60c2ef1c040e2c41afe38c6280bffc5df2fbe3aefaa2b6eacf685ab07c#workspace:packages/eslint-config", {\ "packageLocation": "./.yarn/__virtual__/@yarnpkg-eslint-config-virtual-4b728ee22c/1/packages/eslint-config/",\ @@ -20440,7 +20401,7 @@ const RAW_RUNTIME_STATE = ["@yarnpkg/libzip", "workspace:packages/yarnpkg-libzip"],\ ["esbuild", [\ "esbuild-wasm",\ - "npm:0.11.20"\ + "npm:0.15.5"\ ]],\ ["resolve.exports", "npm:1.1.0"],\ ["rollup", "npm:2.59.0"],\ @@ -25941,10 +25902,10 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["esbuild-wasm", [\ - ["npm:0.11.20", {\ - "packageLocation": "./.yarn/cache/esbuild-wasm-npm-0.11.20-f5c272c5ce-f72a2ebab3.zip/node_modules/esbuild-wasm/",\ + ["npm:0.15.5", {\ + "packageLocation": "./.yarn/cache/esbuild-wasm-npm-0.15.5-bc4c954bca-149219c551.zip/node_modules/esbuild-wasm/",\ "packageDependencies": [\ - ["esbuild-wasm", "npm:0.11.20"]\ + ["esbuild-wasm", "npm:0.15.5"]\ ],\ "linkType": "HARD"\ }]\ @@ -40422,7 +40383,7 @@ const RAW_RUNTIME_STATE = ["@types/rollup", null],\ ["esbuild", [\ "esbuild-wasm",\ - "npm:0.11.20"\ + "npm:0.15.5"\ ]],\ ["joycon", "npm:3.0.1"],\ ["jsonc-parser", "npm:3.0.0"],\ @@ -44445,7 +44406,7 @@ const RAW_RUNTIME_STATE = ["@yarnpkg/libzip", "workspace:packages/yarnpkg-libzip"],\ ["esbuild", [\ "esbuild-wasm",\ - "npm:0.11.20"\ + "npm:0.15.5"\ ]],\ ["rollup", "npm:2.59.0"],\ ["rollup-plugin-esbuild", "virtual:712d04b0098634bdb13868ff8f85b327022bd7d3880873ada8c0ae56847ed36cf9da1fd74a88519380129cec528fe2bd2201426bc28ac9d4a8cc6734ff25c538#npm:3.0.4"],\ diff --git a/.yarn/cache/esbuild-wasm-npm-0.11.20-f5c272c5ce-f72a2ebab3.zip b/.yarn/cache/esbuild-wasm-npm-0.11.20-f5c272c5ce-f72a2ebab3.zip deleted file mode 100644 index 5ffa454011b6..000000000000 Binary files a/.yarn/cache/esbuild-wasm-npm-0.11.20-f5c272c5ce-f72a2ebab3.zip and /dev/null differ diff --git a/.yarn/cache/esbuild-wasm-npm-0.15.5-bc4c954bca-149219c551.zip b/.yarn/cache/esbuild-wasm-npm-0.15.5-bc4c954bca-149219c551.zip new file mode 100644 index 000000000000..63fc1d3ca712 Binary files /dev/null and b/.yarn/cache/esbuild-wasm-npm-0.15.5-bc4c954bca-149219c551.zip differ diff --git a/.yarn/versions/ded9c7c0.yml b/.yarn/versions/ded9c7c0.yml new file mode 100644 index 000000000000..764420c3ca55 --- /dev/null +++ b/.yarn/versions/ded9c7c0.yml @@ -0,0 +1,36 @@ +releases: + "@yarnpkg/builder": patch + "@yarnpkg/core": patch + "@yarnpkg/plugin-pnp": patch + "@yarnpkg/pnp": patch + vscode-zipfs: patch + +declined: + - "@yarnpkg/plugin-compat" + - "@yarnpkg/plugin-constraints" + - "@yarnpkg/plugin-dlx" + - "@yarnpkg/plugin-essentials" + - "@yarnpkg/plugin-exec" + - "@yarnpkg/plugin-file" + - "@yarnpkg/plugin-git" + - "@yarnpkg/plugin-github" + - "@yarnpkg/plugin-http" + - "@yarnpkg/plugin-init" + - "@yarnpkg/plugin-interactive-tools" + - "@yarnpkg/plugin-link" + - "@yarnpkg/plugin-nm" + - "@yarnpkg/plugin-npm" + - "@yarnpkg/plugin-npm-cli" + - "@yarnpkg/plugin-pack" + - "@yarnpkg/plugin-patch" + - "@yarnpkg/plugin-pnpm" + - "@yarnpkg/plugin-stage" + - "@yarnpkg/plugin-typescript" + - "@yarnpkg/plugin-version" + - "@yarnpkg/plugin-workspace-tools" + - "@yarnpkg/cli" + - "@yarnpkg/doctor" + - "@yarnpkg/extensions" + - "@yarnpkg/nm" + - "@yarnpkg/pnpify" + - "@yarnpkg/sdks" diff --git a/packages/esbuild-plugin-pnp/README.md b/packages/esbuild-plugin-pnp/README.md index ccc97cae03a5..e51d2f6fd646 100644 --- a/packages/esbuild-plugin-pnp/README.md +++ b/packages/esbuild-plugin-pnp/README.md @@ -1,22 +1,5 @@ -# `@yarnpkg/esbuild-plugin-pnp` +# esbuild-plugin-pnp -This plugin lets you use Yarn with esbuild. We use it in order to build Yarn itself! +Yarn used to maintain a plugin called [`esbuild-plugin-pnp`](https://yarnpkg.com/package/@yarnpkg/esbuild-plugin-pnp) which added PnP support to Esbuild. -## Usage - -Add the plugin to your dependencies: - -``` -yarn add @yarnpkg/esbuild-plugin-pnp -``` - -Reference it via your esbuild configuration ([build API only](https://esbuild.github.io/plugins/)): - -```ts -import {pnpPlugin} from '@yarnpkg/esbuild-plugin-pnp'; - -await build({ - plugins: [pnpPlugin()], - // ... -}); -``` +Starting from Esbuild 0.15, this plugin isn't needed anymore and has been deprecated: [Esbuild now implements native support](https://esbuild.github.io/getting-started/#yarn-pnp) for both PnP and zip archives, with much better performances than what the plugin could achieve. diff --git a/packages/esbuild-plugin-pnp/package.json b/packages/esbuild-plugin-pnp/package.json deleted file mode 100644 index 7552a2a80a14..000000000000 --- a/packages/esbuild-plugin-pnp/package.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "name": "@yarnpkg/esbuild-plugin-pnp", - "version": "3.0.0-rc.15", - "stableVersion": "2.0.3", - "license": "BSD-2-Clause", - "main": "./sources/index.ts", - "dependencies": { - "tslib": "^2.4.0" - }, - "peerDependencies": { - "esbuild": ">=0.10.0" - }, - "devDependencies": { - "@yarnpkg/pnp": "workspace:^", - "esbuild": "npm:esbuild-wasm@^0.11.20" - }, - "scripts": { - "postpack": "rm -rf lib", - "prepack": "run build:compile \"$(pwd)\"", - "release": "yarn npm publish" - }, - "publishConfig": { - "main": "./lib/index.js", - "typings": "./lib/index.d.ts" - }, - "files": [ - "/lib/**/*" - ], - "repository": { - "type": "git", - "url": "ssh://git@github.com/yarnpkg/berry.git", - "directory": "packages/esbuild-plugin-pnp" - }, - "engines": { - "node": ">=14.15.0" - } -} diff --git a/packages/esbuild-plugin-pnp/sources/index.ts b/packages/esbuild-plugin-pnp/sources/index.ts deleted file mode 100644 index ad23951033e0..000000000000 --- a/packages/esbuild-plugin-pnp/sources/index.ts +++ /dev/null @@ -1,196 +0,0 @@ -import {PnpApi} from '@yarnpkg/pnp'; -import type {OnLoadArgs, OnLoadResult, OnResolveArgs, OnResolveResult, Plugin, PluginBuild} from 'esbuild'; -import * as fs from 'fs'; -import path from 'path'; - -const matchAll = /()/; -const defaultExtensions = [`.tsx`, `.ts`, `.jsx`, `.mjs`, `.cjs`, `.js`, `.css`, `.json`]; - -type External = string | {prefix: string, suffix: string}; - -// Reference: https://github.com/evanw/esbuild/blob/537195ae84bee1510fac14235906d588084c39cd/pkg/api/api_impl.go#L366-L388 -function parseExternals(externals: Array): Array { - return externals.map(external => { - // ESBuild's validation pass runs before this function is called so there's no need to assert that there's a single wildcard - const wildcardIdx = external.indexOf(`*`); - if (wildcardIdx !== -1) - return {prefix: external.slice(0, wildcardIdx), suffix: external.slice(wildcardIdx + 1)}; - - return external; - }); -} - -function isExternal(path: string, externals: Array): boolean { - for (const external of externals) { - if (typeof external === `object`) { - // Reference: https://github.com/evanw/esbuild/blob/537195ae84bee1510fac14235906d588084c39cd/internal/resolver/resolver.go#L372-L381 - if ( - path.length >= external.prefix.length + external.suffix.length - && path.startsWith(external.prefix) - && path.endsWith(external.suffix) - ) { - return true; - } - } else { - if (path === external) - return true; - - // If the module "foo" has been marked as external, we also want to treat - // paths into that module such as "foo/bar" as external too. - // References: - // - https://github.com/evanw/esbuild/blob/537195ae84bee1510fac14235906d588084c39cd/internal/resolver/resolver.go#L651-L652 - // - https://github.com/evanw/esbuild/blob/537195ae84bee1510fac14235906d588084c39cd/internal/resolver/resolver.go#L1688-L1691 - if (!external.startsWith(`/`) && !external.startsWith(`./`) && !external.startsWith(`../`) && external !== `.` && external !== `..`) { - if (path.startsWith(`${external}/`)) { - return true; - } - } - } - } - - return false; -} - -async function defaultOnLoad(args: OnLoadArgs): Promise { - return { - contents: await fs.promises.readFile(args.path), - loader: `default`, - // For regular imports in the `file` namespace, resolveDir is the directory the - // file being resolved lives in. For all other virtual modules, this defaults to - // empty string: "" - // A sensible value for pnp imports is the same as the `file` namespace, as pnp - // still resolves to files on disk (in the cache). - resolveDir: path.dirname(args.path), - }; -} - -type OnResolveParams = { - resolvedPath: string | null; - watchFiles: Array; - error?: Error; -}; - -async function defaultOnResolve(args: OnResolveArgs, {resolvedPath, error, watchFiles}: OnResolveParams): Promise { - const problems = error ? [{text: error.message}] : []; - - // Sometimes dynamic resolve calls might be wrapped in a try / catch, - // but ESBuild neither skips them nor does it provide a way for us to tell. - // Because of that, we downgrade all errors to warnings in these situations. - // Issue: https://github.com/evanw/esbuild/issues/1127 - let mergeWith; - switch (args.kind) { - case `require-call`: - case `require-resolve`: - case `dynamic-import`: { - mergeWith = {warnings: problems}; - } break; - - default: { - mergeWith = {errors: problems}; - } break; - } - - if (resolvedPath !== null) { - return {namespace: `pnp`, path: resolvedPath, watchFiles}; - } else { - return {external: true, ...mergeWith, watchFiles}; - } -} - -export type PluginOptions = { - baseDir?: string; - extensions?: Array; - filter?: RegExp; - onResolve?: (args: OnResolveArgs, params: OnResolveParams) => Promise; - onLoad?: (args: OnLoadArgs) => Promise; -}; - -export function pnpPlugin({ - baseDir = process.cwd(), - extensions = defaultExtensions, - filter = matchAll, - onResolve = defaultOnResolve, - onLoad = defaultOnLoad, -}: PluginOptions = {}): Plugin { - return { - name: `@yarnpkg/esbuild-plugin-pnp`, - setup(build: PluginBuild) { - const {findPnpApi} = require(`module`); - if (typeof findPnpApi === `undefined`) - return; - - const externals = parseExternals(build.initialOptions.external ?? []); - - 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.resolveDir - ? `${args.resolveDir}/` - : args.importer - ? args.importer - : `${baseDir}/`; - - const pnpApi = findPnpApi(effectiveImporter) as PnpApi | null; - if (!pnpApi) - // Path isn't controlled by PnP so delegate to the next resolver in the chain - return undefined; - - let path = null; - let error; - try { - path = pnpApi.resolveRequest(args.path, effectiveImporter, { - conditions, - considerBuiltins: isPlatformNode, - extensions, - }); - } catch (e) { - error = e; - } - - const watchFiles: Array = [pnpApi.resolveRequest(`pnpapi`, null)!]; - - if (path) { - const locator = pnpApi.findPackageLocator(path); - if (locator) { - const info = pnpApi.getPackageInformation(locator); - - if (info?.linkType === `SOFT`) { - watchFiles.push(pnpApi.resolveVirtual?.(path) ?? path); - } - } - } - - return onResolve(args, {resolvedPath: path, error, watchFiles}); - }); - - // We register on the build to prevent ESBuild from reading the files - // itself, since it wouldn't know how to access the files from within - // the zip archives. - if (build.onLoad !== null) { - build.onLoad({filter}, onLoad); - } - }, - }; -} diff --git a/packages/vscode-zipfs/package.json b/packages/vscode-zipfs/package.json index c07b4fe3ea5e..234bf538040e 100644 --- a/packages/vscode-zipfs/package.json +++ b/packages/vscode-zipfs/package.json @@ -93,7 +93,7 @@ "@types/vscode": "^1.54.0", "@yarnpkg/fslib": "workspace:^", "@yarnpkg/libzip": "workspace:^", - "esbuild": "npm:esbuild-wasm@^0.11.20", + "esbuild": "npm:esbuild-wasm@^0.15.5", "rollup": "^2.59.0", "rollup-plugin-esbuild": "^3.0.2", "rollup-plugin-terser": "^7.0.2", diff --git a/packages/yarnpkg-builder/package.json b/packages/yarnpkg-builder/package.json index 22e5f7ec8f1d..249e2dbb1f37 100644 --- a/packages/yarnpkg-builder/package.json +++ b/packages/yarnpkg-builder/package.json @@ -7,11 +7,10 @@ "dependencies": { "@yarnpkg/cli": "workspace:^", "@yarnpkg/core": "workspace:^", - "@yarnpkg/esbuild-plugin-pnp": "workspace:^", "@yarnpkg/fslib": "workspace:^", "chalk": "^3.0.0", "clipanion": "^3.2.0-rc.10", - "esbuild": "npm:esbuild-wasm@^0.11.20", + "esbuild": "npm:esbuild-wasm@^0.15.5", "semver": "^7.1.2", "tslib": "^2.4.0" }, diff --git a/packages/yarnpkg-builder/sources/commands/build/bundle.ts b/packages/yarnpkg-builder/sources/commands/build/bundle.ts index a717159b9f9f..94a47290fa37 100644 --- a/packages/yarnpkg-builder/sources/commands/build/bundle.ts +++ b/packages/yarnpkg-builder/sources/commands/build/bundle.ts @@ -1,6 +1,5 @@ import {getDynamicLibs} from '@yarnpkg/cli'; import {StreamReport, MessageName, Configuration, formatUtils, structUtils} from '@yarnpkg/core'; -import {pnpPlugin} from '@yarnpkg/esbuild-plugin-pnp'; import {npath} from '@yarnpkg/fslib'; import chalk from 'chalk'; import cp from 'child_process'; @@ -139,7 +138,7 @@ export default class BuildBundleCommand extends Command { logLevel: `silent`, format: `iife`, platform: `node`, - plugins: [valLoader, pnpPlugin()], + plugins: [valLoader], minify: !this.noMinify, sourcemap: this.sourceMap ? `inline` : false, target: `node14`, diff --git a/packages/yarnpkg-builder/sources/commands/build/plugin.ts b/packages/yarnpkg-builder/sources/commands/build/plugin.ts index 529eff993c1d..d790ff084761 100644 --- a/packages/yarnpkg-builder/sources/commands/build/plugin.ts +++ b/packages/yarnpkg-builder/sources/commands/build/plugin.ts @@ -1,5 +1,4 @@ import {StreamReport, MessageName, Configuration, formatUtils, structUtils} from '@yarnpkg/core'; -import {pnpPlugin} from '@yarnpkg/esbuild-plugin-pnp'; import {npath, xfs} from '@yarnpkg/fslib'; import {Command, Option, Usage, UsageError} from 'clipanion'; import {build, Plugin} from 'esbuild'; @@ -117,7 +116,7 @@ export default class BuildPluginCommand extends Command { logLevel: `silent`, format: `iife`, platform: `node`, - plugins: [dynamicLibResolver, pnpPlugin()], + plugins: [dynamicLibResolver], minify: !this.noMinify, sourcemap: this.sourceMap ? `inline` : false, target: `node14`, diff --git a/packages/yarnpkg-core/package.json b/packages/yarnpkg-core/package.json index 672cc7e644f4..06bc0b71fd08 100644 --- a/packages/yarnpkg-core/package.json +++ b/packages/yarnpkg-core/package.json @@ -48,7 +48,7 @@ "@yarnpkg/plugin-npm": "workspace:^", "@yarnpkg/plugin-pnp": "workspace:^", "comment-json": "^2.2.0", - "esbuild": "npm:esbuild-wasm@^0.11.20", + "esbuild": "npm:esbuild-wasm@^0.15.5", "rollup": "^2.59.0", "rollup-plugin-esbuild": "^3.0.2", "rollup-plugin-terser": "^7.0.2" diff --git a/packages/yarnpkg-pnp/package.json b/packages/yarnpkg-pnp/package.json index d07b02a49a09..66373a2adfc9 100644 --- a/packages/yarnpkg-pnp/package.json +++ b/packages/yarnpkg-pnp/package.json @@ -12,7 +12,7 @@ "@rollup/plugin-commonjs": "^21.0.1", "@rollup/plugin-node-resolve": "^11.0.1", "@yarnpkg/libzip": "workspace:^", - "esbuild": "npm:esbuild-wasm@^0.11.20", + "esbuild": "npm:esbuild-wasm@^0.15.5", "resolve.exports": "^1.1.0", "rollup": "^2.59.0", "rollup-plugin-esbuild": "^3.0.2", diff --git a/tsconfig.json b/tsconfig.json index b14acb8db73f..b84e15dca5a8 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,7 +1,6 @@ { "compilerOptions": { "allowSyntheticDefaultImports": true, - "baseUrl": ".", "esModuleInterop": true, "experimentalDecorators": true, "forceConsistentCasingInFileNames": true, @@ -11,6 +10,7 @@ "noImplicitReturns": true, "resolveJsonModule": true, "strict": true, + "alwaysStrict": false, "target": "ES2019", "declaration": true, "importHelpers": true, diff --git a/yarn.lock b/yarn.lock index d55617291251..a0f145519d63 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5505,12 +5505,11 @@ __metadata: "@types/semver": "npm:^7.1.0" "@yarnpkg/cli": "workspace:^" "@yarnpkg/core": "workspace:^" - "@yarnpkg/esbuild-plugin-pnp": "workspace:^" "@yarnpkg/fslib": "workspace:^" "@yarnpkg/monorepo": "workspace:^" chalk: "npm:^3.0.0" clipanion: "npm:^3.2.0-rc.10" - esbuild: "npm:esbuild-wasm@^0.11.20" + esbuild: "npm:esbuild-wasm@^0.15.5" semver: "npm:^7.1.2" tslib: "npm:^2.4.0" typescript: "npm:4.8.1-rc" @@ -5598,7 +5597,7 @@ __metadata: comment-json: "npm:^2.2.0" cross-spawn: "npm:7.0.3" diff: "npm:^5.1.0" - esbuild: "npm:esbuild-wasm@^0.11.20" + esbuild: "npm:esbuild-wasm@^0.15.5" globby: "npm:^11.0.1" got: "npm:^11.7.0" lodash: "npm:^4.17.15" @@ -5637,18 +5636,6 @@ __metadata: languageName: unknown linkType: soft -"@yarnpkg/esbuild-plugin-pnp@workspace:^, @yarnpkg/esbuild-plugin-pnp@workspace:packages/esbuild-plugin-pnp": - version: 0.0.0-use.local - resolution: "@yarnpkg/esbuild-plugin-pnp@workspace:packages/esbuild-plugin-pnp" - dependencies: - "@yarnpkg/pnp": "workspace:^" - esbuild: "npm:esbuild-wasm@^0.11.20" - tslib: "npm:^2.4.0" - peerDependencies: - esbuild: ">=0.10.0" - languageName: unknown - linkType: soft - "@yarnpkg/eslint-config@workspace:^, @yarnpkg/eslint-config@workspace:packages/eslint-config": version: 0.0.0-use.local resolution: "@yarnpkg/eslint-config@workspace:packages/eslint-config" @@ -6327,7 +6314,7 @@ __metadata: "@types/node": "npm:^18.7.6" "@yarnpkg/fslib": "workspace:^" "@yarnpkg/libzip": "workspace:^" - esbuild: "npm:esbuild-wasm@^0.11.20" + esbuild: "npm:esbuild-wasm@^0.15.5" resolve.exports: "npm:^1.1.0" rollup: "npm:^2.59.0" rollup-plugin-esbuild: "npm:^3.0.2" @@ -10932,12 +10919,12 @@ __metadata: languageName: node linkType: hard -"esbuild@npm:esbuild-wasm@^0.11.20": - version: 0.11.20 - resolution: "esbuild-wasm@npm:0.11.20" +"esbuild@npm:esbuild-wasm@^0.15.5": + version: 0.15.5 + resolution: "esbuild-wasm@npm:0.15.5" bin: esbuild: bin/esbuild - checksum: f72a2ebab38c342dfa787a3d8b180cf6288898e40b69062634a1096ba65da2cd373a43d4eb49ff28d47c983fa8ab03d548e66b646e14e7ebb3edab6dcf479a12 + checksum: 149219c551e2bbb0ca2d711bcdc2bc0ed10f71a7c77dfd7c86e3aa8d1dbc6782e7afe609eefe44c2ce8ff0c6ec2f7bdd6d0cdd7c65bdc1d257252f4e23f5b4ee languageName: node linkType: hard @@ -26293,7 +26280,7 @@ __metadata: "@types/vscode": "npm:^1.54.0" "@yarnpkg/fslib": "workspace:^" "@yarnpkg/libzip": "workspace:^" - esbuild: "npm:esbuild-wasm@^0.11.20" + esbuild: "npm:esbuild-wasm@^0.15.5" rollup: "npm:^2.59.0" rollup-plugin-esbuild: "npm:^3.0.2" rollup-plugin-terser: "npm:^7.0.2"