diff --git a/.gitattributes b/.gitattributes index 35d8541a4aa0..509e979e24b6 100644 --- a/.gitattributes +++ b/.gitattributes @@ -5,6 +5,7 @@ # Mark generated files as binary to prevent git from trying to merge them /.pnp.* binary linguist-generated +packages/plugin-compat/sources/patches/*.ts binary linguist-generated packages/yarnpkg-pnp/sources/esm-loader/built-loader.js binary linguist-generated packages/yarnpkg-pnp/sources/hook.js binary linguist-generated packages/yarnpkg-core/sources/worker-zip/index.js binary linguist-generated diff --git a/.github/workflows/integration-workflow.yml b/.github/workflows/integration-workflow.yml index 27ad75825cf1..896de25a4e34 100644 --- a/.github/workflows/integration-workflow.yml +++ b/.github/workflows/integration-workflow.yml @@ -50,14 +50,11 @@ jobs: - name: 'Check that the patch files are consistent with fresh builds' run: | - if [[ $(git diff --name-only "$(git merge-base origin/"$TARGET_BRANCH" HEAD)" HEAD -- packages/plugin-compat/sources/patches | wc -l) -gt 0 ]]; then - for generator in packages/plugin-compat/extra/*/gen-*-patch.sh; do - bash $generator; + if [[ $(git diff --name-only "$(git merge-base origin/"$TARGET_BRANCH" HEAD)" HEAD -- packages/plugin-compat/sources/patches packages/plugin-compat/extra/ | wc -l) -gt 0 ]]; then + for generator in packages/plugin-compat/extra/*/gen-*-patch.ts; do + yarn node -r @yarnpkg/monorepo/scripts/setup-ts-execution $generator '*'; done - for generator in packages/plugin-compat/extra/*/gen-*-patch.js; do - yarn node $generator; - done - [[ $(git diff --name-only packages/plugin-compat/sources/patches "packages/plugin-compat/extra/typescript/patch*" | tee /dev/stderr | wc -l) -eq 0 ]] + [[ $(git diff --name-only packages/plugin-compat/sources/patches "packages/plugin-compat/extra/*/patches/*" | tee /dev/stderr | wc -l) -eq 0 ]] fi shell: bash if: | diff --git a/.pnp.cjs b/.pnp.cjs index bb0ea8aacbfa..556a41270b4c 100644 --- a/.pnp.cjs +++ b/.pnp.cjs @@ -295,7 +295,7 @@ const RAW_RUNTIME_STATE = ["pirates", "npm:4.0.5"],\ ["semver", "npm:7.6.0"],\ ["tslib", "npm:2.6.2"],\ - ["typescript", "patch:typescript@npm%3A5.9.2#optional!builtin::version=5.9.2&hash=5786d5"]\ + ["typescript", "patch:typescript@npm%3A5.9.2#optional!builtin::version=5.9.2&hash=0d3329"]\ ],\ "linkType": "SOFT"\ }]\ @@ -927,7 +927,7 @@ const RAW_RUNTIME_STATE = ["@types/babel__core", null],\ ["debug", "virtual:b86a9fb34323a98c6519528ed55faa0d9b44ca8879307c0b29aa384bde47ff59a7d0c9051b31246f14521dfb71ba3c5d6d0b35c29fffc17bf875aa6ad977d9e8#npm:4.4.0"],\ ["lodash.debounce", "npm:4.0.8"],\ - ["resolve", "patch:resolve@npm%3A1.22.2#optional!builtin::version=1.22.2&hash=c3c19d"]\ + ["resolve", "patch:resolve@npm%3A1.22.2#optional!builtin::version=1.22.2&hash=e6f707"]\ ],\ "packagePeers": [\ "@babel/core",\ @@ -6881,7 +6881,7 @@ const RAW_RUNTIME_STATE = ["glob", "npm:7.2.3"],\ ["is-reference", "npm:1.2.1"],\ ["magic-string", "npm:0.25.7"],\ - ["resolve", "patch:resolve@npm%3A1.22.2#optional!builtin::version=1.22.2&hash=c3c19d"],\ + ["resolve", "patch:resolve@npm%3A1.22.2#optional!builtin::version=1.22.2&hash=e6f707"],\ ["rollup", "npm:2.59.0"]\ ],\ "packagePeers": [\ @@ -6932,7 +6932,7 @@ const RAW_RUNTIME_STATE = ["builtin-modules", "npm:3.2.0"],\ ["deepmerge", "npm:4.3.1"],\ ["is-module", "npm:1.0.0"],\ - ["resolve", "patch:resolve@npm%3A1.22.2#optional!builtin::version=1.22.2&hash=c3c19d"],\ + ["resolve", "patch:resolve@npm%3A1.22.2#optional!builtin::version=1.22.2&hash=e6f707"],\ ["rollup", "npm:2.59.0"]\ ],\ "packagePeers": [\ @@ -8765,7 +8765,7 @@ const RAW_RUNTIME_STATE = ["ignore", "npm:7.0.5"],\ ["natural-compare", "npm:1.4.0"],\ ["ts-api-utils", "virtual:2057356716278406d05e3471fced5b501c2916d38d8d0130527b1ff2527ecd390e0be0f7e14e30a154ce4e03c72f6f4f7aef5607f1f5eaff584c4ce57b3d1034#npm:2.1.0"],\ - ["typescript", "patch:typescript@npm%3A5.9.2#optional!builtin::version=5.9.2&hash=5786d5"]\ + ["typescript", "patch:typescript@npm%3A5.9.2#optional!builtin::version=5.9.2&hash=0d3329"]\ ],\ "packagePeers": [\ "@types/eslint",\ @@ -8798,7 +8798,7 @@ const RAW_RUNTIME_STATE = ["@typescript-eslint/visitor-keys", "npm:8.42.0"],\ ["debug", "virtual:b86a9fb34323a98c6519528ed55faa0d9b44ca8879307c0b29aa384bde47ff59a7d0c9051b31246f14521dfb71ba3c5d6d0b35c29fffc17bf875aa6ad977d9e8#npm:4.4.0"],\ ["eslint", "virtual:e470d99b1e4fdf4c5db5d090ff5472cdeba0404b7ffd31cd2efab3493dd184c67bc45f60c2ef1c040e2c41afe38c6280bffc5df2fbe3aefaa2b6eacf685ab07c#npm:9.20.1"],\ - ["typescript", "patch:typescript@npm%3A5.9.2#optional!builtin::version=5.9.2&hash=5786d5"]\ + ["typescript", "patch:typescript@npm%3A5.9.2#optional!builtin::version=5.9.2&hash=0d3329"]\ ],\ "packagePeers": [\ "@types/eslint",\ @@ -8825,7 +8825,7 @@ const RAW_RUNTIME_STATE = ["@typescript-eslint/tsconfig-utils", "virtual:85cb63ce21784cbcce4b8d4c8b51bb8e115e745b000931d9762c0268af46b55a769b20e278f355997a5d92819e0f0ca9b2fe0cd15af65061c4b435e728c5cbdd#npm:8.42.0"],\ ["@typescript-eslint/types", "npm:8.42.0"],\ ["debug", "virtual:b86a9fb34323a98c6519528ed55faa0d9b44ca8879307c0b29aa384bde47ff59a7d0c9051b31246f14521dfb71ba3c5d6d0b35c29fffc17bf875aa6ad977d9e8#npm:4.4.0"],\ - ["typescript", "patch:typescript@npm%3A5.9.2#optional!builtin::version=5.9.2&hash=5786d5"]\ + ["typescript", "patch:typescript@npm%3A5.9.2#optional!builtin::version=5.9.2&hash=0d3329"]\ ],\ "packagePeers": [\ "@types/typescript",\ @@ -8858,7 +8858,7 @@ const RAW_RUNTIME_STATE = "packageDependencies": [\ ["@types/typescript", null],\ ["@typescript-eslint/tsconfig-utils", "virtual:85cb63ce21784cbcce4b8d4c8b51bb8e115e745b000931d9762c0268af46b55a769b20e278f355997a5d92819e0f0ca9b2fe0cd15af65061c4b435e728c5cbdd#npm:8.42.0"],\ - ["typescript", "patch:typescript@npm%3A5.9.2#optional!builtin::version=5.9.2&hash=5786d5"]\ + ["typescript", "patch:typescript@npm%3A5.9.2#optional!builtin::version=5.9.2&hash=0d3329"]\ ],\ "packagePeers": [\ "@types/typescript",\ @@ -8887,7 +8887,7 @@ const RAW_RUNTIME_STATE = ["debug", "virtual:b86a9fb34323a98c6519528ed55faa0d9b44ca8879307c0b29aa384bde47ff59a7d0c9051b31246f14521dfb71ba3c5d6d0b35c29fffc17bf875aa6ad977d9e8#npm:4.4.0"],\ ["eslint", "virtual:e470d99b1e4fdf4c5db5d090ff5472cdeba0404b7ffd31cd2efab3493dd184c67bc45f60c2ef1c040e2c41afe38c6280bffc5df2fbe3aefaa2b6eacf685ab07c#npm:9.20.1"],\ ["ts-api-utils", "virtual:2057356716278406d05e3471fced5b501c2916d38d8d0130527b1ff2527ecd390e0be0f7e14e30a154ce4e03c72f6f4f7aef5607f1f5eaff584c4ce57b3d1034#npm:2.1.0"],\ - ["typescript", "patch:typescript@npm%3A5.9.2#optional!builtin::version=5.9.2&hash=5786d5"]\ + ["typescript", "patch:typescript@npm%3A5.9.2#optional!builtin::version=5.9.2&hash=0d3329"]\ ],\ "packagePeers": [\ "@types/eslint",\ @@ -8930,7 +8930,7 @@ const RAW_RUNTIME_STATE = ["minimatch", "npm:9.0.5"],\ ["semver", "npm:7.6.0"],\ ["ts-api-utils", "virtual:2057356716278406d05e3471fced5b501c2916d38d8d0130527b1ff2527ecd390e0be0f7e14e30a154ce4e03c72f6f4f7aef5607f1f5eaff584c4ce57b3d1034#npm:2.1.0"],\ - ["typescript", "patch:typescript@npm%3A5.9.2#optional!builtin::version=5.9.2&hash=5786d5"]\ + ["typescript", "patch:typescript@npm%3A5.9.2#optional!builtin::version=5.9.2&hash=0d3329"]\ ],\ "packagePeers": [\ "@types/typescript",\ @@ -8958,7 +8958,7 @@ const RAW_RUNTIME_STATE = ["@typescript-eslint/typescript-estree", "virtual:dabe9f10a58ec3c16b53c2f100ba5eb059af9171d2dcf3d1d9cd79d9f65e6ff837f41da6c1a97d4710b7714d56303ad5b625482f1273b9fcb67b103c080b4ebd#npm:8.42.0"],\ ["@typescript-eslint/utils", "virtual:2057356716278406d05e3471fced5b501c2916d38d8d0130527b1ff2527ecd390e0be0f7e14e30a154ce4e03c72f6f4f7aef5607f1f5eaff584c4ce57b3d1034#npm:8.42.0"],\ ["eslint", "virtual:e470d99b1e4fdf4c5db5d090ff5472cdeba0404b7ffd31cd2efab3493dd184c67bc45f60c2ef1c040e2c41afe38c6280bffc5df2fbe3aefaa2b6eacf685ab07c#npm:9.20.1"],\ - ["typescript", "patch:typescript@npm%3A5.9.2#optional!builtin::version=5.9.2&hash=5786d5"]\ + ["typescript", "patch:typescript@npm%3A5.9.2#optional!builtin::version=5.9.2&hash=0d3329"]\ ],\ "packagePeers": [\ "@types/eslint",\ @@ -9268,7 +9268,7 @@ const RAW_RUNTIME_STATE = ]],\ ["semver", "npm:7.6.0"],\ ["tslib", "npm:2.6.2"],\ - ["typescript", "patch:typescript@npm%3A5.9.2#optional!builtin::version=5.9.2&hash=5786d5"]\ + ["typescript", "patch:typescript@npm%3A5.9.2#optional!builtin::version=5.9.2&hash=0d3329"]\ ],\ "linkType": "SOFT"\ }]\ @@ -10311,7 +10311,7 @@ const RAW_RUNTIME_STATE = ["micromatch", "npm:4.0.5"],\ ["p-limit", "npm:2.2.0"],\ ["tslib", "npm:2.6.2"],\ - ["typescript", "patch:typescript@npm%3A5.9.2#optional!builtin::version=5.9.2&hash=5786d5"]\ + ["typescript", "patch:typescript@npm%3A5.9.2#optional!builtin::version=5.9.2&hash=0d3329"]\ ],\ "linkType": "SOFT"\ }]\ @@ -10395,13 +10395,13 @@ const RAW_RUNTIME_STATE = ["react-tooltip", "virtual:efae73f2e9aa11493dde5182b5b7f0894b5c101cb3c916b74523dc0bde92d8579259d43c7f83a5363dbd8939dc3d1e6c45c5965b9191878533d9a2c19b046d70#npm:5.18.1"],\ ["react-virtualized", "virtual:efae73f2e9aa11493dde5182b5b7f0894b5c101cb3c916b74523dc0bde92d8579259d43c7f83a5363dbd8939dc3d1e6c45c5965b9191878533d9a2c19b046d70#npm:9.22.6"],\ ["react-window", "virtual:efae73f2e9aa11493dde5182b5b7f0894b5c101cb3c916b74523dc0bde92d8579259d43c7f83a5363dbd8939dc3d1e6c45c5965b9191878533d9a2c19b046d70#npm:1.8.11"],\ - ["resolve", "patch:resolve@npm%3A1.22.2#optional!builtin::version=1.22.2&hash=c3c19d"],\ + ["resolve", "patch:resolve@npm%3A1.22.2#optional!builtin::version=1.22.2&hash=e6f707"],\ ["resolve.exports", "npm:2.0.2"],\ ["semver", "npm:7.6.0"],\ ["three", "npm:0.145.0"],\ ["tslib", "npm:2.6.2"],\ ["typedoc", "virtual:efae73f2e9aa11493dde5182b5b7f0894b5c101cb3c916b74523dc0bde92d8579259d43c7f83a5363dbd8939dc3d1e6c45c5965b9191878533d9a2c19b046d70#npm:0.25.8"],\ - ["typescript", "patch:typescript@npm%3A5.9.2#optional!builtin::version=5.9.2&hash=5786d5"],\ + ["typescript", "patch:typescript@npm%3A5.9.2#optional!builtin::version=5.9.2&hash=0d3329"],\ ["unified", "npm:11.0.4"],\ ["unist-util-visit-parents", "npm:6.0.1"],\ ["usehooks-ts", "virtual:efae73f2e9aa11493dde5182b5b7f0894b5c101cb3c916b74523dc0bde92d8579259d43c7f83a5363dbd8939dc3d1e6c45c5965b9191878533d9a2c19b046d70#npm:3.1.1"],\ @@ -10426,7 +10426,7 @@ const RAW_RUNTIME_STATE = ["eslint-plugin-react", "virtual:4b728ee22ccd3ae66b83e3be6d39acfb5b7a775112cc78b6b4322feb849fcfe6e39510452356cb4477dc6089bee57db31d02bbfb03b9fc8e914effa16a4145be#npm:7.37.4"],\ ["globals", "npm:15.15.0"],\ ["tslib", "npm:2.6.2"],\ - ["typescript", "patch:typescript@npm%3A5.9.2#optional!builtin::version=5.9.2&hash=5786d5"]\ + ["typescript", "patch:typescript@npm%3A5.9.2#optional!builtin::version=5.9.2&hash=0d3329"]\ ],\ "packagePeers": [\ "@types/eslint",\ @@ -10449,7 +10449,7 @@ const RAW_RUNTIME_STATE = ["eslint-plugin-react", "virtual:4b728ee22ccd3ae66b83e3be6d39acfb5b7a775112cc78b6b4322feb849fcfe6e39510452356cb4477dc6089bee57db31d02bbfb03b9fc8e914effa16a4145be#npm:7.37.4"],\ ["globals", "npm:15.15.0"],\ ["tslib", "npm:2.6.2"],\ - ["typescript", "patch:typescript@npm%3A5.9.2#optional!builtin::version=5.9.2&hash=5786d5"]\ + ["typescript", "patch:typescript@npm%3A5.9.2#optional!builtin::version=5.9.2&hash=0d3329"]\ ],\ "linkType": "SOFT"\ }]\ @@ -10582,7 +10582,7 @@ const RAW_RUNTIME_STATE = ["pirates", "npm:4.0.5"],\ ["semver", "npm:7.6.0"],\ ["tslib", "npm:2.6.2"],\ - ["typescript", "patch:typescript@npm%3A5.9.2#optional!builtin::version=5.9.2&hash=5786d5"]\ + ["typescript", "patch:typescript@npm%3A5.9.2#optional!builtin::version=5.9.2&hash=0d3329"]\ ],\ "linkType": "SOFT"\ }]\ @@ -10990,8 +10990,10 @@ const RAW_RUNTIME_STATE = ["virtual:10635d85d43c1773f587c2d6565f7a30c3bff1c16e39550dcdd44b3745dd69317ced5e20de16484758df2d6dc9314da646bf356d1ef8485a0dcd939b71a3327c#workspace:packages/plugin-compat", {\ "packageLocation": "./.yarn/__virtual__/@yarnpkg-plugin-compat-virtual-cf41aa914b/1/packages/plugin-compat/",\ "packageDependencies": [\ + ["@types/cross-spawn", "npm:6.0.0"],\ ["@types/lodash-es", "npm:4.17.4"],\ ["@types/resolve", "npm:1.20.2"],\ + ["@types/semver", "npm:7.5.8"],\ ["@types/yarnpkg__core", null],\ ["@types/yarnpkg__plugin-patch", null],\ ["@yarnpkg/cli", "virtual:a4e4e792796cefb4fb82f09187fa18bf4c97a9cb5b106da0eab6189e1895a4bb9bf068e5c91168fec85cee1392df48e4a120f3bae6cbbbde019ff2c21186a374#workspace:packages/yarnpkg-cli"],\ @@ -11002,7 +11004,10 @@ const RAW_RUNTIME_STATE = ["@yarnpkg/plugin-compat", "virtual:10635d85d43c1773f587c2d6565f7a30c3bff1c16e39550dcdd44b3745dd69317ced5e20de16484758df2d6dc9314da646bf356d1ef8485a0dcd939b71a3327c#workspace:packages/plugin-compat"],\ ["@yarnpkg/plugin-npm", "virtual:712d04b0098634bdb13868ff8f85b327022bd7d3880873ada8c0ae56847ed36cf9da1fd74a88519380129cec528fe2bd2201426bc28ac9d4a8cc6734ff25c538#workspace:packages/plugin-npm"],\ ["@yarnpkg/plugin-patch", "virtual:10635d85d43c1773f587c2d6565f7a30c3bff1c16e39550dcdd44b3745dd69317ced5e20de16484758df2d6dc9314da646bf356d1ef8485a0dcd939b71a3327c#workspace:packages/plugin-patch"],\ - ["resolve", "patch:resolve@npm%3A1.22.2#optional!builtin::version=1.22.2&hash=c3c19d"],\ + ["chalk", "npm:4.1.2"],\ + ["cross-spawn", "npm:7.0.6"],\ + ["p-limit", "npm:2.2.0"],\ + ["resolve", "patch:resolve@npm%3A1.22.2#optional!builtin::version=1.22.2&hash=e6f707"],\ ["semver", "npm:7.6.0"]\ ],\ "packagePeers": [\ @@ -11016,8 +11021,10 @@ const RAW_RUNTIME_STATE = ["virtual:16f564b30745199d7e07a913c371ce0c078051290c6e08b972f07b3f1bf057a6993fe67b7c6ee24931d0b1dd67e1274151612081733a79b961dd8336318fdfb9#workspace:packages/plugin-compat", {\ "packageLocation": "./.yarn/__virtual__/@yarnpkg-plugin-compat-virtual-4a5b883314/1/packages/plugin-compat/",\ "packageDependencies": [\ + ["@types/cross-spawn", "npm:6.0.0"],\ ["@types/lodash-es", "npm:4.17.4"],\ ["@types/resolve", "npm:1.20.2"],\ + ["@types/semver", "npm:7.5.8"],\ ["@types/yarnpkg__core", null],\ ["@types/yarnpkg__plugin-patch", null],\ ["@yarnpkg/cli", "virtual:f4e4f4a9a0213f122880195b39adaee7de5cb560c1d806ebc8bace6a3124e5b8f820bbb89ebecd4d535caeb6f527d343143210aa405689c118ff2813b78998a0#workspace:packages/yarnpkg-cli"],\ @@ -11028,7 +11035,10 @@ const RAW_RUNTIME_STATE = ["@yarnpkg/plugin-compat", "virtual:16f564b30745199d7e07a913c371ce0c078051290c6e08b972f07b3f1bf057a6993fe67b7c6ee24931d0b1dd67e1274151612081733a79b961dd8336318fdfb9#workspace:packages/plugin-compat"],\ ["@yarnpkg/plugin-npm", "virtual:712d04b0098634bdb13868ff8f85b327022bd7d3880873ada8c0ae56847ed36cf9da1fd74a88519380129cec528fe2bd2201426bc28ac9d4a8cc6734ff25c538#workspace:packages/plugin-npm"],\ ["@yarnpkg/plugin-patch", "virtual:f4e4f4a9a0213f122880195b39adaee7de5cb560c1d806ebc8bace6a3124e5b8f820bbb89ebecd4d535caeb6f527d343143210aa405689c118ff2813b78998a0#workspace:packages/plugin-patch"],\ - ["resolve", "patch:resolve@npm%3A1.22.2#optional!builtin::version=1.22.2&hash=c3c19d"],\ + ["chalk", "npm:4.1.2"],\ + ["cross-spawn", "npm:7.0.6"],\ + ["p-limit", "npm:2.2.0"],\ + ["resolve", "patch:resolve@npm%3A1.22.2#optional!builtin::version=1.22.2&hash=e6f707"],\ ["semver", "npm:7.6.0"]\ ],\ "packagePeers": [\ @@ -11042,8 +11052,10 @@ const RAW_RUNTIME_STATE = ["virtual:1c3d72c6b31a8950672985f8306a860ecc80c9a006aac95cf4a7ba13a6e7cc4e095e37186a53c9909e9efe97bc0f7f570a74b3879778e2a2356cdcf407120006#workspace:packages/plugin-compat", {\ "packageLocation": "./.yarn/__virtual__/@yarnpkg-plugin-compat-virtual-b605a03544/1/packages/plugin-compat/",\ "packageDependencies": [\ + ["@types/cross-spawn", "npm:6.0.0"],\ ["@types/lodash-es", "npm:4.17.4"],\ ["@types/resolve", "npm:1.20.2"],\ + ["@types/semver", "npm:7.5.8"],\ ["@types/yarnpkg__core", null],\ ["@types/yarnpkg__plugin-patch", null],\ ["@yarnpkg/cli", "virtual:14a22fb3831dfc762a1bb8a042d17886271c56698e1a83233f09eaacff5a5b83fe6f87adb9255774eab3586392c18ff98cf87aa6b374d572d9b72f88829f6d9e#workspace:packages/yarnpkg-cli"],\ @@ -11054,7 +11066,10 @@ const RAW_RUNTIME_STATE = ["@yarnpkg/plugin-compat", "virtual:1c3d72c6b31a8950672985f8306a860ecc80c9a006aac95cf4a7ba13a6e7cc4e095e37186a53c9909e9efe97bc0f7f570a74b3879778e2a2356cdcf407120006#workspace:packages/plugin-compat"],\ ["@yarnpkg/plugin-npm", "virtual:712d04b0098634bdb13868ff8f85b327022bd7d3880873ada8c0ae56847ed36cf9da1fd74a88519380129cec528fe2bd2201426bc28ac9d4a8cc6734ff25c538#workspace:packages/plugin-npm"],\ ["@yarnpkg/plugin-patch", "virtual:1c3d72c6b31a8950672985f8306a860ecc80c9a006aac95cf4a7ba13a6e7cc4e095e37186a53c9909e9efe97bc0f7f570a74b3879778e2a2356cdcf407120006#workspace:packages/plugin-patch"],\ - ["resolve", "patch:resolve@npm%3A1.22.2#optional!builtin::version=1.22.2&hash=c3c19d"],\ + ["chalk", "npm:4.1.2"],\ + ["cross-spawn", "npm:7.0.6"],\ + ["p-limit", "npm:2.2.0"],\ + ["resolve", "patch:resolve@npm%3A1.22.2#optional!builtin::version=1.22.2&hash=e6f707"],\ ["semver", "npm:7.6.0"]\ ],\ "packagePeers": [\ @@ -11068,8 +11083,10 @@ const RAW_RUNTIME_STATE = ["virtual:2351fd5ac4f83ad35b714d8af9fdeea561ada341d529d0dba50742dd5735dc3750df6c56bd680e14833d5b987026a1eab6618211ea0ef1b34b727372b3c77bc9#workspace:packages/plugin-compat", {\ "packageLocation": "./.yarn/__virtual__/@yarnpkg-plugin-compat-virtual-b70719e1cf/1/packages/plugin-compat/",\ "packageDependencies": [\ + ["@types/cross-spawn", "npm:6.0.0"],\ ["@types/lodash-es", "npm:4.17.4"],\ ["@types/resolve", "npm:1.20.2"],\ + ["@types/semver", "npm:7.5.8"],\ ["@types/yarnpkg__core", null],\ ["@types/yarnpkg__plugin-patch", null],\ ["@yarnpkg/cli", "virtual:616a2ba0d005227805d037f4c8ec29f1dd09fdb3e3f49f7b5c4a07a62139a147d373d38bc5ebcb31bddab3956c3fc25d54edf8722741d9ebdbe9d36d21968f91#workspace:packages/yarnpkg-cli"],\ @@ -11080,7 +11097,10 @@ const RAW_RUNTIME_STATE = ["@yarnpkg/plugin-compat", "virtual:2351fd5ac4f83ad35b714d8af9fdeea561ada341d529d0dba50742dd5735dc3750df6c56bd680e14833d5b987026a1eab6618211ea0ef1b34b727372b3c77bc9#workspace:packages/plugin-compat"],\ ["@yarnpkg/plugin-npm", "virtual:712d04b0098634bdb13868ff8f85b327022bd7d3880873ada8c0ae56847ed36cf9da1fd74a88519380129cec528fe2bd2201426bc28ac9d4a8cc6734ff25c538#workspace:packages/plugin-npm"],\ ["@yarnpkg/plugin-patch", "virtual:2351fd5ac4f83ad35b714d8af9fdeea561ada341d529d0dba50742dd5735dc3750df6c56bd680e14833d5b987026a1eab6618211ea0ef1b34b727372b3c77bc9#workspace:packages/plugin-patch"],\ - ["resolve", "patch:resolve@npm%3A1.22.2#optional!builtin::version=1.22.2&hash=c3c19d"],\ + ["chalk", "npm:4.1.2"],\ + ["cross-spawn", "npm:7.0.6"],\ + ["p-limit", "npm:2.2.0"],\ + ["resolve", "patch:resolve@npm%3A1.22.2#optional!builtin::version=1.22.2&hash=e6f707"],\ ["semver", "npm:7.6.0"]\ ],\ "packagePeers": [\ @@ -11094,8 +11114,10 @@ const RAW_RUNTIME_STATE = ["virtual:45a6746f11cef24d8db9429cc5650999571e6bb77a8cfb3904a0e832f542be35246ec490516049308ca15b8678eb03bcf394199e514a8145ec32731af7235c91#workspace:packages/plugin-compat", {\ "packageLocation": "./.yarn/__virtual__/@yarnpkg-plugin-compat-virtual-6f8b2cc32d/1/packages/plugin-compat/",\ "packageDependencies": [\ + ["@types/cross-spawn", "npm:6.0.0"],\ ["@types/lodash-es", "npm:4.17.4"],\ ["@types/resolve", "npm:1.20.2"],\ + ["@types/semver", "npm:7.5.8"],\ ["@types/yarnpkg__core", null],\ ["@types/yarnpkg__plugin-patch", null],\ ["@yarnpkg/cli", "virtual:ef8e1544cc953676e27fe7445218564293b5a190d023e4610c14767688870b772297269e2848a1d8d72f54605aacc9da3b2b7dc56dca754d297b70b14e6a665e#workspace:packages/yarnpkg-cli"],\ @@ -11106,7 +11128,10 @@ const RAW_RUNTIME_STATE = ["@yarnpkg/plugin-compat", "virtual:45a6746f11cef24d8db9429cc5650999571e6bb77a8cfb3904a0e832f542be35246ec490516049308ca15b8678eb03bcf394199e514a8145ec32731af7235c91#workspace:packages/plugin-compat"],\ ["@yarnpkg/plugin-npm", "virtual:712d04b0098634bdb13868ff8f85b327022bd7d3880873ada8c0ae56847ed36cf9da1fd74a88519380129cec528fe2bd2201426bc28ac9d4a8cc6734ff25c538#workspace:packages/plugin-npm"],\ ["@yarnpkg/plugin-patch", "virtual:45a6746f11cef24d8db9429cc5650999571e6bb77a8cfb3904a0e832f542be35246ec490516049308ca15b8678eb03bcf394199e514a8145ec32731af7235c91#workspace:packages/plugin-patch"],\ - ["resolve", "patch:resolve@npm%3A1.22.2#optional!builtin::version=1.22.2&hash=c3c19d"],\ + ["chalk", "npm:4.1.2"],\ + ["cross-spawn", "npm:7.0.6"],\ + ["p-limit", "npm:2.2.0"],\ + ["resolve", "patch:resolve@npm%3A1.22.2#optional!builtin::version=1.22.2&hash=e6f707"],\ ["semver", "npm:7.6.0"]\ ],\ "packagePeers": [\ @@ -11120,8 +11145,10 @@ const RAW_RUNTIME_STATE = ["virtual:4864d30fc563f2fd1b72a5e3869493c5f50bf38f98ed3886173d80c044d981c3f68220dbf17f2b5fc5b4c5fba7d0af2e003926efe3487086484049f41c449852#workspace:packages/plugin-compat", {\ "packageLocation": "./.yarn/__virtual__/@yarnpkg-plugin-compat-virtual-5fe64685a8/1/packages/plugin-compat/",\ "packageDependencies": [\ + ["@types/cross-spawn", "npm:6.0.0"],\ ["@types/lodash-es", "npm:4.17.4"],\ ["@types/resolve", "npm:1.20.2"],\ + ["@types/semver", "npm:7.5.8"],\ ["@types/yarnpkg__core", null],\ ["@types/yarnpkg__plugin-patch", null],\ ["@yarnpkg/cli", "virtual:8bb72793b532d34e63bbc26264dcbcfc4dc4faa0a42627635e997081722bf229d67b7a677d86a568dad949d756630e45b9d4da97ee14b1b4c506494f8a58ea91#workspace:packages/yarnpkg-cli"],\ @@ -11132,7 +11159,10 @@ const RAW_RUNTIME_STATE = ["@yarnpkg/plugin-compat", "virtual:4864d30fc563f2fd1b72a5e3869493c5f50bf38f98ed3886173d80c044d981c3f68220dbf17f2b5fc5b4c5fba7d0af2e003926efe3487086484049f41c449852#workspace:packages/plugin-compat"],\ ["@yarnpkg/plugin-npm", "virtual:712d04b0098634bdb13868ff8f85b327022bd7d3880873ada8c0ae56847ed36cf9da1fd74a88519380129cec528fe2bd2201426bc28ac9d4a8cc6734ff25c538#workspace:packages/plugin-npm"],\ ["@yarnpkg/plugin-patch", "virtual:4864d30fc563f2fd1b72a5e3869493c5f50bf38f98ed3886173d80c044d981c3f68220dbf17f2b5fc5b4c5fba7d0af2e003926efe3487086484049f41c449852#workspace:packages/plugin-patch"],\ - ["resolve", "patch:resolve@npm%3A1.22.2#optional!builtin::version=1.22.2&hash=c3c19d"],\ + ["chalk", "npm:4.1.2"],\ + ["cross-spawn", "npm:7.0.6"],\ + ["p-limit", "npm:2.2.0"],\ + ["resolve", "patch:resolve@npm%3A1.22.2#optional!builtin::version=1.22.2&hash=e6f707"],\ ["semver", "npm:7.6.0"]\ ],\ "packagePeers": [\ @@ -11146,8 +11176,10 @@ const RAW_RUNTIME_STATE = ["virtual:4ff153bc11101851444cc464184bde5e42ffd55b3939421c30a4c2b69483c3267c1680de4a4c00a49c98cbbe35e70111bb3c26f5ce8836b703c15cd5b753451a#workspace:packages/plugin-compat", {\ "packageLocation": "./.yarn/__virtual__/@yarnpkg-plugin-compat-virtual-48e1c4b1e3/1/packages/plugin-compat/",\ "packageDependencies": [\ + ["@types/cross-spawn", "npm:6.0.0"],\ ["@types/lodash-es", "npm:4.17.4"],\ ["@types/resolve", "npm:1.20.2"],\ + ["@types/semver", "npm:7.5.8"],\ ["@types/yarnpkg__core", null],\ ["@types/yarnpkg__plugin-patch", null],\ ["@yarnpkg/cli", "virtual:35104c47575f2fe378d8d20383ae667f19d4dd801df8cc4c76848603aa6b4a2234a00142ff12fd557f6f48bd2810880e31c40c767010ea61a31fca302c2cc5e0#workspace:packages/yarnpkg-cli"],\ @@ -11158,7 +11190,10 @@ const RAW_RUNTIME_STATE = ["@yarnpkg/plugin-compat", "virtual:4ff153bc11101851444cc464184bde5e42ffd55b3939421c30a4c2b69483c3267c1680de4a4c00a49c98cbbe35e70111bb3c26f5ce8836b703c15cd5b753451a#workspace:packages/plugin-compat"],\ ["@yarnpkg/plugin-npm", "virtual:712d04b0098634bdb13868ff8f85b327022bd7d3880873ada8c0ae56847ed36cf9da1fd74a88519380129cec528fe2bd2201426bc28ac9d4a8cc6734ff25c538#workspace:packages/plugin-npm"],\ ["@yarnpkg/plugin-patch", "virtual:4ff153bc11101851444cc464184bde5e42ffd55b3939421c30a4c2b69483c3267c1680de4a4c00a49c98cbbe35e70111bb3c26f5ce8836b703c15cd5b753451a#workspace:packages/plugin-patch"],\ - ["resolve", "patch:resolve@npm%3A1.22.2#optional!builtin::version=1.22.2&hash=c3c19d"],\ + ["chalk", "npm:4.1.2"],\ + ["cross-spawn", "npm:7.0.6"],\ + ["p-limit", "npm:2.2.0"],\ + ["resolve", "patch:resolve@npm%3A1.22.2#optional!builtin::version=1.22.2&hash=e6f707"],\ ["semver", "npm:7.6.0"]\ ],\ "packagePeers": [\ @@ -11172,8 +11207,10 @@ const RAW_RUNTIME_STATE = ["virtual:54c8b951e743ea46368d98ac86d4c1ac7d1aa57c9d31cbf6424fa2d918257654f26f71d51dbfe63844c533e97635ff97de50fd37e6e4bf74f2603a98754d6d22#workspace:packages/plugin-compat", {\ "packageLocation": "./.yarn/__virtual__/@yarnpkg-plugin-compat-virtual-278bc71407/1/packages/plugin-compat/",\ "packageDependencies": [\ + ["@types/cross-spawn", "npm:6.0.0"],\ ["@types/lodash-es", "npm:4.17.4"],\ ["@types/resolve", "npm:1.20.2"],\ + ["@types/semver", "npm:7.5.8"],\ ["@types/yarnpkg__core", null],\ ["@types/yarnpkg__plugin-patch", null],\ ["@yarnpkg/cli", "virtual:712d04b0098634bdb13868ff8f85b327022bd7d3880873ada8c0ae56847ed36cf9da1fd74a88519380129cec528fe2bd2201426bc28ac9d4a8cc6734ff25c538#workspace:packages/yarnpkg-cli"],\ @@ -11184,7 +11221,10 @@ const RAW_RUNTIME_STATE = ["@yarnpkg/plugin-compat", "virtual:54c8b951e743ea46368d98ac86d4c1ac7d1aa57c9d31cbf6424fa2d918257654f26f71d51dbfe63844c533e97635ff97de50fd37e6e4bf74f2603a98754d6d22#workspace:packages/plugin-compat"],\ ["@yarnpkg/plugin-npm", "virtual:712d04b0098634bdb13868ff8f85b327022bd7d3880873ada8c0ae56847ed36cf9da1fd74a88519380129cec528fe2bd2201426bc28ac9d4a8cc6734ff25c538#workspace:packages/plugin-npm"],\ ["@yarnpkg/plugin-patch", "virtual:54c8b951e743ea46368d98ac86d4c1ac7d1aa57c9d31cbf6424fa2d918257654f26f71d51dbfe63844c533e97635ff97de50fd37e6e4bf74f2603a98754d6d22#workspace:packages/plugin-patch"],\ - ["resolve", "patch:resolve@npm%3A1.22.2#optional!builtin::version=1.22.2&hash=c3c19d"],\ + ["chalk", "npm:4.1.2"],\ + ["cross-spawn", "npm:7.0.6"],\ + ["p-limit", "npm:2.2.0"],\ + ["resolve", "patch:resolve@npm%3A1.22.2#optional!builtin::version=1.22.2&hash=e6f707"],\ ["semver", "npm:7.6.0"]\ ],\ "packagePeers": [\ @@ -11198,8 +11238,10 @@ const RAW_RUNTIME_STATE = ["virtual:6fc63e4d1a1b8c6564cfaaeabf378b05cdf49336a90189d76df005175060690d597b069801c0c39b9c60573a6fba29e7646274224b3007bd7f72c95871114cf2#workspace:packages/plugin-compat", {\ "packageLocation": "./.yarn/__virtual__/@yarnpkg-plugin-compat-virtual-b0f3d3ddf7/1/packages/plugin-compat/",\ "packageDependencies": [\ + ["@types/cross-spawn", "npm:6.0.0"],\ ["@types/lodash-es", "npm:4.17.4"],\ ["@types/resolve", "npm:1.20.2"],\ + ["@types/semver", "npm:7.5.8"],\ ["@types/yarnpkg__core", null],\ ["@types/yarnpkg__plugin-patch", null],\ ["@yarnpkg/cli", "virtual:27ebb8cf1fa70157f710b4926b6d25c44192e74dbac3a766c8dc6505a59ebc433221bfb4b5aabc8cca814bbe95fcb6e1ecffcf94ba96ee6112a57c89364571ac#workspace:packages/yarnpkg-cli"],\ @@ -11210,7 +11252,10 @@ const RAW_RUNTIME_STATE = ["@yarnpkg/plugin-compat", "virtual:6fc63e4d1a1b8c6564cfaaeabf378b05cdf49336a90189d76df005175060690d597b069801c0c39b9c60573a6fba29e7646274224b3007bd7f72c95871114cf2#workspace:packages/plugin-compat"],\ ["@yarnpkg/plugin-npm", "virtual:712d04b0098634bdb13868ff8f85b327022bd7d3880873ada8c0ae56847ed36cf9da1fd74a88519380129cec528fe2bd2201426bc28ac9d4a8cc6734ff25c538#workspace:packages/plugin-npm"],\ ["@yarnpkg/plugin-patch", "virtual:6fc63e4d1a1b8c6564cfaaeabf378b05cdf49336a90189d76df005175060690d597b069801c0c39b9c60573a6fba29e7646274224b3007bd7f72c95871114cf2#workspace:packages/plugin-patch"],\ - ["resolve", "patch:resolve@npm%3A1.22.2#optional!builtin::version=1.22.2&hash=c3c19d"],\ + ["chalk", "npm:4.1.2"],\ + ["cross-spawn", "npm:7.0.6"],\ + ["p-limit", "npm:2.2.0"],\ + ["resolve", "patch:resolve@npm%3A1.22.2#optional!builtin::version=1.22.2&hash=e6f707"],\ ["semver", "npm:7.6.0"]\ ],\ "packagePeers": [\ @@ -11224,8 +11269,10 @@ const RAW_RUNTIME_STATE = ["virtual:7b82ac5a3734606065dc76f117982c681b5b5076260acfcac869c687f06db0b8c08eae0998f419d64b9e59f6c816bcc70e067c87fa32ffe9cb979faf85cd80b4#workspace:packages/plugin-compat", {\ "packageLocation": "./.yarn/__virtual__/@yarnpkg-plugin-compat-virtual-b23bfac6d6/1/packages/plugin-compat/",\ "packageDependencies": [\ + ["@types/cross-spawn", "npm:6.0.0"],\ ["@types/lodash-es", "npm:4.17.4"],\ ["@types/resolve", "npm:1.20.2"],\ + ["@types/semver", "npm:7.5.8"],\ ["@types/yarnpkg__core", null],\ ["@types/yarnpkg__plugin-patch", null],\ ["@yarnpkg/cli", "virtual:8bb72793b532d34e63bbc26264dcbcfc4dc4faa0a42627635e997081722bf229d67b7a677d86a568dad949d756630e45b9d4da97ee14b1b4c506494f8a58ea91#workspace:packages/yarnpkg-cli"],\ @@ -11236,7 +11283,10 @@ const RAW_RUNTIME_STATE = ["@yarnpkg/plugin-compat", "virtual:7b82ac5a3734606065dc76f117982c681b5b5076260acfcac869c687f06db0b8c08eae0998f419d64b9e59f6c816bcc70e067c87fa32ffe9cb979faf85cd80b4#workspace:packages/plugin-compat"],\ ["@yarnpkg/plugin-npm", "virtual:712d04b0098634bdb13868ff8f85b327022bd7d3880873ada8c0ae56847ed36cf9da1fd74a88519380129cec528fe2bd2201426bc28ac9d4a8cc6734ff25c538#workspace:packages/plugin-npm"],\ ["@yarnpkg/plugin-patch", "virtual:7b82ac5a3734606065dc76f117982c681b5b5076260acfcac869c687f06db0b8c08eae0998f419d64b9e59f6c816bcc70e067c87fa32ffe9cb979faf85cd80b4#workspace:packages/plugin-patch"],\ - ["resolve", "patch:resolve@npm%3A1.22.2#optional!builtin::version=1.22.2&hash=c3c19d"],\ + ["chalk", "npm:4.1.2"],\ + ["cross-spawn", "npm:7.0.6"],\ + ["p-limit", "npm:2.2.0"],\ + ["resolve", "patch:resolve@npm%3A1.22.2#optional!builtin::version=1.22.2&hash=e6f707"],\ ["semver", "npm:7.6.0"]\ ],\ "packagePeers": [\ @@ -11250,8 +11300,10 @@ const RAW_RUNTIME_STATE = ["virtual:a4e201fc3c2d8b3ec5632082d407d554bbf8ea8b84182577dde1ce419148ae0981b382a0805280637d50e1132628fef8f78ee6a015164963130b1310a4cca910#workspace:packages/plugin-compat", {\ "packageLocation": "./.yarn/__virtual__/@yarnpkg-plugin-compat-virtual-c16f5d91fd/1/packages/plugin-compat/",\ "packageDependencies": [\ + ["@types/cross-spawn", "npm:6.0.0"],\ ["@types/lodash-es", "npm:4.17.4"],\ ["@types/resolve", "npm:1.20.2"],\ + ["@types/semver", "npm:7.5.8"],\ ["@types/yarnpkg__core", null],\ ["@types/yarnpkg__plugin-patch", null],\ ["@yarnpkg/cli", "virtual:142f2540721377707149f0b1d7ad0188d020f822e234abcdca162642d42824b344a1ac44bd6035644a0ca9babd62eb7d72923350ac75b876b51e87eb92b3e464#workspace:packages/yarnpkg-cli"],\ @@ -11262,7 +11314,10 @@ const RAW_RUNTIME_STATE = ["@yarnpkg/plugin-compat", "virtual:a4e201fc3c2d8b3ec5632082d407d554bbf8ea8b84182577dde1ce419148ae0981b382a0805280637d50e1132628fef8f78ee6a015164963130b1310a4cca910#workspace:packages/plugin-compat"],\ ["@yarnpkg/plugin-npm", "virtual:712d04b0098634bdb13868ff8f85b327022bd7d3880873ada8c0ae56847ed36cf9da1fd74a88519380129cec528fe2bd2201426bc28ac9d4a8cc6734ff25c538#workspace:packages/plugin-npm"],\ ["@yarnpkg/plugin-patch", "virtual:a4e201fc3c2d8b3ec5632082d407d554bbf8ea8b84182577dde1ce419148ae0981b382a0805280637d50e1132628fef8f78ee6a015164963130b1310a4cca910#workspace:packages/plugin-patch"],\ - ["resolve", "patch:resolve@npm%3A1.22.2#optional!builtin::version=1.22.2&hash=c3c19d"],\ + ["chalk", "npm:4.1.2"],\ + ["cross-spawn", "npm:7.0.6"],\ + ["p-limit", "npm:2.2.0"],\ + ["resolve", "patch:resolve@npm%3A1.22.2#optional!builtin::version=1.22.2&hash=e6f707"],\ ["semver", "npm:7.6.0"]\ ],\ "packagePeers": [\ @@ -11276,8 +11331,10 @@ const RAW_RUNTIME_STATE = ["virtual:a7c38e9a420fd3b408ea245831c2c9f0e880eac64b268fab3219f5f0b1d6015f44b1f92d23aabfc6e980bbbbda00a23e9faa983fb98544fab94119ccd31f2440#workspace:packages/plugin-compat", {\ "packageLocation": "./.yarn/__virtual__/@yarnpkg-plugin-compat-virtual-08fe6ad7a7/1/packages/plugin-compat/",\ "packageDependencies": [\ + ["@types/cross-spawn", "npm:6.0.0"],\ ["@types/lodash-es", "npm:4.17.4"],\ ["@types/resolve", "npm:1.20.2"],\ + ["@types/semver", "npm:7.5.8"],\ ["@types/yarnpkg__core", null],\ ["@types/yarnpkg__plugin-patch", null],\ ["@yarnpkg/cli", "virtual:a027ddc7edcbf74025e90effce333897039d2c6f8e1ebe319fb72c52c5be1b885da91acc56476d19bb6ce2e31cbc2d5b11241940b82f833a2cac262496c0088f#workspace:packages/yarnpkg-cli"],\ @@ -11288,7 +11345,10 @@ const RAW_RUNTIME_STATE = ["@yarnpkg/plugin-compat", "virtual:a7c38e9a420fd3b408ea245831c2c9f0e880eac64b268fab3219f5f0b1d6015f44b1f92d23aabfc6e980bbbbda00a23e9faa983fb98544fab94119ccd31f2440#workspace:packages/plugin-compat"],\ ["@yarnpkg/plugin-npm", "virtual:08fe6ad7a76ed00f8dc32e3b968ce66fd4db8ac47424db78612ce3633e63ecb46d41984611094facf53bbef7eae7fbf98bbfd729fb77f5ccde564684f4e3a829#workspace:packages/plugin-npm"],\ ["@yarnpkg/plugin-patch", "virtual:a7c38e9a420fd3b408ea245831c2c9f0e880eac64b268fab3219f5f0b1d6015f44b1f92d23aabfc6e980bbbbda00a23e9faa983fb98544fab94119ccd31f2440#workspace:packages/plugin-patch"],\ - ["resolve", "patch:resolve@npm%3A1.22.2#optional!builtin::version=1.22.2&hash=c3c19d"],\ + ["chalk", "npm:4.1.2"],\ + ["cross-spawn", "npm:7.0.6"],\ + ["p-limit", "npm:2.2.0"],\ + ["resolve", "patch:resolve@npm%3A1.22.2#optional!builtin::version=1.22.2&hash=e6f707"],\ ["semver", "npm:7.6.0"]\ ],\ "packagePeers": [\ @@ -11302,8 +11362,10 @@ const RAW_RUNTIME_STATE = ["virtual:adaf1cec8728346f1bf6a263f1954625a52d60518b8d2084da8a926203282105d2b95fb9da84922062af8d4fc84b8a1c39f220238424024e56f55577bdbc7208#workspace:packages/plugin-compat", {\ "packageLocation": "./.yarn/__virtual__/@yarnpkg-plugin-compat-virtual-4e0e483559/1/packages/plugin-compat/",\ "packageDependencies": [\ + ["@types/cross-spawn", "npm:6.0.0"],\ ["@types/lodash-es", "npm:4.17.4"],\ ["@types/resolve", "npm:1.20.2"],\ + ["@types/semver", "npm:7.5.8"],\ ["@types/yarnpkg__core", null],\ ["@types/yarnpkg__plugin-patch", null],\ ["@yarnpkg/cli", "virtual:cfce476fbcac37853570c2d41665757b5f868b1c2f089ee6edbc8bb5aa32141e156cae7d75350d1095258d90afbabe2b2bb142142b995d133c3ee535c89d459b#workspace:packages/yarnpkg-cli"],\ @@ -11314,7 +11376,10 @@ const RAW_RUNTIME_STATE = ["@yarnpkg/plugin-compat", "virtual:adaf1cec8728346f1bf6a263f1954625a52d60518b8d2084da8a926203282105d2b95fb9da84922062af8d4fc84b8a1c39f220238424024e56f55577bdbc7208#workspace:packages/plugin-compat"],\ ["@yarnpkg/plugin-npm", "virtual:712d04b0098634bdb13868ff8f85b327022bd7d3880873ada8c0ae56847ed36cf9da1fd74a88519380129cec528fe2bd2201426bc28ac9d4a8cc6734ff25c538#workspace:packages/plugin-npm"],\ ["@yarnpkg/plugin-patch", "virtual:adaf1cec8728346f1bf6a263f1954625a52d60518b8d2084da8a926203282105d2b95fb9da84922062af8d4fc84b8a1c39f220238424024e56f55577bdbc7208#workspace:packages/plugin-patch"],\ - ["resolve", "patch:resolve@npm%3A1.22.2#optional!builtin::version=1.22.2&hash=c3c19d"],\ + ["chalk", "npm:4.1.2"],\ + ["cross-spawn", "npm:7.0.6"],\ + ["p-limit", "npm:2.2.0"],\ + ["resolve", "patch:resolve@npm%3A1.22.2#optional!builtin::version=1.22.2&hash=e6f707"],\ ["semver", "npm:7.6.0"]\ ],\ "packagePeers": [\ @@ -11328,8 +11393,10 @@ const RAW_RUNTIME_STATE = ["virtual:b4c0e602e8ac4e01a7b08db41bb5808da767dd1f6802758faa5125fb2423614bb0a8806ee1b30c3a0769f86da15ad37377f5118d93cd93fa48df0008a448fb35#workspace:packages/plugin-compat", {\ "packageLocation": "./.yarn/__virtual__/@yarnpkg-plugin-compat-virtual-bc7b846a45/1/packages/plugin-compat/",\ "packageDependencies": [\ + ["@types/cross-spawn", "npm:6.0.0"],\ ["@types/lodash-es", "npm:4.17.4"],\ ["@types/resolve", "npm:1.20.2"],\ + ["@types/semver", "npm:7.5.8"],\ ["@types/yarnpkg__core", null],\ ["@types/yarnpkg__plugin-patch", null],\ ["@yarnpkg/cli", "virtual:3f21a2572d1fa6d1ff8d16d86e25bcefcbff7d17161c440fdbddbd871d9d675c377d66a2cbd98ddb8f2c024060bc7bc6c01e8ae328fa1fef861c72a9b2c30755#workspace:packages/yarnpkg-cli"],\ @@ -11340,7 +11407,10 @@ const RAW_RUNTIME_STATE = ["@yarnpkg/plugin-compat", "virtual:b4c0e602e8ac4e01a7b08db41bb5808da767dd1f6802758faa5125fb2423614bb0a8806ee1b30c3a0769f86da15ad37377f5118d93cd93fa48df0008a448fb35#workspace:packages/plugin-compat"],\ ["@yarnpkg/plugin-npm", "virtual:712d04b0098634bdb13868ff8f85b327022bd7d3880873ada8c0ae56847ed36cf9da1fd74a88519380129cec528fe2bd2201426bc28ac9d4a8cc6734ff25c538#workspace:packages/plugin-npm"],\ ["@yarnpkg/plugin-patch", "virtual:b4c0e602e8ac4e01a7b08db41bb5808da767dd1f6802758faa5125fb2423614bb0a8806ee1b30c3a0769f86da15ad37377f5118d93cd93fa48df0008a448fb35#workspace:packages/plugin-patch"],\ - ["resolve", "patch:resolve@npm%3A1.22.2#optional!builtin::version=1.22.2&hash=c3c19d"],\ + ["chalk", "npm:4.1.2"],\ + ["cross-spawn", "npm:7.0.6"],\ + ["p-limit", "npm:2.2.0"],\ + ["resolve", "patch:resolve@npm%3A1.22.2#optional!builtin::version=1.22.2&hash=e6f707"],\ ["semver", "npm:7.6.0"]\ ],\ "packagePeers": [\ @@ -11354,8 +11424,10 @@ const RAW_RUNTIME_STATE = ["virtual:b63ad861025672af62aed0e7c80dca4cfce3194ca046161e54fc14c498c39e3b82004ea844489c7a58d2f1a31867f388bf25b8128f5ccce46f35305e1f91e9ab#workspace:packages/plugin-compat", {\ "packageLocation": "./.yarn/__virtual__/@yarnpkg-plugin-compat-virtual-60b85f82ba/1/packages/plugin-compat/",\ "packageDependencies": [\ + ["@types/cross-spawn", "npm:6.0.0"],\ ["@types/lodash-es", "npm:4.17.4"],\ ["@types/resolve", "npm:1.20.2"],\ + ["@types/semver", "npm:7.5.8"],\ ["@types/yarnpkg__core", null],\ ["@types/yarnpkg__plugin-patch", null],\ ["@yarnpkg/cli", "virtual:baf8bf095598663073ea5e8bd5af72409e894f8926160bf6fe0a24c693d417f91b536d9e3bbb0ea5f3d0ad8cd2f1ec38b71e964f9475ba719a1f5a8505cf10c3#workspace:packages/yarnpkg-cli"],\ @@ -11366,7 +11438,10 @@ const RAW_RUNTIME_STATE = ["@yarnpkg/plugin-compat", "virtual:b63ad861025672af62aed0e7c80dca4cfce3194ca046161e54fc14c498c39e3b82004ea844489c7a58d2f1a31867f388bf25b8128f5ccce46f35305e1f91e9ab#workspace:packages/plugin-compat"],\ ["@yarnpkg/plugin-npm", "virtual:712d04b0098634bdb13868ff8f85b327022bd7d3880873ada8c0ae56847ed36cf9da1fd74a88519380129cec528fe2bd2201426bc28ac9d4a8cc6734ff25c538#workspace:packages/plugin-npm"],\ ["@yarnpkg/plugin-patch", "virtual:b63ad861025672af62aed0e7c80dca4cfce3194ca046161e54fc14c498c39e3b82004ea844489c7a58d2f1a31867f388bf25b8128f5ccce46f35305e1f91e9ab#workspace:packages/plugin-patch"],\ - ["resolve", "patch:resolve@npm%3A1.22.2#optional!builtin::version=1.22.2&hash=c3c19d"],\ + ["chalk", "npm:4.1.2"],\ + ["cross-spawn", "npm:7.0.6"],\ + ["p-limit", "npm:2.2.0"],\ + ["resolve", "patch:resolve@npm%3A1.22.2#optional!builtin::version=1.22.2&hash=e6f707"],\ ["semver", "npm:7.6.0"]\ ],\ "packagePeers": [\ @@ -11380,8 +11455,10 @@ const RAW_RUNTIME_STATE = ["virtual:c4bd2716e35986fb2e70f5fba6e9570c69eceabc69282df5bcff5d22c6b7d0e696d0cfb4bcbd9a20675fe3e2eb6192b59d41b97baa8b27e1d474b94eeda3f778#workspace:packages/plugin-compat", {\ "packageLocation": "./.yarn/__virtual__/@yarnpkg-plugin-compat-virtual-f1ba55b2e5/1/packages/plugin-compat/",\ "packageDependencies": [\ + ["@types/cross-spawn", "npm:6.0.0"],\ ["@types/lodash-es", "npm:4.17.4"],\ ["@types/resolve", "npm:1.20.2"],\ + ["@types/semver", "npm:7.5.8"],\ ["@types/yarnpkg__core", null],\ ["@types/yarnpkg__plugin-patch", null],\ ["@yarnpkg/cli", "virtual:e3ce0ce4b7f0796ca44011528cb9cdc133fc62a76363fea6de68497bae04bdbe5a6dd47e6b9f23c282eb8e4533d75e96cf378c943d07a4e78aae0b715f06a450#workspace:packages/yarnpkg-cli"],\ @@ -11392,7 +11469,10 @@ const RAW_RUNTIME_STATE = ["@yarnpkg/plugin-compat", "virtual:c4bd2716e35986fb2e70f5fba6e9570c69eceabc69282df5bcff5d22c6b7d0e696d0cfb4bcbd9a20675fe3e2eb6192b59d41b97baa8b27e1d474b94eeda3f778#workspace:packages/plugin-compat"],\ ["@yarnpkg/plugin-npm", "virtual:712d04b0098634bdb13868ff8f85b327022bd7d3880873ada8c0ae56847ed36cf9da1fd74a88519380129cec528fe2bd2201426bc28ac9d4a8cc6734ff25c538#workspace:packages/plugin-npm"],\ ["@yarnpkg/plugin-patch", "virtual:c4bd2716e35986fb2e70f5fba6e9570c69eceabc69282df5bcff5d22c6b7d0e696d0cfb4bcbd9a20675fe3e2eb6192b59d41b97baa8b27e1d474b94eeda3f778#workspace:packages/plugin-patch"],\ - ["resolve", "patch:resolve@npm%3A1.22.2#optional!builtin::version=1.22.2&hash=c3c19d"],\ + ["chalk", "npm:4.1.2"],\ + ["cross-spawn", "npm:7.0.6"],\ + ["p-limit", "npm:2.2.0"],\ + ["resolve", "patch:resolve@npm%3A1.22.2#optional!builtin::version=1.22.2&hash=e6f707"],\ ["semver", "npm:7.6.0"]\ ],\ "packagePeers": [\ @@ -11406,8 +11486,10 @@ const RAW_RUNTIME_STATE = ["virtual:ce4dc3135569e847b88addae1199f9468fb0b37867e1a86ba6725f71b9df587a8ae43356ae86c3bfe3b0cbbf07dcf8c1a4a95199810d9f20df387eec0a1e1965#workspace:packages/plugin-compat", {\ "packageLocation": "./.yarn/__virtual__/@yarnpkg-plugin-compat-virtual-c1671af1b3/1/packages/plugin-compat/",\ "packageDependencies": [\ + ["@types/cross-spawn", "npm:6.0.0"],\ ["@types/lodash-es", "npm:4.17.4"],\ ["@types/resolve", "npm:1.20.2"],\ + ["@types/semver", "npm:7.5.8"],\ ["@types/yarnpkg__core", null],\ ["@types/yarnpkg__plugin-patch", null],\ ["@yarnpkg/cli", "virtual:86c95fabbcd56c56f5f2d2e080e64a1095e3fe233877aa9f7958f317f88a95627e0be2765e89c0cff02c9f08f27b64b7cbc9d5c3960c1df509d5e6ea98cca4f4#workspace:packages/yarnpkg-cli"],\ @@ -11418,7 +11500,10 @@ const RAW_RUNTIME_STATE = ["@yarnpkg/plugin-compat", "virtual:ce4dc3135569e847b88addae1199f9468fb0b37867e1a86ba6725f71b9df587a8ae43356ae86c3bfe3b0cbbf07dcf8c1a4a95199810d9f20df387eec0a1e1965#workspace:packages/plugin-compat"],\ ["@yarnpkg/plugin-npm", "virtual:712d04b0098634bdb13868ff8f85b327022bd7d3880873ada8c0ae56847ed36cf9da1fd74a88519380129cec528fe2bd2201426bc28ac9d4a8cc6734ff25c538#workspace:packages/plugin-npm"],\ ["@yarnpkg/plugin-patch", "virtual:ce4dc3135569e847b88addae1199f9468fb0b37867e1a86ba6725f71b9df587a8ae43356ae86c3bfe3b0cbbf07dcf8c1a4a95199810d9f20df387eec0a1e1965#workspace:packages/plugin-patch"],\ - ["resolve", "patch:resolve@npm%3A1.22.2#optional!builtin::version=1.22.2&hash=c3c19d"],\ + ["chalk", "npm:4.1.2"],\ + ["cross-spawn", "npm:7.0.6"],\ + ["p-limit", "npm:2.2.0"],\ + ["resolve", "patch:resolve@npm%3A1.22.2#optional!builtin::version=1.22.2&hash=e6f707"],\ ["semver", "npm:7.6.0"]\ ],\ "packagePeers": [\ @@ -11432,8 +11517,10 @@ const RAW_RUNTIME_STATE = ["virtual:d1d72d9e3903ca8b8d9c23a360395cc764db2689e5992ef9af91c79f03a839db10ec675af9e4c1c8f4842aff1a614eb5b115fcc0afe8256630151ef1252de94b#workspace:packages/plugin-compat", {\ "packageLocation": "./.yarn/__virtual__/@yarnpkg-plugin-compat-virtual-9d09146e76/1/packages/plugin-compat/",\ "packageDependencies": [\ + ["@types/cross-spawn", "npm:6.0.0"],\ ["@types/lodash-es", "npm:4.17.4"],\ ["@types/resolve", "npm:1.20.2"],\ + ["@types/semver", "npm:7.5.8"],\ ["@types/yarnpkg__core", null],\ ["@types/yarnpkg__plugin-patch", null],\ ["@yarnpkg/cli", "virtual:743b60015fc887fe314a7ee01ea4843b516ac512d77939f47dc39d50bc7db742dc8994fe9bb2245ada0b3ce6f8aa58329d603fbc24093050cd499cb16a1a995f#workspace:packages/yarnpkg-cli"],\ @@ -11444,7 +11531,10 @@ const RAW_RUNTIME_STATE = ["@yarnpkg/plugin-compat", "virtual:d1d72d9e3903ca8b8d9c23a360395cc764db2689e5992ef9af91c79f03a839db10ec675af9e4c1c8f4842aff1a614eb5b115fcc0afe8256630151ef1252de94b#workspace:packages/plugin-compat"],\ ["@yarnpkg/plugin-npm", "virtual:712d04b0098634bdb13868ff8f85b327022bd7d3880873ada8c0ae56847ed36cf9da1fd74a88519380129cec528fe2bd2201426bc28ac9d4a8cc6734ff25c538#workspace:packages/plugin-npm"],\ ["@yarnpkg/plugin-patch", "virtual:d1d72d9e3903ca8b8d9c23a360395cc764db2689e5992ef9af91c79f03a839db10ec675af9e4c1c8f4842aff1a614eb5b115fcc0afe8256630151ef1252de94b#workspace:packages/plugin-patch"],\ - ["resolve", "patch:resolve@npm%3A1.22.2#optional!builtin::version=1.22.2&hash=c3c19d"],\ + ["chalk", "npm:4.1.2"],\ + ["cross-spawn", "npm:7.0.6"],\ + ["p-limit", "npm:2.2.0"],\ + ["resolve", "patch:resolve@npm%3A1.22.2#optional!builtin::version=1.22.2&hash=e6f707"],\ ["semver", "npm:7.6.0"]\ ],\ "packagePeers": [\ @@ -11458,8 +11548,10 @@ const RAW_RUNTIME_STATE = ["virtual:f8376ca2bc11738adced76b97627e7eff07ec08f93f5b76caf8d6bd4f78f5ae9c1911cb9d1a0bd256ef3e0601dedeba933acf0d2381588b6513ee81e25626459#workspace:packages/plugin-compat", {\ "packageLocation": "./.yarn/__virtual__/@yarnpkg-plugin-compat-virtual-10001d27b8/1/packages/plugin-compat/",\ "packageDependencies": [\ + ["@types/cross-spawn", "npm:6.0.0"],\ ["@types/lodash-es", "npm:4.17.4"],\ ["@types/resolve", "npm:1.20.2"],\ + ["@types/semver", "npm:7.5.8"],\ ["@types/yarnpkg__core", null],\ ["@types/yarnpkg__plugin-patch", null],\ ["@yarnpkg/cli", "virtual:4a733c8d9614e2148392368219d98ec1a70b4e8ce99164edd551241b22f6c5233e9d0ccf9f6d83265c8a5aafc617cfd3c4100b3efef1e092a42053c23770ed9a#workspace:packages/yarnpkg-cli"],\ @@ -11470,7 +11562,10 @@ const RAW_RUNTIME_STATE = ["@yarnpkg/plugin-compat", "virtual:f8376ca2bc11738adced76b97627e7eff07ec08f93f5b76caf8d6bd4f78f5ae9c1911cb9d1a0bd256ef3e0601dedeba933acf0d2381588b6513ee81e25626459#workspace:packages/plugin-compat"],\ ["@yarnpkg/plugin-npm", "virtual:712d04b0098634bdb13868ff8f85b327022bd7d3880873ada8c0ae56847ed36cf9da1fd74a88519380129cec528fe2bd2201426bc28ac9d4a8cc6734ff25c538#workspace:packages/plugin-npm"],\ ["@yarnpkg/plugin-patch", "virtual:f8376ca2bc11738adced76b97627e7eff07ec08f93f5b76caf8d6bd4f78f5ae9c1911cb9d1a0bd256ef3e0601dedeba933acf0d2381588b6513ee81e25626459#workspace:packages/plugin-patch"],\ - ["resolve", "patch:resolve@npm%3A1.22.2#optional!builtin::version=1.22.2&hash=c3c19d"],\ + ["chalk", "npm:4.1.2"],\ + ["cross-spawn", "npm:7.0.6"],\ + ["p-limit", "npm:2.2.0"],\ + ["resolve", "patch:resolve@npm%3A1.22.2#optional!builtin::version=1.22.2&hash=e6f707"],\ ["semver", "npm:7.6.0"]\ ],\ "packagePeers": [\ @@ -11484,8 +11579,10 @@ const RAW_RUNTIME_STATE = ["workspace:packages/plugin-compat", {\ "packageLocation": "./packages/plugin-compat/",\ "packageDependencies": [\ + ["@types/cross-spawn", "npm:6.0.0"],\ ["@types/lodash-es", "npm:4.17.4"],\ ["@types/resolve", "npm:1.20.2"],\ + ["@types/semver", "npm:7.5.8"],\ ["@yarnpkg/cli", "virtual:f4e4f4a9a0213f122880195b39adaee7de5cb560c1d806ebc8bace6a3124e5b8f820bbb89ebecd4d535caeb6f527d343143210aa405689c118ff2813b78998a0#workspace:packages/yarnpkg-cli"],\ ["@yarnpkg/core", "workspace:packages/yarnpkg-core"],\ ["@yarnpkg/extensions", "virtual:278bc71407223dd2bc9ed6dcaec459b0cf9f599d3a54c3151d28f79fb3a427390fad08553f7c1ad9311ccd3a081e35dfd4095a517d349ec05b8b41552b547315#workspace:packages/yarnpkg-extensions"],\ @@ -11494,7 +11591,10 @@ const RAW_RUNTIME_STATE = ["@yarnpkg/plugin-compat", "workspace:packages/plugin-compat"],\ ["@yarnpkg/plugin-npm", "virtual:712d04b0098634bdb13868ff8f85b327022bd7d3880873ada8c0ae56847ed36cf9da1fd74a88519380129cec528fe2bd2201426bc28ac9d4a8cc6734ff25c538#workspace:packages/plugin-npm"],\ ["@yarnpkg/plugin-patch", "virtual:f4e4f4a9a0213f122880195b39adaee7de5cb560c1d806ebc8bace6a3124e5b8f820bbb89ebecd4d535caeb6f527d343143210aa405689c118ff2813b78998a0#workspace:packages/plugin-patch"],\ - ["resolve", "patch:resolve@npm%3A1.22.2#optional!builtin::version=1.22.2&hash=c3c19d"],\ + ["chalk", "npm:4.1.2"],\ + ["cross-spawn", "npm:7.0.6"],\ + ["p-limit", "npm:2.2.0"],\ + ["resolve", "patch:resolve@npm%3A1.22.2#optional!builtin::version=1.22.2&hash=e6f707"],\ ["semver", "npm:7.6.0"]\ ],\ "linkType": "SOFT"\ @@ -21214,7 +21314,7 @@ const RAW_RUNTIME_STATE = ["@babel/runtime", "npm:7.27.0"],\ ["babel-plugin-macros", "npm:3.1.0"],\ ["cosmiconfig", "npm:7.0.1"],\ - ["resolve", "patch:resolve@npm%3A1.22.2#optional!builtin::version=1.22.2&hash=c3c19d"]\ + ["resolve", "patch:resolve@npm%3A1.22.2#optional!builtin::version=1.22.2&hash=e6f707"]\ ],\ "linkType": "HARD"\ }]\ @@ -22114,7 +22214,7 @@ const RAW_RUNTIME_STATE = ["anymatch", "npm:3.1.2"],\ ["braces", "npm:3.0.2"],\ ["chokidar", "npm:3.6.0"],\ - ["fsevents", "patch:fsevents@npm%3A2.3.2#optional!builtin::version=2.3.2&hash=df0bf1"],\ + ["fsevents", "patch:fsevents@npm%3A2.3.2#optional!builtin::version=2.3.2&hash=37dad8"],\ ["glob-parent", "npm:5.1.2"],\ ["is-binary-path", "npm:2.1.0"],\ ["is-glob", "npm:4.0.3"],\ @@ -23867,7 +23967,7 @@ const RAW_RUNTIME_STATE = ["react", "npm:19.1.0"],\ ["react-dom", "virtual:efae73f2e9aa11493dde5182b5b7f0894b5c101cb3c916b74523dc0bde92d8579259d43c7f83a5363dbd8939dc3d1e6c45c5965b9191878533d9a2c19b046d70#npm:19.1.0"],\ ["typedoc", "virtual:efae73f2e9aa11493dde5182b5b7f0894b5c101cb3c916b74523dc0bde92d8579259d43c7f83a5363dbd8939dc3d1e6c45c5965b9191878533d9a2c19b046d70#npm:0.25.8"],\ - ["typescript", "patch:typescript@npm%3A5.9.2#optional!builtin::version=5.9.2&hash=5786d5"]\ + ["typescript", "patch:typescript@npm%3A5.9.2#optional!builtin::version=5.9.2&hash=0d3329"]\ ],\ "packagePeers": [\ "@docusaurus/core",\ @@ -24856,7 +24956,7 @@ const RAW_RUNTIME_STATE = ["object.fromentries", "npm:2.0.8"],\ ["object.values", "npm:1.2.1"],\ ["prop-types", "npm:15.8.1"],\ - ["resolve", "patch:resolve@npm%3A2.0.0-next.5#optional!builtin::version=2.0.0-next.5&hash=c3c19d"],\ + ["resolve", "patch:resolve@npm%3A2.0.0-next.5#optional!builtin::version=2.0.0-next.5&hash=e6f707"],\ ["semver", "npm:6.3.1"],\ ["string.prototype.matchall", "npm:4.0.12"],\ ["string.prototype.repeat", "npm:1.0.0"]\ @@ -25812,10 +25912,10 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["fsevents", [\ - ["patch:fsevents@npm%3A2.3.2#optional!builtin::version=2.3.2&hash=df0bf1", {\ - "packageLocation": "./.yarn/unplugged/fsevents-patch-19706e7e35/node_modules/fsevents/",\ + ["patch:fsevents@npm%3A2.3.2#optional!builtin::version=2.3.2&hash=37dad8", {\ + "packageLocation": "./.yarn/unplugged/fsevents-patch-3d8bd78db1/node_modules/fsevents/",\ "packageDependencies": [\ - ["fsevents", "patch:fsevents@npm%3A2.3.2#optional!builtin::version=2.3.2&hash=df0bf1"],\ + ["fsevents", "patch:fsevents@npm%3A2.3.2#optional!builtin::version=2.3.2&hash=37dad8"],\ ["node-gyp", "npm:9.1.0"]\ ],\ "linkType": "HARD"\ @@ -28534,7 +28634,7 @@ const RAW_RUNTIME_STATE = ["@types/node", "npm:24.3.1"],\ ["anymatch", "npm:3.1.2"],\ ["fb-watchman", "npm:2.0.0"],\ - ["fsevents", "patch:fsevents@npm%3A2.3.2#optional!builtin::version=2.3.2&hash=df0bf1"],\ + ["fsevents", "patch:fsevents@npm%3A2.3.2#optional!builtin::version=2.3.2&hash=37dad8"],\ ["graceful-fs", "npm:4.2.11"],\ ["jest-haste-map", "npm:29.2.1"],\ ["jest-regex-util", "npm:29.2.0"],\ @@ -28708,7 +28808,7 @@ const RAW_RUNTIME_STATE = ["jest-resolve", "npm:29.2.1"],\ ["jest-util", "npm:29.7.0"],\ ["jest-validate", "npm:29.2.1"],\ - ["resolve", "patch:resolve@npm%3A1.22.2#optional!builtin::version=1.22.2&hash=c3c19d"],\ + ["resolve", "patch:resolve@npm%3A1.22.2#optional!builtin::version=1.22.2&hash=e6f707"],\ ["resolve.exports", "npm:1.1.0"],\ ["slash", "npm:3.0.0"]\ ],\ @@ -34153,7 +34253,7 @@ const RAW_RUNTIME_STATE = ["minimatch", "npm:3.0.4"],\ ["node-watch", "npm:0.6.0"],\ ["qunit", "npm:2.9.2"],\ - ["resolve", "patch:resolve@npm%3A1.9.0#optional!builtin::version=1.9.0&hash=c3c19d"]\ + ["resolve", "patch:resolve@npm%3A1.9.0#optional!builtin::version=1.9.0&hash=e6f707"]\ ],\ "linkType": "HARD"\ }]\ @@ -34924,7 +35024,7 @@ const RAW_RUNTIME_STATE = "packageLocation": "./.yarn/cache/rechoir-npm-0.6.2-0df5f171ec-fe76bf9c21.zip/node_modules/rechoir/",\ "packageDependencies": [\ ["rechoir", "npm:0.6.2"],\ - ["resolve", "patch:resolve@npm%3A1.22.2#optional!builtin::version=1.22.2&hash=c3c19d"]\ + ["resolve", "patch:resolve@npm%3A1.22.2#optional!builtin::version=1.22.2&hash=e6f707"]\ ],\ "linkType": "HARD"\ }]\ @@ -35340,30 +35440,30 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["resolve", [\ - ["patch:resolve@npm%3A1.22.2#optional!builtin::version=1.22.2&hash=c3c19d", {\ - "packageLocation": "./.yarn/cache/resolve-patch-07d439312e-14594f99db.zip/node_modules/resolve/",\ + ["patch:resolve@npm%3A1.22.2#optional!builtin::version=1.22.2&hash=e6f707", {\ + "packageLocation": "./.yarn/cache/resolve-patch-0fdd5447f7-8b645560f6.zip/node_modules/resolve/",\ "packageDependencies": [\ ["is-core-module", "npm:2.13.1"],\ ["path-parse", "npm:1.0.7"],\ - ["resolve", "patch:resolve@npm%3A1.22.2#optional!builtin::version=1.22.2&hash=c3c19d"],\ + ["resolve", "patch:resolve@npm%3A1.22.2#optional!builtin::version=1.22.2&hash=e6f707"],\ ["supports-preserve-symlinks-flag", "npm:1.0.0"]\ ],\ "linkType": "HARD"\ }],\ - ["patch:resolve@npm%3A1.9.0#optional!builtin::version=1.9.0&hash=c3c19d", {\ - "packageLocation": "./.yarn/cache/resolve-patch-7857a05d65-2f534b82eb.zip/node_modules/resolve/",\ + ["patch:resolve@npm%3A1.9.0#optional!builtin::version=1.9.0&hash=e6f707", {\ + "packageLocation": "./.yarn/cache/resolve-patch-a9031ed256-a14dd5def5.zip/node_modules/resolve/",\ "packageDependencies": [\ ["path-parse", "npm:1.0.7"],\ - ["resolve", "patch:resolve@npm%3A1.9.0#optional!builtin::version=1.9.0&hash=c3c19d"]\ + ["resolve", "patch:resolve@npm%3A1.9.0#optional!builtin::version=1.9.0&hash=e6f707"]\ ],\ "linkType": "HARD"\ }],\ - ["patch:resolve@npm%3A2.0.0-next.5#optional!builtin::version=2.0.0-next.5&hash=c3c19d", {\ - "packageLocation": "./.yarn/cache/resolve-patch-95f8f5d302-05fa778de9.zip/node_modules/resolve/",\ + ["patch:resolve@npm%3A2.0.0-next.5#optional!builtin::version=2.0.0-next.5&hash=e6f707", {\ + "packageLocation": "./.yarn/cache/resolve-patch-fed9e40118-76c221deb1.zip/node_modules/resolve/",\ "packageDependencies": [\ ["is-core-module", "npm:2.13.1"],\ ["path-parse", "npm:1.0.7"],\ - ["resolve", "patch:resolve@npm%3A2.0.0-next.5#optional!builtin::version=2.0.0-next.5&hash=c3c19d"],\ + ["resolve", "patch:resolve@npm%3A2.0.0-next.5#optional!builtin::version=2.0.0-next.5&hash=e6f707"],\ ["supports-preserve-symlinks-flag", "npm:1.0.0"]\ ],\ "linkType": "HARD"\ @@ -35523,7 +35623,7 @@ const RAW_RUNTIME_STATE = ["npm:2.59.0", {\ "packageLocation": "./.yarn/cache/rollup-npm-2.59.0-72e7408354-c4dd25acc1.zip/node_modules/rollup/",\ "packageDependencies": [\ - ["fsevents", "patch:fsevents@npm%3A2.3.2#optional!builtin::version=2.3.2&hash=df0bf1"],\ + ["fsevents", "patch:fsevents@npm%3A2.3.2#optional!builtin::version=2.3.2&hash=37dad8"],\ ["rollup", "npm:2.59.0"]\ ],\ "linkType": "HARD"\ @@ -37377,7 +37477,7 @@ const RAW_RUNTIME_STATE = "packageDependencies": [\ ["@types/typescript", null],\ ["ts-api-utils", "virtual:2057356716278406d05e3471fced5b501c2916d38d8d0130527b1ff2527ecd390e0be0f7e14e30a154ce4e03c72f6f4f7aef5607f1f5eaff584c4ce57b3d1034#npm:2.1.0"],\ - ["typescript", "patch:typescript@npm%3A5.9.2#optional!builtin::version=5.9.2&hash=5786d5"]\ + ["typescript", "patch:typescript@npm%3A5.9.2#optional!builtin::version=5.9.2&hash=0d3329"]\ ],\ "packagePeers": [\ "@types/typescript",\ @@ -37605,7 +37705,7 @@ const RAW_RUNTIME_STATE = ["minimatch", "npm:9.0.5"],\ ["shiki", "npm:0.14.7"],\ ["typedoc", "virtual:efae73f2e9aa11493dde5182b5b7f0894b5c101cb3c916b74523dc0bde92d8579259d43c7f83a5363dbd8939dc3d1e6c45c5965b9191878533d9a2c19b046d70#npm:0.25.8"],\ - ["typescript", "patch:typescript@npm%3A5.9.2#optional!builtin::version=5.9.2&hash=5786d5"]\ + ["typescript", "patch:typescript@npm%3A5.9.2#optional!builtin::version=5.9.2&hash=0d3329"]\ ],\ "packagePeers": [\ "@types/typescript",\ @@ -37615,10 +37715,10 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["typescript", [\ - ["patch:typescript@npm%3A5.9.2#optional!builtin::version=5.9.2&hash=5786d5", {\ - "packageLocation": "./.yarn/cache/typescript-patch-bcfe2ebaf8-bd810ab13e.zip/node_modules/typescript/",\ + ["patch:typescript@npm%3A5.9.2#optional!builtin::version=5.9.2&hash=0d3329", {\ + "packageLocation": "./.yarn/cache/typescript-patch-8920d7b5ed-60ae962e20.zip/node_modules/typescript/",\ "packageDependencies": [\ - ["typescript", "patch:typescript@npm%3A5.9.2#optional!builtin::version=5.9.2&hash=5786d5"]\ + ["typescript", "patch:typescript@npm%3A5.9.2#optional!builtin::version=5.9.2&hash=0d3329"]\ ],\ "linkType": "HARD"\ }]\ diff --git a/.yarn/cache/fsevents-patch-19706e7e35-10.zip b/.yarn/cache/fsevents-patch-3d8bd78db1-10.zip similarity index 100% rename from .yarn/cache/fsevents-patch-19706e7e35-10.zip rename to .yarn/cache/fsevents-patch-3d8bd78db1-10.zip diff --git a/.yarn/cache/resolve-patch-07d439312e-14594f99db.zip b/.yarn/cache/resolve-patch-0fdd5447f7-8b645560f6.zip similarity index 84% rename from .yarn/cache/resolve-patch-07d439312e-14594f99db.zip rename to .yarn/cache/resolve-patch-0fdd5447f7-8b645560f6.zip index 583e6fa98f26..2d4b27e5c254 100644 Binary files a/.yarn/cache/resolve-patch-07d439312e-14594f99db.zip and b/.yarn/cache/resolve-patch-0fdd5447f7-8b645560f6.zip differ diff --git a/.yarn/cache/resolve-patch-7857a05d65-2f534b82eb.zip b/.yarn/cache/resolve-patch-a9031ed256-a14dd5def5.zip similarity index 82% rename from .yarn/cache/resolve-patch-7857a05d65-2f534b82eb.zip rename to .yarn/cache/resolve-patch-a9031ed256-a14dd5def5.zip index db05d91048c3..43bcc232059a 100644 Binary files a/.yarn/cache/resolve-patch-7857a05d65-2f534b82eb.zip and b/.yarn/cache/resolve-patch-a9031ed256-a14dd5def5.zip differ diff --git a/.yarn/cache/resolve-patch-95f8f5d302-05fa778de9.zip b/.yarn/cache/resolve-patch-fed9e40118-76c221deb1.zip similarity index 83% rename from .yarn/cache/resolve-patch-95f8f5d302-05fa778de9.zip rename to .yarn/cache/resolve-patch-fed9e40118-76c221deb1.zip index bedfa85b0888..10f4f76b9e2a 100644 Binary files a/.yarn/cache/resolve-patch-95f8f5d302-05fa778de9.zip and b/.yarn/cache/resolve-patch-fed9e40118-76c221deb1.zip differ diff --git a/.yarn/cache/typescript-patch-bcfe2ebaf8-bd810ab13e.zip b/.yarn/cache/typescript-patch-8920d7b5ed-60ae962e20.zip similarity index 59% rename from .yarn/cache/typescript-patch-bcfe2ebaf8-bd810ab13e.zip rename to .yarn/cache/typescript-patch-8920d7b5ed-60ae962e20.zip index 650db5a7babb..f469997bfc8f 100644 Binary files a/.yarn/cache/typescript-patch-bcfe2ebaf8-bd810ab13e.zip and b/.yarn/cache/typescript-patch-8920d7b5ed-60ae962e20.zip differ diff --git a/.yarn/versions/df63f4ee.yml b/.yarn/versions/df63f4ee.yml new file mode 100644 index 000000000000..1494bd471424 --- /dev/null +++ b/.yarn/versions/df63f4ee.yml @@ -0,0 +1,23 @@ +releases: + "@yarnpkg/cli": patch + "@yarnpkg/plugin-compat": patch + +declined: + - "@yarnpkg/plugin-constraints" + - "@yarnpkg/plugin-dlx" + - "@yarnpkg/plugin-essentials" + - "@yarnpkg/plugin-init" + - "@yarnpkg/plugin-interactive-tools" + - "@yarnpkg/plugin-nm" + - "@yarnpkg/plugin-npm-cli" + - "@yarnpkg/plugin-pack" + - "@yarnpkg/plugin-patch" + - "@yarnpkg/plugin-pnp" + - "@yarnpkg/plugin-pnpm" + - "@yarnpkg/plugin-stage" + - "@yarnpkg/plugin-typescript" + - "@yarnpkg/plugin-version" + - "@yarnpkg/plugin-workspace-tools" + - "@yarnpkg/builder" + - "@yarnpkg/core" + - "@yarnpkg/doctor" diff --git a/packages/plugin-compat/extra/PatchGenerator.ts b/packages/plugin-compat/extra/PatchGenerator.ts new file mode 100644 index 000000000000..aa9679a8a8a1 --- /dev/null +++ b/packages/plugin-compat/extra/PatchGenerator.ts @@ -0,0 +1,317 @@ +import {miscUtils, tgzUtils} from '@yarnpkg/core'; +import {CwdFS, Filename, npath, ppath, xfs, type PortablePath} from '@yarnpkg/fslib'; +import chalk from 'chalk'; +import {tmpdir} from 'node:os'; +import {promisify} from 'node:util'; +import {brotliCompress} from 'node:zlib'; +import pLimit from 'p-limit'; +import semver from 'semver'; + +import {logger, spawn} from './utils'; + +export abstract class PatchGenerator { + protected readonly tmp: PortablePath; + protected readonly patches: PortablePath; + + public constructor( + public readonly name: string, + protected readonly slices: Array, + ) { + const base = process.env.GEN_PATCHES_BASE_DIR + ? npath.toPortablePath(process.env.GEN_PATCHES_BASE_DIR) + : ppath.join(npath.toPortablePath(tmpdir()), `yarn-compat-gen-patches`); + + this.tmp = ppath.join(base, this.name as Filename); + this.patches = ppath.join(npath.toPortablePath(__dirname), this.name as Filename, `patches`); + } + + /** + * Given the path to the build cache directory, populate it by saving the + * "before" state of the slice into `/base` and the "after" state into + * `/patched`. + * + * The build cache directory is guaranteed to exist, but the `base` and + * `patched` sub-directories are not. + */ + protected abstract build(slice: S, path: PortablePath): Promise; + /** + * Given a slice, return the list of package versions the generated patch + * should be validated against. + */ + protected abstract getValidateVersions(slice: S): Promise>; + + private async fetchTarball(version: string): Promise { + // eslint-disable-next-line no-restricted-globals + const response = await fetch(`https://registry.yarnpkg.com/${this.name}/-/${this.name}-${version}.tgz`); + if (!response.ok) + throw new Error(`Failed to fetch tarball for ${this.name}@${version} - ${response.status} ${response.statusText}`); + if (!response.body) + throw new Error(`Failed to fetch tarball for ${this.name}@${version} - Empty body`); + + return Buffer.from(await response.arrayBuffer()); + } + /** + * Return the tarball for the given version of the package with caching. If + * not already cached, it will be fetched from the npm registry. + */ + protected async getTarball(version: string): Promise { + const path = ppath.join(this.tmp, `tarballs`, `${version}.tgz` as Filename); + if (await xfs.existsPromise(path)) + return xfs.readFilePromise(path); + + const [tarball] = await Promise.all([ + this.fetchTarball(version), + xfs.mkdirpPromise(ppath.dirname(path)), + ]); + + await xfs.writeFilePromise(path, tarball); + return tarball; + } + + /** + * Generate a unified diff between the `base` and `patched` sub-directories of + * the given directory, with the custom semver exclusivity header. + */ + protected async diff(range: string, dir: PortablePath): Promise { + const patch = await spawn(`git`, [ + `diff`, + `--no-index`, + `--abbrev=4`, + `-U3`, + `--diff-algorithm=minimal`, + `--src-prefix=a/`, + `--dst-prefix=b/`, + `base`, + `patched`, + ], { + cwd: npath.fromPortablePath(dir), + env: { + GIT_CONFIG_NOSYSTEM: `1`, + HOME: ``, + XDG_CONFIG_HOME: ``, + USERPROFILE: ``, + }, + }).output; + + return patch.toString() + .replace(/^diff --git (?.+) (?.+)\n(?(?:\w.+\n)+)--- (\1|\/dev\/null)\n\+\+\+ \2\n/gm, (_, src, dst, fields, src2) => { + // It is possible to get "a/patched", specifically when the diff is creating a file + const base = src.replace(/^("?a\/)(base|patched)\//, `$1`); + const patched = dst.replace(/^("?b\/)patched\//, `$1`); + return [ + `diff --git ${base} ${patched}`, + fields.slice(0, -1), + `semver exclusivity ${range}`, + `--- ${src2 === `/dev/null` ? `/dev/null` : base}`, + `+++ ${patched}`, + ``, + ].join(`\n`); + }); + } + + /** + * Create the patch for the given slice, reusing any existing cached patch or + * build if available, and write it to disk if not already cached. + */ + protected createPatch(slice: S): Promise<{path: PortablePath, content: string}> { + return logger.section(`Create patch`, async () => { + const path = ppath.join(this.patches, `patch-${slice.id}.diff` as Filename); + + if (await xfs.existsPromise(path)) { + const originalContent = await xfs.readFilePromise(path, `utf8`); + const updatedContent = originalContent.replace(/^semver exclusivity .*\n/gm, `semver exclusivity ${slice.range}\n`); + if (originalContent !== updatedContent) { + await xfs.writeFilePromise(path, updatedContent); + logger.log(`> Reusing cached patch ${ppath.basename(path)} (range updated)`); + } else { + logger.log(`> Reusing cached patch ${ppath.basename(path)}`); + } + + return {path, content: updatedContent}; + } else { + const buildPath = ppath.join(this.tmp, `builds`, slice.id as Filename); + const base = ppath.join(buildPath, `base`); + const patched = ppath.join(buildPath, `patched`); + + if (await xfs.existsPromise(buildPath)) { + await logger.section(`Build`, async () => logger.log(chalk.grey(`> Reusing cached builds`))); + } else { + await xfs.mkdirpPromise(buildPath); + await this.build(slice, buildPath); + } + + return await logger.section(`Generate diff`, async () => { + logger.log(`--- ${npath.fromPortablePath(base)}`); + logger.log(`+++ ${npath.fromPortablePath(patched)}`); + const content = await this.diff(slice.range, buildPath); + + await xfs.writeFilePromise(path, content); + return {path, content}; + }); + } + }); + } + + private readonly envs = new Map>(); + private async prepareValidationEnv(version: string): Promise { + const path = ppath.join(this.tmp, `validate`, version as Filename); + const [tarball] = await Promise.all([ + this.getTarball(version), + xfs.mkdirpPromise(path), + ]); + await tgzUtils.extractArchiveTo(tarball, new CwdFS(path), {stripComponents: 1}); + return path; + } + /** + * Prepare the validation environment for the specified version by extracting + * the package tarball into a temporary directory. + */ + protected async getValidationEnv(version: string): Promise { + return miscUtils.getFactoryWithDefault(this.envs, version, () => this.prepareValidationEnv(version)); + } + private async prepareAllValidationEnvs({signal}: {signal?: AbortSignal} = {}): Promise { + const limit = pLimit(5); + + const versions = await Promise.all(this.slices.map(slice => this.getValidateVersions(slice))); + await Promise.all(versions.flat().map(version => limit(async () => { + if (signal?.aborted) + return null; + + return this.getValidationEnv(version); + }))); + } + /** + * Validate that the given patch can be cleanly applied to the versions of the + * package as selected by {@link getValidateVersions}. + */ + protected validatePatch(slice: S, patch: string): Promise { + return logger.section(`Validate patch`, async () => { + const versions = await this.getValidateVersions(slice); + await Promise.all(versions.map(async version => { + logger.log(`> ${version}`); + const env = await this.getValidationEnv(version); + + const child = spawn(`git`, [`apply`, `--check`, `-`], { + cwd: npath.fromPortablePath(env), + }); + child.process.stdin!.write(patch.replace(/^semver exclusivity .*\n/gm, ``)); + child.process.stdin!.end(); + await child.success; + })); + }); + } + + /** + * Create, write to disk, and validate the patch for the given slice. + */ + protected async generatePatch(slice: S): Promise { + const clearBuildCache = () => xfs.removeSync(ppath.join(this.tmp, `builds`, slice.id as Filename)); + + return await logger.section(`Generate patch ${slice.id} (${slice.range})`, async () => { + // If process exits while creating a patch, or the created patch fails validation, + // remove the build cache so as to not corrupt future builds + process.once(`exit`, clearBuildCache); + const {path, content} = await this.createPatch(slice); + + try { + await this.validatePatch(slice, content); + } catch (err) { + // If a patch fails validation, reusing it in the future will most likely fail again + // So force regeneration in the next run by removing the patch file (and the build cache) + await xfs.removePromise(path); + throw err; + } + + process.off(`exit`, clearBuildCache); + return content; + }); + } + + /** + * Generate all patches and write the compressed TS bundle to the specified + * path. If one or more ranges are specified, caches are not used for slices + * whose range overlaps with any of the specified ranges. + */ + public async generateBundle(ranges: Array, path: PortablePath): Promise { + // Start preparing validation environments immediately + const controller = new AbortController(); + const signal = controller.signal; + // No await here to run preparation in parallel to builds, and prevent + // unhandled rejections. The promises will be grabbed from the map and + // awaited during validation, and errors will be handled then. + void this.prepareAllValidationEnvs({signal}).catch(() => {}); + + try { + const patches = new Map(); + + if (ranges.length > 0) { + const regenerate = ranges.join(` || `); + + // Do regeneration first because those slices are more likely to fail + for (const slice of this.slices.filter(slice => semver.intersects(regenerate, slice.range, {includePrerelease: true}))) { + // Force fresh build by clearing cached files + await Promise.all([ + xfs.removePromise(ppath.join(this.patches, `patch-${slice.id}.diff` as Filename)), + xfs.removePromise(ppath.join(this.tmp, `builds`, slice.id as Filename)), + ]); + + patches.set(slice.id, await this.generatePatch(slice)); + } + } + + for (const slice of this.slices) { + if (!patches.has(slice.id)) { + patches.set(slice.id, await this.generatePatch(slice)); + } + } + + await logger.section(`Generate final patch bundle`, async () => { + const aggregate = await promisify(brotliCompress)(this.slices.map(slice => patches.get(slice.id)).join(``)); + + const bundle = Buffer.from([ + `let patch: string;`, + ``, + `export function getPatch() {`, + ` if (typeof patch === \`undefined\`)`, + ` patch = require(\`zlib\`).brotliDecompressSync(Buffer.from(\`${aggregate.toString(`base64`)}\`, \`base64\`)).toString();`, + ``, + ` return patch;`, + `}`, + ``, + ].join(`\n`)); + + await xfs.writeFilePromise(path, bundle); + }); + + await logger.section(`Prune caches`, async () => { + const buildNames = new Set(this.slices.map(slice => slice.id as Filename)); + const patchNames = new Set(this.slices.map(slice => `patch-${slice.id}.diff` as Filename)); + + // Use allSettled to avoid a race condition with the catch clause + const results = await Promise.allSettled([ + xfs.removePromise(ppath.join(this.tmp, `validate`)), + xfs.readdirPromise(this.patches).then(names => Promise.all( + names.filter(name => !patchNames.has(name)).map(name => xfs.removePromise(ppath.join(this.patches, name))), + )), + xfs.existsPromise(ppath.join(this.tmp, `builds`)).then(async exists => { + if (exists) { + const names = await xfs.readdirPromise(ppath.join(this.tmp, `builds`)); + await Promise.all( + names.filter(name => !buildNames.has(name)).map(name => xfs.removePromise(ppath.join(this.tmp, `builds`, name))), + ); + } + }), + ]); + + const rejection = results.find(result => result.status === `rejected`); + if (rejection !== undefined) { + throw rejection.reason; + } + }); + } catch (err) { + controller.abort(); + await xfs.removePromise(ppath.join(this.tmp, `validate`)); + throw err; + } + } +} diff --git a/packages/plugin-compat/extra/README.md b/packages/plugin-compat/extra/README.md new file mode 100644 index 000000000000..69517a6d17fd --- /dev/null +++ b/packages/plugin-compat/extra/README.md @@ -0,0 +1,49 @@ +# Compat patches generator + +## Overview + +This directory contains scripts and files to generate the builtin patches. Each patched package has its own sub-directory. + +For each package, the `patches` sub-directory contains the set of builtin patches that are applied to it. Each of those patch files is also known as a patch *slice*, and is marked with a semver range of package versions that the patch applies to. + +The `gen--patch.ts` script is used to (re-)generate those patches and update the files in `../source/patches`, which are then bundled with Yarn. + +## Running + +The generator scripts can be run via the package script `build:patch:`. + +As a high-level overview, the script generates each patch slice by: +1. Running a package-specific build process to create the "before" and "after" states of the package +2. Running `git diff` to calculate the diff between the two +3. Validating the diff by trying to apply it as a patch to some versions of the package +4. Saving it to `patches` + +After all slices are generated, they are aggregated, compressed, and encoded into the `../source/patches` bundles. + +## Caching + +There are two layers of caching applied. First, if a patch already exists in the `patches` directory, then the diff is used instead of building and calculating a fresh diff. Second, the "before" and "after" states created during builds are saved and reused to skip future builds. + +The cache and other temporary files used by the generator are stored in `/yarn-compat-gen-patches/`, where `` is the system temporary directory. This directory can be changed by setting the `GEN_PATCHES_BASE_DIR` environment variable to an absolute path. The caches for each package are isolated under sub-directories. + +When running the generator scripts, one or more semver ranges can be given as additional arguments. In that case, when generating any slice whose range overlaps with the given ranges, the cached patches and builds are not reused and a fresh patch is generated. + +On Windows, it is recommended to exclude the cache from Windows Defender as its real-time protection has a huge negative impact to performance during I/O intensive builds. + +## Package-specific notes + +### `fsevents` + +The build process for `fsevents` is simply downloading and extracting the package from npm and copying patched and/or new files into the package. + +### `resolve` + +The build process for `resolve` is similar to that for `fsevents` -- downloading the package from npm and copying patched and/or new files into the package. + +### `typescript` + +For `typescript`, the build process is much heavier. We clone `yarnpkg/TypeScript` (our own fork of the TypeScript repo) from GitHub, cherry-pick commits that implement PnP, and build the TypeScript distributables. + +As the TypeScript repo uses Volta to pin the node and npm versions used to build it, installing Volta is recommended to ensure consistent builds. If Volta is not installed, the generator script only switches the npm version by running npm via Corepack. A warning is printed in this case. + +If you already have a local clone of `yarnpkg/TypeScript`, you can use git's alternates mechanism to allow git to find objects in the local clone, via the `GIT_ALTERNATE_OBJECT_DIRECTORIES` environment variable. This way, you can generate patches using commits in the local clone. The local clone is also used to speed up the script's cloning and fetching operations. However, do note that PRs that update the patches should only reference public commits in `yarnpkg/Typescript` or our CI checks will fail on the PR. diff --git a/packages/plugin-compat/extra/createPatch.js b/packages/plugin-compat/extra/createPatch.js deleted file mode 100644 index 687e3155115f..000000000000 --- a/packages/plugin-compat/extra/createPatch.js +++ /dev/null @@ -1,17 +0,0 @@ -const {readFileSync, writeFileSync} = require(`fs`); -const {brotliCompressSync} = require(`zlib`); - -const patchContent = readFileSync(process.argv[2]); -const patchEncoded = brotliCompressSync(patchContent).toString(`base64`); - -const jsFile = process.argv[3]; - -writeFileSync(jsFile, `let patch: string; - -export function getPatch() { - if (typeof patch === \`undefined\`) - patch = require(\`zlib\`).brotliDecompressSync(Buffer.from(\`${patchEncoded}\`, \`base64\`)).toString(); - - return patch; -} -`); diff --git a/packages/plugin-compat/extra/debugPatch.js b/packages/plugin-compat/extra/debugPatch.js deleted file mode 100644 index 8bc0d0671dd0..000000000000 --- a/packages/plugin-compat/extra/debugPatch.js +++ /dev/null @@ -1,4 +0,0 @@ -const path = require(`path`); - -const {getPatch} = require(path.resolve(process.argv[2], process.argv[3])); -process.stdout.write(getPatch()); diff --git a/packages/plugin-compat/extra/fsevents/.gitignore b/packages/plugin-compat/extra/fsevents/.gitignore deleted file mode 100644 index 90f61bf2574b..000000000000 --- a/packages/plugin-compat/extra/fsevents/.gitignore +++ /dev/null @@ -1 +0,0 @@ -fsevents-*.patch \ No newline at end of file diff --git a/packages/plugin-compat/extra/fsevents/gen-fsevents-patch.sh b/packages/plugin-compat/extra/fsevents/gen-fsevents-patch.sh deleted file mode 100644 index b7a76a540cbf..000000000000 --- a/packages/plugin-compat/extra/fsevents/gen-fsevents-patch.sh +++ /dev/null @@ -1,54 +0,0 @@ -set -ex - -THIS_DIR=$(cd -P "$(dirname "${BASH_SOURCE[0]}")" && pwd) -TEMP_DIR="$(mktemp -d)" - -cd "$TEMP_DIR" - -wget https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.11.tgz -wget https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.2.tgz -wget https://registry.yarnpkg.com/fsevents/-/fsevents-2.2.0.tgz - -tar xvf fsevents-1.2.11.tgz -cp -rf package copy - -cp "$THIS_DIR"/fsevents-1.2.11.js copy/fsevents.js -cp "$THIS_DIR"/vfs.js copy/vfs.js -git diff -U2 --src-prefix=a/ --dst-prefix=b/ --ignore-cr-at-eol --ignore-space-change --full-index --no-index package copy > "$THIS_DIR"/fsevents-1.2.11.patch || true - -rm -rf package copy - -tar xvf fsevents-2.1.2.tgz -cp -rf package copy - -cp "$THIS_DIR"/fsevents-2.1.2.js copy/fsevents.js -cp "$THIS_DIR"/vfs.js copy/vfs.js -git diff -U2 --src-prefix=a/ --dst-prefix=b/ --ignore-cr-at-eol --ignore-space-change --full-index --no-index package copy > "$THIS_DIR"/fsevents-2.1.2.patch || true - -rm -rf package copy - -tar xvf fsevents-2.2.0.tgz -cp -rf package copy - -cp "$THIS_DIR"/fsevents-2.2.0.js copy/fsevents.js -cp "$THIS_DIR"/vfs.js copy/vfs.js -git diff -U2 --src-prefix=a/ --dst-prefix=b/ --ignore-cr-at-eol --ignore-space-change --full-index --no-index package copy > "$THIS_DIR"/fsevents-2.2.0.patch || true - -perl -p -i -e 's#a/package/#a/#' "$THIS_DIR"/fsevents-1.2.11.patch -perl -p -i -e 's#b/copy/#b/#' "$THIS_DIR"/fsevents-1.2.11.patch -perl -p -i -e 's#^--- #semver exclusivity ^1\'$'\n''--- #' "$THIS_DIR"/fsevents-1.2.11.patch - -perl -p -i -e 's#a/package/#a/#' "$THIS_DIR"/fsevents-2.1.2.patch -perl -p -i -e 's#b/copy/#b/#' "$THIS_DIR"/fsevents-2.1.2.patch -perl -p -i -e 's#^--- #semver exclusivity >=2.1 <2.2\'$'\n''--- #' "$THIS_DIR"/fsevents-2.1.2.patch - -perl -p -i -e 's#a/package/#a/#' "$THIS_DIR"/fsevents-2.2.0.patch -perl -p -i -e 's#b/copy/#b/#' "$THIS_DIR"/fsevents-2.2.0.patch -perl -p -i -e 's#^--- #semver exclusivity ^2.2\'$'\n''--- #' "$THIS_DIR"/fsevents-2.2.0.patch - -cat "$THIS_DIR"/fsevents-1.2.11.patch \ - "$THIS_DIR"/fsevents-2.1.2.patch \ - "$THIS_DIR"/fsevents-2.2.0.patch \ - > "$TEMP_DIR"/fsevents.patch - -node "$THIS_DIR/../createPatch.js" "$TEMP_DIR"/fsevents.patch "$THIS_DIR"/../../sources/patches/fsevents.patch.ts diff --git a/packages/plugin-compat/extra/fsevents/gen-fsevents-patch.ts b/packages/plugin-compat/extra/fsevents/gen-fsevents-patch.ts new file mode 100644 index 000000000000..12191ca6b45c --- /dev/null +++ b/packages/plugin-compat/extra/fsevents/gen-fsevents-patch.ts @@ -0,0 +1,72 @@ +import {tgzUtils} from '@yarnpkg/core'; +import type {PortablePath} from '@yarnpkg/fslib'; +import {CwdFS, npath, ppath, xfs} from '@yarnpkg/fslib'; + +import {PatchGenerator} from '../PatchGenerator'; +import {logger} from '../utils'; + +const SLICES = [ + { + id: `1.2.11`, + range: `^1`, + }, + { + id: `2.1.2`, + range: `>=2.1 <2.2`, + }, + { + id: `2.2.0`, + range: `^2.2`, + }, +]; +type Slice = typeof SLICES[0]; + +class ResolvePatchGenerator extends PatchGenerator { + public constructor() { + super(`fsevents`, SLICES); + } + protected async build(slice: Slice, path: PortablePath): Promise { + await logger.section(`Build`, async () => { + const base = ppath.join(path, `base`); + const patched = ppath.join(path, `patched`); + + const tarball = await this.getTarball(slice.id); + await Promise.all([ + tgzUtils.extractArchiveTo(tarball, new CwdFS(base), {stripComponents: 1}), + tgzUtils.extractArchiveTo(tarball, new CwdFS(patched), {stripComponents: 1}), + ]); + + await Promise.all([ + xfs.copyFilePromise( + ppath.join(npath.toPortablePath(__dirname), `fsevents-${slice.id}.js`), + ppath.join(patched, `fsevents.js`), + ), + xfs.copyFilePromise( + ppath.join(npath.toPortablePath(__dirname), `vfs.js`), + ppath.join(patched, `vfs.js`), + ), + ]); + }); + } + protected async getValidateVersions(slice: Slice): Promise> { + // At least smoke test for patch integrity + return [slice.id]; + } +} + +async function main() { + const generator = new ResolvePatchGenerator(); + await generator.generateBundle( + process.argv.slice(2), + ppath.resolve( + npath.toPortablePath(__dirname), + `../../sources/patches/fsevents.patch.ts`, + ), + ); +} + +main().catch(err => { + console.error(); + console.error(err.stack); + process.exitCode = 1; +}); diff --git a/packages/plugin-compat/extra/fsevents/patches/patch-1.2.11.diff b/packages/plugin-compat/extra/fsevents/patches/patch-1.2.11.diff new file mode 100644 index 000000000000..dbcbe81df314 --- /dev/null +++ b/packages/plugin-compat/extra/fsevents/patches/patch-1.2.11.diff @@ -0,0 +1,99 @@ +diff --git a/fsevents.js b/fsevents.js +index 939c..b6a5 100644 +semver exclusivity ^1 +--- a/fsevents.js ++++ b/fsevents.js +@@ -36,7 +36,9 @@ module.exports.Constants = Native.Constants; + var defer = global.setImmediate || process.nextTick; + + function watch(path) { +- var fse = new FSEvents(String(path || ''), handler); ++ var VFS = require('./vfs'); ++ var vfs = new VFS(String(path || '')); ++ var fse = new FSEvents(vfs.resolvedPath, vfs.wrap(handler)); + EventEmitter.call(fse); + return fse; + +diff --git a/vfs.js b/vfs.js +new file mode 100644 +index 0000..3419 +semver exclusivity ^1 +--- /dev/null ++++ b/vfs.js +@@ -0,0 +1,76 @@ ++const path = require(`path`); ++ ++let pnpApi = null; ++try { ++ pnpApi = require(`pnpapi`); ++} catch { ++} ++ ++function getVirtualLookupFn(pnpApi) { ++ const reverseMap = new Map(); ++ ++ for (const locator of pnpApi.getAllLocators()) { ++ const pkg = pnpApi.getPackageInformation(locator); ++ console.assert(pkg, `The package information should be available`); ++ ++ const resolvedLocation = pnpApi.resolveVirtual(pkg.packageLocation); ++ if (resolvedLocation === null) ++ continue; ++ ++ const aliases = reverseMap.get(resolvedLocation) || [resolvedLocation]; ++ reverseMap.set(resolvedLocation, aliases); ++ aliases.push(pkg.packageLocation); ++ } ++ ++ const keys = [...reverseMap.keys()].sort((a, b) => { ++ return b.length - a.length; ++ }); ++ ++ return p => { ++ const prefix = keys.find(candidate => p.startsWith(candidate)); ++ if (typeof prefix === `undefined`) ++ return [p]; ++ ++ const sub = p.substr(prefix.length); ++ return reverseMap.get(prefix).map(alias => { ++ return alias + sub; ++ }); ++ }; ++} ++ ++if (pnpApi != null) { ++ const resolveVirtualAliases = getVirtualLookupFn(pnpApi); ++ ++ module.exports = class FsePnp { ++ constructor(p) { ++ this.normalizedPath = path.resolve(p); ++ this.resolvedPath = pnpApi.resolveVirtual(this.normalizedPath) || this.normalizedPath; ++ } ++ ++ transpose(p) { ++ if (this.resolvedPath !== null) { ++ return this.normalizedPath + p.substr(this.resolvedPath.length); ++ } else { ++ return p; ++ } ++ } ++ ++ wrap(fn) { ++ return (path, ...args) => { ++ for (const entry of resolveVirtualAliases(path)) { ++ fn(this.transpose(entry), ...args); ++ } ++ }; ++ } ++ }; ++} else { ++ module.exports = class FsePnp { ++ constructor(p) { ++ this.resolvedPath = p; ++ } ++ ++ wrap(fn) { ++ return fn; ++ } ++ }; ++} diff --git a/packages/plugin-compat/extra/fsevents/patches/patch-2.1.2.diff b/packages/plugin-compat/extra/fsevents/patches/patch-2.1.2.diff new file mode 100644 index 000000000000..aea02aa543dc --- /dev/null +++ b/packages/plugin-compat/extra/fsevents/patches/patch-2.1.2.diff @@ -0,0 +1,99 @@ +diff --git a/fsevents.js b/fsevents.js +index bf73..2d1d 100644 +semver exclusivity >=2.1 <2.2 +--- a/fsevents.js ++++ b/fsevents.js +@@ -21,7 +21,9 @@ function watch(path, handler) { + throw new TypeError(`fsevents argument 2 must be a function and not a ${typeof handler}`); + } + +- let instance = Native.start(path, handler); ++ let VFS = require('./vfs'); ++ let vfs = new VFS(path); ++ let instance = Native.start(vfs.resolvedPath, vfs.wrap(handler)); + if (!instance) throw new Error(`could not watch: ${path}`); + return () => { + const result = instance +diff --git a/vfs.js b/vfs.js +new file mode 100644 +index 0000..3419 +semver exclusivity >=2.1 <2.2 +--- /dev/null ++++ b/vfs.js +@@ -0,0 +1,76 @@ ++const path = require(`path`); ++ ++let pnpApi = null; ++try { ++ pnpApi = require(`pnpapi`); ++} catch { ++} ++ ++function getVirtualLookupFn(pnpApi) { ++ const reverseMap = new Map(); ++ ++ for (const locator of pnpApi.getAllLocators()) { ++ const pkg = pnpApi.getPackageInformation(locator); ++ console.assert(pkg, `The package information should be available`); ++ ++ const resolvedLocation = pnpApi.resolveVirtual(pkg.packageLocation); ++ if (resolvedLocation === null) ++ continue; ++ ++ const aliases = reverseMap.get(resolvedLocation) || [resolvedLocation]; ++ reverseMap.set(resolvedLocation, aliases); ++ aliases.push(pkg.packageLocation); ++ } ++ ++ const keys = [...reverseMap.keys()].sort((a, b) => { ++ return b.length - a.length; ++ }); ++ ++ return p => { ++ const prefix = keys.find(candidate => p.startsWith(candidate)); ++ if (typeof prefix === `undefined`) ++ return [p]; ++ ++ const sub = p.substr(prefix.length); ++ return reverseMap.get(prefix).map(alias => { ++ return alias + sub; ++ }); ++ }; ++} ++ ++if (pnpApi != null) { ++ const resolveVirtualAliases = getVirtualLookupFn(pnpApi); ++ ++ module.exports = class FsePnp { ++ constructor(p) { ++ this.normalizedPath = path.resolve(p); ++ this.resolvedPath = pnpApi.resolveVirtual(this.normalizedPath) || this.normalizedPath; ++ } ++ ++ transpose(p) { ++ if (this.resolvedPath !== null) { ++ return this.normalizedPath + p.substr(this.resolvedPath.length); ++ } else { ++ return p; ++ } ++ } ++ ++ wrap(fn) { ++ return (path, ...args) => { ++ for (const entry of resolveVirtualAliases(path)) { ++ fn(this.transpose(entry), ...args); ++ } ++ }; ++ } ++ }; ++} else { ++ module.exports = class FsePnp { ++ constructor(p) { ++ this.resolvedPath = p; ++ } ++ ++ wrap(fn) { ++ return fn; ++ } ++ }; ++} diff --git a/packages/plugin-compat/extra/fsevents/patches/patch-2.2.0.diff b/packages/plugin-compat/extra/fsevents/patches/patch-2.2.0.diff new file mode 100644 index 000000000000..fda7a76b2fbb --- /dev/null +++ b/packages/plugin-compat/extra/fsevents/patches/patch-2.2.0.diff @@ -0,0 +1,99 @@ +diff --git a/fsevents.js b/fsevents.js +index f1b3..9f17 100644 +semver exclusivity ^2.2 +--- a/fsevents.js ++++ b/fsevents.js +@@ -28,7 +28,9 @@ function watch(path, since, handler) { + throw new TypeError(`fsevents argument 3 must be a function and not a ${typeof handler}`); + } + +- let instance = Native.start(Native.global, path, since, handler); ++ let VFS = require('./vfs'); ++ let vfs = new VFS(path); ++ let instance = Native.start(Native.global, vfs.resolvedPath, since, vfs.wrap(handler)); + if (!instance) throw new Error(`could not watch: ${path}`); + return () => { + const result = instance ? Promise.resolve(instance).then(Native.stop) : Promise.resolve(undefined); +diff --git a/vfs.js b/vfs.js +new file mode 100644 +index 0000..3419 +semver exclusivity ^2.2 +--- /dev/null ++++ b/vfs.js +@@ -0,0 +1,76 @@ ++const path = require(`path`); ++ ++let pnpApi = null; ++try { ++ pnpApi = require(`pnpapi`); ++} catch { ++} ++ ++function getVirtualLookupFn(pnpApi) { ++ const reverseMap = new Map(); ++ ++ for (const locator of pnpApi.getAllLocators()) { ++ const pkg = pnpApi.getPackageInformation(locator); ++ console.assert(pkg, `The package information should be available`); ++ ++ const resolvedLocation = pnpApi.resolveVirtual(pkg.packageLocation); ++ if (resolvedLocation === null) ++ continue; ++ ++ const aliases = reverseMap.get(resolvedLocation) || [resolvedLocation]; ++ reverseMap.set(resolvedLocation, aliases); ++ aliases.push(pkg.packageLocation); ++ } ++ ++ const keys = [...reverseMap.keys()].sort((a, b) => { ++ return b.length - a.length; ++ }); ++ ++ return p => { ++ const prefix = keys.find(candidate => p.startsWith(candidate)); ++ if (typeof prefix === `undefined`) ++ return [p]; ++ ++ const sub = p.substr(prefix.length); ++ return reverseMap.get(prefix).map(alias => { ++ return alias + sub; ++ }); ++ }; ++} ++ ++if (pnpApi != null) { ++ const resolveVirtualAliases = getVirtualLookupFn(pnpApi); ++ ++ module.exports = class FsePnp { ++ constructor(p) { ++ this.normalizedPath = path.resolve(p); ++ this.resolvedPath = pnpApi.resolveVirtual(this.normalizedPath) || this.normalizedPath; ++ } ++ ++ transpose(p) { ++ if (this.resolvedPath !== null) { ++ return this.normalizedPath + p.substr(this.resolvedPath.length); ++ } else { ++ return p; ++ } ++ } ++ ++ wrap(fn) { ++ return (path, ...args) => { ++ for (const entry of resolveVirtualAliases(path)) { ++ fn(this.transpose(entry), ...args); ++ } ++ }; ++ } ++ }; ++} else { ++ module.exports = class FsePnp { ++ constructor(p) { ++ this.resolvedPath = p; ++ } ++ ++ wrap(fn) { ++ return fn; ++ } ++ }; ++} diff --git a/packages/plugin-compat/extra/resolve/gen-resolve-patch.sh b/packages/plugin-compat/extra/resolve/gen-resolve-patch.sh deleted file mode 100644 index 93ffe82ff74e..000000000000 --- a/packages/plugin-compat/extra/resolve/gen-resolve-patch.sh +++ /dev/null @@ -1,25 +0,0 @@ -set -ex - -THIS_DIR=$(cd -P "$(dirname "${BASH_SOURCE[0]}")" && pwd) -TEMP_DIR="$(mktemp -d)" - -mkdir -p "$TEMP_DIR"/orig -mkdir -p "$TEMP_DIR"/patched - -cd "$TEMP_DIR"/orig -wget -q https://registry.yarnpkg.com/resolve/-/resolve-1.14.1.tgz -tar xvfz resolve-1.14.1.tgz 2> /dev/null - -cd "$TEMP_DIR"/patched -cp "$TEMP_DIR"/orig/resolve-1.14.1.tgz . -tar xvfz resolve-1.14.1.tgz 2> /dev/null - -cp "$THIS_DIR"/normalize-options.js "$TEMP_DIR"/patched/package/lib/normalize-options.js - -git diff --no-index "$TEMP_DIR"/orig/package "$TEMP_DIR"/patched/package \ - | perl -p -e"s#^--- #semver exclusivity >=1.9\n--- #" \ - | perl -p -e"s#$TEMP_DIR/orig/package##" \ - | perl -p -e"s#$TEMP_DIR/patched/package##" \ - > "$TEMP_DIR"/patch.tmp - -node "$THIS_DIR/../createPatch.js" "$TEMP_DIR"/patch.tmp "$THIS_DIR"/../../sources/patches/resolve.patch.ts diff --git a/packages/plugin-compat/extra/resolve/gen-resolve-patch.ts b/packages/plugin-compat/extra/resolve/gen-resolve-patch.ts new file mode 100644 index 000000000000..e6de1f299f1e --- /dev/null +++ b/packages/plugin-compat/extra/resolve/gen-resolve-patch.ts @@ -0,0 +1,58 @@ +import {tgzUtils} from '@yarnpkg/core'; +import type {PortablePath} from '@yarnpkg/fslib'; +import {CwdFS, npath, ppath, xfs} from '@yarnpkg/fslib'; + +import {PatchGenerator} from '../PatchGenerator'; +import {logger} from '../utils'; + +const SLICES = [ + { + id: `1.14.1`, + range: `>=1.9`, + }, +]; +type Slice = typeof SLICES[0]; + +class ResolvePatchGenerator extends PatchGenerator { + public constructor() { + super(`resolve`, SLICES); + } + protected async build(slice: Slice, path: PortablePath): Promise { + await logger.section(`Build`, async () => { + const base = ppath.join(path, `base`); + const patched = ppath.join(path, `patched`); + + const tarball = await this.getTarball(slice.id); + await Promise.all([ + tgzUtils.extractArchiveTo(tarball, new CwdFS(base), {stripComponents: 1}), + tgzUtils.extractArchiveTo(tarball, new CwdFS(patched), {stripComponents: 1}), + ]); + + await xfs.copyFilePromise( + ppath.join(npath.toPortablePath(__dirname), `normalize-options.js`), + ppath.join(patched, `lib`, `normalize-options.js`), + ); + }); + } + protected async getValidateVersions(slice: Slice): Promise> { + // At least smoke test for patch integrity + return [slice.id]; + } +} + +async function main() { + const generator = new ResolvePatchGenerator(); + await generator.generateBundle( + process.argv.slice(2), + ppath.resolve( + npath.toPortablePath(__dirname), + `../../sources/patches/resolve.patch.ts`, + ), + ); +} + +main().catch(err => { + console.error(); + console.error(err.stack); + process.exitCode = 1; +}); diff --git a/packages/plugin-compat/extra/resolve/patches/patch-1.14.1.diff b/packages/plugin-compat/extra/resolve/patches/patch-1.14.1.diff new file mode 100644 index 000000000000..585394a00947 --- /dev/null +++ b/packages/plugin-compat/extra/resolve/patches/patch-1.14.1.diff @@ -0,0 +1,133 @@ +diff --git a/lib/normalize-options.js b/lib/normalize-options.js +index 4b56..544e 100644 +semver exclusivity >=1.9 +--- a/lib/normalize-options.js ++++ b/lib/normalize-options.js +@@ -1,10 +1,119 @@ +-module.exports = function (x, opts) { +- /** +- * This file is purposefully a passthrough. It's expected that third-party +- * environments will override it at runtime in order to inject special logic +- * into `resolve` (by manipulating the options). One such example is the PnP +- * code path in Yarn. +- */ ++// Info: this file has been generated by Yarn with the approval of the ++// `resolve` maintainers. Bugs caused by a code located here should be ++// opened against the Yarn repository. + +- return opts || {}; ++const path = require(`path`); ++ ++module.exports = function (_, opts) { ++ opts = opts || {}; ++ ++ if (opts.forceNodeResolution || !process.versions.pnp) ++ return opts; ++ ++ // It would be nice if we could throw, but that would break the transparent ++ // compatibility with packages that use `resolve` today (such as Gulp). Since ++ // it's the whole point of this patch, we don't. ++ // ++ // if (opts.packageIterator || opts.paths) ++ // throw new Error(`The "packageIterator" and "paths" options cannot be used in PnP environments. Set "forceNodeResolution: true" if absolutely needed, or branch on process.versions.pnp otherwise.`); ++ ++ const {findPnpApi} = require(`module`); ++ ++ const runPnpResolution = (request, basedir) => { ++ // Extract the name of the package being requested (1=package name, 2=internal path) ++ const parts = request.match(/^((?:@[^/]+\/)?[^/]+)(\/.*)?/); ++ if (!parts) ++ throw new Error(`Assertion failed: Expected the "resolve" package to call the "paths" callback with package names only (got "${request}")`); ++ ++ // Make sure that basedir ends with a slash ++ if (basedir.charAt(basedir.length - 1) !== `/`) ++ basedir = path.join(basedir, `/`); ++ ++ const api = findPnpApi(basedir); ++ if (api === null) ++ return undefined; ++ ++ // This is guaranteed to return the path to the "package.json" file from the given package ++ let manifestPath; ++ try { ++ manifestPath = api.resolveToUnqualified(`${parts[1]}/package.json`, basedir, {considerBuiltins: false}); ++ } catch { ++ return null; ++ } ++ ++ if (manifestPath === null) ++ throw new Error(`Assertion failed: The resolution thinks that "${parts[1]}" is a Node builtin`); ++ ++ // Strip the package.json to get the package folder ++ const packagePath = path.dirname(manifestPath); ++ ++ // Attach the internal path to the resolved package directory ++ const unqualifiedPath = typeof parts[2] !== `undefined` ++ ? path.join(packagePath, parts[2]) ++ : packagePath; ++ ++ return {packagePath, unqualifiedPath}; ++ }; ++ ++ const runPnpResolutionOnArray = (request, paths) => { ++ for (let i = 0; i < paths.length; i++) { ++ const resolution = runPnpResolution(request, paths[i]); ++ if (resolution || i === paths.length - 1) { ++ return resolution; ++ } ++ } ++ ++ return null; ++ }; ++ ++ const originalPaths = Array.isArray(opts.paths) ? opts.paths : []; ++ ++ const packageIterator = (request, basedir, getCandidates, opts) => { ++ const pathsToTest = [basedir].concat(originalPaths); ++ const resolution = runPnpResolutionOnArray(request, pathsToTest); ++ if (resolution == null) ++ return getCandidates(); ++ ++ return [resolution.unqualifiedPath]; ++ }; ++ ++ const paths = (request, basedir, getNodeModulePaths, opts) => { ++ const pathsToTest = [basedir].concat(originalPaths); ++ const resolution = runPnpResolutionOnArray(request, pathsToTest); ++ if (resolution == null) ++ return getNodeModulePaths().concat(originalPaths); ++ ++ // Stip the local named folder ++ let nodeModules = path.dirname(resolution.packagePath); ++ ++ // Strip the scope named folder if needed ++ if (request.match(/^@[^/]+\//)) ++ nodeModules = path.dirname(nodeModules); ++ ++ return [nodeModules]; ++ }; ++ ++ // We need to keep track whether we're in `packageIterator` or not so that ++ // the code is compatible with both `resolve` 1.9+ and `resolve` 1.15+ ++ let isInsideIterator = false; ++ ++ if (!opts.__skipPackageIterator) { ++ opts.packageIterator = function (request, basedir, getCandidates, opts) { ++ isInsideIterator = true; ++ try { ++ return packageIterator(request, basedir, getCandidates, opts); ++ } finally { ++ isInsideIterator = false; ++ } ++ }; ++ } ++ ++ opts.paths = function (request, basedir, getNodeModulePaths, opts) { ++ if (isInsideIterator) ++ return getNodeModulePaths().concat(originalPaths); ++ ++ return paths(request, basedir, getNodeModulePaths, opts); ++ }; ++ ++ return opts; + }; diff --git a/packages/plugin-compat/extra/typescript/gen-typescript-patch.js b/packages/plugin-compat/extra/typescript/gen-typescript-patch.js deleted file mode 100644 index fc717e5319ad..000000000000 --- a/packages/plugin-compat/extra/typescript/gen-typescript-patch.js +++ /dev/null @@ -1,603 +0,0 @@ -const assert = require(`assert`); -const cp = require(`child_process`); -const crypto = require(`crypto`); -const fs = require(`fs`); -const https = require(`https`); -const path = require(`path`); -const semver = require(`semver`); - -const TS_REPO = `/tmp/ts-repo-treeless`; -const TS_REPO_SPAWN = {cwd: TS_REPO}; - -const TMP_DIR = `/tmp/ts-builds`; - -const IGNORED_VERSIONS = new Set([ - `3.3.3333`, - `3.7.0-beta`, - `3.9.0-beta`, - `4.0.0-beta`, - `4.3.0-beta`, - `4.4.0-beta`, - // Broken publish - missing files - `4.9.0-beta`, -]); - -const SLICES = [ - { - from: `5d50de3`, - to: `426f5a7`, - onto: `e39bdc3`, - range: `>=3.2 <3.5`, - volta: { - node: `14.15.5`, - npm: `6.14.11`, - }, - }, - { - from: `5d50de3`, - to: `426f5a7`, - onto: `cf7b2d4`, - range: `>=3.5 <=3.6`, - volta: { - node: `14.15.5`, - npm: `6.14.11`, - }, - }, - { - from: `5d50de3`, - to: `426f5a7`, - onto: `cda54b8`, - range: `>3.6 <3.7`, - volta: { - node: `14.15.5`, - npm: `6.14.11`, - }, - }, - { - from: `5d50de3`, - to: `2f85932`, - onto: `e39bdc3`, - range: `>=3.7 <3.9`, - volta: { - node: `14.15.5`, - npm: `6.14.11`, - }, - }, - { - from: `5d50de3`, - to: `3af06df`, - onto: `551f0dd`, - range: `>=3.9 <4.0`, - volta: { - node: `14.15.5`, - npm: `6.14.11`, - }, - }, - { - from: `6dbdd2f`, - to: `6dbdd2f`, - onto: `56865f7`, - range: `>=4.0 <4.1`, - volta: { - node: `14.15.5`, - npm: `6.14.11`, - }, - }, - { - from: `746d79b`, - to: `746d79b`, - onto: `69972a3`, - range: `>=4.1 <4.2`, - volta: { - node: `14.15.5`, - npm: `6.14.11`, - }, - }, - // https://github.com/yarnpkg/TypeScript/tree/merceyz/pnp-4.2 - { - from: `8e0e8703b9c95013aec7819e4593d099cdf7763a`, - to: `178a67b4663d80b0fcbea542e7255b4499b51708`, - onto: `bfc55b5762443c37ecdef08a3b5a4e057b4d1e85`, - range: `>=4.2 <4.3`, - volta: { - node: `14.15.5`, - npm: `6.14.11`, - }, - }, - // https://github.com/yarnpkg/TypeScript/tree/merceyz/pnp-4.3 - { - from: `530aad19e4ac19d35cb6b200168c91ce86cb0050`, - to: `ffa54c5a104e7940b5c23666ddffbf44878f9d9f`, - onto: `28e3e6ff2f49f1dbf06d31809ec73dbe42f1aa63`, - range: `>=4.3 <4.4`, - volta: { - npm: `6.14.11`, - }, - }, - // https://github.com/yarnpkg/TypeScript/tree/merceyz/pnp-4.4 - { - from: `793bfe32745bf6797924354b0fd5be62cf01950c`, - to: `20ffca2f3c48591c971e6606a55b7b1820d8a64f`, - onto: `a10409ccaa3604790dc45f52ef0402eb49015dcf`, - range: `>=4.4 <4.5`, - volta: { - npm: `6.14.11`, - }, - }, - // https://github.com/yarnpkg/TypeScript/tree/merceyz/pnp-4.5 - { - from: `9232978f8e54f073b5451d0bf2737d42a0fd672f`, - to: `3a2388d39d41d000b5c5f9bcd48096b39fcedf8f`, - onto: `55e13e9115b3cc5458d76c39da1211dc28d7b51f`, - range: `>=4.5.2 <4.6`, - volta: { - npm: `6.14.11`, - }, - }, - // https://github.com/yarnpkg/TypeScript/tree/merceyz/pnp-4.6 - { - from: `fbec717ef33fc2db5791f2a1d5f9a315e293a50a`, - to: `fbec717ef33fc2db5791f2a1d5f9a315e293a50a`, - onto: `83efc9f0d646bf86a3469e00c5ef5e4f7ab7cb95`, - range: `>=4.6.1-rc <4.7`, - volta: { - npm: `6.14.11`, - }, - }, - // https://github.com/yarnpkg/TypeScript/tree/merceyz/pnp-4.7 - { - from: `cd8d000510ed2d2910e0ebaa903a51adda546a0a`, - to: `cd8d000510ed2d2910e0ebaa903a51adda546a0a`, - onto: `6e62273fa1e7469b89b589667c2c233789c62176`, - range: `>=4.7.0-beta <4.8`, - volta: { - npm: `6.14.11`, - }, - }, - // https://github.com/yarnpkg/TypeScript/tree/merceyz/pnp-4.8.0-beta - { - from: `3287098f4785fd652112beadf3b33a960fcd19aa`, - to: `3287098f4785fd652112beadf3b33a960fcd19aa`, - onto: `9a09c37878a45b06994485fdb510eb4d24587dcb`, - range: `>=4.8.0-beta <4.8.1-rc`, - volta: { - npm: `6.14.11`, - }, - }, - // https://github.com/yarnpkg/TypeScript/tree/merceyz/pnp-4.8-stable - { - from: `623a7ac5aa49250155d39e604b09b4d015468a9c`, - to: `30840e0c2ad8e115c518f87379b7cb55fdf77f03`, - onto: `60b5167a2a7015759d048cdd4655d1f66a8416a2`, - range: `>=4.8.1-rc <4.8.4`, - }, - // https://github.com/yarnpkg/TypeScript/tree/merceyz/pnp-4.8 - { - from: `d3747e92c3cd2d1f98739382c14226a725df38fd`, - to: `5b9a74243e47db6113e857eabe5d26589fa0b64f`, - onto: `a614119c1921ca61d549a7eee65c0b8c69c28752`, - range: `>=4.8.4 <4.9.1-beta`, - }, - // https://github.com/yarnpkg/TypeScript/tree/merceyz/pnp-4.9-beta - { - from: `69c84aacfcea603c4d74721366cdcbbebd1c1681`, - to: `18b67922d3dcc5215541a38bf6417972270bf60f`, - onto: `549b5429d4837344e8c99657109bb6538fd2dbb5`, - range: `>=4.9.1-beta <4.9.2-rc`, - }, - // https://github.com/yarnpkg/TypeScript/tree/merceyz/pnp-4.9-rc - { - from: `5613f8d8e30dfa9fb3da15e2b8432ed7e2347a12`, - to: `d3a8a86ce4774d607c5a4a225cc5b59b1f96f42f`, - onto: `107f832b80df2dc97748021cb00af2b6813db75b`, - range: `>=4.9.2-rc <4.9.4`, - }, - // https://github.com/yarnpkg/TypeScript/tree/merceyz/pnp-4.9 - { - from: `a0859a75a408ec95222a3f0175ba0644d60396f1`, - to: `936e68ba96e004bd32e438d64ac720c3bfe5576b`, - onto: `e2868216f637e875a74c675845625eb15dcfe9a2`, - range: `>=4.9.4 <5.0.0-beta`, - }, - // https://github.com/yarnpkg/TypeScript/tree/merceyz/pnp-5.0-beta - { - from: `65bff6fadce4736bb9a77213ba8016f1ac7d25e5`, - to: `6225be2771938c6a1fce825eabe66292e4ace489`, - onto: `dcad07ffd29854e2b93a86da0ba197f6eec21698`, - range: `>=5.0.0-beta <5.0.1-rc`, - }, - // https://github.com/yarnpkg/TypeScript/tree/merceyz/pnp-5.0 - { - from: `2c85874875fdf1f1182733b99afe47604915bfec`, - to: `9a2c1c80b05a5fbd5bc6d2bfcbaa617793a236ab`, - onto: `89515ce7e31d0bfaef776ac25929a78015cceb82`, - range: `>=5.0.1-rc <5.1.0-beta`, - }, - // https://github.com/yarnpkg/TypeScript/tree/merceyz/pnp-5.1-beta - { - from: `a6ef895fb06014c416cce2f80969912ec5ea47d5`, - to: `a6ef895fb06014c416cce2f80969912ec5ea47d5`, - onto: `1c5cc6152322cd5b131b6e617e0947bcb068fc4a`, - range: `>=5.1.0-beta <5.1.1-rc`, - }, - // https://github.com/yarnpkg/TypeScript/tree/merceyz/pnp-5.1 - { - from: `20514ce182c598568e4a9c7ed60a4ce84740cecd`, - to: `20514ce182c598568e4a9c7ed60a4ce84740cecd`, - onto: `5c47c6ab567cace50ab5f331a7381b9f0edb56ca`, - range: `>=5.1.1-rc <5.2.0-beta`, - }, - // https://github.com/yarnpkg/TypeScript/tree/merceyz/pnp-5.2-beta - { - from: `8781702c1b45bd2d5d437c0a138dd62b57b9b284`, - to: `8781702c1b45bd2d5d437c0a138dd62b57b9b284`, - onto: `d6e7eb6cf08a1cc8fb6d9888f74b0e694cc2a7b0`, - range: `>=5.2.0-beta <5.2.1-rc`, - }, - // https://github.com/yarnpkg/TypeScript/tree/merceyz/pnp-5.2 - { - from: `8c288a316928c9c161215fdf91ef015caa610d5b`, - to: `8c288a316928c9c161215fdf91ef015caa610d5b`, - onto: `6074b9d12b70757fe68ab2b4da059ea363c4df04`, - range: `>=5.2.1-rc <5.3.0-beta`, - }, - // https://github.com/yarnpkg/TypeScript/tree/merceyz/pnp-5.3-beta - { - from: `2b564c684dc5338c59c31f4658b737912ad46336`, - to: `2b564c684dc5338c59c31f4658b737912ad46336`, - onto: `c5de6b57b7f09a6d17eb4a5dab91ecf8f5b25f29`, - range: `>=5.3.0-beta <5.3.1-rc`, - }, - // https://github.com/yarnpkg/TypeScript/tree/merceyz/pnp-5.3 - { - from: `9fb5c1cac14376fe615dfd48ddbe4e97c2e6ac90`, - to: `9fb5c1cac14376fe615dfd48ddbe4e97c2e6ac90`, - onto: `88f80c75e1a4ab6aaec605aa4ec6281b87871ff0`, - range: `>=5.3.1-rc <5.4.0-beta`, - }, - // https://github.com/yarnpkg/TypeScript/tree/merceyz/pnp-5.4-beta - { - from: `9420c380b6f1f072ff66372cbf776fafd6eeed1c`, - to: `9420c380b6f1f072ff66372cbf776fafd6eeed1c`, - onto: `e80675868dff622d0870939e7c9930c68904e7e7`, - range: `>=5.4.0-beta <5.4.1-rc`, - }, - // https://github.com/yarnpkg/TypeScript/tree/merceyz/pnp-5.4-rc - { - from: `786e26825dad9dcc0eff79610bffd8bb121e7e8a`, - to: `786e26825dad9dcc0eff79610bffd8bb121e7e8a`, - onto: `db6b2a980280a9c87799b9c1edd6d71e92bb255b`, - range: `>=5.4.1-rc <5.5.0-beta`, - }, - // https://github.com/yarnpkg/TypeScript/tree/merceyz/pnp-5.5-beta - { - from: `f90eb7508e66a3d5066b1d8a06606c6c23f3df43`, - to: `43d2cbd6ac423e35a5a095a509fc90c03f0c22ba`, - onto: `b574864abc989d0f8b15367baea1058819e126ba`, - range: `>=5.5.0-beta <5.5.2`, - }, - // https://github.com/yarnpkg/TypeScript/tree/merceyz/pnp-5.5 - { - from: `5b321aa5835f9f4dba6d55553fd559985d44b1a9`, - to: `c41328460d8dba2fac56c220803c68ca961d7cd5`, - onto: `ce2e60e4ea15a65992e54a9e8877d16be9d42abb`, - range: `>=5.5.2 <5.6.0-beta`, - }, - // https://github.com/yarnpkg/TypeScript/tree/merceyz/pnp-5.6-beta - { - from: `b774b54693034b8aeae7f9a7b24d25fcacdbc8a5`, - to: `b774b54693034b8aeae7f9a7b24d25fcacdbc8a5`, - onto: `b4732bdd6199ec353ec0873f334515f391d80d3b`, - range: `>=5.6.0-beta <5.6.1-rc`, - }, - // https://github.com/yarnpkg/TypeScript/tree/merceyz/pnp-5.6-rc - { - from: `0102e47303cb33503219740015f711e2fe7d89ab`, - to: `0102e47303cb33503219740015f711e2fe7d89ab`, - onto: `6212132b835145b1a8fd49982680ac668caf3ddc`, - range: `>=5.6.1-rc <5.7.0-beta`, - }, - // https://github.com/yarnpkg/TypeScript/tree/merceyz/pnp-5.7-beta - { - from: `18776a771f795ecc2535ee56705ea9fdb786a569`, - to: `519971751e31f38542a608abf21ba3d61c5c3f93`, - onto: `69fb689edbbce517a4615be9d356c6c812639849`, - range: `>=5.7.0-beta <5.7.1-rc`, - }, - // https://github.com/yarnpkg/TypeScript/tree/merceyz/pnp-5.7-rc - { - from: `99f3e130bbe02473680bfa040d131c1f7f08fcc0`, - to: `99f3e130bbe02473680bfa040d131c1f7f08fcc0`, - onto: `c1216dea1a504da7b89b5221b925abcd1702d7e4`, - range: `>=5.7.1-rc`, - }, -]; - -async function fetch(url) { - return new Promise((resolve, reject) => { - const req = https.get(url, res => { - if (!(res.statusCode >= 200 && res.statusCode < 300)) - throw new Error(`Failed to fetch ${url}`); - - const chunks = []; - - res.on(`error`, err => { - reject(err); - }); - - res.on(`data`, chunk => { - chunks.push(chunk); - }); - - res.on(`end`, () => { - resolve(Buffer.concat(chunks)); - }); - }); - - req.on(`error`, err => { - reject(err); - }); - }); -} - -async function execFile(binary, args, {checkExitCode = true, ...opts} = {}) { - console.log(`${binary} ${args.join(` `)}`); - - return new Promise((resolve, reject) => { - const child = cp.spawn(binary, args, { - ...opts, - env: { - ...process.env, - NODE_OPTIONS: undefined, - }, - }); - - const outChunks = []; - const allChunks = []; - - child.stdout.on(`data`, chunk => { - outChunks.push(chunk); - allChunks.push(chunk); - }); - - child.stderr.on(`data`, chunk => { - allChunks.push(chunk); - }); - - child.on(`error`, err => { - err.message += `\n\n${Buffer.concat(allChunks).toString()}\n`; - reject(err); - }); - - child.on(`close`, code => { - if (code === 0 || !checkExitCode) { - resolve(Buffer.concat(outChunks)); - } else { - reject(new Error(`The process exited\n\n${Buffer.concat(allChunks).toString()}\n`)); - } - }); - }); -} - -let relevantVersions; - -async function fetchVersions(range) { - if (typeof relevantVersions === `undefined`) { - const data = await fetch(`https://registry.yarnpkg.com/typescript`); - const allVersions = Object.keys(JSON.parse(data.toString()).versions); - - relevantVersions = []; - - for (const version of allVersions) { - if (IGNORED_VERSIONS.has(version)) - continue; - - const pre = semver.prerelease(version); - if (pre && pre[0] !== `beta` && pre[0] !== `rc`) - continue; - - relevantVersions.push(version); - } - } - - const versions = []; - - for (const version of relevantVersions) { - const parsed = semver.parse(version); - - const base = `${parsed.major}.${parsed.minor}.${parsed.patch}`; - if (!semver.satisfies(base, range)) - continue; - - versions.push(version); - } - - return versions; -} - -async function cloneRepository() { - if (!fs.existsSync(TS_REPO)) - await execFile(`git`, [`clone`, `--filter=tree:0`, `https://github.com/yarnpkg/TypeScript`, TS_REPO]); - - try { - await execFile(`git`, [`cherry-pick`, `--abort`], TS_REPO_SPAWN); - } catch {} - - await execFile(`git`, [`config`, `user.email`, `you@example.com`], TS_REPO_SPAWN); - await execFile(`git`, [`config`, `user.name`, `Your Name`], TS_REPO_SPAWN); - - await execFile(`git`, [`fetch`, `origin`], TS_REPO_SPAWN); -} - -async function resetGit(hash) { - await execFile(`git`, [`reset`, `--hard`, hash], TS_REPO_SPAWN); - await execFile(`git`, [`clean`, `-df`], TS_REPO_SPAWN); -} - -async function buildRepository({from, to, onto, volta}) { - const code = Math.floor(Math.random() * 0x100000000).toString(16).padStart(8, `0`); - const tmpDir = path.join(TMP_DIR, `${code}`); - - await resetGit(onto); - - const date = await execFile(`git`, [`show`, `-s`, `--format=%ci`], TS_REPO_SPAWN); - - if (to) { - let isAncestor; - try { - await execFile(`git`, [`merge-base`, `--is-ancestor`, onto, to], TS_REPO_SPAWN); - isAncestor = true; - } catch { - isAncestor = false; - } - - if (isAncestor) { - await execFile(`git`, [`merge`, `--no-edit`, to], TS_REPO_SPAWN); - } else { - await execFile(`git`, [`cherry-pick`, `${from}^..${to}`], TS_REPO_SPAWN); - } - } - - { - const pkgPath = path.join(TS_REPO, `package.json`); - const pkg = JSON.parse(await fs.promises.readFile(pkgPath, `utf8`)); - - assert(!(pkg.volta?.node && volta?.node), `node version is already set for ${pkg.version}`); - assert(!(pkg.volta?.npm && volta?.npm), `npm version is already set for ${pkg.version}`); - - const voltaConfig = { - ...volta, - ...pkg.volta, - }; - assert(voltaConfig.node && voltaConfig.npm, `Missing complete volta configuration for ${pkg.version}, current config: ${JSON.stringify(voltaConfig)}`); - - if (JSON.stringify(pkg.volta) !== JSON.stringify(voltaConfig)) { - pkg.volta = voltaConfig; - await fs.promises.writeFile(pkgPath, JSON.stringify(pkg, null, 4)); - } - } - - if (fs.existsSync(path.join(TS_REPO, `package-lock.json`))) - await execFile(`volta`, [`run`, `npm`, `ci`], TS_REPO_SPAWN); - else - await execFile(`volta`, [`run`, `npm`, `install`, `--before`, date.toString().trim()], TS_REPO_SPAWN); - - await execFile(`volta`, [`run`, `node`, fs.existsSync(`${TS_REPO}/node_modules/.bin/hereby`) ? `./node_modules/.bin/hereby` : `./node_modules/.bin/gulp`, `local`, `LKG`], TS_REPO_SPAWN); - - // It seems that in some circumstances the build can produce incorrect artifacts. When - // that happens, the final binary is very small. We try to detect that. - const stat = await fs.promises.stat(path.join(TS_REPO, `lib/typescript.js`)); - if (stat.size < 100000) - throw new Error(`Something is wrong; typescript.js got generated with a stupid size`); - - await fs.promises.mkdir(tmpDir, {recursive: true}); - await execFile(`cp`, [`-r`, `lib`, tmpDir], TS_REPO_SPAWN); - - await execFile(`rm`, [`-rf`, `lib`], TS_REPO_SPAWN); - await execFile(`git`, [`reset`, `--hard`], TS_REPO_SPAWN); - - return tmpDir; -} - -async function run({from, to, onto, range, volta}) { - const hash = crypto - .createHash(`md5`) - .update(JSON.stringify({from, to, onto})) - .digest(`hex`); - - const patchFile = path.join(__dirname, `patch-${hash}.diff`); - if (fs.existsSync(patchFile)) { - const originalContent = await fs.promises.readFile(patchFile, `utf8`); - const updatedContent = originalContent.replace(/^semver exclusivity .*\n/gm, `semver exclusivity ${range}\n`); - if (originalContent !== updatedContent) { - console.log(`Updating range for ${path.basename(patchFile)}`); - await fs.promises.writeFile(patchFile, updatedContent); - return {patchFile, content: updatedContent}; - } else { - console.log(`Skipping; patch ${path.basename(patchFile)} already exists`); - return {patchFile, content: originalContent}; - } - } - - await cloneRepository(); - - const base = await buildRepository({onto, volta}); - const patched = await buildRepository({from, to, onto, volta}); - - const buffer = await execFile(`git`, [`diff`, `--no-index`, base, patched], {checkExitCode: false}); - - let patch = buffer.toString(); - patch = patch.replace(/^--- /gm, `semver exclusivity ${range}\n--- `); - patch = patch.replace(new RegExp(`${base}/`, `g`), `/`); - patch = patch.replace(new RegExp(`${patched}/`, `g`), `/`); - patch = patch.replace(new RegExp(`${patched}/`, `g`), `/`); - - await fs.promises.writeFile(patchFile, patch); - - return {patchFile, content: patch}; -} - -async function validate(version, patch) { - const tmpDir = path.join(TMP_DIR, `v${version}`); - const tarball = path.join(tmpDir, `package.tgz`); - - await fs.promises.mkdir(tmpDir, {recursive: true}); - - if (!fs.existsSync(tarball)) { - const data = await fetch(`https://registry.yarnpkg.com/typescript/-/typescript-${version}.tgz`); - await fs.promises.writeFile(tarball, data); - } - - if (!fs.existsSync(path.join(tmpDir, `package`))) - await execFile(`tar`, [`xvf`, tarball], {cwd: tmpDir}); - - const patchContent = patch.content.replace(/^semver exclusivity .*\n/gm, ``); - await fs.promises.writeFile(path.join(tmpDir, `patch.diff`), patchContent); - - await execFile(`git`, [`apply`, `--check`, `../patch.diff`], {cwd: path.join(tmpDir, `package`)}); -} - -async function main() { - const patches = []; - let isFirst = true; - - for (const slice of SLICES) { - if (!isFirst) - console.log(); - - isFirst = false; - - console.log(`## Slice: ${JSON.stringify(slice)}`); - console.log(); - - const patch = await run(slice); - const versions = await fetchVersions(slice.range); - - await Promise.all(versions.map(async version => { - console.log(`Validating ${version}...`); - await validate(version, patch); - })); - - patches.push(patch); - } - - const aggregatePatchFile = path.join(TMP_DIR, `patch.diff`); - await fs.promises.writeFile(aggregatePatchFile, patches.map(patch => patch.content).join(``)); - - const jsPatchFile = path.join(__dirname, `../../sources/patches/typescript.patch.ts`); - await execFile(`node`, [path.join(__dirname, `../createPatch.js`), aggregatePatchFile, jsPatchFile]); - - // Remove old patches - const patchFilesSet = new Set(patches.map(patch => patch.patchFile)); - for await (const {name: patchName} of await fs.promises.opendir(__dirname)) { - if (patchName.endsWith(`.diff`) && !patchFilesSet.has(path.join(__dirname, patchName))) { - console.log(`Cleanup; file ${patchName} not in use`); - await fs.promises.unlink(path.join(__dirname, patchName)); - } - } -} - -main().catch(err => { - console.error(err.stack); - process.exitCode = 1; -}); diff --git a/packages/plugin-compat/extra/typescript/gen-typescript-patch.ts b/packages/plugin-compat/extra/typescript/gen-typescript-patch.ts new file mode 100644 index 000000000000..84b24186e784 --- /dev/null +++ b/packages/plugin-compat/extra/typescript/gen-typescript-patch.ts @@ -0,0 +1,516 @@ +import {miscUtils} from '@yarnpkg/core'; +import type {PortablePath} from '@yarnpkg/fslib'; +import {Filename, npath, ppath, xfs} from '@yarnpkg/fslib'; +import assert from 'node:assert'; +import type {SpawnOptions} from 'node:child_process'; +import {createHash} from 'node:crypto'; +import semver from 'semver'; + +import {PatchGenerator} from '../PatchGenerator'; +import {spawn, logger} from '../utils'; + +const IGNORED_VERSIONS = new Set([ + `3.3.3333`, + `3.7.0-beta`, + `3.9.0-beta`, + `4.0.0-beta`, + `4.3.0-beta`, + `4.4.0-beta`, + // Broken publish - missing files + `4.9.0-beta`, +]); + +type Slice = { + from: string; + to: string; + onto: string; + range: string; + volta?: { + node?: string; + npm?: string; + }; +}; +const SLICES: Array = [ + { + from: `5d50de3`, + to: `426f5a7`, + onto: `e39bdc3`, + range: `>=3.2 <3.5`, + volta: { + node: `14.15.5`, + npm: `6.14.11`, + }, + }, + { + from: `5d50de3`, + to: `426f5a7`, + onto: `cf7b2d4`, + range: `>=3.5 <=3.6`, + volta: { + node: `14.15.5`, + npm: `6.14.11`, + }, + }, + { + from: `5d50de3`, + to: `2f85932`, + onto: `e39bdc3`, + range: `>=3.7 <3.9`, + volta: { + node: `14.15.5`, + npm: `6.14.11`, + }, + }, + { + from: `5d50de3`, + to: `3af06df`, + onto: `551f0dd`, + range: `>=3.9 <4.0`, + volta: { + node: `14.15.5`, + npm: `6.14.11`, + }, + }, + { + from: `6dbdd2f`, + to: `6dbdd2f`, + onto: `56865f7`, + range: `>=4.0 <4.1`, + volta: { + node: `14.15.5`, + npm: `6.14.11`, + }, + }, + { + from: `746d79b`, + to: `746d79b`, + onto: `69972a3`, + range: `>=4.1 <4.2`, + volta: { + node: `14.15.5`, + npm: `6.14.11`, + }, + }, + // https://github.com/yarnpkg/TypeScript/tree/merceyz/pnp-4.2 + { + from: `8e0e8703b9c95013aec7819e4593d099cdf7763a`, + to: `178a67b4663d80b0fcbea542e7255b4499b51708`, + onto: `bfc55b5762443c37ecdef08a3b5a4e057b4d1e85`, + range: `>=4.2 <4.3`, + volta: { + node: `14.15.5`, + npm: `6.14.11`, + }, + }, + // https://github.com/yarnpkg/TypeScript/tree/merceyz/pnp-4.3 + { + from: `530aad19e4ac19d35cb6b200168c91ce86cb0050`, + to: `ffa54c5a104e7940b5c23666ddffbf44878f9d9f`, + onto: `28e3e6ff2f49f1dbf06d31809ec73dbe42f1aa63`, + range: `>=4.3 <4.4`, + volta: { + npm: `6.14.11`, + }, + }, + // https://github.com/yarnpkg/TypeScript/tree/merceyz/pnp-4.4 + { + from: `793bfe32745bf6797924354b0fd5be62cf01950c`, + to: `20ffca2f3c48591c971e6606a55b7b1820d8a64f`, + onto: `a10409ccaa3604790dc45f52ef0402eb49015dcf`, + range: `>=4.4 <4.5`, + volta: { + npm: `6.14.11`, + }, + }, + // https://github.com/yarnpkg/TypeScript/tree/merceyz/pnp-4.5 + { + from: `9232978f8e54f073b5451d0bf2737d42a0fd672f`, + to: `3a2388d39d41d000b5c5f9bcd48096b39fcedf8f`, + onto: `55e13e9115b3cc5458d76c39da1211dc28d7b51f`, + range: `>=4.5.2 <4.6`, + volta: { + npm: `6.14.11`, + }, + }, + // https://github.com/yarnpkg/TypeScript/tree/merceyz/pnp-4.6 + { + from: `fbec717ef33fc2db5791f2a1d5f9a315e293a50a`, + to: `fbec717ef33fc2db5791f2a1d5f9a315e293a50a`, + onto: `83efc9f0d646bf86a3469e00c5ef5e4f7ab7cb95`, + range: `>=4.6.1-rc <4.7`, + volta: { + npm: `6.14.11`, + }, + }, + // https://github.com/yarnpkg/TypeScript/tree/merceyz/pnp-4.7 + { + from: `cd8d000510ed2d2910e0ebaa903a51adda546a0a`, + to: `cd8d000510ed2d2910e0ebaa903a51adda546a0a`, + onto: `6e62273fa1e7469b89b589667c2c233789c62176`, + range: `>=4.7.0-beta <4.8`, + volta: { + npm: `6.14.11`, + }, + }, + // https://github.com/yarnpkg/TypeScript/tree/merceyz/pnp-4.8.0-beta + { + from: `3287098f4785fd652112beadf3b33a960fcd19aa`, + to: `3287098f4785fd652112beadf3b33a960fcd19aa`, + onto: `9a09c37878a45b06994485fdb510eb4d24587dcb`, + range: `>=4.8.0-beta <4.8.1-rc`, + volta: { + npm: `6.14.11`, + }, + }, + // https://github.com/yarnpkg/TypeScript/tree/merceyz/pnp-4.8-stable + { + from: `623a7ac5aa49250155d39e604b09b4d015468a9c`, + to: `30840e0c2ad8e115c518f87379b7cb55fdf77f03`, + onto: `60b5167a2a7015759d048cdd4655d1f66a8416a2`, + range: `>=4.8.1-rc <4.8.4`, + }, + // https://github.com/yarnpkg/TypeScript/tree/merceyz/pnp-4.8 + { + from: `d3747e92c3cd2d1f98739382c14226a725df38fd`, + to: `5b9a74243e47db6113e857eabe5d26589fa0b64f`, + onto: `a614119c1921ca61d549a7eee65c0b8c69c28752`, + range: `>=4.8.4 <4.9.1-beta`, + }, + // https://github.com/yarnpkg/TypeScript/tree/merceyz/pnp-4.9-beta + { + from: `69c84aacfcea603c4d74721366cdcbbebd1c1681`, + to: `18b67922d3dcc5215541a38bf6417972270bf60f`, + onto: `549b5429d4837344e8c99657109bb6538fd2dbb5`, + range: `>=4.9.1-beta <4.9.2-rc`, + }, + // https://github.com/yarnpkg/TypeScript/tree/merceyz/pnp-4.9-rc + { + from: `5613f8d8e30dfa9fb3da15e2b8432ed7e2347a12`, + to: `d3a8a86ce4774d607c5a4a225cc5b59b1f96f42f`, + onto: `107f832b80df2dc97748021cb00af2b6813db75b`, + range: `>=4.9.2-rc <4.9.4`, + }, + // https://github.com/yarnpkg/TypeScript/tree/merceyz/pnp-4.9 + { + from: `a0859a75a408ec95222a3f0175ba0644d60396f1`, + to: `936e68ba96e004bd32e438d64ac720c3bfe5576b`, + onto: `e2868216f637e875a74c675845625eb15dcfe9a2`, + range: `>=4.9.4 <5.0.0-beta`, + }, + // https://github.com/yarnpkg/TypeScript/tree/merceyz/pnp-5.0-beta + { + from: `65bff6fadce4736bb9a77213ba8016f1ac7d25e5`, + to: `6225be2771938c6a1fce825eabe66292e4ace489`, + onto: `dcad07ffd29854e2b93a86da0ba197f6eec21698`, + range: `>=5.0.0-beta <5.0.1-rc`, + }, + // https://github.com/yarnpkg/TypeScript/tree/merceyz/pnp-5.0 + { + from: `2c85874875fdf1f1182733b99afe47604915bfec`, + to: `9a2c1c80b05a5fbd5bc6d2bfcbaa617793a236ab`, + onto: `89515ce7e31d0bfaef776ac25929a78015cceb82`, + range: `>=5.0.1-rc <5.1.0-beta`, + }, + // https://github.com/yarnpkg/TypeScript/tree/merceyz/pnp-5.1-beta + { + from: `a6ef895fb06014c416cce2f80969912ec5ea47d5`, + to: `a6ef895fb06014c416cce2f80969912ec5ea47d5`, + onto: `1c5cc6152322cd5b131b6e617e0947bcb068fc4a`, + range: `>=5.1.0-beta <5.1.1-rc`, + }, + // https://github.com/yarnpkg/TypeScript/tree/merceyz/pnp-5.1 + { + from: `20514ce182c598568e4a9c7ed60a4ce84740cecd`, + to: `20514ce182c598568e4a9c7ed60a4ce84740cecd`, + onto: `5c47c6ab567cace50ab5f331a7381b9f0edb56ca`, + range: `>=5.1.1-rc <5.2.0-beta`, + }, + // https://github.com/yarnpkg/TypeScript/tree/merceyz/pnp-5.2-beta + { + from: `8781702c1b45bd2d5d437c0a138dd62b57b9b284`, + to: `8781702c1b45bd2d5d437c0a138dd62b57b9b284`, + onto: `d6e7eb6cf08a1cc8fb6d9888f74b0e694cc2a7b0`, + range: `>=5.2.0-beta <5.2.1-rc`, + }, + // https://github.com/yarnpkg/TypeScript/tree/merceyz/pnp-5.2 + { + from: `8c288a316928c9c161215fdf91ef015caa610d5b`, + to: `8c288a316928c9c161215fdf91ef015caa610d5b`, + onto: `6074b9d12b70757fe68ab2b4da059ea363c4df04`, + range: `>=5.2.1-rc <5.3.0-beta`, + }, + // https://github.com/yarnpkg/TypeScript/tree/merceyz/pnp-5.3-beta + { + from: `2b564c684dc5338c59c31f4658b737912ad46336`, + to: `2b564c684dc5338c59c31f4658b737912ad46336`, + onto: `c5de6b57b7f09a6d17eb4a5dab91ecf8f5b25f29`, + range: `>=5.3.0-beta <5.3.1-rc`, + }, + // https://github.com/yarnpkg/TypeScript/tree/merceyz/pnp-5.3 + { + from: `9fb5c1cac14376fe615dfd48ddbe4e97c2e6ac90`, + to: `9fb5c1cac14376fe615dfd48ddbe4e97c2e6ac90`, + onto: `88f80c75e1a4ab6aaec605aa4ec6281b87871ff0`, + range: `>=5.3.1-rc <5.4.0-beta`, + }, + // https://github.com/yarnpkg/TypeScript/tree/clemyan/pnp-5.4-beta + { + from: `9420c380b6f1f072ff66372cbf776fafd6eeed1c`, + to: `b4d7b4134e05a26b93458b9e88c8b5de08c1ee3e`, + onto: `e80675868dff622d0870939e7c9930c68904e7e7`, + range: `>=5.4.0-beta <5.4.1-rc`, + }, + // https://github.com/yarnpkg/TypeScript/tree/clemyan/pnp-5.4-rc + { + from: `786e26825dad9dcc0eff79610bffd8bb121e7e8a`, + to: `7e564312cd2cf1eea8b76d23db4bd2226202ccc3`, + onto: `db6b2a980280a9c87799b9c1edd6d71e92bb255b`, + range: `>=5.4.1-rc <5.5.0-beta`, + }, + // https://github.com/yarnpkg/TypeScript/tree/clemyan/pnp-5.5-beta + { + from: `f90eb7508e66a3d5066b1d8a06606c6c23f3df43`, + to: `9b604c537901d9b3c0966fce3f5ae44aa3dc253d`, + onto: `b574864abc989d0f8b15367baea1058819e126ba`, + range: `>=5.5.0-beta <5.5.2`, + }, + // https://github.com/yarnpkg/TypeScript/tree/clemyan/pnp-5.5 + { + from: `5b321aa5835f9f4dba6d55553fd559985d44b1a9`, + to: `ccf33180f4ad53ad0795970b7bc48a5cb35a3e05`, + onto: `ce2e60e4ea15a65992e54a9e8877d16be9d42abb`, + range: `>=5.5.2 <5.6.0-beta`, + }, + // https://github.com/yarnpkg/TypeScript/tree/clemyan/pnp-5.6-beta + { + from: `b774b54693034b8aeae7f9a7b24d25fcacdbc8a5`, + to: `0e49bcb78f0d42f246d24aaac5dd96f185872ba8`, + onto: `b4732bdd6199ec353ec0873f334515f391d80d3b`, + range: `>=5.6.0-beta <5.6.1-rc`, + }, + // https://github.com/yarnpkg/TypeScript/tree/clemyan/pnp-5.6-rc + { + from: `0102e47303cb33503219740015f711e2fe7d89ab`, + to: `fc2bd28bea622896d0298c69d89216021fab87d6`, + onto: `6212132b835145b1a8fd49982680ac668caf3ddc`, + range: `>=5.6.1-rc <5.7.0-beta`, + }, + // https://github.com/yarnpkg/TypeScript/tree/clemyan/pnp-5.7-beta + { + from: `18776a771f795ecc2535ee56705ea9fdb786a569`, + to: `59f55233fd1b47b451682c8266f0812b666b2fe2`, + onto: `69fb689edbbce517a4615be9d356c6c812639849`, + range: `>=5.7.0-beta <5.7.1-rc`, + }, + // https://github.com/yarnpkg/TypeScript/tree/clemyan/pnp-5.7-rc + { + from: `99f3e130bbe02473680bfa040d131c1f7f08fcc0`, + to: `08188704458c0994831c5537fcd5c09290966124`, + onto: `c1216dea1a504da7b89b5221b925abcd1702d7e4`, + range: `>=5.7.1-rc`, + }, +]; + +function logSpawn(binary: string, args: Array, opts?: SpawnOptions) { + const child = spawn(binary, args, opts); + logger.log(`$ ${child.cmd}`); + return child; +} + +type NpmRunner = (binary: `npm` | `npx`, args: Array) => ReturnType; +type NpmRunnerInitializer = (cwd: PortablePath, versions: {node?: string, npm?: string}, opts: SpawnOptions) => Promise; + +class Repo { + private spawnOpts: SpawnOptions; + public constructor(public readonly dir: PortablePath) { + this.spawnOpts = {cwd: npath.fromPortablePath(this.dir)}; + } + + private git(...args: Array) { + return logSpawn(`git`, args, this.spawnOpts); + } + + private getRunner: NpmRunnerInitializer = async (...args) => { + this.getRunner = await this.chooseRunner(); + return this.getRunner(...args); + }; + private async chooseRunner(): Promise { + // Volta Runner + try { + if (await spawn(`volta`, [`--version`]).exit === 0) { + return async (cwd, {node, npm}, opts) => { + const path = ppath.join(cwd, Filename.manifest); + const manifest = JSON.parse(await xfs.readFilePromise(path, `utf8`)); + + assert(!(manifest.volta?.node && node), `node version is already set for ${manifest.version}`); + assert(!(manifest.volta?.npm && npm), `npm version is already set for ${manifest.version}`); + + const volta = { + node: node ?? manifest.volta?.node, + npm: npm ?? manifest.volta?.npm, + }; + assert(volta.node, `Missing node version for building with Volta`); + assert(volta.npm, `Missing npm version for building with Volta`); + + if (JSON.stringify(manifest.volta) !== JSON.stringify(volta)) { + manifest.volta = volta; + await xfs.writeFilePromise(path, JSON.stringify(manifest, null, 4)); + } + + return (binary, args) => logSpawn(`volta`, [`run`, binary, ...args], opts); + }; + } + } catch {} + + // Corepack Runner + logger.warn(`âš  Warning: Volta is not installed; using current node version and Corepack for builds`); + logger.warn(`âš  This may lead to incorrect patches`); + return async (cwd, {npm}, opts) => { + if (npm === undefined) { + const path = ppath.join(cwd, Filename.manifest); + const manifest = JSON.parse(await xfs.readFilePromise(path, `utf8`)); + assert(manifest.volta?.npm, `Missing npm version for building with Corepack`); + npm = manifest.volta.npm; + } + return (binary, args) => logSpawn(`corepack`, [`${binary}@${npm}`, ...args], opts); + }; + } + + private ready = false; + public async setup() { + if (this.ready) return; + + await logger.section(`Setup yarnpkg/TypeScript repository`, async () => { + if (await xfs.existsPromise(this.dir)) { + await this.git(`fetch`, `origin`).success; + await this.git(`cherry-pick`, `--abort`).close; + } else { + await logSpawn(`git`, [ + `clone`, + `--filter=tree:0`, + ...(process.env.GIT_ALTERNATE_OBJECT_DIRECTORIES?.split(npath.delimiter) ?? []) + .flatMap(dir => [`--reference`, npath.dirname(dir)]), + `--dissociate`, + `--no-checkout`, + `https://github.com/yarnpkg/TypeScript`, + npath.fromPortablePath(this.dir), + ]).success; + + await this.git(`config`, `user.email`, `you@example.com`).success; + await this.git(`config`, `user.name`, `Your Name`).success; + } + + this.getRunner = await this.chooseRunner(); + }); + + this.ready = true; + } + + public async build({from, to, onto, volta}: Slice, patch: boolean) { + await this.git(`switch`, `-df`, onto).success; + await this.git(`reset`, `--hard`).success; + await this.git(`clean`, `-dfx`).success; + + if (patch) { + if (await spawn(`git`, [`merge-base`, `--is-ancestor`, onto, to], this.spawnOpts).exit === 0) { + await this.git(`merge`, `--no-edit`, to).success; + } else { + await this.git(`cherry-pick`, `${from}^..${to}`).success; + } + } + + const run = await this.getRunner(this.dir, volta ?? {}, this.spawnOpts); + + if (await xfs.existsPromise(ppath.join(this.dir, `package-lock.json`))) { + await run(`npm`, [`ci`, `--ignore-scripts`]).success; + } else { + const buffer = await this.git(`show`, onto, `-s`, `--format=%ci`).output; + await run(`npm`, [`install`, `--ignore-scripts`, `--before`, buffer.toString().trim()]).success; + } + + const command = (await xfs.existsPromise(ppath.join(this.dir, `node_modules`, `.bin`, `hereby`))) + ? `hereby` + : `gulp`; + + await run(`npx`, [command, `local`, `LKG`]).success; + + // It seems that in some circumstances the build can produce incorrect artifacts. When + // that happens, the final binary is very small. We try to detect that. + const stat = await xfs.statPromise(ppath.join(this.dir, `lib/typescript.js`)); + if (stat.size < 100_000) { + throw new Error(`Something is wrong; typescript.js got generated with a stupid size`); + } + } +} + +class TypeScriptPatchGenerator extends PatchGenerator { + private repo = new Repo(ppath.join(this.tmp, `repo`)); + private $versions: Promise>; + private ranges = new Map(); + + public constructor() { + super(`typescript`, SLICES.map(slice => ({ + ...slice, + id: createHash(`md5`).update(JSON.stringify({from: slice.from, to: slice.to, onto: slice.onto})).digest(`hex`), + }))); + this.$versions = this.fetchVersions(); + } + + protected override async build(slice: Slice, path: PortablePath): Promise { + const base = ppath.join(path, `base`); + const patched = ppath.join(path, `patched`); + + await this.repo.setup(); + + await logger.section(`Build patched version`, async () => { + await Promise.all([ + this.repo.build(slice, true), + xfs.mkdirpPromise(patched), + ]); + await xfs.movePromise(ppath.join(this.repo.dir, `lib`), ppath.join(patched, `lib`)); + }); + + await logger.section(`Build base version`, async () => { + await Promise.all([ + this.repo.build(slice, false), + xfs.mkdirpPromise(base), + ]); + await xfs.movePromise(ppath.join(this.repo.dir, `lib`), ppath.join(base, `lib`)); + }); + } + + private async fetchVersions() { + // eslint-disable-next-line no-restricted-globals + const response = await fetch(`https://registry.yarnpkg.com/typescript`); + const data = await response.json() as {versions: Record}; + return Object.keys(data.versions) + .filter(version => { + const pre = semver.prerelease(version); + return (!pre || pre[0] === `beta` || pre[0] === `rc`); + }) + .filter(version => !IGNORED_VERSIONS.has(version)); + } + protected override async getValidateVersions(slice: Slice): Promise> { + const versions = await this.$versions; + // eslint-disable-next-line no-restricted-properties + const range = miscUtils.getFactoryWithDefault(this.ranges, slice.range, () => new semver.Range(slice.range, {includePrerelease: true})); + return versions.filter(range.test.bind(range)); + } +} + +async function main() { + const generator = new TypeScriptPatchGenerator(); + await generator.generateBundle( + process.argv.slice(2), + ppath.resolve( + npath.toPortablePath(__dirname), + `../../sources/patches/typescript.patch.ts`, + ), + ); +} + +main().catch(err => { + console.error(); + console.error(err.stack); + process.exitCode = 1; +}); diff --git a/packages/plugin-compat/extra/typescript/patch-1eddf00d60109501c72804e169c2f46a.diff b/packages/plugin-compat/extra/typescript/patch-1eddf00d60109501c72804e169c2f46a.diff deleted file mode 100644 index 1a1a7621d45f..000000000000 --- a/packages/plugin-compat/extra/typescript/patch-1eddf00d60109501c72804e169c2f46a.diff +++ /dev/null @@ -1,859 +0,0 @@ -diff --git a/lib/tsc.js b/lib/tsc.js -index 2f2f3343d..ca0d5d7fa 100644 -semver exclusivity >3.6 <3.7 ---- a/lib/tsc.js -+++ b/lib/tsc.js -@@ -22039,21 +22039,48 @@ var ts; - } - } - ts.getEffectiveTypeRoots = getEffectiveTypeRoots; -- function getDefaultTypeRoots(currentDirectory, host) { -+ function getNodeModulesTypeRoots(currentDirectory, host) { - if (!host.directoryExists) { - return [ts.combinePaths(currentDirectory, nodeModulesAtTypes)]; - } -- var typeRoots; -+ var typeRoots = []; - ts.forEachAncestorDirectory(ts.normalizePath(currentDirectory), function (directory) { - var atTypes = ts.combinePaths(directory, nodeModulesAtTypes); - if (host.directoryExists(atTypes)) { -- (typeRoots || (typeRoots = [])).push(atTypes); -+ typeRoots.push(atTypes); - } - return undefined; - }); - return typeRoots; - } - var nodeModulesAtTypes = ts.combinePaths("node_modules", "@types"); -+ function getPnpTypeRoots(currentDirectory) { -+ if (!isPnpAvailable()) { -+ return []; -+ } -+ currentDirectory = ts.sys.resolvePath(currentDirectory); -+ var pnpapi = getPnpApi(); -+ var locator = pnpapi.findPackageLocator(currentDirectory + "/"); -+ var packageDependencies = pnpapi.getPackageInformation(locator).packageDependencies; -+ var typeRoots = []; -+ for (var _i = 0, _a = Array.from(packageDependencies.entries()); _i < _a.length; _i++) { -+ var _b = _a[_i], name = _b[0], referencish = _b[1]; -+ if (name.startsWith(typesPackagePrefix) && referencish !== null) { -+ var dependencyLocator = pnpapi.getLocator(name, referencish); -+ var packageLocation = pnpapi.getPackageInformation(dependencyLocator).packageLocation; -+ typeRoots.push(ts.getDirectoryPath(packageLocation)); -+ } -+ } -+ return typeRoots; -+ } -+ var typesPackagePrefix = "@types/"; -+ function getDefaultTypeRoots(currentDirectory, host) { -+ var nmTypes = getNodeModulesTypeRoots(currentDirectory, host); -+ var pnpTypes = getPnpTypeRoots(currentDirectory); -+ if (nmTypes.length > 0 || pnpTypes.length > 0) { -+ return __spreadArrays(nmTypes, pnpTypes); -+ } -+ } - function resolveTypeReferenceDirective(typeReferenceDirectiveName, containingFile, options, host, redirectedReference) { - var traceEnabled = isTraceEnabled(options, host); - if (redirectedReference) { -@@ -22133,7 +22160,9 @@ var ts; - } - var result = void 0; - if (!ts.isExternalModuleNameRelative(typeReferenceDirectiveName)) { -- var searchResult = loadModuleFromNearestNodeModulesDirectory(Extensions.DtsOnly, typeReferenceDirectiveName, initialLocationForSecondaryLookup, moduleResolutionState, undefined, undefined); -+ var searchResult = isPnpAvailable() -+ ? tryLoadModuleUsingPnpResolution(Extensions.DtsOnly, typeReferenceDirectiveName, initialLocationForSecondaryLookup, moduleResolutionState) -+ : loadModuleFromNearestNodeModulesDirectory(Extensions.DtsOnly, typeReferenceDirectiveName, initialLocationForSecondaryLookup, moduleResolutionState, undefined, undefined); - result = searchResult && searchResult.value; - } - else { -@@ -22506,9 +22535,12 @@ var ts; - if (traceEnabled) { - trace(host, ts.Diagnostics.Loading_module_0_from_node_modules_folder_target_file_type_1, moduleName, Extensions[extensions]); - } -- var resolved_1 = loadModuleFromNearestNodeModulesDirectory(extensions, moduleName, containingDirectory, state, cache, redirectedReference); -- if (!resolved_1) -+ var resolved_1 = isPnpAvailable() -+ ? tryLoadModuleUsingPnpResolution(extensions, moduleName, containingDirectory, state) -+ : loadModuleFromNearestNodeModulesDirectory(extensions, moduleName, containingDirectory, state, cache, redirectedReference); -+ if (!resolved_1) { - return undefined; -+ } - var resolvedValue = resolved_1.value; - if (!compilerOptions.preserveSymlinks && resolvedValue && !resolvedValue.originalPath) { - var path = realPath(resolvedValue.path, host, traceEnabled); -@@ -22950,6 +22982,45 @@ var ts; - function toSearchResult(value) { - return value !== undefined ? { value: value } : undefined; - } -+ function isPnpAvailable() { -+ return process.versions.pnp; -+ } -+ function getPnpApi() { -+ return require("pnpapi"); -+ } -+ function loadPnpPackageResolution(packageName, containingDirectory) { -+ try { -+ return getPnpApi().resolveToUnqualified(packageName, containingDirectory + "/", { considerBuiltins: false }); -+ } -+ catch (_a) { -+ } -+ } -+ function loadPnpTypePackageResolution(packageName, containingDirectory) { -+ return loadPnpPackageResolution(getTypesPackageName(packageName), containingDirectory); -+ } -+ function tryLoadModuleUsingPnpResolution(extensions, moduleName, containingDirectory, state) { -+ var _a = parsePackageName(moduleName), packageName = _a.packageName, rest = _a.rest; -+ var packageResolution = loadPnpPackageResolution(packageName, containingDirectory); -+ var packageFullResolution = packageResolution -+ ? nodeLoadModuleByRelativeName(extensions, ts.combinePaths(packageResolution, rest), false, state, true) -+ : undefined; -+ var resolved; -+ if (packageFullResolution) { -+ resolved = packageFullResolution; -+ } -+ else if (extensions === Extensions.TypeScript || extensions === Extensions.DtsOnly) { -+ var typePackageResolution = loadPnpTypePackageResolution(packageName, containingDirectory); -+ var typePackageFullResolution = typePackageResolution -+ ? nodeLoadModuleByRelativeName(Extensions.DtsOnly, ts.combinePaths(typePackageResolution, rest), false, state, true) -+ : undefined; -+ if (typePackageFullResolution) { -+ resolved = typePackageFullResolution; -+ } -+ } -+ if (resolved) { -+ return toSearchResult(resolved); -+ } -+ } - })(ts || (ts = {})); - var ts; - (function (ts) { -diff --git a/lib/tsserver.js b/lib/tsserver.js -index e12a320b5..df9e258d0 100644 -semver exclusivity >3.6 <3.7 ---- a/lib/tsserver.js -+++ b/lib/tsserver.js -@@ -27071,24 +27071,52 @@ var ts; - ts.getEffectiveTypeRoots = getEffectiveTypeRoots; - /** - * Returns the path to every node_modules/@types directory from some ancestor directory. -- * Returns undefined if there are none. - */ -- function getDefaultTypeRoots(currentDirectory, host) { -+ function getNodeModulesTypeRoots(currentDirectory, host) { - if (!host.directoryExists) { - return [ts.combinePaths(currentDirectory, nodeModulesAtTypes)]; - // And if it doesn't exist, tough. - } -- var typeRoots; -+ var typeRoots = []; - ts.forEachAncestorDirectory(ts.normalizePath(currentDirectory), function (directory) { - var atTypes = ts.combinePaths(directory, nodeModulesAtTypes); - if (host.directoryExists(atTypes)) { -- (typeRoots || (typeRoots = [])).push(atTypes); -+ typeRoots.push(atTypes); - } - return undefined; - }); - return typeRoots; - } - var nodeModulesAtTypes = ts.combinePaths("node_modules", "@types"); -+ function getPnpTypeRoots(currentDirectory) { -+ if (!isPnpAvailable()) { -+ return []; -+ } -+ // Some TS consumers pass relative paths that aren't normalized -+ currentDirectory = ts.sys.resolvePath(currentDirectory); -+ var pnpapi = getPnpApi(); -+ var locator = pnpapi.findPackageLocator(currentDirectory + "/"); -+ var packageDependencies = pnpapi.getPackageInformation(locator).packageDependencies; -+ var typeRoots = []; -+ for (var _i = 0, _a = Array.from(packageDependencies.entries()); _i < _a.length; _i++) { -+ var _b = _a[_i], name = _b[0], referencish = _b[1]; -+ // eslint-disable-next-line no-null/no-null -+ if (name.startsWith(typesPackagePrefix) && referencish !== null) { -+ var dependencyLocator = pnpapi.getLocator(name, referencish); -+ var packageLocation = pnpapi.getPackageInformation(dependencyLocator).packageLocation; -+ typeRoots.push(ts.getDirectoryPath(packageLocation)); -+ } -+ } -+ return typeRoots; -+ } -+ var typesPackagePrefix = "@types/"; -+ function getDefaultTypeRoots(currentDirectory, host) { -+ var nmTypes = getNodeModulesTypeRoots(currentDirectory, host); -+ var pnpTypes = getPnpTypeRoots(currentDirectory); -+ if (nmTypes.length > 0 || pnpTypes.length > 0) { -+ return __spreadArrays(nmTypes, pnpTypes); -+ } -+ } - /** - * @param {string | undefined} containingFile - file that contains type reference directive, can be undefined if containing file is unknown. - * This is possible in case if resolution is performed for directives specified via 'types' parameter. In this case initial path for secondary lookups -@@ -27175,7 +27203,9 @@ var ts; - } - var result = void 0; - if (!ts.isExternalModuleNameRelative(typeReferenceDirectiveName)) { -- var searchResult = loadModuleFromNearestNodeModulesDirectory(Extensions.DtsOnly, typeReferenceDirectiveName, initialLocationForSecondaryLookup, moduleResolutionState, /*cache*/ undefined, /*redirectedReference*/ undefined); -+ var searchResult = isPnpAvailable() -+ ? tryLoadModuleUsingPnpResolution(Extensions.DtsOnly, typeReferenceDirectiveName, initialLocationForSecondaryLookup, moduleResolutionState) -+ : loadModuleFromNearestNodeModulesDirectory(Extensions.DtsOnly, typeReferenceDirectiveName, initialLocationForSecondaryLookup, moduleResolutionState, /*cache*/ undefined, /*redirectedReference*/ undefined); - result = searchResult && searchResult.value; - } - else { -@@ -27659,9 +27689,12 @@ var ts; - if (traceEnabled) { - trace(host, ts.Diagnostics.Loading_module_0_from_node_modules_folder_target_file_type_1, moduleName, Extensions[extensions]); - } -- var resolved_1 = loadModuleFromNearestNodeModulesDirectory(extensions, moduleName, containingDirectory, state, cache, redirectedReference); -- if (!resolved_1) -+ var resolved_1 = isPnpAvailable() -+ ? tryLoadModuleUsingPnpResolution(extensions, moduleName, containingDirectory, state) -+ : loadModuleFromNearestNodeModulesDirectory(extensions, moduleName, containingDirectory, state, cache, redirectedReference); -+ if (!resolved_1) { - return undefined; -+ } - var resolvedValue = resolved_1.value; - if (!compilerOptions.preserveSymlinks && resolvedValue && !resolvedValue.originalPath) { - var path = realPath(resolvedValue.path, host, traceEnabled); -@@ -28157,6 +28190,57 @@ var ts; - function toSearchResult(value) { - return value !== undefined ? { value: value } : undefined; - } -+ /** -+ * We only allow PnP to be used as a resolution strategy if TypeScript -+ * itself is executed under a PnP runtime (and we only allow it to access -+ * the current PnP runtime, not any on the disk). This ensures that we -+ * don't execute potentially malicious code that didn't already have a -+ * chance to be executed (if we're running within the runtime, it means -+ * that the runtime has already been executed). -+ * @internal -+ */ -+ function isPnpAvailable() { -+ // @ts-ignore -+ return process.versions.pnp; -+ } -+ function getPnpApi() { -+ return require("pnpapi"); -+ } -+ function loadPnpPackageResolution(packageName, containingDirectory) { -+ try { -+ return getPnpApi().resolveToUnqualified(packageName, containingDirectory + "/", { considerBuiltins: false }); -+ } -+ catch (_a) { -+ // Nothing to do -+ } -+ } -+ function loadPnpTypePackageResolution(packageName, containingDirectory) { -+ return loadPnpPackageResolution(getTypesPackageName(packageName), containingDirectory); -+ } -+ /* @internal */ -+ function tryLoadModuleUsingPnpResolution(extensions, moduleName, containingDirectory, state) { -+ var _a = parsePackageName(moduleName), packageName = _a.packageName, rest = _a.rest; -+ var packageResolution = loadPnpPackageResolution(packageName, containingDirectory); -+ var packageFullResolution = packageResolution -+ ? nodeLoadModuleByRelativeName(extensions, ts.combinePaths(packageResolution, rest), /*onlyRecordFailures*/ false, state, /*considerPackageJson*/ true) -+ : undefined; -+ var resolved; -+ if (packageFullResolution) { -+ resolved = packageFullResolution; -+ } -+ else if (extensions === Extensions.TypeScript || extensions === Extensions.DtsOnly) { -+ var typePackageResolution = loadPnpTypePackageResolution(packageName, containingDirectory); -+ var typePackageFullResolution = typePackageResolution -+ ? nodeLoadModuleByRelativeName(Extensions.DtsOnly, ts.combinePaths(typePackageResolution, rest), /*onlyRecordFailures*/ false, state, /*considerPackageJson*/ true) -+ : undefined; -+ if (typePackageFullResolution) { -+ resolved = typePackageFullResolution; -+ } -+ } -+ if (resolved) { -+ return toSearchResult(resolved); -+ } -+ } - })(ts || (ts = {})); - /* @internal */ - var ts; -diff --git a/lib/tsserverlibrary.js b/lib/tsserverlibrary.js -index e3229622d..7e5d93139 100644 -semver exclusivity >3.6 <3.7 ---- a/lib/tsserverlibrary.js -+++ b/lib/tsserverlibrary.js -@@ -27070,24 +27070,52 @@ var ts; - ts.getEffectiveTypeRoots = getEffectiveTypeRoots; - /** - * Returns the path to every node_modules/@types directory from some ancestor directory. -- * Returns undefined if there are none. - */ -- function getDefaultTypeRoots(currentDirectory, host) { -+ function getNodeModulesTypeRoots(currentDirectory, host) { - if (!host.directoryExists) { - return [ts.combinePaths(currentDirectory, nodeModulesAtTypes)]; - // And if it doesn't exist, tough. - } -- var typeRoots; -+ var typeRoots = []; - ts.forEachAncestorDirectory(ts.normalizePath(currentDirectory), function (directory) { - var atTypes = ts.combinePaths(directory, nodeModulesAtTypes); - if (host.directoryExists(atTypes)) { -- (typeRoots || (typeRoots = [])).push(atTypes); -+ typeRoots.push(atTypes); - } - return undefined; - }); - return typeRoots; - } - var nodeModulesAtTypes = ts.combinePaths("node_modules", "@types"); -+ function getPnpTypeRoots(currentDirectory) { -+ if (!isPnpAvailable()) { -+ return []; -+ } -+ // Some TS consumers pass relative paths that aren't normalized -+ currentDirectory = ts.sys.resolvePath(currentDirectory); -+ var pnpapi = getPnpApi(); -+ var locator = pnpapi.findPackageLocator(currentDirectory + "/"); -+ var packageDependencies = pnpapi.getPackageInformation(locator).packageDependencies; -+ var typeRoots = []; -+ for (var _i = 0, _a = Array.from(packageDependencies.entries()); _i < _a.length; _i++) { -+ var _b = _a[_i], name = _b[0], referencish = _b[1]; -+ // eslint-disable-next-line no-null/no-null -+ if (name.startsWith(typesPackagePrefix) && referencish !== null) { -+ var dependencyLocator = pnpapi.getLocator(name, referencish); -+ var packageLocation = pnpapi.getPackageInformation(dependencyLocator).packageLocation; -+ typeRoots.push(ts.getDirectoryPath(packageLocation)); -+ } -+ } -+ return typeRoots; -+ } -+ var typesPackagePrefix = "@types/"; -+ function getDefaultTypeRoots(currentDirectory, host) { -+ var nmTypes = getNodeModulesTypeRoots(currentDirectory, host); -+ var pnpTypes = getPnpTypeRoots(currentDirectory); -+ if (nmTypes.length > 0 || pnpTypes.length > 0) { -+ return __spreadArrays(nmTypes, pnpTypes); -+ } -+ } - /** - * @param {string | undefined} containingFile - file that contains type reference directive, can be undefined if containing file is unknown. - * This is possible in case if resolution is performed for directives specified via 'types' parameter. In this case initial path for secondary lookups -@@ -27174,7 +27202,9 @@ var ts; - } - var result = void 0; - if (!ts.isExternalModuleNameRelative(typeReferenceDirectiveName)) { -- var searchResult = loadModuleFromNearestNodeModulesDirectory(Extensions.DtsOnly, typeReferenceDirectiveName, initialLocationForSecondaryLookup, moduleResolutionState, /*cache*/ undefined, /*redirectedReference*/ undefined); -+ var searchResult = isPnpAvailable() -+ ? tryLoadModuleUsingPnpResolution(Extensions.DtsOnly, typeReferenceDirectiveName, initialLocationForSecondaryLookup, moduleResolutionState) -+ : loadModuleFromNearestNodeModulesDirectory(Extensions.DtsOnly, typeReferenceDirectiveName, initialLocationForSecondaryLookup, moduleResolutionState, /*cache*/ undefined, /*redirectedReference*/ undefined); - result = searchResult && searchResult.value; - } - else { -@@ -27658,9 +27688,12 @@ var ts; - if (traceEnabled) { - trace(host, ts.Diagnostics.Loading_module_0_from_node_modules_folder_target_file_type_1, moduleName, Extensions[extensions]); - } -- var resolved_1 = loadModuleFromNearestNodeModulesDirectory(extensions, moduleName, containingDirectory, state, cache, redirectedReference); -- if (!resolved_1) -+ var resolved_1 = isPnpAvailable() -+ ? tryLoadModuleUsingPnpResolution(extensions, moduleName, containingDirectory, state) -+ : loadModuleFromNearestNodeModulesDirectory(extensions, moduleName, containingDirectory, state, cache, redirectedReference); -+ if (!resolved_1) { - return undefined; -+ } - var resolvedValue = resolved_1.value; - if (!compilerOptions.preserveSymlinks && resolvedValue && !resolvedValue.originalPath) { - var path = realPath(resolvedValue.path, host, traceEnabled); -@@ -28156,6 +28189,57 @@ var ts; - function toSearchResult(value) { - return value !== undefined ? { value: value } : undefined; - } -+ /** -+ * We only allow PnP to be used as a resolution strategy if TypeScript -+ * itself is executed under a PnP runtime (and we only allow it to access -+ * the current PnP runtime, not any on the disk). This ensures that we -+ * don't execute potentially malicious code that didn't already have a -+ * chance to be executed (if we're running within the runtime, it means -+ * that the runtime has already been executed). -+ * @internal -+ */ -+ function isPnpAvailable() { -+ // @ts-ignore -+ return process.versions.pnp; -+ } -+ function getPnpApi() { -+ return require("pnpapi"); -+ } -+ function loadPnpPackageResolution(packageName, containingDirectory) { -+ try { -+ return getPnpApi().resolveToUnqualified(packageName, containingDirectory + "/", { considerBuiltins: false }); -+ } -+ catch (_a) { -+ // Nothing to do -+ } -+ } -+ function loadPnpTypePackageResolution(packageName, containingDirectory) { -+ return loadPnpPackageResolution(getTypesPackageName(packageName), containingDirectory); -+ } -+ /* @internal */ -+ function tryLoadModuleUsingPnpResolution(extensions, moduleName, containingDirectory, state) { -+ var _a = parsePackageName(moduleName), packageName = _a.packageName, rest = _a.rest; -+ var packageResolution = loadPnpPackageResolution(packageName, containingDirectory); -+ var packageFullResolution = packageResolution -+ ? nodeLoadModuleByRelativeName(extensions, ts.combinePaths(packageResolution, rest), /*onlyRecordFailures*/ false, state, /*considerPackageJson*/ true) -+ : undefined; -+ var resolved; -+ if (packageFullResolution) { -+ resolved = packageFullResolution; -+ } -+ else if (extensions === Extensions.TypeScript || extensions === Extensions.DtsOnly) { -+ var typePackageResolution = loadPnpTypePackageResolution(packageName, containingDirectory); -+ var typePackageFullResolution = typePackageResolution -+ ? nodeLoadModuleByRelativeName(Extensions.DtsOnly, ts.combinePaths(typePackageResolution, rest), /*onlyRecordFailures*/ false, state, /*considerPackageJson*/ true) -+ : undefined; -+ if (typePackageFullResolution) { -+ resolved = typePackageFullResolution; -+ } -+ } -+ if (resolved) { -+ return toSearchResult(resolved); -+ } -+ } - })(ts || (ts = {})); - /* @internal */ - var ts; -diff --git a/lib/typescript.js b/lib/typescript.js -index 17a4b4fc2..9b3b18f1c 100644 -semver exclusivity >3.6 <3.7 ---- a/lib/typescript.js -+++ b/lib/typescript.js -@@ -27059,24 +27059,52 @@ var ts; - ts.getEffectiveTypeRoots = getEffectiveTypeRoots; - /** - * Returns the path to every node_modules/@types directory from some ancestor directory. -- * Returns undefined if there are none. - */ -- function getDefaultTypeRoots(currentDirectory, host) { -+ function getNodeModulesTypeRoots(currentDirectory, host) { - if (!host.directoryExists) { - return [ts.combinePaths(currentDirectory, nodeModulesAtTypes)]; - // And if it doesn't exist, tough. - } -- var typeRoots; -+ var typeRoots = []; - ts.forEachAncestorDirectory(ts.normalizePath(currentDirectory), function (directory) { - var atTypes = ts.combinePaths(directory, nodeModulesAtTypes); - if (host.directoryExists(atTypes)) { -- (typeRoots || (typeRoots = [])).push(atTypes); -+ typeRoots.push(atTypes); - } - return undefined; - }); - return typeRoots; - } - var nodeModulesAtTypes = ts.combinePaths("node_modules", "@types"); -+ function getPnpTypeRoots(currentDirectory) { -+ if (!isPnpAvailable()) { -+ return []; -+ } -+ // Some TS consumers pass relative paths that aren't normalized -+ currentDirectory = ts.sys.resolvePath(currentDirectory); -+ var pnpapi = getPnpApi(); -+ var locator = pnpapi.findPackageLocator(currentDirectory + "/"); -+ var packageDependencies = pnpapi.getPackageInformation(locator).packageDependencies; -+ var typeRoots = []; -+ for (var _i = 0, _a = Array.from(packageDependencies.entries()); _i < _a.length; _i++) { -+ var _b = _a[_i], name = _b[0], referencish = _b[1]; -+ // eslint-disable-next-line no-null/no-null -+ if (name.startsWith(typesPackagePrefix) && referencish !== null) { -+ var dependencyLocator = pnpapi.getLocator(name, referencish); -+ var packageLocation = pnpapi.getPackageInformation(dependencyLocator).packageLocation; -+ typeRoots.push(ts.getDirectoryPath(packageLocation)); -+ } -+ } -+ return typeRoots; -+ } -+ var typesPackagePrefix = "@types/"; -+ function getDefaultTypeRoots(currentDirectory, host) { -+ var nmTypes = getNodeModulesTypeRoots(currentDirectory, host); -+ var pnpTypes = getPnpTypeRoots(currentDirectory); -+ if (nmTypes.length > 0 || pnpTypes.length > 0) { -+ return __spreadArrays(nmTypes, pnpTypes); -+ } -+ } - /** - * @param {string | undefined} containingFile - file that contains type reference directive, can be undefined if containing file is unknown. - * This is possible in case if resolution is performed for directives specified via 'types' parameter. In this case initial path for secondary lookups -@@ -27163,7 +27191,9 @@ var ts; - } - var result = void 0; - if (!ts.isExternalModuleNameRelative(typeReferenceDirectiveName)) { -- var searchResult = loadModuleFromNearestNodeModulesDirectory(Extensions.DtsOnly, typeReferenceDirectiveName, initialLocationForSecondaryLookup, moduleResolutionState, /*cache*/ undefined, /*redirectedReference*/ undefined); -+ var searchResult = isPnpAvailable() -+ ? tryLoadModuleUsingPnpResolution(Extensions.DtsOnly, typeReferenceDirectiveName, initialLocationForSecondaryLookup, moduleResolutionState) -+ : loadModuleFromNearestNodeModulesDirectory(Extensions.DtsOnly, typeReferenceDirectiveName, initialLocationForSecondaryLookup, moduleResolutionState, /*cache*/ undefined, /*redirectedReference*/ undefined); - result = searchResult && searchResult.value; - } - else { -@@ -27647,9 +27677,12 @@ var ts; - if (traceEnabled) { - trace(host, ts.Diagnostics.Loading_module_0_from_node_modules_folder_target_file_type_1, moduleName, Extensions[extensions]); - } -- var resolved_1 = loadModuleFromNearestNodeModulesDirectory(extensions, moduleName, containingDirectory, state, cache, redirectedReference); -- if (!resolved_1) -+ var resolved_1 = isPnpAvailable() -+ ? tryLoadModuleUsingPnpResolution(extensions, moduleName, containingDirectory, state) -+ : loadModuleFromNearestNodeModulesDirectory(extensions, moduleName, containingDirectory, state, cache, redirectedReference); -+ if (!resolved_1) { - return undefined; -+ } - var resolvedValue = resolved_1.value; - if (!compilerOptions.preserveSymlinks && resolvedValue && !resolvedValue.originalPath) { - var path = realPath(resolvedValue.path, host, traceEnabled); -@@ -28145,6 +28178,57 @@ var ts; - function toSearchResult(value) { - return value !== undefined ? { value: value } : undefined; - } -+ /** -+ * We only allow PnP to be used as a resolution strategy if TypeScript -+ * itself is executed under a PnP runtime (and we only allow it to access -+ * the current PnP runtime, not any on the disk). This ensures that we -+ * don't execute potentially malicious code that didn't already have a -+ * chance to be executed (if we're running within the runtime, it means -+ * that the runtime has already been executed). -+ * @internal -+ */ -+ function isPnpAvailable() { -+ // @ts-ignore -+ return process.versions.pnp; -+ } -+ function getPnpApi() { -+ return require("pnpapi"); -+ } -+ function loadPnpPackageResolution(packageName, containingDirectory) { -+ try { -+ return getPnpApi().resolveToUnqualified(packageName, containingDirectory + "/", { considerBuiltins: false }); -+ } -+ catch (_a) { -+ // Nothing to do -+ } -+ } -+ function loadPnpTypePackageResolution(packageName, containingDirectory) { -+ return loadPnpPackageResolution(getTypesPackageName(packageName), containingDirectory); -+ } -+ /* @internal */ -+ function tryLoadModuleUsingPnpResolution(extensions, moduleName, containingDirectory, state) { -+ var _a = parsePackageName(moduleName), packageName = _a.packageName, rest = _a.rest; -+ var packageResolution = loadPnpPackageResolution(packageName, containingDirectory); -+ var packageFullResolution = packageResolution -+ ? nodeLoadModuleByRelativeName(extensions, ts.combinePaths(packageResolution, rest), /*onlyRecordFailures*/ false, state, /*considerPackageJson*/ true) -+ : undefined; -+ var resolved; -+ if (packageFullResolution) { -+ resolved = packageFullResolution; -+ } -+ else if (extensions === Extensions.TypeScript || extensions === Extensions.DtsOnly) { -+ var typePackageResolution = loadPnpTypePackageResolution(packageName, containingDirectory); -+ var typePackageFullResolution = typePackageResolution -+ ? nodeLoadModuleByRelativeName(Extensions.DtsOnly, ts.combinePaths(typePackageResolution, rest), /*onlyRecordFailures*/ false, state, /*considerPackageJson*/ true) -+ : undefined; -+ if (typePackageFullResolution) { -+ resolved = typePackageFullResolution; -+ } -+ } -+ if (resolved) { -+ return toSearchResult(resolved); -+ } -+ } - })(ts || (ts = {})); - /* @internal */ - var ts; -diff --git a/lib/typescriptServices.js b/lib/typescriptServices.js -index 7a0ea862f..bc5bda5ca 100644 -semver exclusivity >3.6 <3.7 ---- a/lib/typescriptServices.js -+++ b/lib/typescriptServices.js -@@ -27059,24 +27059,52 @@ var ts; - ts.getEffectiveTypeRoots = getEffectiveTypeRoots; - /** - * Returns the path to every node_modules/@types directory from some ancestor directory. -- * Returns undefined if there are none. - */ -- function getDefaultTypeRoots(currentDirectory, host) { -+ function getNodeModulesTypeRoots(currentDirectory, host) { - if (!host.directoryExists) { - return [ts.combinePaths(currentDirectory, nodeModulesAtTypes)]; - // And if it doesn't exist, tough. - } -- var typeRoots; -+ var typeRoots = []; - ts.forEachAncestorDirectory(ts.normalizePath(currentDirectory), function (directory) { - var atTypes = ts.combinePaths(directory, nodeModulesAtTypes); - if (host.directoryExists(atTypes)) { -- (typeRoots || (typeRoots = [])).push(atTypes); -+ typeRoots.push(atTypes); - } - return undefined; - }); - return typeRoots; - } - var nodeModulesAtTypes = ts.combinePaths("node_modules", "@types"); -+ function getPnpTypeRoots(currentDirectory) { -+ if (!isPnpAvailable()) { -+ return []; -+ } -+ // Some TS consumers pass relative paths that aren't normalized -+ currentDirectory = ts.sys.resolvePath(currentDirectory); -+ var pnpapi = getPnpApi(); -+ var locator = pnpapi.findPackageLocator(currentDirectory + "/"); -+ var packageDependencies = pnpapi.getPackageInformation(locator).packageDependencies; -+ var typeRoots = []; -+ for (var _i = 0, _a = Array.from(packageDependencies.entries()); _i < _a.length; _i++) { -+ var _b = _a[_i], name = _b[0], referencish = _b[1]; -+ // eslint-disable-next-line no-null/no-null -+ if (name.startsWith(typesPackagePrefix) && referencish !== null) { -+ var dependencyLocator = pnpapi.getLocator(name, referencish); -+ var packageLocation = pnpapi.getPackageInformation(dependencyLocator).packageLocation; -+ typeRoots.push(ts.getDirectoryPath(packageLocation)); -+ } -+ } -+ return typeRoots; -+ } -+ var typesPackagePrefix = "@types/"; -+ function getDefaultTypeRoots(currentDirectory, host) { -+ var nmTypes = getNodeModulesTypeRoots(currentDirectory, host); -+ var pnpTypes = getPnpTypeRoots(currentDirectory); -+ if (nmTypes.length > 0 || pnpTypes.length > 0) { -+ return __spreadArrays(nmTypes, pnpTypes); -+ } -+ } - /** - * @param {string | undefined} containingFile - file that contains type reference directive, can be undefined if containing file is unknown. - * This is possible in case if resolution is performed for directives specified via 'types' parameter. In this case initial path for secondary lookups -@@ -27163,7 +27191,9 @@ var ts; - } - var result = void 0; - if (!ts.isExternalModuleNameRelative(typeReferenceDirectiveName)) { -- var searchResult = loadModuleFromNearestNodeModulesDirectory(Extensions.DtsOnly, typeReferenceDirectiveName, initialLocationForSecondaryLookup, moduleResolutionState, /*cache*/ undefined, /*redirectedReference*/ undefined); -+ var searchResult = isPnpAvailable() -+ ? tryLoadModuleUsingPnpResolution(Extensions.DtsOnly, typeReferenceDirectiveName, initialLocationForSecondaryLookup, moduleResolutionState) -+ : loadModuleFromNearestNodeModulesDirectory(Extensions.DtsOnly, typeReferenceDirectiveName, initialLocationForSecondaryLookup, moduleResolutionState, /*cache*/ undefined, /*redirectedReference*/ undefined); - result = searchResult && searchResult.value; - } - else { -@@ -27647,9 +27677,12 @@ var ts; - if (traceEnabled) { - trace(host, ts.Diagnostics.Loading_module_0_from_node_modules_folder_target_file_type_1, moduleName, Extensions[extensions]); - } -- var resolved_1 = loadModuleFromNearestNodeModulesDirectory(extensions, moduleName, containingDirectory, state, cache, redirectedReference); -- if (!resolved_1) -+ var resolved_1 = isPnpAvailable() -+ ? tryLoadModuleUsingPnpResolution(extensions, moduleName, containingDirectory, state) -+ : loadModuleFromNearestNodeModulesDirectory(extensions, moduleName, containingDirectory, state, cache, redirectedReference); -+ if (!resolved_1) { - return undefined; -+ } - var resolvedValue = resolved_1.value; - if (!compilerOptions.preserveSymlinks && resolvedValue && !resolvedValue.originalPath) { - var path = realPath(resolvedValue.path, host, traceEnabled); -@@ -28145,6 +28178,57 @@ var ts; - function toSearchResult(value) { - return value !== undefined ? { value: value } : undefined; - } -+ /** -+ * We only allow PnP to be used as a resolution strategy if TypeScript -+ * itself is executed under a PnP runtime (and we only allow it to access -+ * the current PnP runtime, not any on the disk). This ensures that we -+ * don't execute potentially malicious code that didn't already have a -+ * chance to be executed (if we're running within the runtime, it means -+ * that the runtime has already been executed). -+ * @internal -+ */ -+ function isPnpAvailable() { -+ // @ts-ignore -+ return process.versions.pnp; -+ } -+ function getPnpApi() { -+ return require("pnpapi"); -+ } -+ function loadPnpPackageResolution(packageName, containingDirectory) { -+ try { -+ return getPnpApi().resolveToUnqualified(packageName, containingDirectory + "/", { considerBuiltins: false }); -+ } -+ catch (_a) { -+ // Nothing to do -+ } -+ } -+ function loadPnpTypePackageResolution(packageName, containingDirectory) { -+ return loadPnpPackageResolution(getTypesPackageName(packageName), containingDirectory); -+ } -+ /* @internal */ -+ function tryLoadModuleUsingPnpResolution(extensions, moduleName, containingDirectory, state) { -+ var _a = parsePackageName(moduleName), packageName = _a.packageName, rest = _a.rest; -+ var packageResolution = loadPnpPackageResolution(packageName, containingDirectory); -+ var packageFullResolution = packageResolution -+ ? nodeLoadModuleByRelativeName(extensions, ts.combinePaths(packageResolution, rest), /*onlyRecordFailures*/ false, state, /*considerPackageJson*/ true) -+ : undefined; -+ var resolved; -+ if (packageFullResolution) { -+ resolved = packageFullResolution; -+ } -+ else if (extensions === Extensions.TypeScript || extensions === Extensions.DtsOnly) { -+ var typePackageResolution = loadPnpTypePackageResolution(packageName, containingDirectory); -+ var typePackageFullResolution = typePackageResolution -+ ? nodeLoadModuleByRelativeName(Extensions.DtsOnly, ts.combinePaths(typePackageResolution, rest), /*onlyRecordFailures*/ false, state, /*considerPackageJson*/ true) -+ : undefined; -+ if (typePackageFullResolution) { -+ resolved = typePackageFullResolution; -+ } -+ } -+ if (resolved) { -+ return toSearchResult(resolved); -+ } -+ } - })(ts || (ts = {})); - /* @internal */ - var ts; -diff --git a/lib/typingsInstaller.js b/lib/typingsInstaller.js -index 65ba0c2f9..ae7228aa5 100644 -semver exclusivity >3.6 <3.7 ---- a/lib/typingsInstaller.js -+++ b/lib/typingsInstaller.js -@@ -27060,24 +27060,52 @@ var ts; - ts.getEffectiveTypeRoots = getEffectiveTypeRoots; - /** - * Returns the path to every node_modules/@types directory from some ancestor directory. -- * Returns undefined if there are none. - */ -- function getDefaultTypeRoots(currentDirectory, host) { -+ function getNodeModulesTypeRoots(currentDirectory, host) { - if (!host.directoryExists) { - return [ts.combinePaths(currentDirectory, nodeModulesAtTypes)]; - // And if it doesn't exist, tough. - } -- var typeRoots; -+ var typeRoots = []; - ts.forEachAncestorDirectory(ts.normalizePath(currentDirectory), function (directory) { - var atTypes = ts.combinePaths(directory, nodeModulesAtTypes); - if (host.directoryExists(atTypes)) { -- (typeRoots || (typeRoots = [])).push(atTypes); -+ typeRoots.push(atTypes); - } - return undefined; - }); - return typeRoots; - } - var nodeModulesAtTypes = ts.combinePaths("node_modules", "@types"); -+ function getPnpTypeRoots(currentDirectory) { -+ if (!isPnpAvailable()) { -+ return []; -+ } -+ // Some TS consumers pass relative paths that aren't normalized -+ currentDirectory = ts.sys.resolvePath(currentDirectory); -+ var pnpapi = getPnpApi(); -+ var locator = pnpapi.findPackageLocator(currentDirectory + "/"); -+ var packageDependencies = pnpapi.getPackageInformation(locator).packageDependencies; -+ var typeRoots = []; -+ for (var _i = 0, _a = Array.from(packageDependencies.entries()); _i < _a.length; _i++) { -+ var _b = _a[_i], name = _b[0], referencish = _b[1]; -+ // eslint-disable-next-line no-null/no-null -+ if (name.startsWith(typesPackagePrefix) && referencish !== null) { -+ var dependencyLocator = pnpapi.getLocator(name, referencish); -+ var packageLocation = pnpapi.getPackageInformation(dependencyLocator).packageLocation; -+ typeRoots.push(ts.getDirectoryPath(packageLocation)); -+ } -+ } -+ return typeRoots; -+ } -+ var typesPackagePrefix = "@types/"; -+ function getDefaultTypeRoots(currentDirectory, host) { -+ var nmTypes = getNodeModulesTypeRoots(currentDirectory, host); -+ var pnpTypes = getPnpTypeRoots(currentDirectory); -+ if (nmTypes.length > 0 || pnpTypes.length > 0) { -+ return __spreadArrays(nmTypes, pnpTypes); -+ } -+ } - /** - * @param {string | undefined} containingFile - file that contains type reference directive, can be undefined if containing file is unknown. - * This is possible in case if resolution is performed for directives specified via 'types' parameter. In this case initial path for secondary lookups -@@ -27164,7 +27192,9 @@ var ts; - } - var result = void 0; - if (!ts.isExternalModuleNameRelative(typeReferenceDirectiveName)) { -- var searchResult = loadModuleFromNearestNodeModulesDirectory(Extensions.DtsOnly, typeReferenceDirectiveName, initialLocationForSecondaryLookup, moduleResolutionState, /*cache*/ undefined, /*redirectedReference*/ undefined); -+ var searchResult = isPnpAvailable() -+ ? tryLoadModuleUsingPnpResolution(Extensions.DtsOnly, typeReferenceDirectiveName, initialLocationForSecondaryLookup, moduleResolutionState) -+ : loadModuleFromNearestNodeModulesDirectory(Extensions.DtsOnly, typeReferenceDirectiveName, initialLocationForSecondaryLookup, moduleResolutionState, /*cache*/ undefined, /*redirectedReference*/ undefined); - result = searchResult && searchResult.value; - } - else { -@@ -27648,9 +27678,12 @@ var ts; - if (traceEnabled) { - trace(host, ts.Diagnostics.Loading_module_0_from_node_modules_folder_target_file_type_1, moduleName, Extensions[extensions]); - } -- var resolved_1 = loadModuleFromNearestNodeModulesDirectory(extensions, moduleName, containingDirectory, state, cache, redirectedReference); -- if (!resolved_1) -+ var resolved_1 = isPnpAvailable() -+ ? tryLoadModuleUsingPnpResolution(extensions, moduleName, containingDirectory, state) -+ : loadModuleFromNearestNodeModulesDirectory(extensions, moduleName, containingDirectory, state, cache, redirectedReference); -+ if (!resolved_1) { - return undefined; -+ } - var resolvedValue = resolved_1.value; - if (!compilerOptions.preserveSymlinks && resolvedValue && !resolvedValue.originalPath) { - var path = realPath(resolvedValue.path, host, traceEnabled); -@@ -28146,6 +28179,57 @@ var ts; - function toSearchResult(value) { - return value !== undefined ? { value: value } : undefined; - } -+ /** -+ * We only allow PnP to be used as a resolution strategy if TypeScript -+ * itself is executed under a PnP runtime (and we only allow it to access -+ * the current PnP runtime, not any on the disk). This ensures that we -+ * don't execute potentially malicious code that didn't already have a -+ * chance to be executed (if we're running within the runtime, it means -+ * that the runtime has already been executed). -+ * @internal -+ */ -+ function isPnpAvailable() { -+ // @ts-ignore -+ return process.versions.pnp; -+ } -+ function getPnpApi() { -+ return require("pnpapi"); -+ } -+ function loadPnpPackageResolution(packageName, containingDirectory) { -+ try { -+ return getPnpApi().resolveToUnqualified(packageName, containingDirectory + "/", { considerBuiltins: false }); -+ } -+ catch (_a) { -+ // Nothing to do -+ } -+ } -+ function loadPnpTypePackageResolution(packageName, containingDirectory) { -+ return loadPnpPackageResolution(getTypesPackageName(packageName), containingDirectory); -+ } -+ /* @internal */ -+ function tryLoadModuleUsingPnpResolution(extensions, moduleName, containingDirectory, state) { -+ var _a = parsePackageName(moduleName), packageName = _a.packageName, rest = _a.rest; -+ var packageResolution = loadPnpPackageResolution(packageName, containingDirectory); -+ var packageFullResolution = packageResolution -+ ? nodeLoadModuleByRelativeName(extensions, ts.combinePaths(packageResolution, rest), /*onlyRecordFailures*/ false, state, /*considerPackageJson*/ true) -+ : undefined; -+ var resolved; -+ if (packageFullResolution) { -+ resolved = packageFullResolution; -+ } -+ else if (extensions === Extensions.TypeScript || extensions === Extensions.DtsOnly) { -+ var typePackageResolution = loadPnpTypePackageResolution(packageName, containingDirectory); -+ var typePackageFullResolution = typePackageResolution -+ ? nodeLoadModuleByRelativeName(Extensions.DtsOnly, ts.combinePaths(typePackageResolution, rest), /*onlyRecordFailures*/ false, state, /*considerPackageJson*/ true) -+ : undefined; -+ if (typePackageFullResolution) { -+ resolved = typePackageFullResolution; -+ } -+ } -+ if (resolved) { -+ return toSearchResult(resolved); -+ } -+ } - })(ts || (ts = {})); - /* @internal */ - var ts; diff --git a/packages/plugin-compat/extra/typescript/patch-02c20e6d5668807b199467622bb0d6a8.diff b/packages/plugin-compat/extra/typescript/patches/patch-02c20e6d5668807b199467622bb0d6a8.diff similarity index 99% rename from packages/plugin-compat/extra/typescript/patch-02c20e6d5668807b199467622bb0d6a8.diff rename to packages/plugin-compat/extra/typescript/patches/patch-02c20e6d5668807b199467622bb0d6a8.diff index ffab573aa6ee..be70bb68af5f 100644 --- a/packages/plugin-compat/extra/typescript/patch-02c20e6d5668807b199467622bb0d6a8.diff +++ b/packages/plugin-compat/extra/typescript/patches/patch-02c20e6d5668807b199467622bb0d6a8.diff @@ -1,5 +1,5 @@ diff --git a/lib/tsc.js b/lib/tsc.js -index 92bf3cf99..5df945acb 100644 +index 92bf..5df9 100644 semver exclusivity >=5.0.1-rc <5.1.0-beta --- a/lib/tsc.js +++ b/lib/tsc.js @@ -328,7 +328,7 @@ semver exclusivity >=5.0.1-rc <5.1.0-beta perfLogger.logStartUpdateProgram("SynchronizeProgram"); synchronizeProgram(); diff --git a/lib/tsserver.js b/lib/tsserver.js -index 20cb517f8..eeac46d44 100644 +index 20cb..eeac 100644 semver exclusivity >=5.0.1-rc <5.1.0-beta --- a/lib/tsserver.js +++ b/lib/tsserver.js @@ -965,7 +965,7 @@ semver exclusivity >=5.0.1-rc <5.1.0-beta this.installer = childProcess.fork(typingsInstaller, args, { execArgv }); this.installer.on("message", (m) => this.handleMessage(m)); diff --git a/lib/tsserverlibrary.js b/lib/tsserverlibrary.js -index a69e846e7..d1973b29c 100644 +index a69e..d197 100644 semver exclusivity >=5.0.1-rc <5.1.0-beta --- a/lib/tsserverlibrary.js +++ b/lib/tsserverlibrary.js @@ -1648,7 +1648,7 @@ semver exclusivity >=5.0.1-rc <5.1.0-beta const watchers = this.packageJsonFilesMap || (this.packageJsonFilesMap = /* @__PURE__ */ new Map()); if (!watchers.has(path)) { diff --git a/lib/typescript.js b/lib/typescript.js -index 4b53c156e..54d44a8d6 100644 +index 4b53..54d4 100644 semver exclusivity >=5.0.1-rc <5.1.0-beta --- a/lib/typescript.js +++ b/lib/typescript.js @@ -2229,7 +2229,7 @@ semver exclusivity >=5.0.1-rc <5.1.0-beta init_ts_Completions(); kindPrecedence = { diff --git a/lib/typingsInstaller.js b/lib/typingsInstaller.js -index 00afe537d..97a3bab6b 100644 +index 00af..97a3 100644 semver exclusivity >=5.0.1-rc <5.1.0-beta --- a/lib/typingsInstaller.js +++ b/lib/typingsInstaller.js diff --git a/packages/plugin-compat/extra/typescript/patch-03c1ee97fa010722cf442756059d02bf.diff b/packages/plugin-compat/extra/typescript/patches/patch-03c1ee97fa010722cf442756059d02bf.diff similarity index 99% rename from packages/plugin-compat/extra/typescript/patch-03c1ee97fa010722cf442756059d02bf.diff rename to packages/plugin-compat/extra/typescript/patches/patch-03c1ee97fa010722cf442756059d02bf.diff index 25d2a3fc5b7e..b79114dfc41f 100644 --- a/packages/plugin-compat/extra/typescript/patch-03c1ee97fa010722cf442756059d02bf.diff +++ b/packages/plugin-compat/extra/typescript/patches/patch-03c1ee97fa010722cf442756059d02bf.diff @@ -1,5 +1,5 @@ diff --git a/lib/tsc.js b/lib/tsc.js -index 80de55fe3..867742baa 100644 +index 80de..8677 100644 semver exclusivity >=5.1.1-rc <5.2.0-beta --- a/lib/tsc.js +++ b/lib/tsc.js @@ -344,7 +344,7 @@ semver exclusivity >=5.1.1-rc <5.2.0-beta } function reloadFileNamesFromConfigFile() { diff --git a/lib/tsserver.js b/lib/tsserver.js -index ec8709520..e61459b87 100644 +index ec87..e614 100644 semver exclusivity >=5.1.1-rc <5.2.0-beta --- a/lib/tsserver.js +++ b/lib/tsserver.js @@ -997,7 +997,7 @@ semver exclusivity >=5.1.1-rc <5.2.0-beta this.installer = childProcess.fork(typingsInstaller, args, { execArgv }); this.installer.on("message", (m) => this.handleMessage(m)); diff --git a/lib/tsserverlibrary.js b/lib/tsserverlibrary.js -index 22e446c17..a81409276 100644 +index 22e4..a814 100644 semver exclusivity >=5.1.1-rc <5.2.0-beta --- a/lib/tsserverlibrary.js +++ b/lib/tsserverlibrary.js @@ -1696,7 +1696,7 @@ semver exclusivity >=5.1.1-rc <5.2.0-beta const watchers = this.packageJsonFilesMap || (this.packageJsonFilesMap = /* @__PURE__ */ new Map()); if (!watchers.has(path)) { diff --git a/lib/typescript.js b/lib/typescript.js -index 87906a6eb..192bb763f 100644 +index 8790..192b 100644 semver exclusivity >=5.1.1-rc <5.2.0-beta --- a/lib/typescript.js +++ b/lib/typescript.js @@ -2293,7 +2293,7 @@ semver exclusivity >=5.1.1-rc <5.2.0-beta init_ts_Completions(); kindPrecedence = { diff --git a/lib/typingsInstaller.js b/lib/typingsInstaller.js -index 5f70f8de5..a39cfe0cf 100644 +index 5f70..a39c 100644 semver exclusivity >=5.1.1-rc <5.2.0-beta --- a/lib/typingsInstaller.js +++ b/lib/typingsInstaller.js diff --git a/packages/plugin-compat/extra/typescript/patch-096c1f5aa391b527da95105bcaf4b1ec.diff b/packages/plugin-compat/extra/typescript/patches/patch-096c1f5aa391b527da95105bcaf4b1ec.diff similarity index 99% rename from packages/plugin-compat/extra/typescript/patch-096c1f5aa391b527da95105bcaf4b1ec.diff rename to packages/plugin-compat/extra/typescript/patches/patch-096c1f5aa391b527da95105bcaf4b1ec.diff index 68eab04ff5d3..3a6b5a3bb703 100644 --- a/packages/plugin-compat/extra/typescript/patch-096c1f5aa391b527da95105bcaf4b1ec.diff +++ b/packages/plugin-compat/extra/typescript/patches/patch-096c1f5aa391b527da95105bcaf4b1ec.diff @@ -1,5 +1,5 @@ diff --git a/lib/tsc.js b/lib/tsc.js -index fbb258864..8ff4e80e9 100644 +index fbb2..8ff4 100644 semver exclusivity >=3.5 <=3.6 --- a/lib/tsc.js +++ b/lib/tsc.js @@ -128,7 +128,7 @@ semver exclusivity >=3.5 <=3.6 var ts; (function (ts) { diff --git a/lib/tsserver.js b/lib/tsserver.js -index 896699e5a..836359b08 100644 +index 8966..8363 100644 semver exclusivity >=3.5 <=3.6 --- a/lib/tsserver.js +++ b/lib/tsserver.js @@ -274,7 +274,7 @@ semver exclusivity >=3.5 <=3.6 /* @internal */ var ts; diff --git a/lib/tsserverlibrary.js b/lib/tsserverlibrary.js -index 3e0937a3b..4433f6c4f 100644 +index 3e09..4433 100644 semver exclusivity >=3.5 <=3.6 --- a/lib/tsserverlibrary.js +++ b/lib/tsserverlibrary.js @@ -420,7 +420,7 @@ semver exclusivity >=3.5 <=3.6 /* @internal */ var ts; diff --git a/lib/typescript.js b/lib/typescript.js -index 5b5ad499a..2317dbec9 100644 +index 5b5a..2317 100644 semver exclusivity >=3.5 <=3.6 --- a/lib/typescript.js +++ b/lib/typescript.js @@ -566,7 +566,7 @@ semver exclusivity >=3.5 <=3.6 /* @internal */ var ts; diff --git a/lib/typescriptServices.js b/lib/typescriptServices.js -index 01f0275f2..753996313 100644 +index 01f0..7539 100644 semver exclusivity >=3.5 <=3.6 --- a/lib/typescriptServices.js +++ b/lib/typescriptServices.js @@ -712,7 +712,7 @@ semver exclusivity >=3.5 <=3.6 /* @internal */ var ts; diff --git a/lib/typingsInstaller.js b/lib/typingsInstaller.js -index 37631477a..81dd92c5e 100644 +index 3763..81dd 100644 semver exclusivity >=3.5 <=3.6 --- a/lib/typingsInstaller.js +++ b/lib/typingsInstaller.js diff --git a/packages/plugin-compat/extra/typescript/patch-0eda210888ab3e88bd6fb31fc3dafe89.diff b/packages/plugin-compat/extra/typescript/patches/patch-0eda210888ab3e88bd6fb31fc3dafe89.diff similarity index 99% rename from packages/plugin-compat/extra/typescript/patch-0eda210888ab3e88bd6fb31fc3dafe89.diff rename to packages/plugin-compat/extra/typescript/patches/patch-0eda210888ab3e88bd6fb31fc3dafe89.diff index 71565ccd3a6b..d7fa56d2552e 100644 --- a/packages/plugin-compat/extra/typescript/patch-0eda210888ab3e88bd6fb31fc3dafe89.diff +++ b/packages/plugin-compat/extra/typescript/patches/patch-0eda210888ab3e88bd6fb31fc3dafe89.diff @@ -1,5 +1,5 @@ diff --git a/lib/tsc.js b/lib/tsc.js -index c78476d11..fa13f0ed8 100644 +index c784..fa13 100644 semver exclusivity >=4.1 <4.2 --- a/lib/tsc.js +++ b/lib/tsc.js @@ -267,7 +267,7 @@ semver exclusivity >=4.1 <4.2 ts.perfLogger.logStartUpdateProgram("SynchronizeProgram"); synchronizeProgram(); diff --git a/lib/tsserver.js b/lib/tsserver.js -index 7f7ccca33..06cc814c8 100644 +index 7f7c..06cc 100644 semver exclusivity >=4.1 <4.2 --- a/lib/tsserver.js +++ b/lib/tsserver.js @@ -689,7 +689,7 @@ semver exclusivity >=4.1 <4.2 var _this = this; var watchers = this.packageJsonFilesMap || (this.packageJsonFilesMap = new ts.Map()); diff --git a/lib/tsserverlibrary.d.ts b/lib/tsserverlibrary.d.ts -index 58167e3f7..a3e05171d 100644 +index 5816..a3e0 100644 semver exclusivity >=4.1 <4.2 --- a/lib/tsserverlibrary.d.ts +++ b/lib/tsserverlibrary.d.ts @@ -702,7 +702,7 @@ semver exclusivity >=4.1 <4.2 toPath(fileName: string): Path; private loadTypesMap; diff --git a/lib/tsserverlibrary.js b/lib/tsserverlibrary.js -index 7958f5287..357584216 100644 +index 7958..3575 100644 semver exclusivity >=4.1 <4.2 --- a/lib/tsserverlibrary.js +++ b/lib/tsserverlibrary.js @@ -1124,7 +1124,7 @@ semver exclusivity >=4.1 <4.2 var _this = this; var watchers = this.packageJsonFilesMap || (this.packageJsonFilesMap = new ts.Map()); diff --git a/lib/typescript.js b/lib/typescript.js -index dffe1587f..4732dcfa2 100644 +index dffe..4732 100644 semver exclusivity >=4.1 <4.2 --- a/lib/typescript.js +++ b/lib/typescript.js @@ -1485,7 +1485,7 @@ semver exclusivity >=4.1 <4.2 return moduleSpecifierToValidIdentifier(ts.removeFileExtension(ts.stripQuotes(moduleSymbol.name)), target); } diff --git a/lib/typescriptServices.js b/lib/typescriptServices.js -index 5a9813e5a..66c85b3f5 100644 +index 5a98..66c8 100644 semver exclusivity >=4.1 <4.2 --- a/lib/typescriptServices.js +++ b/lib/typescriptServices.js @@ -1846,7 +1846,7 @@ semver exclusivity >=4.1 <4.2 return moduleSpecifierToValidIdentifier(ts.removeFileExtension(ts.stripQuotes(moduleSymbol.name)), target); } diff --git a/lib/typingsInstaller.js b/lib/typingsInstaller.js -index 69a55acb3..f5bca327d 100644 +index 69a5..f5bc 100644 semver exclusivity >=4.1 <4.2 --- a/lib/typingsInstaller.js +++ b/lib/typingsInstaller.js diff --git a/packages/plugin-compat/extra/typescript/patch-0fce2ce089fe15ad286b7a14693f6c4e.diff b/packages/plugin-compat/extra/typescript/patches/patch-0fce2ce089fe15ad286b7a14693f6c4e.diff similarity index 99% rename from packages/plugin-compat/extra/typescript/patch-0fce2ce089fe15ad286b7a14693f6c4e.diff rename to packages/plugin-compat/extra/typescript/patches/patch-0fce2ce089fe15ad286b7a14693f6c4e.diff index 5bc224de2c51..69f24a495611 100644 --- a/packages/plugin-compat/extra/typescript/patch-0fce2ce089fe15ad286b7a14693f6c4e.diff +++ b/packages/plugin-compat/extra/typescript/patches/patch-0fce2ce089fe15ad286b7a14693f6c4e.diff @@ -1,5 +1,5 @@ diff --git a/lib/tsc.js b/lib/tsc.js -index 012388982..34e6d3071 100644 +index 0123..34e6 100644 semver exclusivity >=5.1.0-beta <5.1.1-rc --- a/lib/tsc.js +++ b/lib/tsc.js @@ -344,7 +344,7 @@ semver exclusivity >=5.1.0-beta <5.1.1-rc } function reloadFileNamesFromConfigFile() { diff --git a/lib/tsserver.js b/lib/tsserver.js -index 1bcfee524..bf80053e9 100644 +index 1bcf..bf80 100644 semver exclusivity >=5.1.0-beta <5.1.1-rc --- a/lib/tsserver.js +++ b/lib/tsserver.js @@ -997,7 +997,7 @@ semver exclusivity >=5.1.0-beta <5.1.1-rc this.installer = childProcess.fork(typingsInstaller, args, { execArgv }); this.installer.on("message", (m) => this.handleMessage(m)); diff --git a/lib/tsserverlibrary.js b/lib/tsserverlibrary.js -index 0d1d2fcd0..85552699b 100644 +index 0d1d..8555 100644 semver exclusivity >=5.1.0-beta <5.1.1-rc --- a/lib/tsserverlibrary.js +++ b/lib/tsserverlibrary.js @@ -1696,7 +1696,7 @@ semver exclusivity >=5.1.0-beta <5.1.1-rc const watchers = this.packageJsonFilesMap || (this.packageJsonFilesMap = /* @__PURE__ */ new Map()); if (!watchers.has(path)) { diff --git a/lib/typescript.js b/lib/typescript.js -index 1b800b1d0..377a93466 100644 +index 1b80..377a 100644 semver exclusivity >=5.1.0-beta <5.1.1-rc --- a/lib/typescript.js +++ b/lib/typescript.js @@ -2293,7 +2293,7 @@ semver exclusivity >=5.1.0-beta <5.1.1-rc init_ts_Completions(); kindPrecedence = { diff --git a/lib/typingsInstaller.js b/lib/typingsInstaller.js -index 9fb36b5c5..b15c24bd1 100644 +index 9fb3..b15c 100644 semver exclusivity >=5.1.0-beta <5.1.1-rc --- a/lib/typingsInstaller.js +++ b/lib/typingsInstaller.js diff --git a/packages/plugin-compat/extra/typescript/patch-15cfd5859f3cc0b3472e3b5c7db0dc1b.diff b/packages/plugin-compat/extra/typescript/patches/patch-15cfd5859f3cc0b3472e3b5c7db0dc1b.diff similarity index 99% rename from packages/plugin-compat/extra/typescript/patch-15cfd5859f3cc0b3472e3b5c7db0dc1b.diff rename to packages/plugin-compat/extra/typescript/patches/patch-15cfd5859f3cc0b3472e3b5c7db0dc1b.diff index 9639352f04e4..ddf3423d55a9 100644 --- a/packages/plugin-compat/extra/typescript/patch-15cfd5859f3cc0b3472e3b5c7db0dc1b.diff +++ b/packages/plugin-compat/extra/typescript/patches/patch-15cfd5859f3cc0b3472e3b5c7db0dc1b.diff @@ -1,5 +1,5 @@ diff --git a/lib/tsc.js b/lib/tsc.js -index d7f749f63..f16090669 100644 +index d7f7..f160 100644 semver exclusivity >=3.7 <3.9 --- a/lib/tsc.js +++ b/lib/tsc.js @@ -161,7 +161,7 @@ semver exclusivity >=3.7 <3.9 } var nodeModulesDirectoryName = moduleSpecifier.substring(parts.topLevelPackageNameIndex + 1); diff --git a/lib/tsserver.js b/lib/tsserver.js -index 4ea67ecd8..bbc4ed349 100644 +index 4ea6..bbc4 100644 semver exclusivity >=3.7 <3.9 --- a/lib/tsserver.js +++ b/lib/tsserver.js @@ -402,7 +402,7 @@ semver exclusivity >=3.7 <3.9 return moduleSpecifierToValidIdentifier(ts.removeFileExtension(ts.stripQuotes(moduleSymbol.name)), target); } diff --git a/lib/tsserverlibrary.js b/lib/tsserverlibrary.js -index 2897a2262..0c938ab5d 100644 +index 2897..0c93 100644 semver exclusivity >=3.7 <3.9 --- a/lib/tsserverlibrary.js +++ b/lib/tsserverlibrary.js @@ -643,7 +643,7 @@ semver exclusivity >=3.7 <3.9 return moduleSpecifierToValidIdentifier(ts.removeFileExtension(ts.stripQuotes(moduleSymbol.name)), target); } diff --git a/lib/typescript.js b/lib/typescript.js -index 548ceea96..216c753ca 100644 +index 548c..216c 100644 semver exclusivity >=3.7 <3.9 --- a/lib/typescript.js +++ b/lib/typescript.js @@ -884,7 +884,7 @@ semver exclusivity >=3.7 <3.9 return moduleSpecifierToValidIdentifier(ts.removeFileExtension(ts.stripQuotes(moduleSymbol.name)), target); } diff --git a/lib/typescriptServices.js b/lib/typescriptServices.js -index 9046c6f90..dadd33c2f 100644 +index 9046..dadd 100644 semver exclusivity >=3.7 <3.9 --- a/lib/typescriptServices.js +++ b/lib/typescriptServices.js @@ -1125,7 +1125,7 @@ semver exclusivity >=3.7 <3.9 return moduleSpecifierToValidIdentifier(ts.removeFileExtension(ts.stripQuotes(moduleSymbol.name)), target); } diff --git a/lib/typingsInstaller.js b/lib/typingsInstaller.js -index 776a2e0a9..af61fe7f6 100644 +index 776a..af61 100644 semver exclusivity >=3.7 <3.9 --- a/lib/typingsInstaller.js +++ b/lib/typingsInstaller.js diff --git a/packages/plugin-compat/extra/typescript/patch-214d05a2ca19998d174e45c28c665daf.diff b/packages/plugin-compat/extra/typescript/patches/patch-214d05a2ca19998d174e45c28c665daf.diff similarity index 99% rename from packages/plugin-compat/extra/typescript/patch-214d05a2ca19998d174e45c28c665daf.diff rename to packages/plugin-compat/extra/typescript/patches/patch-214d05a2ca19998d174e45c28c665daf.diff index fd4528a69009..84c5ed834dd4 100644 --- a/packages/plugin-compat/extra/typescript/patch-214d05a2ca19998d174e45c28c665daf.diff +++ b/packages/plugin-compat/extra/typescript/patches/patch-214d05a2ca19998d174e45c28c665daf.diff @@ -1,5 +1,5 @@ diff --git a/lib/tsc.js b/lib/tsc.js -index 7f46cc9d8..fd2e81687 100644 +index 7f46..fd2e 100644 semver exclusivity >=4.2 <4.3 --- a/lib/tsc.js +++ b/lib/tsc.js @@ -300,7 +300,7 @@ semver exclusivity >=4.2 <4.3 ts.perfLogger.logStartUpdateProgram("SynchronizeProgram"); synchronizeProgram(); diff --git a/lib/tsserver.js b/lib/tsserver.js -index a1d0a7a17..a85af606d 100644 +index a1d0..a85a 100644 semver exclusivity >=4.2 <4.3 --- a/lib/tsserver.js +++ b/lib/tsserver.js @@ -922,7 +922,7 @@ semver exclusivity >=4.2 <4.3 this.installer.on("message", function (m) { return _this.handleMessage(m); }); // We have to schedule this event to the next tick diff --git a/lib/tsserverlibrary.d.ts b/lib/tsserverlibrary.d.ts -index 70e326c4c..1fd3a2193 100644 +index 70e3..1fd3 100644 semver exclusivity >=4.2 <4.3 --- a/lib/tsserverlibrary.d.ts +++ b/lib/tsserverlibrary.d.ts @@ -935,7 +935,7 @@ semver exclusivity >=4.2 <4.3 * @param {string | undefined} containingFile - file that contains type reference directive, can be undefined if containing file is unknown. * This is possible in case if resolution is performed for directives specified via 'types' parameter. In this case initial path for secondary lookups diff --git a/lib/tsserverlibrary.js b/lib/tsserverlibrary.js -index e8537e466..499df472c 100644 +index e853..499d 100644 semver exclusivity >=4.2 <4.3 --- a/lib/tsserverlibrary.js +++ b/lib/tsserverlibrary.js @@ -1535,7 +1535,7 @@ semver exclusivity >=4.2 <4.3 var _this = this; var watchers = this.packageJsonFilesMap || (this.packageJsonFilesMap = new ts.Map()); diff --git a/lib/typescript.d.ts b/lib/typescript.d.ts -index 5c9fcf765..e0cca011b 100644 +index 5c9f..e0cc 100644 semver exclusivity >=4.2 <4.3 --- a/lib/typescript.d.ts +++ b/lib/typescript.d.ts @@ -1548,7 +1548,7 @@ semver exclusivity >=4.2 <4.3 * @param {string | undefined} containingFile - file that contains type reference directive, can be undefined if containing file is unknown. * This is possible in case if resolution is performed for directives specified via 'types' parameter. In this case initial path for secondary lookups diff --git a/lib/typescript.js b/lib/typescript.js -index 8539f89fd..ae4dbaa64 100644 +index 8539..ae4d 100644 semver exclusivity >=4.2 <4.3 --- a/lib/typescript.js +++ b/lib/typescript.js @@ -2045,7 +2045,7 @@ semver exclusivity >=4.2 <4.3 return statement; }); diff --git a/lib/typescriptServices.d.ts b/lib/typescriptServices.d.ts -index 3a51aada6..62093708e 100644 +index 3a51..6209 100644 semver exclusivity >=4.2 <4.3 --- a/lib/typescriptServices.d.ts +++ b/lib/typescriptServices.d.ts @@ -2058,7 +2058,7 @@ semver exclusivity >=4.2 <4.3 * @param {string | undefined} containingFile - file that contains type reference directive, can be undefined if containing file is unknown. * This is possible in case if resolution is performed for directives specified via 'types' parameter. In this case initial path for secondary lookups diff --git a/lib/typescriptServices.js b/lib/typescriptServices.js -index 6b08bfe23..5019e423b 100644 +index 6b08..5019 100644 semver exclusivity >=4.2 <4.3 --- a/lib/typescriptServices.js +++ b/lib/typescriptServices.js @@ -2555,7 +2555,7 @@ semver exclusivity >=4.2 <4.3 return statement; }); diff --git a/lib/typingsInstaller.js b/lib/typingsInstaller.js -index 9fa096358..0c97fc3ff 100644 +index 9fa0..0c97 100644 semver exclusivity >=4.2 <4.3 --- a/lib/typingsInstaller.js +++ b/lib/typingsInstaller.js diff --git a/packages/plugin-compat/extra/typescript/patch-2bfb57e5418d9d6f3fe14bdcdbe212f9.diff b/packages/plugin-compat/extra/typescript/patches/patch-2bfb57e5418d9d6f3fe14bdcdbe212f9.diff similarity index 99% rename from packages/plugin-compat/extra/typescript/patch-2bfb57e5418d9d6f3fe14bdcdbe212f9.diff rename to packages/plugin-compat/extra/typescript/patches/patch-2bfb57e5418d9d6f3fe14bdcdbe212f9.diff index bcbbe2cce004..7c55ea8921d8 100644 --- a/packages/plugin-compat/extra/typescript/patch-2bfb57e5418d9d6f3fe14bdcdbe212f9.diff +++ b/packages/plugin-compat/extra/typescript/patches/patch-2bfb57e5418d9d6f3fe14bdcdbe212f9.diff @@ -1,5 +1,5 @@ diff --git a/lib/tsc.js b/lib/tsc.js -index ae1a92412..bfc6e56b8 100644 +index ae1a..bfc6 100644 semver exclusivity >=4.8.1-rc <4.8.4 --- a/lib/tsc.js +++ b/lib/tsc.js @@ -306,7 +306,7 @@ semver exclusivity >=4.8.1-rc <4.8.4 ts.perfLogger.logStartUpdateProgram("SynchronizeProgram"); synchronizeProgram(); diff --git a/lib/tsserver.js b/lib/tsserver.js -index 21accd494..1e51c95a3 100644 +index 21ac..1e51 100644 semver exclusivity >=4.8.1-rc <4.8.4 --- a/lib/tsserver.js +++ b/lib/tsserver.js @@ -983,7 +983,7 @@ semver exclusivity >=4.8.1-rc <4.8.4 this.installer.on("message", function (m) { return _this.handleMessage(m); }); // We have to schedule this event to the next tick diff --git a/lib/tsserverlibrary.js b/lib/tsserverlibrary.js -index 83540854d..8746e42a2 100644 +index 8354..8746 100644 semver exclusivity >=4.8.1-rc <4.8.4 --- a/lib/tsserverlibrary.js +++ b/lib/tsserverlibrary.js @@ -1634,7 +1634,7 @@ semver exclusivity >=4.8.1-rc <4.8.4 var _this = this; var watchers = this.packageJsonFilesMap || (this.packageJsonFilesMap = new ts.Map()); diff --git a/lib/typescript.js b/lib/typescript.js -index d5dc09813..bb439bf2d 100644 +index d5dc..bb43 100644 semver exclusivity >=4.8.1-rc <4.8.4 --- a/lib/typescript.js +++ b/lib/typescript.js @@ -2179,7 +2179,7 @@ semver exclusivity >=4.8.1-rc <4.8.4 return statement; }); diff --git a/lib/typescriptServices.js b/lib/typescriptServices.js -index ed8f1cb72..66c728457 100644 +index ed8f..66c7 100644 semver exclusivity >=4.8.1-rc <4.8.4 --- a/lib/typescriptServices.js +++ b/lib/typescriptServices.js @@ -2724,7 +2724,7 @@ semver exclusivity >=4.8.1-rc <4.8.4 return statement; }); diff --git a/lib/typingsInstaller.js b/lib/typingsInstaller.js -index 881dba5f4..696971274 100644 +index 881d..6969 100644 semver exclusivity >=4.8.1-rc <4.8.4 --- a/lib/typingsInstaller.js +++ b/lib/typingsInstaller.js diff --git a/packages/plugin-compat/extra/typescript/patch-2e7a7c7c287ae23fbc4fad76bd87e225.diff b/packages/plugin-compat/extra/typescript/patches/patch-2e7a7c7c287ae23fbc4fad76bd87e225.diff similarity index 99% rename from packages/plugin-compat/extra/typescript/patch-2e7a7c7c287ae23fbc4fad76bd87e225.diff rename to packages/plugin-compat/extra/typescript/patches/patch-2e7a7c7c287ae23fbc4fad76bd87e225.diff index 439232cee191..6aa866ec7cc2 100644 --- a/packages/plugin-compat/extra/typescript/patch-2e7a7c7c287ae23fbc4fad76bd87e225.diff +++ b/packages/plugin-compat/extra/typescript/patches/patch-2e7a7c7c287ae23fbc4fad76bd87e225.diff @@ -1,5 +1,5 @@ diff --git a/lib/tsc.js b/lib/tsc.js -index 83f54758a..b3ab9eb57 100644 +index 83f5..b3ab 100644 semver exclusivity >=4.3 <4.4 --- a/lib/tsc.js +++ b/lib/tsc.js @@ -300,7 +300,7 @@ semver exclusivity >=4.3 <4.4 ts.perfLogger.logStartUpdateProgram("SynchronizeProgram"); synchronizeProgram(); diff --git a/lib/tsserver.js b/lib/tsserver.js -index 58028943d..de5bd36e2 100644 +index 5802..de5b 100644 semver exclusivity >=4.3 <4.4 --- a/lib/tsserver.js +++ b/lib/tsserver.js @@ -922,7 +922,7 @@ semver exclusivity >=4.3 <4.4 this.installer.on("message", function (m) { return _this.handleMessage(m); }); // We have to schedule this event to the next tick diff --git a/lib/tsserverlibrary.d.ts b/lib/tsserverlibrary.d.ts -index 6195d669a..0cabf3bdf 100644 +index 6195..0cab 100644 semver exclusivity >=4.3 <4.4 --- a/lib/tsserverlibrary.d.ts +++ b/lib/tsserverlibrary.d.ts @@ -935,7 +935,7 @@ semver exclusivity >=4.3 <4.4 * @param {string | undefined} containingFile - file that contains type reference directive, can be undefined if containing file is unknown. * This is possible in case if resolution is performed for directives specified via 'types' parameter. In this case initial path for secondary lookups diff --git a/lib/tsserverlibrary.js b/lib/tsserverlibrary.js -index ee78ce982..d8fc9d744 100644 +index ee78..d8fc 100644 semver exclusivity >=4.3 <4.4 --- a/lib/tsserverlibrary.js +++ b/lib/tsserverlibrary.js @@ -1535,7 +1535,7 @@ semver exclusivity >=4.3 <4.4 var _this = this; var watchers = this.packageJsonFilesMap || (this.packageJsonFilesMap = new ts.Map()); diff --git a/lib/typescript.d.ts b/lib/typescript.d.ts -index b86a3a299..a7937dd2e 100644 +index b86a..a793 100644 semver exclusivity >=4.3 <4.4 --- a/lib/typescript.d.ts +++ b/lib/typescript.d.ts @@ -1548,7 +1548,7 @@ semver exclusivity >=4.3 <4.4 * @param {string | undefined} containingFile - file that contains type reference directive, can be undefined if containing file is unknown. * This is possible in case if resolution is performed for directives specified via 'types' parameter. In this case initial path for secondary lookups diff --git a/lib/typescript.js b/lib/typescript.js -index 615ad27f3..1ccc4561b 100644 +index 615a..1ccc 100644 semver exclusivity >=4.3 <4.4 --- a/lib/typescript.js +++ b/lib/typescript.js @@ -2045,7 +2045,7 @@ semver exclusivity >=4.3 <4.4 return statement; }); diff --git a/lib/typescriptServices.d.ts b/lib/typescriptServices.d.ts -index 2d44d601a..6fe4cf63a 100644 +index 2d44..6fe4 100644 semver exclusivity >=4.3 <4.4 --- a/lib/typescriptServices.d.ts +++ b/lib/typescriptServices.d.ts @@ -2058,7 +2058,7 @@ semver exclusivity >=4.3 <4.4 * @param {string | undefined} containingFile - file that contains type reference directive, can be undefined if containing file is unknown. * This is possible in case if resolution is performed for directives specified via 'types' parameter. In this case initial path for secondary lookups diff --git a/lib/typescriptServices.js b/lib/typescriptServices.js -index 59f7d01b5..7bd6144fa 100644 +index 59f7..7bd6 100644 semver exclusivity >=4.3 <4.4 --- a/lib/typescriptServices.js +++ b/lib/typescriptServices.js @@ -2555,7 +2555,7 @@ semver exclusivity >=4.3 <4.4 return statement; }); diff --git a/lib/typingsInstaller.js b/lib/typingsInstaller.js -index 6810860b9..eccc2b444 100644 +index 6810..eccc 100644 semver exclusivity >=4.3 <4.4 --- a/lib/typingsInstaller.js +++ b/lib/typingsInstaller.js diff --git a/packages/plugin-compat/extra/typescript/patch-2fefa5a2a28ff09a1a16fb595e6fcf5e.diff b/packages/plugin-compat/extra/typescript/patches/patch-2fefa5a2a28ff09a1a16fb595e6fcf5e.diff similarity index 99% rename from packages/plugin-compat/extra/typescript/patch-2fefa5a2a28ff09a1a16fb595e6fcf5e.diff rename to packages/plugin-compat/extra/typescript/patches/patch-2fefa5a2a28ff09a1a16fb595e6fcf5e.diff index 115d5e1cc5d2..6ee60a0d98f9 100644 --- a/packages/plugin-compat/extra/typescript/patch-2fefa5a2a28ff09a1a16fb595e6fcf5e.diff +++ b/packages/plugin-compat/extra/typescript/patches/patch-2fefa5a2a28ff09a1a16fb595e6fcf5e.diff @@ -1,5 +1,5 @@ diff --git a/lib/tsc.js b/lib/tsc.js -index 38a762ebd..1367fec71 100644 +index 38a7..1367 100644 semver exclusivity >=4.7.0-beta <4.8 --- a/lib/tsc.js +++ b/lib/tsc.js @@ -303,7 +303,7 @@ semver exclusivity >=4.7.0-beta <4.8 ts.perfLogger.logStartUpdateProgram("SynchronizeProgram"); synchronizeProgram(); diff --git a/lib/tsserver.js b/lib/tsserver.js -index 61cb0d073..4c64c1e78 100644 +index 61cb..4c64 100644 semver exclusivity >=4.7.0-beta <4.8 --- a/lib/tsserver.js +++ b/lib/tsserver.js @@ -1011,7 +1011,7 @@ semver exclusivity >=4.7.0-beta <4.8 this.installer.on("message", function (m) { return _this.handleMessage(m); }); // We have to schedule this event to the next tick diff --git a/lib/tsserverlibrary.js b/lib/tsserverlibrary.js -index c6266d2cf..3fc32cdb5 100644 +index c626..3fc3 100644 semver exclusivity >=4.7.0-beta <4.8 --- a/lib/tsserverlibrary.js +++ b/lib/tsserverlibrary.js @@ -1695,7 +1695,7 @@ semver exclusivity >=4.7.0-beta <4.8 var _this = this; var watchers = this.packageJsonFilesMap || (this.packageJsonFilesMap = new ts.Map()); diff --git a/lib/typescript.js b/lib/typescript.js -index bc19c16df..7d49ad371 100644 +index bc19..7d49 100644 semver exclusivity >=4.7.0-beta <4.8 --- a/lib/typescript.js +++ b/lib/typescript.js @@ -2275,7 +2275,7 @@ semver exclusivity >=4.7.0-beta <4.8 return statement; }); diff --git a/lib/typescriptServices.js b/lib/typescriptServices.js -index 78e089a97..41bd82946 100644 +index 78e0..41bd 100644 semver exclusivity >=4.7.0-beta <4.8 --- a/lib/typescriptServices.js +++ b/lib/typescriptServices.js @@ -2855,7 +2855,7 @@ semver exclusivity >=4.7.0-beta <4.8 return statement; }); diff --git a/lib/typingsInstaller.js b/lib/typingsInstaller.js -index 926becf49..29d244bbe 100644 +index 926b..29d2 100644 semver exclusivity >=4.7.0-beta <4.8 --- a/lib/typingsInstaller.js +++ b/lib/typingsInstaller.js diff --git a/packages/plugin-compat/extra/typescript/patch-40004ab057096dfb56a6db812e70242d.diff b/packages/plugin-compat/extra/typescript/patches/patch-40004ab057096dfb56a6db812e70242d.diff similarity index 99% rename from packages/plugin-compat/extra/typescript/patch-40004ab057096dfb56a6db812e70242d.diff rename to packages/plugin-compat/extra/typescript/patches/patch-40004ab057096dfb56a6db812e70242d.diff index 74513f7d80a1..8c41338db721 100644 --- a/packages/plugin-compat/extra/typescript/patch-40004ab057096dfb56a6db812e70242d.diff +++ b/packages/plugin-compat/extra/typescript/patches/patch-40004ab057096dfb56a6db812e70242d.diff @@ -1,5 +1,5 @@ diff --git a/lib/tsc.js b/lib/tsc.js -index ddac1f06e..3e8ea9ec0 100644 +index ddac..3e8e 100644 semver exclusivity >=4.8.0-beta <4.8.1-rc --- a/lib/tsc.js +++ b/lib/tsc.js @@ -303,7 +303,7 @@ semver exclusivity >=4.8.0-beta <4.8.1-rc ts.perfLogger.logStartUpdateProgram("SynchronizeProgram"); synchronizeProgram(); diff --git a/lib/tsserver.js b/lib/tsserver.js -index 3ab7d98ba..4b6dbe734 100644 +index 3ab7..4b6d 100644 semver exclusivity >=4.8.0-beta <4.8.1-rc --- a/lib/tsserver.js +++ b/lib/tsserver.js @@ -1011,7 +1011,7 @@ semver exclusivity >=4.8.0-beta <4.8.1-rc this.installer.on("message", function (m) { return _this.handleMessage(m); }); // We have to schedule this event to the next tick diff --git a/lib/tsserverlibrary.js b/lib/tsserverlibrary.js -index 5ba14d9ce..bd17c80a6 100644 +index 5ba1..bd17 100644 semver exclusivity >=4.8.0-beta <4.8.1-rc --- a/lib/tsserverlibrary.js +++ b/lib/tsserverlibrary.js @@ -1695,7 +1695,7 @@ semver exclusivity >=4.8.0-beta <4.8.1-rc var _this = this; var watchers = this.packageJsonFilesMap || (this.packageJsonFilesMap = new ts.Map()); diff --git a/lib/typescript.js b/lib/typescript.js -index 3881df0d0..59b050376 100644 +index 3881..59b0 100644 semver exclusivity >=4.8.0-beta <4.8.1-rc --- a/lib/typescript.js +++ b/lib/typescript.js @@ -2275,7 +2275,7 @@ semver exclusivity >=4.8.0-beta <4.8.1-rc return statement; }); diff --git a/lib/typescriptServices.js b/lib/typescriptServices.js -index a856d881b..3a60baf6f 100644 +index a856..3a60 100644 semver exclusivity >=4.8.0-beta <4.8.1-rc --- a/lib/typescriptServices.js +++ b/lib/typescriptServices.js @@ -2855,7 +2855,7 @@ semver exclusivity >=4.8.0-beta <4.8.1-rc return statement; }); diff --git a/lib/typingsInstaller.js b/lib/typingsInstaller.js -index c8b3e29f4..8176d8d64 100644 +index c8b3..8176 100644 semver exclusivity >=4.8.0-beta <4.8.1-rc --- a/lib/typingsInstaller.js +++ b/lib/typingsInstaller.js diff --git a/packages/plugin-compat/extra/typescript/patch-5a1e226dc329170d65e77c4cf6483a90.diff b/packages/plugin-compat/extra/typescript/patches/patch-427a472922e02b291ddf21ed6419ac54.diff similarity index 91% rename from packages/plugin-compat/extra/typescript/patch-5a1e226dc329170d65e77c4cf6483a90.diff rename to packages/plugin-compat/extra/typescript/patches/patch-427a472922e02b291ddf21ed6419ac54.diff index 4e9386e7c2c1..c08018a3b58e 100644 --- a/packages/plugin-compat/extra/typescript/patch-5a1e226dc329170d65e77c4cf6483a90.diff +++ b/packages/plugin-compat/extra/typescript/patches/patch-427a472922e02b291ddf21ed6419ac54.diff @@ -1,25 +1,19 @@ diff --git a/lib/tsc.js b/lib/tsc.js -index c9113e23c..8d141d301 100644 +index c911..bf67 100644 semver exclusivity >=5.6.0-beta <5.6.1-rc --- a/lib/tsc.js +++ b/lib/tsc.js -@@ -5064,6 +5064,9 @@ var sys = (() => { - } - } - function isFileSystemCaseSensitive() { -+ if (typeof process.versions.pnp !== `undefined`) { -+ return true; -+ } - if (platform === "win32" || platform === "win64") { - return false; - } -@@ -38786,6 +38789,48 @@ function getDefaultValueForOption(option) { +@@ -3894,6 +3894,29 @@ var commentPragmas = { } - } + }; +// src/compiler/pnpapi.ts ++function isPnpEnabled() { ++ var _a; ++ return typeof process !== "undefined" && typeof ((_a = process == null ? void 0 : process.versions) == null ? void 0 : _a.pnp) !== "undefined"; ++} +function getPnpApi(path) { -+ if (typeof process.versions.pnp === "undefined") { ++ if (!isPnpEnabled()) { + return; + } + const { findPnpApi } = require("module"); @@ -36,6 +30,23 @@ semver exclusivity >=5.6.0-beta <5.6.1-rc + ); +} + + // src/compiler/sys.ts + function generateDjb2Hash(data) { + let acc = 5381; +@@ -5064,6 +5087,9 @@ var sys = (() => { + } + } + function isFileSystemCaseSensitive() { ++ if (isPnpEnabled()) { ++ return true; ++ } + if (platform === "win32" || platform === "win64") { + return false; + } +@@ -38786,6 +38812,29 @@ function getDefaultValueForOption(option) { + } + } + +// src/compiler/pnp.ts +function getPnpTypeRoots(currentDirectory) { + const pnpApi = getPnpApi(currentDirectory); @@ -62,7 +73,7 @@ semver exclusivity >=5.6.0-beta <5.6.1-rc // src/compiler/moduleNameResolver.ts function trace(host, message, ...args) { host.trace(formatMessage(message, ...args)); -@@ -39003,7 +39048,7 @@ function getEffectiveTypeRoots(options, host) { +@@ -39003,7 +39052,7 @@ function getEffectiveTypeRoots(options, host) { return getDefaultTypeRoots(currentDirectory); } } @@ -71,7 +82,7 @@ semver exclusivity >=5.6.0-beta <5.6.1-rc let typeRoots; forEachAncestorDirectory(normalizePath(currentDirectory), (directory) => { const atTypes = combinePaths(directory, nodeModulesAtTypes); -@@ -39016,6 +39061,15 @@ function arePathsEqual(path1, path2, host) { +@@ -39016,6 +39065,15 @@ function arePathsEqual(path1, path2, host) { const useCaseSensitiveFileNames2 = typeof host.useCaseSensitiveFileNames === "function" ? host.useCaseSensitiveFileNames() : host.useCaseSensitiveFileNames; return comparePaths(path1, path2, !useCaseSensitiveFileNames2) === 0 /* EqualTo */; } @@ -87,7 +98,7 @@ semver exclusivity >=5.6.0-beta <5.6.1-rc function getOriginalAndResolvedFileName(fileName, host, traceEnabled) { const resolvedFileName = realPath(fileName, host, traceEnabled); const pathsAreEqual = arePathsEqual(fileName, resolvedFileName, host); -@@ -40894,7 +40948,15 @@ function loadModuleFromNearestNodeModulesDirectoryWorker(extensions, moduleName, +@@ -40894,7 +40952,15 @@ function loadModuleFromNearestNodeModulesDirectoryWorker(extensions, moduleName, return lookup(secondaryExtensions); } function lookup(extensions2) { @@ -104,7 +115,7 @@ semver exclusivity >=5.6.0-beta <5.6.1-rc if (getBaseFileName(ancestorDirectory) !== "node_modules") { const resolutionFromCache = tryFindNonRelativeModuleNameInCache(cache, moduleName, mode, ancestorDirectory, redirectedReference, state); if (resolutionFromCache) { -@@ -40929,11 +40991,40 @@ function loadModuleFromImmediateNodeModulesDirectory(extensions, moduleName, dir +@@ -40929,11 +40995,40 @@ function loadModuleFromImmediateNodeModulesDirectory(extensions, moduleName, dir return loadModuleFromSpecificNodeModulesDirectory(4 /* Declaration */, mangleScopedPackageNameWithTrace(moduleName, state), nodeModulesAtTypes2, nodeModulesAtTypesExists, state, cache, redirectedReference); } } @@ -146,7 +157,7 @@ semver exclusivity >=5.6.0-beta <5.6.1-rc let rootPackageInfo; let packageInfo = getPackageJsonInfo(candidate, !nodeModulesDirectoryExists, state); if (rest !== "" && packageInfo && (!(state.features & 8 /* Exports */) || !hasProperty(((_a = rootPackageInfo = getPackageJsonInfo(packageDirectory, !nodeModulesDirectoryExists, state)) == null ? void 0 : _a.contents.packageJsonContent) ?? emptyArray, "exports"))) { -@@ -41234,6 +41325,18 @@ function traceIfEnabled(state, diagnostic, ...args) { +@@ -41234,6 +41329,18 @@ function traceIfEnabled(state, diagnostic, ...args) { function useCaseSensitiveFileNames(state) { return !state.host.useCaseSensitiveFileNames ? true : typeof state.host.useCaseSensitiveFileNames === "boolean" ? state.host.useCaseSensitiveFileNames : state.host.useCaseSensitiveFileNames(); } @@ -165,7 +176,7 @@ semver exclusivity >=5.6.0-beta <5.6.1-rc // src/compiler/binder.ts function getModuleInstanceState(node, visited) { -@@ -44657,7 +44760,15 @@ function getAllModulePathsWorker(info, importedFileName, host, compilerOptions, +@@ -44657,7 +44764,15 @@ function getAllModulePathsWorker(info, importedFileName, host, compilerOptions, /*preferSymlinks*/ true, (path, isRedirect) => { @@ -182,7 +193,7 @@ semver exclusivity >=5.6.0-beta <5.6.1-rc allFileNames.set(path, { path: info.getCanonicalFileName(path), isRedirect, isInNodeModules }); importedFileFromNodeModules = importedFileFromNodeModules || isInNodeModules; } -@@ -44948,7 +45059,41 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa +@@ -44948,7 +45063,41 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa if (!host.fileExists || !host.readFile) { return void 0; } @@ -225,7 +236,7 @@ semver exclusivity >=5.6.0-beta <5.6.1-rc if (!parts) { return void 0; } -@@ -44985,14 +45130,16 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa +@@ -44985,14 +45134,16 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa if (isRedirect && !isPackageRootPath) { return void 0; } @@ -233,7 +244,7 @@ semver exclusivity >=5.6.0-beta <5.6.1-rc - const pathToTopLevelNodeModules = getCanonicalFileName(moduleSpecifier.substring(0, parts.topLevelNodeModulesIndex)); - if (!(startsWith(canonicalSourceDirectory, pathToTopLevelNodeModules) || globalTypingsCacheLocation && startsWith(getCanonicalFileName(globalTypingsCacheLocation), pathToTopLevelNodeModules))) { - return void 0; -+ if (typeof process.versions.pnp === "undefined") { ++ if (!isPnpEnabled()) { + const globalTypingsCacheLocation = host.getGlobalTypingsCacheLocation && host.getGlobalTypingsCacheLocation(); + const pathToTopLevelNodeModules = getCanonicalFileName(moduleSpecifier.substring(0, parts.topLevelNodeModulesIndex)); + if (!(startsWith(canonicalSourceDirectory, pathToTopLevelNodeModules) || globalTypingsCacheLocation && startsWith(getCanonicalFileName(globalTypingsCacheLocation), pathToTopLevelNodeModules))) { @@ -249,7 +260,7 @@ semver exclusivity >=5.6.0-beta <5.6.1-rc function tryDirectoryWithPackageJson(packageRootIndex) { var _a, _b; const packageRootPath = path.substring(0, packageRootIndex); -@@ -45005,9 +45152,9 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa +@@ -45005,9 +45156,9 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa const importMode = overrideMode || getDefaultResolutionModeForFile(importingSourceFile, host, options); if (getResolvePackageJsonExports(options)) { const nodeModulesDirectoryName2 = packageRootPath.substring(parts.topLevelPackageNameIndex + 1); @@ -261,7 +272,7 @@ semver exclusivity >=5.6.0-beta <5.6.1-rc if (fromExports) { return { ...fromExports, verbatimFromExports: true }; } -@@ -126594,6 +126741,11 @@ function createWatchProgram(host) { +@@ -126594,6 +126745,11 @@ function createWatchProgram(host) { if (configFileName) { configFileWatcher = watchFile2(configFileName, scheduleProgramReload, 2e3 /* High */, watchOptions, WatchType.ConfigFile); } @@ -273,7 +284,7 @@ semver exclusivity >=5.6.0-beta <5.6.1-rc const compilerHost = createCompilerHostFromProgramHost(host, () => compilerOptions, directoryStructureHost); setGetSourceFileAsHashVersioned(compilerHost); const getNewSourceFile = compilerHost.getSourceFile; -@@ -126657,6 +126809,10 @@ function createWatchProgram(host) { +@@ -126657,6 +126813,10 @@ function createWatchProgram(host) { configFileWatcher.close(); configFileWatcher = void 0; } @@ -284,7 +295,7 @@ semver exclusivity >=5.6.0-beta <5.6.1-rc extendedConfigCache == null ? void 0 : extendedConfigCache.clear(); extendedConfigCache = void 0; if (sharedExtendedConfigFileWatchers) { -@@ -126692,7 +126848,7 @@ function createWatchProgram(host) { +@@ -126692,7 +126852,7 @@ function createWatchProgram(host) { function getCurrentProgram() { return builderProgram && builderProgram.getProgramOrUndefined(); } @@ -293,7 +304,7 @@ semver exclusivity >=5.6.0-beta <5.6.1-rc writeLog(`Synchronizing program`); Debug.assert(compilerOptions); Debug.assert(rootFileNames); -@@ -126704,7 +126860,7 @@ function createWatchProgram(host) { +@@ -126704,7 +126864,7 @@ function createWatchProgram(host) { resolutionCache.onChangesAffectModuleResolution(); } } @@ -302,7 +313,7 @@ semver exclusivity >=5.6.0-beta <5.6.1-rc const { originalReadFile, originalFileExists, -@@ -126912,6 +127068,12 @@ function createWatchProgram(host) { +@@ -126912,6 +127072,12 @@ function createWatchProgram(host) { updateLevel = 2 /* Full */; scheduleProgramUpdate(); } @@ -315,7 +326,7 @@ semver exclusivity >=5.6.0-beta <5.6.1-rc function updateProgramWithWatchStatus() { timerToUpdateProgram = void 0; reportFileChangeDetectedOnCreateProgram = true; -@@ -126925,6 +127087,12 @@ function createWatchProgram(host) { +@@ -126925,6 +127091,12 @@ function createWatchProgram(host) { case 2 /* Full */: reloadConfigFile(); break; @@ -329,17 +340,21 @@ semver exclusivity >=5.6.0-beta <5.6.1-rc synchronizeProgram(); break; diff --git a/lib/tsserver.js b/lib/tsserver.js -index bf00af3be..9140dc50b 100644 +index bf00..3859 100644 semver exclusivity >=5.6.0-beta <5.6.1-rc --- a/lib/tsserver.js +++ b/lib/tsserver.js -@@ -53,6 +53,25 @@ var import_net = __toESM(require("net")); +@@ -53,6 +53,29 @@ var import_net = __toESM(require("net")); var import_os = __toESM(require("os")); var import_readline = __toESM(require("readline")); +// src/compiler/pnpapi.ts ++function isPnpEnabled() { ++ var _a; ++ return typeof process !== "undefined" && typeof ((_a = process == null ? void 0 : process.versions) == null ? void 0 : _a.pnp) !== "undefined"; ++} +function getPnpApi(path) { -+ if (typeof process.versions.pnp === "undefined") { ++ if (!isPnpEnabled()) { + return; + } + const { findPnpApi } = require("module"); @@ -359,7 +374,7 @@ semver exclusivity >=5.6.0-beta <5.6.1-rc // src/tsserver/common.ts function getLogLevel(level) { if (level) { -@@ -243,6 +262,10 @@ function initializeNodeSystem() { +@@ -243,6 +266,10 @@ function initializeNodeSystem() { } try { const args = [(0, typescript_exports.combinePaths)(libDirectory, "watchGuard.js"), path]; @@ -370,7 +385,7 @@ semver exclusivity >=5.6.0-beta <5.6.1-rc if (logger.hasLevel(typescript_exports.server.LogLevel.verbose)) { logger.info(`Starting ${process.execPath} with args:${typescript_exports.server.stringifyIndented(args)}`); } -@@ -419,6 +442,10 @@ function startNodeSession(options, logger, cancellationToken) { +@@ -419,6 +446,10 @@ function startNodeSession(options, logger, cancellationToken) { break; } } @@ -382,7 +397,7 @@ semver exclusivity >=5.6.0-beta <5.6.1-rc this.installer = import_child_process.default.fork(typingsInstaller, args, { execArgv }); this.installer.on("message", (m) => this.handleMessage(m)); diff --git a/lib/typescript.d.ts b/lib/typescript.d.ts -index 7070d1cde..0b33587cf 100644 +index 7070..0b33 100644 semver exclusivity >=5.6.0-beta <5.6.1-rc --- a/lib/typescript.d.ts +++ b/lib/typescript.d.ts @@ -412,27 +427,21 @@ semver exclusivity >=5.6.0-beta <5.6.1-rc function findConfigFile(searchPath: string, fileExists: (fileName: string) => boolean, configName?: string): string | undefined; function resolveTripleslashReference(moduleName: string, containingFile: string): string; diff --git a/lib/typescript.js b/lib/typescript.js -index eb00df40a..79a588a4f 100644 +index eb00..26a0 100644 semver exclusivity >=5.6.0-beta <5.6.1-rc --- a/lib/typescript.js +++ b/lib/typescript.js -@@ -8441,6 +8441,9 @@ var sys = (() => { - } - } - function isFileSystemCaseSensitive() { -+ if (typeof process.versions.pnp !== `undefined`) { -+ return true; -+ } - if (platform === "win32" || platform === "win64") { - return false; - } -@@ -43126,6 +43129,69 @@ function getDefaultValueForOption(option) { - } - } +@@ -7255,6 +7255,29 @@ var JSDocParsingMode = /* @__PURE__ */ ((JSDocParsingMode6) => { + return JSDocParsingMode6; + })(JSDocParsingMode || {}); +// src/compiler/pnpapi.ts ++function isPnpEnabled() { ++ var _a; ++ return typeof process !== "undefined" && typeof ((_a = process == null ? void 0 : process.versions) == null ? void 0 : _a.pnp) !== "undefined"; ++} +function getPnpApi(path) { -+ if (typeof process.versions.pnp === "undefined") { ++ if (!isPnpEnabled()) { + return; + } + const { findPnpApi } = require("module"); @@ -449,6 +458,23 @@ semver exclusivity >=5.6.0-beta <5.6.1-rc + ); +} + + // src/compiler/sys.ts + function generateDjb2Hash(data) { + let acc = 5381; +@@ -8441,6 +8464,9 @@ var sys = (() => { + } + } + function isFileSystemCaseSensitive() { ++ if (isPnpEnabled()) { ++ return true; ++ } + if (platform === "win32" || platform === "win64") { + return false; + } +@@ -43126,6 +43152,50 @@ function getDefaultValueForOption(option) { + } + } + +// src/compiler/pnp.ts +function getPnpTypeRoots(currentDirectory) { + const pnpApi = getPnpApi(currentDirectory); @@ -496,7 +522,7 @@ semver exclusivity >=5.6.0-beta <5.6.1-rc // src/compiler/moduleNameResolver.ts function trace(host, message, ...args) { host.trace(formatMessage(message, ...args)); -@@ -43351,7 +43417,7 @@ function getEffectiveTypeRoots(options, host) { +@@ -43351,7 +43421,7 @@ function getEffectiveTypeRoots(options, host) { return getDefaultTypeRoots(currentDirectory); } } @@ -505,7 +531,7 @@ semver exclusivity >=5.6.0-beta <5.6.1-rc let typeRoots; forEachAncestorDirectory(normalizePath(currentDirectory), (directory) => { const atTypes = combinePaths(directory, nodeModulesAtTypes); -@@ -43364,6 +43430,15 @@ function arePathsEqual(path1, path2, host) { +@@ -43364,6 +43434,15 @@ function arePathsEqual(path1, path2, host) { const useCaseSensitiveFileNames2 = typeof host.useCaseSensitiveFileNames === "function" ? host.useCaseSensitiveFileNames() : host.useCaseSensitiveFileNames; return comparePaths(path1, path2, !useCaseSensitiveFileNames2) === 0 /* EqualTo */; } @@ -521,7 +547,7 @@ semver exclusivity >=5.6.0-beta <5.6.1-rc function getOriginalAndResolvedFileName(fileName, host, traceEnabled) { const resolvedFileName = realPath(fileName, host, traceEnabled); const pathsAreEqual = arePathsEqual(fileName, resolvedFileName, host); -@@ -43613,6 +43688,21 @@ function getConditions(options, resolutionMode) { +@@ -43613,6 +43692,21 @@ function getConditions(options, resolutionMode) { } function resolvePackageNameToPackageJson(packageName, containingDirectory, options, host, cache) { const moduleResolutionState = getTemporaryModuleResolutionState(cache == null ? void 0 : cache.getPackageJsonInfoCache(), host, options); @@ -543,7 +569,7 @@ semver exclusivity >=5.6.0-beta <5.6.1-rc return forEachAncestorDirectory(containingDirectory, (ancestorDirectory) => { if (getBaseFileName(ancestorDirectory) !== "node_modules") { const nodeModulesFolder = combinePaths(ancestorDirectory, "node_modules"); -@@ -45394,7 +45484,15 @@ function loadModuleFromNearestNodeModulesDirectoryWorker(extensions, moduleName, +@@ -45394,7 +45488,15 @@ function loadModuleFromNearestNodeModulesDirectoryWorker(extensions, moduleName, return lookup(secondaryExtensions); } function lookup(extensions2) { @@ -560,7 +586,7 @@ semver exclusivity >=5.6.0-beta <5.6.1-rc if (getBaseFileName(ancestorDirectory) !== "node_modules") { const resolutionFromCache = tryFindNonRelativeModuleNameInCache(cache, moduleName, mode, ancestorDirectory, redirectedReference, state); if (resolutionFromCache) { -@@ -45429,11 +45527,40 @@ function loadModuleFromImmediateNodeModulesDirectory(extensions, moduleName, dir +@@ -45429,11 +45531,40 @@ function loadModuleFromImmediateNodeModulesDirectory(extensions, moduleName, dir return loadModuleFromSpecificNodeModulesDirectory(4 /* Declaration */, mangleScopedPackageNameWithTrace(moduleName, state), nodeModulesAtTypes2, nodeModulesAtTypesExists, state, cache, redirectedReference); } } @@ -602,7 +628,7 @@ semver exclusivity >=5.6.0-beta <5.6.1-rc let rootPackageInfo; let packageInfo = getPackageJsonInfo(candidate, !nodeModulesDirectoryExists, state); if (rest !== "" && packageInfo && (!(state.features & 8 /* Exports */) || !hasProperty(((_a = rootPackageInfo = getPackageJsonInfo(packageDirectory, !nodeModulesDirectoryExists, state)) == null ? void 0 : _a.contents.packageJsonContent) ?? emptyArray, "exports"))) { -@@ -45734,6 +45861,18 @@ function traceIfEnabled(state, diagnostic, ...args) { +@@ -45734,6 +45865,18 @@ function traceIfEnabled(state, diagnostic, ...args) { function useCaseSensitiveFileNames(state) { return !state.host.useCaseSensitiveFileNames ? true : typeof state.host.useCaseSensitiveFileNames === "boolean" ? state.host.useCaseSensitiveFileNames : state.host.useCaseSensitiveFileNames(); } @@ -621,7 +647,7 @@ semver exclusivity >=5.6.0-beta <5.6.1-rc // src/compiler/binder.ts var ModuleInstanceState = /* @__PURE__ */ ((ModuleInstanceState2) => { -@@ -49275,7 +49414,15 @@ function getAllModulePathsWorker(info, importedFileName, host, compilerOptions, +@@ -49275,7 +49418,15 @@ function getAllModulePathsWorker(info, importedFileName, host, compilerOptions, /*preferSymlinks*/ true, (path, isRedirect) => { @@ -638,7 +664,7 @@ semver exclusivity >=5.6.0-beta <5.6.1-rc allFileNames.set(path, { path: info.getCanonicalFileName(path), isRedirect, isInNodeModules }); importedFileFromNodeModules = importedFileFromNodeModules || isInNodeModules; } -@@ -49566,7 +49713,41 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa +@@ -49566,7 +49717,41 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa if (!host.fileExists || !host.readFile) { return void 0; } @@ -681,7 +707,7 @@ semver exclusivity >=5.6.0-beta <5.6.1-rc if (!parts) { return void 0; } -@@ -49603,14 +49784,16 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa +@@ -49603,14 +49788,16 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa if (isRedirect && !isPackageRootPath) { return void 0; } @@ -689,7 +715,7 @@ semver exclusivity >=5.6.0-beta <5.6.1-rc - const pathToTopLevelNodeModules = getCanonicalFileName(moduleSpecifier.substring(0, parts.topLevelNodeModulesIndex)); - if (!(startsWith(canonicalSourceDirectory, pathToTopLevelNodeModules) || globalTypingsCacheLocation && startsWith(getCanonicalFileName(globalTypingsCacheLocation), pathToTopLevelNodeModules))) { - return void 0; -+ if (typeof process.versions.pnp === "undefined") { ++ if (!isPnpEnabled()) { + const globalTypingsCacheLocation = host.getGlobalTypingsCacheLocation && host.getGlobalTypingsCacheLocation(); + const pathToTopLevelNodeModules = getCanonicalFileName(moduleSpecifier.substring(0, parts.topLevelNodeModulesIndex)); + if (!(startsWith(canonicalSourceDirectory, pathToTopLevelNodeModules) || globalTypingsCacheLocation && startsWith(getCanonicalFileName(globalTypingsCacheLocation), pathToTopLevelNodeModules))) { @@ -705,7 +731,7 @@ semver exclusivity >=5.6.0-beta <5.6.1-rc function tryDirectoryWithPackageJson(packageRootIndex) { var _a, _b; const packageRootPath = path.substring(0, packageRootIndex); -@@ -49623,9 +49806,9 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa +@@ -49623,9 +49810,9 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa const importMode = overrideMode || getDefaultResolutionModeForFile(importingSourceFile, host, options); if (getResolvePackageJsonExports(options)) { const nodeModulesDirectoryName2 = packageRootPath.substring(parts.topLevelPackageNameIndex + 1); @@ -717,7 +743,7 @@ semver exclusivity >=5.6.0-beta <5.6.1-rc if (fromExports) { return { ...fromExports, verbatimFromExports: true }; } -@@ -123332,6 +123515,7 @@ var ProgramUpdateLevel = /* @__PURE__ */ ((ProgramUpdateLevel2) => { +@@ -123332,6 +123519,7 @@ var ProgramUpdateLevel = /* @__PURE__ */ ((ProgramUpdateLevel2) => { ProgramUpdateLevel2[ProgramUpdateLevel2["Update"] = 0] = "Update"; ProgramUpdateLevel2[ProgramUpdateLevel2["RootNamesAndUpdate"] = 1] = "RootNamesAndUpdate"; ProgramUpdateLevel2[ProgramUpdateLevel2["Full"] = 2] = "Full"; @@ -725,7 +751,7 @@ semver exclusivity >=5.6.0-beta <5.6.1-rc return ProgramUpdateLevel2; })(ProgramUpdateLevel || {}); function updateSharedExtendedConfigFileWatcher(projectPath, options, extendedConfigFilesMap, createExtendedConfigFileWatch, toPath3) { -@@ -131537,6 +131721,11 @@ function createWatchProgram(host) { +@@ -131537,6 +131725,11 @@ function createWatchProgram(host) { if (configFileName) { configFileWatcher = watchFile2(configFileName, scheduleProgramReload, 2e3 /* High */, watchOptions, WatchType.ConfigFile); } @@ -737,7 +763,7 @@ semver exclusivity >=5.6.0-beta <5.6.1-rc const compilerHost = createCompilerHostFromProgramHost(host, () => compilerOptions, directoryStructureHost); setGetSourceFileAsHashVersioned(compilerHost); const getNewSourceFile = compilerHost.getSourceFile; -@@ -131600,6 +131789,10 @@ function createWatchProgram(host) { +@@ -131600,6 +131793,10 @@ function createWatchProgram(host) { configFileWatcher.close(); configFileWatcher = void 0; } @@ -748,7 +774,7 @@ semver exclusivity >=5.6.0-beta <5.6.1-rc extendedConfigCache == null ? void 0 : extendedConfigCache.clear(); extendedConfigCache = void 0; if (sharedExtendedConfigFileWatchers) { -@@ -131635,7 +131828,7 @@ function createWatchProgram(host) { +@@ -131635,7 +131832,7 @@ function createWatchProgram(host) { function getCurrentProgram() { return builderProgram && builderProgram.getProgramOrUndefined(); } @@ -757,7 +783,7 @@ semver exclusivity >=5.6.0-beta <5.6.1-rc writeLog(`Synchronizing program`); Debug.assert(compilerOptions); Debug.assert(rootFileNames); -@@ -131647,7 +131840,7 @@ function createWatchProgram(host) { +@@ -131647,7 +131844,7 @@ function createWatchProgram(host) { resolutionCache.onChangesAffectModuleResolution(); } } @@ -766,7 +792,7 @@ semver exclusivity >=5.6.0-beta <5.6.1-rc const { originalReadFile, originalFileExists, -@@ -131855,6 +132048,12 @@ function createWatchProgram(host) { +@@ -131855,6 +132052,12 @@ function createWatchProgram(host) { updateLevel = 2 /* Full */; scheduleProgramUpdate(); } @@ -779,7 +805,7 @@ semver exclusivity >=5.6.0-beta <5.6.1-rc function updateProgramWithWatchStatus() { timerToUpdateProgram = void 0; reportFileChangeDetectedOnCreateProgram = true; -@@ -131868,6 +132067,12 @@ function createWatchProgram(host) { +@@ -131868,6 +132071,12 @@ function createWatchProgram(host) { case 2 /* Full */: reloadConfigFile(); break; @@ -792,7 +818,7 @@ semver exclusivity >=5.6.0-beta <5.6.1-rc default: synchronizeProgram(); break; -@@ -138518,7 +138723,14 @@ function createPackageJsonImportFilter(fromFile, preferences, host) { +@@ -138518,7 +138727,14 @@ function createPackageJsonImportFilter(fromFile, preferences, host) { return false; } function getNodeModulesPackageNameFromFileName(importedFileName, moduleSpecifierResolutionHost) { @@ -808,7 +834,7 @@ semver exclusivity >=5.6.0-beta <5.6.1-rc return void 0; } const specifier = ts_moduleSpecifiers_exports.getNodeModulesPackageName( -@@ -139062,6 +139274,9 @@ function isImportableFile(program, from, to, preferences, packageJsonFilter, mod +@@ -139062,6 +139278,9 @@ function isImportableFile(program, from, to, preferences, packageJsonFilter, mod return hasImportablePath; } function isImportablePath(fromPath, toPath3, getCanonicalFileName, globalCachePath) { @@ -818,7 +844,7 @@ semver exclusivity >=5.6.0-beta <5.6.1-rc const toNodeModules = forEachAncestorDirectory(toPath3, (ancestor) => getBaseFileName(ancestor) === "node_modules" ? ancestor : void 0); const toNodeModulesParent = toNodeModules && getDirectoryPath(getCanonicalFileName(toNodeModules)); return toNodeModulesParent === void 0 || startsWith(getCanonicalFileName(fromPath), toNodeModulesParent) || !!globalCachePath && startsWith(getCanonicalFileName(globalCachePath), toNodeModulesParent); -@@ -167651,7 +167866,34 @@ function getCompletionEntriesForNonRelativeModules(fragment, scriptPath, mode, p +@@ -167651,7 +167870,34 @@ function getCompletionEntriesForNonRelativeModules(fragment, scriptPath, mode, p ); } }; @@ -854,7 +880,7 @@ semver exclusivity >=5.6.0-beta <5.6.1-rc const nodeModulesDirectoryLookup = ancestorLookup; ancestorLookup = (ancestor) => { const components = getPathComponents(fragment); -@@ -167670,35 +167912,53 @@ function getCompletionEntriesForNonRelativeModules(fragment, scriptPath, mode, p +@@ -167670,35 +167916,53 @@ function getCompletionEntriesForNonRelativeModules(fragment, scriptPath, mode, p const packageDirectory = combinePaths(ancestor, "node_modules", packagePath); const packageFile = combinePaths(packageDirectory, "package.json"); if (tryFileExists(host, packageFile)) { @@ -928,7 +954,7 @@ semver exclusivity >=5.6.0-beta <5.6.1-rc } } return arrayFrom(result.values()); -@@ -167832,9 +168092,15 @@ function getCompletionEntriesFromTypings(host, program, scriptPath, fragmentDire +@@ -167832,9 +168096,15 @@ function getCompletionEntriesFromTypings(host, program, scriptPath, fragmentDire for (const root of typeRoots) { getCompletionEntriesFromDirectories(root); } @@ -947,11 +973,11 @@ semver exclusivity >=5.6.0-beta <5.6.1-rc } return result; function getCompletionEntriesFromDirectories(directory) { -@@ -184951,6 +185217,29 @@ var ConfiguredProject2 = class extends Project2 { +@@ -184951,6 +185221,29 @@ var ConfiguredProject2 = class extends Project2 { return this.projectReferences; } updateReferences(refs) { -+ if (typeof process.versions.pnp !== `undefined`) { ++ if (isPnpEnabled()) { + const basePath = this.getCurrentDirectory(); + const getPnpPath = (path) => { + try { @@ -977,7 +1003,7 @@ semver exclusivity >=5.6.0-beta <5.6.1-rc this.projectReferences = refs; this.potentialProjectReferences = void 0; } -@@ -185695,6 +185984,7 @@ var _ProjectService = class _ProjectService { +@@ -185695,6 +185988,7 @@ var _ProjectService = class _ProjectService { getDetailWatchInfo ); this.canUseWatchEvents = getCanUseWatchEvents(this, opts.canUseWatchEvents); @@ -985,7 +1011,7 @@ semver exclusivity >=5.6.0-beta <5.6.1-rc (_a = opts.incrementalVerifier) == null ? void 0 : _a.call(opts, this); } toPath(fileName) { -@@ -187589,7 +187879,7 @@ Dynamic files must always be opened with service's current directory or service +@@ -187589,7 +187883,7 @@ Dynamic files must always be opened with service's current directory or service this.performanceEventHandler = performanceEventHandler; } setHostConfiguration(args) { @@ -994,7 +1020,7 @@ semver exclusivity >=5.6.0-beta <5.6.1-rc if (args.file) { const info = this.getScriptInfoForNormalizedPath(toNormalizedPath(args.file)); if (info) { -@@ -187638,6 +187928,8 @@ Dynamic files must always be opened with service's current directory or service +@@ -187638,6 +187932,8 @@ Dynamic files must always be opened with service's current directory or service this.hostConfiguration.watchOptions = substitution; this.hostConfiguration.beforeSubstitution = substitution === watchOptions ? void 0 : watchOptions; this.logger.info(`Host watch options changed to ${JSON.stringify(this.hostConfiguration.watchOptions)}, it will be take effect for next watches.`); @@ -1003,7 +1029,7 @@ semver exclusivity >=5.6.0-beta <5.6.1-rc } } } -@@ -188649,6 +188941,28 @@ Dynamic files must always be opened with service's current directory or service +@@ -188649,6 +188945,28 @@ Dynamic files must always be opened with service's current directory or service } }); } diff --git a/packages/plugin-compat/extra/typescript/patch-4517de9520e48e63a4c5b3cbacbb5762.diff b/packages/plugin-compat/extra/typescript/patches/patch-4517de9520e48e63a4c5b3cbacbb5762.diff similarity index 99% rename from packages/plugin-compat/extra/typescript/patch-4517de9520e48e63a4c5b3cbacbb5762.diff rename to packages/plugin-compat/extra/typescript/patches/patch-4517de9520e48e63a4c5b3cbacbb5762.diff index 995883cad489..05c0895da329 100644 --- a/packages/plugin-compat/extra/typescript/patch-4517de9520e48e63a4c5b3cbacbb5762.diff +++ b/packages/plugin-compat/extra/typescript/patches/patch-4517de9520e48e63a4c5b3cbacbb5762.diff @@ -1,5 +1,5 @@ diff --git a/lib/tsc.js b/lib/tsc.js -index c2c5c03f3..35d702868 100644 +index c2c5..35d7 100644 semver exclusivity >=4.9.2-rc <4.9.4 --- a/lib/tsc.js +++ b/lib/tsc.js @@ -308,7 +308,7 @@ semver exclusivity >=4.9.2-rc <4.9.4 ts.perfLogger.logStartUpdateProgram("SynchronizeProgram"); synchronizeProgram(); diff --git a/lib/tsserver.js b/lib/tsserver.js -index fc48171a6..d973d7758 100644 +index fc48..d973 100644 semver exclusivity >=4.9.2-rc <4.9.4 --- a/lib/tsserver.js +++ b/lib/tsserver.js @@ -989,7 +989,7 @@ semver exclusivity >=4.9.2-rc <4.9.4 this.installer.on("message", function (m) { return _this.handleMessage(m); }); // We have to schedule this event to the next tick diff --git a/lib/tsserverlibrary.js b/lib/tsserverlibrary.js -index ec521e9cc..b4512e1b8 100644 +index ec52..b451 100644 semver exclusivity >=4.9.2-rc <4.9.4 --- a/lib/tsserverlibrary.js +++ b/lib/tsserverlibrary.js @@ -1644,7 +1644,7 @@ semver exclusivity >=4.9.2-rc <4.9.4 var _this = this; var watchers = this.packageJsonFilesMap || (this.packageJsonFilesMap = new ts.Map()); diff --git a/lib/typescript.js b/lib/typescript.js -index 530b87683..62a2b6fa0 100644 +index 530b..62a2 100644 semver exclusivity >=4.9.2-rc <4.9.4 --- a/lib/typescript.js +++ b/lib/typescript.js @@ -2193,7 +2193,7 @@ semver exclusivity >=4.9.2-rc <4.9.4 return statement; }); diff --git a/lib/typescriptServices.js b/lib/typescriptServices.js -index 59e716a7b..e9a4bad07 100644 +index 59e7..e9a4 100644 semver exclusivity >=4.9.2-rc <4.9.4 --- a/lib/typescriptServices.js +++ b/lib/typescriptServices.js @@ -2742,7 +2742,7 @@ semver exclusivity >=4.9.2-rc <4.9.4 return statement; }); diff --git a/lib/typingsInstaller.js b/lib/typingsInstaller.js -index ed96b5050..aa2287106 100644 +index ed96..aa22 100644 semver exclusivity >=4.9.2-rc <4.9.4 --- a/lib/typingsInstaller.js +++ b/lib/typingsInstaller.js diff --git a/packages/plugin-compat/extra/typescript/patch-4f8247da964ba958258dc67b086868ce.diff b/packages/plugin-compat/extra/typescript/patches/patch-4f8247da964ba958258dc67b086868ce.diff similarity index 99% rename from packages/plugin-compat/extra/typescript/patch-4f8247da964ba958258dc67b086868ce.diff rename to packages/plugin-compat/extra/typescript/patches/patch-4f8247da964ba958258dc67b086868ce.diff index 4192dbdcb106..4be2bf4ba955 100644 --- a/packages/plugin-compat/extra/typescript/patch-4f8247da964ba958258dc67b086868ce.diff +++ b/packages/plugin-compat/extra/typescript/patches/patch-4f8247da964ba958258dc67b086868ce.diff @@ -1,5 +1,5 @@ diff --git a/lib/tsc.js b/lib/tsc.js -index d7f749f63..c4a080b2c 100644 +index d7f7..c4a0 100644 semver exclusivity >=3.2 <3.5 --- a/lib/tsc.js +++ b/lib/tsc.js @@ -128,7 +128,7 @@ semver exclusivity >=3.2 <3.5 var ts; (function (ts) { diff --git a/lib/tsserver.js b/lib/tsserver.js -index 4ea67ecd8..057ea079a 100644 +index 4ea6..057e 100644 semver exclusivity >=3.2 <3.5 --- a/lib/tsserver.js +++ b/lib/tsserver.js @@ -274,7 +274,7 @@ semver exclusivity >=3.2 <3.5 /* @internal */ var ts; diff --git a/lib/tsserverlibrary.js b/lib/tsserverlibrary.js -index 2897a2262..cf3e05432 100644 +index 2897..cf3e 100644 semver exclusivity >=3.2 <3.5 --- a/lib/tsserverlibrary.js +++ b/lib/tsserverlibrary.js @@ -420,7 +420,7 @@ semver exclusivity >=3.2 <3.5 /* @internal */ var ts; diff --git a/lib/typescript.js b/lib/typescript.js -index 548ceea96..92c195a61 100644 +index 548c..92c1 100644 semver exclusivity >=3.2 <3.5 --- a/lib/typescript.js +++ b/lib/typescript.js @@ -566,7 +566,7 @@ semver exclusivity >=3.2 <3.5 /* @internal */ var ts; diff --git a/lib/typescriptServices.js b/lib/typescriptServices.js -index 9046c6f90..0f0db98cb 100644 +index 9046..0f0d 100644 semver exclusivity >=3.2 <3.5 --- a/lib/typescriptServices.js +++ b/lib/typescriptServices.js @@ -712,7 +712,7 @@ semver exclusivity >=3.2 <3.5 /* @internal */ var ts; diff --git a/lib/typingsInstaller.js b/lib/typingsInstaller.js -index 776a2e0a9..cfa1e8449 100644 +index 776a..cfa1 100644 semver exclusivity >=3.2 <3.5 --- a/lib/typingsInstaller.js +++ b/lib/typingsInstaller.js diff --git a/packages/plugin-compat/extra/typescript/patch-a3332178620d872218a4a222b8bcb0c4.diff b/packages/plugin-compat/extra/typescript/patches/patch-54f70cff189c2cd941e180ab9ba7d01d.diff similarity index 90% rename from packages/plugin-compat/extra/typescript/patch-a3332178620d872218a4a222b8bcb0c4.diff rename to packages/plugin-compat/extra/typescript/patches/patch-54f70cff189c2cd941e180ab9ba7d01d.diff index 032a21f129c2..9252506ef8d7 100644 --- a/packages/plugin-compat/extra/typescript/patch-a3332178620d872218a4a222b8bcb0c4.diff +++ b/packages/plugin-compat/extra/typescript/patches/patch-54f70cff189c2cd941e180ab9ba7d01d.diff @@ -1,25 +1,19 @@ diff --git a/lib/_tsc.js b/lib/_tsc.js -index d06c7ff6c..97860c4cc 100644 +index d06c..77c9 100644 semver exclusivity >=5.7.1-rc --- a/lib/_tsc.js +++ b/lib/_tsc.js -@@ -5104,6 +5104,9 @@ var sys = (() => { - } - } - function isFileSystemCaseSensitive() { -+ if (typeof process.versions.pnp !== `undefined`) { -+ return true; -+ } - if (platform === "win32" || platform === "win64") { - return false; - } -@@ -39288,6 +39291,48 @@ function getDefaultValueForOption(option) { +@@ -3934,6 +3934,29 @@ var commentPragmas = { } - } + }; +// src/compiler/pnpapi.ts ++function isPnpEnabled() { ++ var _a; ++ return typeof process !== "undefined" && typeof ((_a = process == null ? void 0 : process.versions) == null ? void 0 : _a.pnp) !== "undefined"; ++} +function getPnpApi(path) { -+ if (typeof process.versions.pnp === "undefined") { ++ if (!isPnpEnabled()) { + return; + } + const { findPnpApi } = require("module"); @@ -36,6 +30,23 @@ semver exclusivity >=5.7.1-rc + ); +} + + // src/compiler/sys.ts + function generateDjb2Hash(data) { + let acc = 5381; +@@ -5104,6 +5127,9 @@ var sys = (() => { + } + } + function isFileSystemCaseSensitive() { ++ if (isPnpEnabled()) { ++ return true; ++ } + if (platform === "win32" || platform === "win64") { + return false; + } +@@ -39288,6 +39314,29 @@ function getDefaultValueForOption(option) { + } + } + +// src/compiler/pnp.ts +function getPnpTypeRoots(currentDirectory) { + const pnpApi = getPnpApi(currentDirectory); @@ -62,7 +73,7 @@ semver exclusivity >=5.7.1-rc // src/compiler/moduleNameResolver.ts function trace(host, message, ...args) { host.trace(formatMessage(message, ...args)); -@@ -39505,7 +39550,7 @@ function getEffectiveTypeRoots(options, host) { +@@ -39505,7 +39554,7 @@ function getEffectiveTypeRoots(options, host) { return getDefaultTypeRoots(currentDirectory); } } @@ -71,7 +82,7 @@ semver exclusivity >=5.7.1-rc let typeRoots; forEachAncestorDirectory(normalizePath(currentDirectory), (directory) => { const atTypes = combinePaths(directory, nodeModulesAtTypes); -@@ -39518,6 +39563,15 @@ function arePathsEqual(path1, path2, host) { +@@ -39518,6 +39567,15 @@ function arePathsEqual(path1, path2, host) { const useCaseSensitiveFileNames2 = typeof host.useCaseSensitiveFileNames === "function" ? host.useCaseSensitiveFileNames() : host.useCaseSensitiveFileNames; return comparePaths(path1, path2, !useCaseSensitiveFileNames2) === 0 /* EqualTo */; } @@ -87,7 +98,7 @@ semver exclusivity >=5.7.1-rc function getOriginalAndResolvedFileName(fileName, host, traceEnabled) { const resolvedFileName = realPath(fileName, host, traceEnabled); const pathsAreEqual = arePathsEqual(fileName, resolvedFileName, host); -@@ -41401,6 +41455,14 @@ function loadModuleFromNearestNodeModulesDirectoryWorker(extensions, moduleName, +@@ -41401,6 +41459,14 @@ function loadModuleFromNearestNodeModulesDirectoryWorker(extensions, moduleName, return lookup(secondaryExtensions); } function lookup(extensions2) { @@ -102,7 +113,7 @@ semver exclusivity >=5.7.1-rc return forEachAncestorDirectoryStoppingAtGlobalCache( state.host, normalizeSlashes(directory), -@@ -41449,11 +41511,40 @@ function loadModuleFromImmediateNodeModulesDirectory(extensions, moduleName, dir +@@ -41449,11 +41515,40 @@ function loadModuleFromImmediateNodeModulesDirectory(extensions, moduleName, dir return loadModuleFromSpecificNodeModulesDirectory(4 /* Declaration */, mangleScopedPackageNameWithTrace(moduleName, state), nodeModulesAtTypes2, nodeModulesAtTypesExists, state, cache, redirectedReference); } } @@ -144,7 +155,7 @@ semver exclusivity >=5.7.1-rc let rootPackageInfo; let packageInfo = getPackageJsonInfo(candidate, !nodeModulesDirectoryExists, state); if (rest !== "" && packageInfo && (!(state.features & 8 /* Exports */) || !hasProperty(((_a = rootPackageInfo = getPackageJsonInfo(packageDirectory, !nodeModulesDirectoryExists, state)) == null ? void 0 : _a.contents.packageJsonContent) ?? emptyArray, "exports"))) { -@@ -41748,6 +41839,18 @@ function traceIfEnabled(state, diagnostic, ...args) { +@@ -41748,6 +41843,18 @@ function traceIfEnabled(state, diagnostic, ...args) { function useCaseSensitiveFileNames(state) { return !state.host.useCaseSensitiveFileNames ? true : typeof state.host.useCaseSensitiveFileNames === "boolean" ? state.host.useCaseSensitiveFileNames : state.host.useCaseSensitiveFileNames(); } @@ -163,7 +174,7 @@ semver exclusivity >=5.7.1-rc // src/compiler/binder.ts function getModuleInstanceState(node, visited) { -@@ -45257,7 +45360,15 @@ function getAllModulePathsWorker(info, importedFileName, host, compilerOptions, +@@ -45257,7 +45364,15 @@ function getAllModulePathsWorker(info, importedFileName, host, compilerOptions, /*preferSymlinks*/ true, (path, isRedirect) => { @@ -180,7 +191,7 @@ semver exclusivity >=5.7.1-rc allFileNames.set(path, { path: info.getCanonicalFileName(path), isRedirect, isInNodeModules }); importedFileFromNodeModules = importedFileFromNodeModules || isInNodeModules; } -@@ -45574,7 +45685,41 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa +@@ -45574,7 +45689,41 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa if (!host.fileExists || !host.readFile) { return void 0; } @@ -223,7 +234,7 @@ semver exclusivity >=5.7.1-rc if (!parts) { return void 0; } -@@ -45611,14 +45756,16 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa +@@ -45611,14 +45760,16 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa if (isRedirect && !isPackageRootPath) { return void 0; } @@ -231,7 +242,7 @@ semver exclusivity >=5.7.1-rc - const pathToTopLevelNodeModules = getCanonicalFileName(moduleSpecifier.substring(0, parts.topLevelNodeModulesIndex)); - if (!(startsWith(canonicalSourceDirectory, pathToTopLevelNodeModules) || globalTypingsCacheLocation && startsWith(getCanonicalFileName(globalTypingsCacheLocation), pathToTopLevelNodeModules))) { - return void 0; -+ if (typeof process.versions.pnp === "undefined") { ++ if (!isPnpEnabled()) { + const globalTypingsCacheLocation = host.getGlobalTypingsCacheLocation && host.getGlobalTypingsCacheLocation(); + const pathToTopLevelNodeModules = getCanonicalFileName(moduleSpecifier.substring(0, parts.topLevelNodeModulesIndex)); + if (!(startsWith(canonicalSourceDirectory, pathToTopLevelNodeModules) || globalTypingsCacheLocation && startsWith(getCanonicalFileName(globalTypingsCacheLocation), pathToTopLevelNodeModules))) { @@ -247,7 +258,7 @@ semver exclusivity >=5.7.1-rc function tryDirectoryWithPackageJson(packageRootIndex) { var _a, _b; const packageRootPath = path.substring(0, packageRootIndex); -@@ -45631,14 +45778,14 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa +@@ -45631,14 +45782,14 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa const importMode = overrideMode || getDefaultResolutionModeForFile(importingSourceFile, host, options); if (getResolvePackageJsonExports(options)) { const nodeModulesDirectoryName2 = packageRootPath.substring(parts.topLevelPackageNameIndex + 1); @@ -264,7 +275,7 @@ semver exclusivity >=5.7.1-rc packageJsonContent.exports, conditions ) : void 0; -@@ -127711,6 +127858,11 @@ function createWatchProgram(host) { +@@ -127711,6 +127862,11 @@ function createWatchProgram(host) { if (configFileName) { configFileWatcher = watchFile2(configFileName, scheduleProgramReload, 2e3 /* High */, watchOptions, WatchType.ConfigFile); } @@ -276,7 +287,7 @@ semver exclusivity >=5.7.1-rc const compilerHost = createCompilerHostFromProgramHost(host, () => compilerOptions, directoryStructureHost); setGetSourceFileAsHashVersioned(compilerHost); const getNewSourceFile = compilerHost.getSourceFile; -@@ -127772,6 +127924,10 @@ function createWatchProgram(host) { +@@ -127772,6 +127928,10 @@ function createWatchProgram(host) { configFileWatcher.close(); configFileWatcher = void 0; } @@ -287,7 +298,7 @@ semver exclusivity >=5.7.1-rc extendedConfigCache == null ? void 0 : extendedConfigCache.clear(); extendedConfigCache = void 0; if (sharedExtendedConfigFileWatchers) { -@@ -127807,7 +127963,7 @@ function createWatchProgram(host) { +@@ -127807,7 +127967,7 @@ function createWatchProgram(host) { function getCurrentProgram() { return builderProgram && builderProgram.getProgramOrUndefined(); } @@ -296,7 +307,7 @@ semver exclusivity >=5.7.1-rc writeLog(`Synchronizing program`); Debug.assert(compilerOptions); Debug.assert(rootFileNames); -@@ -127819,7 +127975,7 @@ function createWatchProgram(host) { +@@ -127819,7 +127979,7 @@ function createWatchProgram(host) { resolutionCache.onChangesAffectModuleResolution(); } } @@ -305,7 +316,7 @@ semver exclusivity >=5.7.1-rc const { originalReadFile, originalFileExists, -@@ -128037,6 +128193,12 @@ function createWatchProgram(host) { +@@ -128037,6 +128197,12 @@ function createWatchProgram(host) { updateLevel = 2 /* Full */; scheduleProgramUpdate(); } @@ -318,7 +329,7 @@ semver exclusivity >=5.7.1-rc function updateProgramWithWatchStatus() { timerToUpdateProgram = void 0; reportFileChangeDetectedOnCreateProgram = true; -@@ -128050,6 +128212,12 @@ function createWatchProgram(host) { +@@ -128050,6 +128216,12 @@ function createWatchProgram(host) { case 2 /* Full */: reloadConfigFile(); break; @@ -332,17 +343,21 @@ semver exclusivity >=5.7.1-rc synchronizeProgram(); break; diff --git a/lib/_tsserver.js b/lib/_tsserver.js -index 473b8d224..ee2581d3d 100644 +index 473b..fed2 100644 semver exclusivity >=5.7.1-rc --- a/lib/_tsserver.js +++ b/lib/_tsserver.js -@@ -53,6 +53,25 @@ var import_net = __toESM(require("net")); +@@ -53,6 +53,29 @@ var import_net = __toESM(require("net")); var import_os = __toESM(require("os")); var import_readline = __toESM(require("readline")); +// src/compiler/pnpapi.ts ++function isPnpEnabled() { ++ var _a; ++ return typeof process !== "undefined" && typeof ((_a = process == null ? void 0 : process.versions) == null ? void 0 : _a.pnp) !== "undefined"; ++} +function getPnpApi(path) { -+ if (typeof process.versions.pnp === "undefined") { ++ if (!isPnpEnabled()) { + return; + } + const { findPnpApi } = require("module"); @@ -362,7 +377,7 @@ semver exclusivity >=5.7.1-rc // src/tsserver/common.ts function getLogLevel(level) { if (level) { -@@ -243,6 +262,10 @@ function initializeNodeSystem() { +@@ -243,6 +266,10 @@ function initializeNodeSystem() { } try { const args = [(0, typescript_exports.combinePaths)(libDirectory, "watchGuard.js"), path]; @@ -373,7 +388,7 @@ semver exclusivity >=5.7.1-rc if (logger.hasLevel(typescript_exports.server.LogLevel.verbose)) { logger.info(`Starting ${process.execPath} with args:${typescript_exports.server.stringifyIndented(args)}`); } -@@ -419,6 +442,10 @@ function startNodeSession(options, logger, cancellationToken) { +@@ -419,6 +446,10 @@ function startNodeSession(options, logger, cancellationToken) { break; } } @@ -385,7 +400,7 @@ semver exclusivity >=5.7.1-rc this.installer = import_child_process.default.fork(typingsInstaller, args, { execArgv }); this.installer.on("message", (m) => this.handleMessage(m)); diff --git a/lib/typescript.d.ts b/lib/typescript.d.ts -index 0ed1d1e83..0e64ca342 100644 +index 0ed1..0e64 100644 semver exclusivity >=5.7.1-rc --- a/lib/typescript.d.ts +++ b/lib/typescript.d.ts @@ -415,27 +430,21 @@ semver exclusivity >=5.7.1-rc function findConfigFile(searchPath: string, fileExists: (fileName: string) => boolean, configName?: string): string | undefined; function resolveTripleslashReference(moduleName: string, containingFile: string): string; diff --git a/lib/typescript.js b/lib/typescript.js -index 366e30eeb..542b87e90 100644 +index 366e..2ea5 100644 semver exclusivity >=5.7.1-rc --- a/lib/typescript.js +++ b/lib/typescript.js -@@ -8470,6 +8470,9 @@ var sys = (() => { - } - } - function isFileSystemCaseSensitive() { -+ if (typeof process.versions.pnp !== `undefined`) { -+ return true; -+ } - if (platform === "win32" || platform === "win64") { - return false; - } -@@ -43612,6 +43615,69 @@ function getDefaultValueForOption(option) { - } - } +@@ -7284,6 +7284,29 @@ var JSDocParsingMode = /* @__PURE__ */ ((JSDocParsingMode6) => { + return JSDocParsingMode6; + })(JSDocParsingMode || {}); +// src/compiler/pnpapi.ts ++function isPnpEnabled() { ++ var _a; ++ return typeof process !== "undefined" && typeof ((_a = process == null ? void 0 : process.versions) == null ? void 0 : _a.pnp) !== "undefined"; ++} +function getPnpApi(path) { -+ if (typeof process.versions.pnp === "undefined") { ++ if (!isPnpEnabled()) { + return; + } + const { findPnpApi } = require("module"); @@ -452,6 +461,23 @@ semver exclusivity >=5.7.1-rc + ); +} + + // src/compiler/sys.ts + function generateDjb2Hash(data) { + let acc = 5381; +@@ -8470,6 +8493,9 @@ var sys = (() => { + } + } + function isFileSystemCaseSensitive() { ++ if (isPnpEnabled()) { ++ return true; ++ } + if (platform === "win32" || platform === "win64") { + return false; + } +@@ -43612,6 +43638,50 @@ function getDefaultValueForOption(option) { + } + } + +// src/compiler/pnp.ts +function getPnpTypeRoots(currentDirectory) { + const pnpApi = getPnpApi(currentDirectory); @@ -499,7 +525,7 @@ semver exclusivity >=5.7.1-rc // src/compiler/moduleNameResolver.ts function trace(host, message, ...args) { host.trace(formatMessage(message, ...args)); -@@ -43837,7 +43903,7 @@ function getEffectiveTypeRoots(options, host) { +@@ -43837,7 +43907,7 @@ function getEffectiveTypeRoots(options, host) { return getDefaultTypeRoots(currentDirectory); } } @@ -508,7 +534,7 @@ semver exclusivity >=5.7.1-rc let typeRoots; forEachAncestorDirectory(normalizePath(currentDirectory), (directory) => { const atTypes = combinePaths(directory, nodeModulesAtTypes); -@@ -43850,6 +43916,15 @@ function arePathsEqual(path1, path2, host) { +@@ -43850,6 +43920,15 @@ function arePathsEqual(path1, path2, host) { const useCaseSensitiveFileNames2 = typeof host.useCaseSensitiveFileNames === "function" ? host.useCaseSensitiveFileNames() : host.useCaseSensitiveFileNames; return comparePaths(path1, path2, !useCaseSensitiveFileNames2) === 0 /* EqualTo */; } @@ -524,7 +550,7 @@ semver exclusivity >=5.7.1-rc function getOriginalAndResolvedFileName(fileName, host, traceEnabled) { const resolvedFileName = realPath(fileName, host, traceEnabled); const pathsAreEqual = arePathsEqual(fileName, resolvedFileName, host); -@@ -44099,6 +44174,21 @@ function getConditions(options, resolutionMode) { +@@ -44099,6 +44178,21 @@ function getConditions(options, resolutionMode) { } function resolvePackageNameToPackageJson(packageName, containingDirectory, options, host, cache) { const moduleResolutionState = getTemporaryModuleResolutionState(cache == null ? void 0 : cache.getPackageJsonInfoCache(), host, options); @@ -546,7 +572,7 @@ semver exclusivity >=5.7.1-rc return forEachAncestorDirectoryStoppingAtGlobalCache(host, containingDirectory, (ancestorDirectory) => { if (getBaseFileName(ancestorDirectory) !== "node_modules") { const nodeModulesFolder = combinePaths(ancestorDirectory, "node_modules"); -@@ -45886,6 +45976,14 @@ function loadModuleFromNearestNodeModulesDirectoryWorker(extensions, moduleName, +@@ -45886,6 +45980,14 @@ function loadModuleFromNearestNodeModulesDirectoryWorker(extensions, moduleName, return lookup(secondaryExtensions); } function lookup(extensions2) { @@ -561,7 +587,7 @@ semver exclusivity >=5.7.1-rc return forEachAncestorDirectoryStoppingAtGlobalCache( state.host, normalizeSlashes(directory), -@@ -45934,11 +46032,40 @@ function loadModuleFromImmediateNodeModulesDirectory(extensions, moduleName, dir +@@ -45934,11 +46036,40 @@ function loadModuleFromImmediateNodeModulesDirectory(extensions, moduleName, dir return loadModuleFromSpecificNodeModulesDirectory(4 /* Declaration */, mangleScopedPackageNameWithTrace(moduleName, state), nodeModulesAtTypes2, nodeModulesAtTypesExists, state, cache, redirectedReference); } } @@ -603,7 +629,7 @@ semver exclusivity >=5.7.1-rc let rootPackageInfo; let packageInfo = getPackageJsonInfo(candidate, !nodeModulesDirectoryExists, state); if (rest !== "" && packageInfo && (!(state.features & 8 /* Exports */) || !hasProperty(((_a = rootPackageInfo = getPackageJsonInfo(packageDirectory, !nodeModulesDirectoryExists, state)) == null ? void 0 : _a.contents.packageJsonContent) ?? emptyArray, "exports"))) { -@@ -46233,6 +46360,18 @@ function traceIfEnabled(state, diagnostic, ...args) { +@@ -46233,6 +46364,18 @@ function traceIfEnabled(state, diagnostic, ...args) { function useCaseSensitiveFileNames(state) { return !state.host.useCaseSensitiveFileNames ? true : typeof state.host.useCaseSensitiveFileNames === "boolean" ? state.host.useCaseSensitiveFileNames : state.host.useCaseSensitiveFileNames(); } @@ -622,7 +648,7 @@ semver exclusivity >=5.7.1-rc // src/compiler/binder.ts var ModuleInstanceState = /* @__PURE__ */ ((ModuleInstanceState2) => { -@@ -49860,7 +49999,15 @@ function getAllModulePathsWorker(info, importedFileName, host, compilerOptions, +@@ -49860,7 +50003,15 @@ function getAllModulePathsWorker(info, importedFileName, host, compilerOptions, /*preferSymlinks*/ true, (path, isRedirect) => { @@ -639,7 +665,7 @@ semver exclusivity >=5.7.1-rc allFileNames.set(path, { path: info.getCanonicalFileName(path), isRedirect, isInNodeModules }); importedFileFromNodeModules = importedFileFromNodeModules || isInNodeModules; } -@@ -50177,7 +50324,41 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa +@@ -50177,7 +50328,41 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa if (!host.fileExists || !host.readFile) { return void 0; } @@ -682,7 +708,7 @@ semver exclusivity >=5.7.1-rc if (!parts) { return void 0; } -@@ -50214,14 +50395,16 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa +@@ -50214,14 +50399,16 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa if (isRedirect && !isPackageRootPath) { return void 0; } @@ -690,7 +716,7 @@ semver exclusivity >=5.7.1-rc - const pathToTopLevelNodeModules = getCanonicalFileName(moduleSpecifier.substring(0, parts.topLevelNodeModulesIndex)); - if (!(startsWith(canonicalSourceDirectory, pathToTopLevelNodeModules) || globalTypingsCacheLocation && startsWith(getCanonicalFileName(globalTypingsCacheLocation), pathToTopLevelNodeModules))) { - return void 0; -+ if (typeof process.versions.pnp === "undefined") { ++ if (!isPnpEnabled()) { + const globalTypingsCacheLocation = host.getGlobalTypingsCacheLocation && host.getGlobalTypingsCacheLocation(); + const pathToTopLevelNodeModules = getCanonicalFileName(moduleSpecifier.substring(0, parts.topLevelNodeModulesIndex)); + if (!(startsWith(canonicalSourceDirectory, pathToTopLevelNodeModules) || globalTypingsCacheLocation && startsWith(getCanonicalFileName(globalTypingsCacheLocation), pathToTopLevelNodeModules))) { @@ -706,7 +732,7 @@ semver exclusivity >=5.7.1-rc function tryDirectoryWithPackageJson(packageRootIndex) { var _a, _b; const packageRootPath = path.substring(0, packageRootIndex); -@@ -50234,14 +50417,14 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa +@@ -50234,14 +50421,14 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa const importMode = overrideMode || getDefaultResolutionModeForFile(importingSourceFile, host, options); if (getResolvePackageJsonExports(options)) { const nodeModulesDirectoryName2 = packageRootPath.substring(parts.topLevelPackageNameIndex + 1); @@ -723,7 +749,7 @@ semver exclusivity >=5.7.1-rc packageJsonContent.exports, conditions ) : void 0; -@@ -124431,6 +124614,7 @@ var ProgramUpdateLevel = /* @__PURE__ */ ((ProgramUpdateLevel2) => { +@@ -124431,6 +124618,7 @@ var ProgramUpdateLevel = /* @__PURE__ */ ((ProgramUpdateLevel2) => { ProgramUpdateLevel2[ProgramUpdateLevel2["Update"] = 0] = "Update"; ProgramUpdateLevel2[ProgramUpdateLevel2["RootNamesAndUpdate"] = 1] = "RootNamesAndUpdate"; ProgramUpdateLevel2[ProgramUpdateLevel2["Full"] = 2] = "Full"; @@ -731,7 +757,7 @@ semver exclusivity >=5.7.1-rc return ProgramUpdateLevel2; })(ProgramUpdateLevel || {}); function updateSharedExtendedConfigFileWatcher(projectPath, options, extendedConfigFilesMap, createExtendedConfigFileWatch, toPath3) { -@@ -132639,6 +132823,11 @@ function createWatchProgram(host) { +@@ -132639,6 +132827,11 @@ function createWatchProgram(host) { if (configFileName) { configFileWatcher = watchFile2(configFileName, scheduleProgramReload, 2e3 /* High */, watchOptions, WatchType.ConfigFile); } @@ -743,7 +769,7 @@ semver exclusivity >=5.7.1-rc const compilerHost = createCompilerHostFromProgramHost(host, () => compilerOptions, directoryStructureHost); setGetSourceFileAsHashVersioned(compilerHost); const getNewSourceFile = compilerHost.getSourceFile; -@@ -132700,6 +132889,10 @@ function createWatchProgram(host) { +@@ -132700,6 +132893,10 @@ function createWatchProgram(host) { configFileWatcher.close(); configFileWatcher = void 0; } @@ -754,7 +780,7 @@ semver exclusivity >=5.7.1-rc extendedConfigCache == null ? void 0 : extendedConfigCache.clear(); extendedConfigCache = void 0; if (sharedExtendedConfigFileWatchers) { -@@ -132735,7 +132928,7 @@ function createWatchProgram(host) { +@@ -132735,7 +132932,7 @@ function createWatchProgram(host) { function getCurrentProgram() { return builderProgram && builderProgram.getProgramOrUndefined(); } @@ -763,7 +789,7 @@ semver exclusivity >=5.7.1-rc writeLog(`Synchronizing program`); Debug.assert(compilerOptions); Debug.assert(rootFileNames); -@@ -132747,7 +132940,7 @@ function createWatchProgram(host) { +@@ -132747,7 +132944,7 @@ function createWatchProgram(host) { resolutionCache.onChangesAffectModuleResolution(); } } @@ -772,7 +798,7 @@ semver exclusivity >=5.7.1-rc const { originalReadFile, originalFileExists, -@@ -132965,6 +133158,12 @@ function createWatchProgram(host) { +@@ -132965,6 +133162,12 @@ function createWatchProgram(host) { updateLevel = 2 /* Full */; scheduleProgramUpdate(); } @@ -785,7 +811,7 @@ semver exclusivity >=5.7.1-rc function updateProgramWithWatchStatus() { timerToUpdateProgram = void 0; reportFileChangeDetectedOnCreateProgram = true; -@@ -132978,6 +133177,12 @@ function createWatchProgram(host) { +@@ -132978,6 +133181,12 @@ function createWatchProgram(host) { case 2 /* Full */: reloadConfigFile(); break; @@ -798,7 +824,7 @@ semver exclusivity >=5.7.1-rc default: synchronizeProgram(); break; -@@ -140400,7 +140605,14 @@ function createPackageJsonImportFilter(fromFile, preferences, host) { +@@ -140400,7 +140609,14 @@ function createPackageJsonImportFilter(fromFile, preferences, host) { return false; } function getNodeModulesPackageNameFromFileName(importedFileName, moduleSpecifierResolutionHost) { @@ -814,7 +840,7 @@ semver exclusivity >=5.7.1-rc return void 0; } const specifier = ts_moduleSpecifiers_exports.getNodeModulesPackageName( -@@ -140974,6 +141186,9 @@ function fileContainsPackageImport(sourceFile, packageName) { +@@ -140974,6 +141190,9 @@ function fileContainsPackageImport(sourceFile, packageName) { return sourceFile.imports && sourceFile.imports.some((i) => i.text === packageName || i.text.startsWith(packageName + "/")); } function isImportablePath(fromPath, toPath3, getCanonicalFileName, globalCachePath, host) { @@ -824,7 +850,7 @@ semver exclusivity >=5.7.1-rc const toNodeModules = forEachAncestorDirectoryStoppingAtGlobalCache( host, toPath3, -@@ -170175,7 +170390,60 @@ function getCompletionEntriesForNonRelativeModules(fragment, scriptPath, mode, p +@@ -170175,7 +170394,60 @@ function getCompletionEntriesForNonRelativeModules(fragment, scriptPath, mode, p return nodeModulesDirectoryOrImportsLookup(ancestor); }; } @@ -886,7 +912,7 @@ semver exclusivity >=5.7.1-rc } } return arrayFrom(result.values()); -@@ -170372,9 +170640,15 @@ function getCompletionEntriesFromTypings(program, host, moduleSpecifierResolutio +@@ -170372,9 +170644,15 @@ function getCompletionEntriesFromTypings(program, host, moduleSpecifierResolutio for (const root of typeRoots) { getCompletionEntriesFromDirectories(root); } @@ -905,11 +931,11 @@ semver exclusivity >=5.7.1-rc } return result; function getCompletionEntriesFromDirectories(directory) { -@@ -187686,6 +187960,29 @@ var ConfiguredProject2 = class extends Project2 { +@@ -187686,6 +187964,29 @@ var ConfiguredProject2 = class extends Project2 { return this.projectReferences; } updateReferences(refs) { -+ if (typeof process.versions.pnp !== `undefined`) { ++ if (isPnpEnabled()) { + const basePath = this.getCurrentDirectory(); + const getPnpPath = (path) => { + try { @@ -935,7 +961,7 @@ semver exclusivity >=5.7.1-rc this.projectReferences = refs; this.potentialProjectReferences = void 0; } -@@ -188491,6 +188788,7 @@ var _ProjectService = class _ProjectService { +@@ -188491,6 +188792,7 @@ var _ProjectService = class _ProjectService { getDetailWatchInfo ); this.canUseWatchEvents = getCanUseWatchEvents(this, opts.canUseWatchEvents); @@ -943,7 +969,7 @@ semver exclusivity >=5.7.1-rc (_a = opts.incrementalVerifier) == null ? void 0 : _a.call(opts, this); } toPath(fileName) { -@@ -190445,7 +190743,7 @@ Dynamic files must always be opened with service's current directory or service +@@ -190445,7 +190747,7 @@ Dynamic files must always be opened with service's current directory or service this.performanceEventHandler = performanceEventHandler; } setHostConfiguration(args) { @@ -952,7 +978,7 @@ semver exclusivity >=5.7.1-rc if (args.file) { const info = this.getScriptInfoForNormalizedPath(toNormalizedPath(args.file)); if (info) { -@@ -190494,6 +190792,8 @@ Dynamic files must always be opened with service's current directory or service +@@ -190494,6 +190796,8 @@ Dynamic files must always be opened with service's current directory or service this.hostConfiguration.watchOptions = substitution; this.hostConfiguration.beforeSubstitution = substitution === watchOptions ? void 0 : watchOptions; this.logger.info(`Host watch options changed to ${JSON.stringify(this.hostConfiguration.watchOptions)}, it will be take effect for next watches.`); @@ -961,7 +987,7 @@ semver exclusivity >=5.7.1-rc } } } -@@ -191689,6 +191989,28 @@ Dynamic files must always be opened with service's current directory or service +@@ -191689,6 +191993,28 @@ Dynamic files must always be opened with service's current directory or service } ); } diff --git a/packages/plugin-compat/extra/typescript/patch-69d5aacc5cec3ea26a9598d9eddcbf9a.diff b/packages/plugin-compat/extra/typescript/patches/patch-69d5aacc5cec3ea26a9598d9eddcbf9a.diff similarity index 99% rename from packages/plugin-compat/extra/typescript/patch-69d5aacc5cec3ea26a9598d9eddcbf9a.diff rename to packages/plugin-compat/extra/typescript/patches/patch-69d5aacc5cec3ea26a9598d9eddcbf9a.diff index 9e207f65860d..91a06a5cf71e 100644 --- a/packages/plugin-compat/extra/typescript/patch-69d5aacc5cec3ea26a9598d9eddcbf9a.diff +++ b/packages/plugin-compat/extra/typescript/patches/patch-69d5aacc5cec3ea26a9598d9eddcbf9a.diff @@ -1,5 +1,5 @@ diff --git a/lib/tsc.js b/lib/tsc.js -index e829bf376..516592f8d 100644 +index e829..5165 100644 semver exclusivity >=4.0 <4.1 --- a/lib/tsc.js +++ b/lib/tsc.js @@ -267,7 +267,7 @@ semver exclusivity >=4.0 <4.1 ts.perfLogger.logStartUpdateProgram("SynchronizeProgram"); synchronizeProgram(); diff --git a/lib/tsserver.js b/lib/tsserver.js -index 662e63336..bc00714a7 100644 +index 662e..bc00 100644 semver exclusivity >=4.0 <4.1 --- a/lib/tsserver.js +++ b/lib/tsserver.js @@ -689,7 +689,7 @@ semver exclusivity >=4.0 <4.1 var _this = this; var watchers = this.packageJsonFilesMap || (this.packageJsonFilesMap = new ts.Map()); diff --git a/lib/tsserverlibrary.d.ts b/lib/tsserverlibrary.d.ts -index 8442b93e4..6824bc122 100644 +index 8442..6824 100644 semver exclusivity >=4.0 <4.1 --- a/lib/tsserverlibrary.d.ts +++ b/lib/tsserverlibrary.d.ts @@ -702,7 +702,7 @@ semver exclusivity >=4.0 <4.1 toPath(fileName: string): Path; private loadTypesMap; diff --git a/lib/tsserverlibrary.js b/lib/tsserverlibrary.js -index 0efd5eb90..a925edb60 100644 +index 0efd..a925 100644 semver exclusivity >=4.0 <4.1 --- a/lib/tsserverlibrary.js +++ b/lib/tsserverlibrary.js @@ -1124,7 +1124,7 @@ semver exclusivity >=4.0 <4.1 var _this = this; var watchers = this.packageJsonFilesMap || (this.packageJsonFilesMap = new ts.Map()); diff --git a/lib/typescript.js b/lib/typescript.js -index be3e6d1a7..bbf1cf202 100644 +index be3e..bbf1 100644 semver exclusivity >=4.0 <4.1 --- a/lib/typescript.js +++ b/lib/typescript.js @@ -1485,7 +1485,7 @@ semver exclusivity >=4.0 <4.1 return moduleSpecifierToValidIdentifier(ts.removeFileExtension(ts.stripQuotes(moduleSymbol.name)), target); } diff --git a/lib/typescriptServices.js b/lib/typescriptServices.js -index a76ef9d16..544bc88ff 100644 +index a76e..544b 100644 semver exclusivity >=4.0 <4.1 --- a/lib/typescriptServices.js +++ b/lib/typescriptServices.js @@ -1846,7 +1846,7 @@ semver exclusivity >=4.0 <4.1 return moduleSpecifierToValidIdentifier(ts.removeFileExtension(ts.stripQuotes(moduleSymbol.name)), target); } diff --git a/lib/typingsInstaller.js b/lib/typingsInstaller.js -index 171ceed3c..c4b755557 100644 +index 171c..c4b7 100644 semver exclusivity >=4.0 <4.1 --- a/lib/typingsInstaller.js +++ b/lib/typingsInstaller.js diff --git a/packages/plugin-compat/extra/typescript/patch-6b554debf2568f8d96b3dda4f5eea231.diff b/packages/plugin-compat/extra/typescript/patches/patch-6b554debf2568f8d96b3dda4f5eea231.diff similarity index 99% rename from packages/plugin-compat/extra/typescript/patch-6b554debf2568f8d96b3dda4f5eea231.diff rename to packages/plugin-compat/extra/typescript/patches/patch-6b554debf2568f8d96b3dda4f5eea231.diff index 3ce0dc10b12d..b02ec2ee26bd 100644 --- a/packages/plugin-compat/extra/typescript/patch-6b554debf2568f8d96b3dda4f5eea231.diff +++ b/packages/plugin-compat/extra/typescript/patches/patch-6b554debf2568f8d96b3dda4f5eea231.diff @@ -1,5 +1,5 @@ diff --git a/lib/tsc.js b/lib/tsc.js -index d425ad1b5..4261d27cd 100644 +index d425..4261 100644 semver exclusivity >=4.4 <4.5 --- a/lib/tsc.js +++ b/lib/tsc.js @@ -300,7 +300,7 @@ semver exclusivity >=4.4 <4.5 ts.perfLogger.logStartUpdateProgram("SynchronizeProgram"); synchronizeProgram(); diff --git a/lib/tsserver.js b/lib/tsserver.js -index 6e4ee30b7..779172b83 100644 +index 6e4e..7791 100644 semver exclusivity >=4.4 <4.5 --- a/lib/tsserver.js +++ b/lib/tsserver.js @@ -909,7 +909,7 @@ semver exclusivity >=4.4 <4.5 this.installer.on("message", function (m) { return _this.handleMessage(m); }); // We have to schedule this event to the next tick diff --git a/lib/tsserverlibrary.d.ts b/lib/tsserverlibrary.d.ts -index 581d70b71..93b185e08 100644 +index 581d..93b1 100644 semver exclusivity >=4.4 <4.5 --- a/lib/tsserverlibrary.d.ts +++ b/lib/tsserverlibrary.d.ts @@ -922,7 +922,7 @@ semver exclusivity >=4.4 <4.5 * @param {string | undefined} containingFile - file that contains type reference directive, can be undefined if containing file is unknown. * This is possible in case if resolution is performed for directives specified via 'types' parameter. In this case initial path for secondary lookups diff --git a/lib/tsserverlibrary.js b/lib/tsserverlibrary.js -index 5fa1cd290..9253c6ff4 100644 +index 5fa1..9253 100644 semver exclusivity >=4.4 <4.5 --- a/lib/tsserverlibrary.js +++ b/lib/tsserverlibrary.js @@ -1509,7 +1509,7 @@ semver exclusivity >=4.4 <4.5 var _this = this; var watchers = this.packageJsonFilesMap || (this.packageJsonFilesMap = new ts.Map()); diff --git a/lib/typescript.d.ts b/lib/typescript.d.ts -index 4902d45ad..f512e9e8c 100644 +index 4902..f512 100644 semver exclusivity >=4.4 <4.5 --- a/lib/typescript.d.ts +++ b/lib/typescript.d.ts @@ -1522,7 +1522,7 @@ semver exclusivity >=4.4 <4.5 * @param {string | undefined} containingFile - file that contains type reference directive, can be undefined if containing file is unknown. * This is possible in case if resolution is performed for directives specified via 'types' parameter. In this case initial path for secondary lookups diff --git a/lib/typescript.js b/lib/typescript.js -index 44462973f..dec9f5a1e 100644 +index 4446..dec9 100644 semver exclusivity >=4.4 <4.5 --- a/lib/typescript.js +++ b/lib/typescript.js @@ -2006,7 +2006,7 @@ semver exclusivity >=4.4 <4.5 return statement; }); diff --git a/lib/typescriptServices.d.ts b/lib/typescriptServices.d.ts -index c4e5e624c..1ff41ed4d 100644 +index c4e5..1ff4 100644 semver exclusivity >=4.4 <4.5 --- a/lib/typescriptServices.d.ts +++ b/lib/typescriptServices.d.ts @@ -2019,7 +2019,7 @@ semver exclusivity >=4.4 <4.5 * @param {string | undefined} containingFile - file that contains type reference directive, can be undefined if containing file is unknown. * This is possible in case if resolution is performed for directives specified via 'types' parameter. In this case initial path for secondary lookups diff --git a/lib/typescriptServices.js b/lib/typescriptServices.js -index 20a6fc52e..662551c39 100644 +index 20a6..6625 100644 semver exclusivity >=4.4 <4.5 --- a/lib/typescriptServices.js +++ b/lib/typescriptServices.js @@ -2503,7 +2503,7 @@ semver exclusivity >=4.4 <4.5 return statement; }); diff --git a/lib/typingsInstaller.js b/lib/typingsInstaller.js -index a0e7177a1..c3f471586 100644 +index a0e7..c3f4 100644 semver exclusivity >=4.4 <4.5 --- a/lib/typingsInstaller.js +++ b/lib/typingsInstaller.js diff --git a/packages/plugin-compat/extra/typescript/patch-72539b2a03aad0ad9316d339d594cbce.diff b/packages/plugin-compat/extra/typescript/patches/patch-72539b2a03aad0ad9316d339d594cbce.diff similarity index 99% rename from packages/plugin-compat/extra/typescript/patch-72539b2a03aad0ad9316d339d594cbce.diff rename to packages/plugin-compat/extra/typescript/patches/patch-72539b2a03aad0ad9316d339d594cbce.diff index 5edd05139dbd..4115d8fff5d8 100644 --- a/packages/plugin-compat/extra/typescript/patch-72539b2a03aad0ad9316d339d594cbce.diff +++ b/packages/plugin-compat/extra/typescript/patches/patch-72539b2a03aad0ad9316d339d594cbce.diff @@ -1,5 +1,5 @@ diff --git a/lib/tsc.js b/lib/tsc.js -index 74c8a3733..7776f56e0 100644 +index 74c8..7776 100644 semver exclusivity >=4.8.4 <4.9.1-beta --- a/lib/tsc.js +++ b/lib/tsc.js @@ -306,7 +306,7 @@ semver exclusivity >=4.8.4 <4.9.1-beta ts.perfLogger.logStartUpdateProgram("SynchronizeProgram"); synchronizeProgram(); diff --git a/lib/tsserver.js b/lib/tsserver.js -index 33a0f2908..a2bf9d20f 100644 +index 33a0..a2bf 100644 semver exclusivity >=4.8.4 <4.9.1-beta --- a/lib/tsserver.js +++ b/lib/tsserver.js @@ -983,7 +983,7 @@ semver exclusivity >=4.8.4 <4.9.1-beta this.installer.on("message", function (m) { return _this.handleMessage(m); }); // We have to schedule this event to the next tick diff --git a/lib/tsserverlibrary.js b/lib/tsserverlibrary.js -index b6532d29d..20b66275f 100644 +index b653..20b6 100644 semver exclusivity >=4.8.4 <4.9.1-beta --- a/lib/tsserverlibrary.js +++ b/lib/tsserverlibrary.js @@ -1634,7 +1634,7 @@ semver exclusivity >=4.8.4 <4.9.1-beta var _this = this; var watchers = this.packageJsonFilesMap || (this.packageJsonFilesMap = new ts.Map()); diff --git a/lib/typescript.js b/lib/typescript.js -index c0f6f3a57..c0c4bcbd9 100644 +index c0f6..c0c4 100644 semver exclusivity >=4.8.4 <4.9.1-beta --- a/lib/typescript.js +++ b/lib/typescript.js @@ -2179,7 +2179,7 @@ semver exclusivity >=4.8.4 <4.9.1-beta return statement; }); diff --git a/lib/typescriptServices.js b/lib/typescriptServices.js -index 955e00658..b0562b2a8 100644 +index 955e..b056 100644 semver exclusivity >=4.8.4 <4.9.1-beta --- a/lib/typescriptServices.js +++ b/lib/typescriptServices.js @@ -2724,7 +2724,7 @@ semver exclusivity >=4.8.4 <4.9.1-beta return statement; }); diff --git a/lib/typingsInstaller.js b/lib/typingsInstaller.js -index c7a265d6c..a4fa0ba53 100644 +index c7a2..a4fa 100644 semver exclusivity >=4.8.4 <4.9.1-beta --- a/lib/typingsInstaller.js +++ b/lib/typingsInstaller.js diff --git a/packages/plugin-compat/extra/typescript/patch-787b808f0e4ee81872d9ddabdcb024e1.diff b/packages/plugin-compat/extra/typescript/patches/patch-787b808f0e4ee81872d9ddabdcb024e1.diff similarity index 99% rename from packages/plugin-compat/extra/typescript/patch-787b808f0e4ee81872d9ddabdcb024e1.diff rename to packages/plugin-compat/extra/typescript/patches/patch-787b808f0e4ee81872d9ddabdcb024e1.diff index 6c09e258c278..86ee82bd3ccf 100644 --- a/packages/plugin-compat/extra/typescript/patch-787b808f0e4ee81872d9ddabdcb024e1.diff +++ b/packages/plugin-compat/extra/typescript/patches/patch-787b808f0e4ee81872d9ddabdcb024e1.diff @@ -1,5 +1,5 @@ diff --git a/lib/tsc.js b/lib/tsc.js -index f82b0a23b..8d4a85e8b 100644 +index f82b..8d4a 100644 semver exclusivity >=5.3.1-rc <5.4.0-beta --- a/lib/tsc.js +++ b/lib/tsc.js @@ -344,7 +344,7 @@ semver exclusivity >=5.3.1-rc <5.4.0-beta } function reloadFileNamesFromConfigFile() { diff --git a/lib/tsserver.js b/lib/tsserver.js -index c4e9b0b40..f48e9267f 100644 +index c4e9..f48e 100644 semver exclusivity >=5.3.1-rc <5.4.0-beta --- a/lib/tsserver.js +++ b/lib/tsserver.js @@ -997,7 +997,7 @@ semver exclusivity >=5.3.1-rc <5.4.0-beta this.installer = childProcess.fork(typingsInstaller, args, { execArgv }); this.installer.on("message", (m) => this.handleMessage(m)); diff --git a/lib/typescript.d.ts b/lib/typescript.d.ts -index 5ee1d5258..0fbd109c0 100644 +index 5ee1..0fbd 100644 semver exclusivity >=5.3.1-rc <5.4.0-beta --- a/lib/typescript.d.ts +++ b/lib/typescript.d.ts @@ -1011,7 +1011,7 @@ semver exclusivity >=5.3.1-rc <5.4.0-beta function findConfigFile(searchPath: string, fileExists: (fileName: string) => boolean, configName?: string): string | undefined; function resolveTripleslashReference(moduleName: string, containingFile: string): string; diff --git a/lib/typescript.js b/lib/typescript.js -index 780582944..9865ec301 100644 +index 7805..9865 100644 semver exclusivity >=5.3.1-rc <5.4.0-beta --- a/lib/typescript.js +++ b/lib/typescript.js @@ -1710,7 +1710,7 @@ semver exclusivity >=5.3.1-rc <5.4.0-beta const watchers = this.packageJsonFilesMap || (this.packageJsonFilesMap = /* @__PURE__ */ new Map()); if (!watchers.has(path)) { diff --git a/lib/typingsInstaller.js b/lib/typingsInstaller.js -index 6dd57dedd..08a78a158 100644 +index 6dd5..08a7 100644 semver exclusivity >=5.3.1-rc <5.4.0-beta --- a/lib/typingsInstaller.js +++ b/lib/typingsInstaller.js diff --git a/packages/plugin-compat/extra/typescript/patch-7c7f92dcb239d12758f3e82258b02246.diff b/packages/plugin-compat/extra/typescript/patches/patch-7c7f92dcb239d12758f3e82258b02246.diff similarity index 99% rename from packages/plugin-compat/extra/typescript/patch-7c7f92dcb239d12758f3e82258b02246.diff rename to packages/plugin-compat/extra/typescript/patches/patch-7c7f92dcb239d12758f3e82258b02246.diff index 1361f1178f8c..22ed1f66b7dc 100644 --- a/packages/plugin-compat/extra/typescript/patch-7c7f92dcb239d12758f3e82258b02246.diff +++ b/packages/plugin-compat/extra/typescript/patches/patch-7c7f92dcb239d12758f3e82258b02246.diff @@ -1,5 +1,5 @@ diff --git a/lib/tsc.js b/lib/tsc.js -index e90fc7ec5..1ff8d986d 100644 +index e90f..1ff8 100644 semver exclusivity >=5.2.0-beta <5.2.1-rc --- a/lib/tsc.js +++ b/lib/tsc.js @@ -344,7 +344,7 @@ semver exclusivity >=5.2.0-beta <5.2.1-rc } function reloadFileNamesFromConfigFile() { diff --git a/lib/tsserver.js b/lib/tsserver.js -index c162605c3..3fbcd612c 100644 +index c162..3fbc 100644 semver exclusivity >=5.2.0-beta <5.2.1-rc --- a/lib/tsserver.js +++ b/lib/tsserver.js @@ -997,7 +997,7 @@ semver exclusivity >=5.2.0-beta <5.2.1-rc this.installer = childProcess.fork(typingsInstaller, args, { execArgv }); this.installer.on("message", (m) => this.handleMessage(m)); diff --git a/lib/tsserverlibrary.js b/lib/tsserverlibrary.js -index cb12b5c07..356ed604e 100644 +index cb12..356e 100644 semver exclusivity >=5.2.0-beta <5.2.1-rc --- a/lib/tsserverlibrary.js +++ b/lib/tsserverlibrary.js @@ -1696,7 +1696,7 @@ semver exclusivity >=5.2.0-beta <5.2.1-rc const watchers = this.packageJsonFilesMap || (this.packageJsonFilesMap = /* @__PURE__ */ new Map()); if (!watchers.has(path)) { diff --git a/lib/typescript.js b/lib/typescript.js -index 5ca6f8d6a..157995abd 100644 +index 5ca6..1579 100644 semver exclusivity >=5.2.0-beta <5.2.1-rc --- a/lib/typescript.js +++ b/lib/typescript.js @@ -2293,7 +2293,7 @@ semver exclusivity >=5.2.0-beta <5.2.1-rc init_ts_Completions(); kindPrecedence = { diff --git a/lib/typingsInstaller.js b/lib/typingsInstaller.js -index e7eab78c8..7bedeaf89 100644 +index e7ea..7bed 100644 semver exclusivity >=5.2.0-beta <5.2.1-rc --- a/lib/typingsInstaller.js +++ b/lib/typingsInstaller.js diff --git a/packages/plugin-compat/extra/typescript/patch-80c3415be21bbb0c86342ff5521cba2d.diff b/packages/plugin-compat/extra/typescript/patches/patch-80c3415be21bbb0c86342ff5521cba2d.diff similarity index 99% rename from packages/plugin-compat/extra/typescript/patch-80c3415be21bbb0c86342ff5521cba2d.diff rename to packages/plugin-compat/extra/typescript/patches/patch-80c3415be21bbb0c86342ff5521cba2d.diff index 35a38edcd046..3ea58034d801 100644 --- a/packages/plugin-compat/extra/typescript/patch-80c3415be21bbb0c86342ff5521cba2d.diff +++ b/packages/plugin-compat/extra/typescript/patches/patch-80c3415be21bbb0c86342ff5521cba2d.diff @@ -1,5 +1,5 @@ diff --git a/lib/tsc.js b/lib/tsc.js -index de544cf91..5e370501b 100644 +index de54..5e37 100644 semver exclusivity >=5.3.0-beta <5.3.1-rc --- a/lib/tsc.js +++ b/lib/tsc.js @@ -344,7 +344,7 @@ semver exclusivity >=5.3.0-beta <5.3.1-rc } function reloadFileNamesFromConfigFile() { diff --git a/lib/tsserver.js b/lib/tsserver.js -index 01baa7314..d42e6678a 100644 +index 01ba..d42e 100644 semver exclusivity >=5.3.0-beta <5.3.1-rc --- a/lib/tsserver.js +++ b/lib/tsserver.js @@ -997,7 +997,7 @@ semver exclusivity >=5.3.0-beta <5.3.1-rc this.installer = childProcess.fork(typingsInstaller, args, { execArgv }); this.installer.on("message", (m) => this.handleMessage(m)); diff --git a/lib/typescript.js b/lib/typescript.js -index b266047f4..150d0c65b 100644 +index b266..150d 100644 semver exclusivity >=5.3.0-beta <5.3.1-rc --- a/lib/typescript.js +++ b/lib/typescript.js @@ -1696,7 +1696,7 @@ semver exclusivity >=5.3.0-beta <5.3.1-rc const watchers = this.packageJsonFilesMap || (this.packageJsonFilesMap = /* @__PURE__ */ new Map()); if (!watchers.has(path)) { diff --git a/lib/typingsInstaller.js b/lib/typingsInstaller.js -index 6d41c54b5..3166fbd87 100644 +index 6d41..3166 100644 semver exclusivity >=5.3.0-beta <5.3.1-rc --- a/lib/typingsInstaller.js +++ b/lib/typingsInstaller.js diff --git a/packages/plugin-compat/extra/typescript/patch-b601255e50c8a4967082b099fe071483.diff b/packages/plugin-compat/extra/typescript/patches/patch-82932c3e050b19d13ba1b658ae5b5224.diff similarity index 91% rename from packages/plugin-compat/extra/typescript/patch-b601255e50c8a4967082b099fe071483.diff rename to packages/plugin-compat/extra/typescript/patches/patch-82932c3e050b19d13ba1b658ae5b5224.diff index 77edf50cc130..fa8f9c5bbd10 100644 --- a/packages/plugin-compat/extra/typescript/patch-b601255e50c8a4967082b099fe071483.diff +++ b/packages/plugin-compat/extra/typescript/patches/patch-82932c3e050b19d13ba1b658ae5b5224.diff @@ -1,25 +1,19 @@ diff --git a/lib/_tsc.js b/lib/_tsc.js -index 083c2456e..8cd0eb3e7 100644 +index 083c..7edd 100644 semver exclusivity >=5.7.0-beta <5.7.1-rc --- a/lib/_tsc.js +++ b/lib/_tsc.js -@@ -5104,6 +5104,9 @@ var sys = (() => { - } - } - function isFileSystemCaseSensitive() { -+ if (typeof process.versions.pnp !== `undefined`) { -+ return true; -+ } - if (platform === "win32" || platform === "win64") { - return false; - } -@@ -39255,6 +39258,48 @@ function getDefaultValueForOption(option) { +@@ -3934,6 +3934,29 @@ var commentPragmas = { } - } + }; +// src/compiler/pnpapi.ts ++function isPnpEnabled() { ++ var _a; ++ return typeof process !== "undefined" && typeof ((_a = process == null ? void 0 : process.versions) == null ? void 0 : _a.pnp) !== "undefined"; ++} +function getPnpApi(path) { -+ if (typeof process.versions.pnp === "undefined") { ++ if (!isPnpEnabled()) { + return; + } + const { findPnpApi } = require("module"); @@ -36,6 +30,23 @@ semver exclusivity >=5.7.0-beta <5.7.1-rc + ); +} + + // src/compiler/sys.ts + function generateDjb2Hash(data) { + let acc = 5381; +@@ -5104,6 +5127,9 @@ var sys = (() => { + } + } + function isFileSystemCaseSensitive() { ++ if (isPnpEnabled()) { ++ return true; ++ } + if (platform === "win32" || platform === "win64") { + return false; + } +@@ -39255,6 +39281,29 @@ function getDefaultValueForOption(option) { + } + } + +// src/compiler/pnp.ts +function getPnpTypeRoots(currentDirectory) { + const pnpApi = getPnpApi(currentDirectory); @@ -62,7 +73,7 @@ semver exclusivity >=5.7.0-beta <5.7.1-rc // src/compiler/moduleNameResolver.ts function trace(host, message, ...args) { host.trace(formatMessage(message, ...args)); -@@ -39472,7 +39517,7 @@ function getEffectiveTypeRoots(options, host) { +@@ -39472,7 +39521,7 @@ function getEffectiveTypeRoots(options, host) { return getDefaultTypeRoots(currentDirectory); } } @@ -71,7 +82,7 @@ semver exclusivity >=5.7.0-beta <5.7.1-rc let typeRoots; forEachAncestorDirectory(normalizePath(currentDirectory), (directory) => { const atTypes = combinePaths(directory, nodeModulesAtTypes); -@@ -39485,6 +39530,15 @@ function arePathsEqual(path1, path2, host) { +@@ -39485,6 +39534,15 @@ function arePathsEqual(path1, path2, host) { const useCaseSensitiveFileNames2 = typeof host.useCaseSensitiveFileNames === "function" ? host.useCaseSensitiveFileNames() : host.useCaseSensitiveFileNames; return comparePaths(path1, path2, !useCaseSensitiveFileNames2) === 0 /* EqualTo */; } @@ -87,7 +98,7 @@ semver exclusivity >=5.7.0-beta <5.7.1-rc function getOriginalAndResolvedFileName(fileName, host, traceEnabled) { const resolvedFileName = realPath(fileName, host, traceEnabled); const pathsAreEqual = arePathsEqual(fileName, resolvedFileName, host); -@@ -41365,6 +41419,14 @@ function loadModuleFromNearestNodeModulesDirectoryWorker(extensions, moduleName, +@@ -41365,6 +41423,14 @@ function loadModuleFromNearestNodeModulesDirectoryWorker(extensions, moduleName, return lookup(secondaryExtensions); } function lookup(extensions2) { @@ -102,7 +113,7 @@ semver exclusivity >=5.7.0-beta <5.7.1-rc return forEachAncestorDirectoryStoppingAtGlobalCache( state.host, normalizeSlashes(directory), -@@ -41413,11 +41475,40 @@ function loadModuleFromImmediateNodeModulesDirectory(extensions, moduleName, dir +@@ -41413,11 +41479,40 @@ function loadModuleFromImmediateNodeModulesDirectory(extensions, moduleName, dir return loadModuleFromSpecificNodeModulesDirectory(4 /* Declaration */, mangleScopedPackageNameWithTrace(moduleName, state), nodeModulesAtTypes2, nodeModulesAtTypesExists, state, cache, redirectedReference); } } @@ -144,7 +155,7 @@ semver exclusivity >=5.7.0-beta <5.7.1-rc let rootPackageInfo; let packageInfo = getPackageJsonInfo(candidate, !nodeModulesDirectoryExists, state); if (rest !== "" && packageInfo && (!(state.features & 8 /* Exports */) || !hasProperty(((_a = rootPackageInfo = getPackageJsonInfo(packageDirectory, !nodeModulesDirectoryExists, state)) == null ? void 0 : _a.contents.packageJsonContent) ?? emptyArray, "exports"))) { -@@ -41712,6 +41803,18 @@ function traceIfEnabled(state, diagnostic, ...args) { +@@ -41712,6 +41807,18 @@ function traceIfEnabled(state, diagnostic, ...args) { function useCaseSensitiveFileNames(state) { return !state.host.useCaseSensitiveFileNames ? true : typeof state.host.useCaseSensitiveFileNames === "boolean" ? state.host.useCaseSensitiveFileNames : state.host.useCaseSensitiveFileNames(); } @@ -163,7 +174,7 @@ semver exclusivity >=5.7.0-beta <5.7.1-rc // src/compiler/binder.ts function getModuleInstanceState(node, visited) { -@@ -45223,7 +45326,15 @@ function getAllModulePathsWorker(info, importedFileName, host, compilerOptions, +@@ -45223,7 +45330,15 @@ function getAllModulePathsWorker(info, importedFileName, host, compilerOptions, /*preferSymlinks*/ true, (path, isRedirect) => { @@ -180,7 +191,7 @@ semver exclusivity >=5.7.0-beta <5.7.1-rc allFileNames.set(path, { path: info.getCanonicalFileName(path), isRedirect, isInNodeModules }); importedFileFromNodeModules = importedFileFromNodeModules || isInNodeModules; } -@@ -45539,7 +45650,41 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa +@@ -45539,7 +45654,41 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa if (!host.fileExists || !host.readFile) { return void 0; } @@ -223,7 +234,7 @@ semver exclusivity >=5.7.0-beta <5.7.1-rc if (!parts) { return void 0; } -@@ -45576,14 +45721,16 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa +@@ -45576,14 +45725,16 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa if (isRedirect && !isPackageRootPath) { return void 0; } @@ -231,7 +242,7 @@ semver exclusivity >=5.7.0-beta <5.7.1-rc - const pathToTopLevelNodeModules = getCanonicalFileName(moduleSpecifier.substring(0, parts.topLevelNodeModulesIndex)); - if (!(startsWith(canonicalSourceDirectory, pathToTopLevelNodeModules) || globalTypingsCacheLocation && startsWith(getCanonicalFileName(globalTypingsCacheLocation), pathToTopLevelNodeModules))) { - return void 0; -+ if (typeof process.versions.pnp === "undefined") { ++ if (!isPnpEnabled()) { + const globalTypingsCacheLocation = host.getGlobalTypingsCacheLocation && host.getGlobalTypingsCacheLocation(); + const pathToTopLevelNodeModules = getCanonicalFileName(moduleSpecifier.substring(0, parts.topLevelNodeModulesIndex)); + if (!(startsWith(canonicalSourceDirectory, pathToTopLevelNodeModules) || globalTypingsCacheLocation && startsWith(getCanonicalFileName(globalTypingsCacheLocation), pathToTopLevelNodeModules))) { @@ -247,7 +258,7 @@ semver exclusivity >=5.7.0-beta <5.7.1-rc function tryDirectoryWithPackageJson(packageRootIndex) { var _a, _b; const packageRootPath = path.substring(0, packageRootIndex); -@@ -45596,14 +45743,14 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa +@@ -45596,14 +45747,14 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa const importMode = overrideMode || getDefaultResolutionModeForFile(importingSourceFile, host, options); if (getResolvePackageJsonExports(options)) { const nodeModulesDirectoryName2 = packageRootPath.substring(parts.topLevelPackageNameIndex + 1); @@ -264,7 +275,7 @@ semver exclusivity >=5.7.0-beta <5.7.1-rc packageJsonContent.exports, conditions ) : void 0; -@@ -127555,6 +127702,11 @@ function createWatchProgram(host) { +@@ -127555,6 +127706,11 @@ function createWatchProgram(host) { if (configFileName) { configFileWatcher = watchFile2(configFileName, scheduleProgramReload, 2e3 /* High */, watchOptions, WatchType.ConfigFile); } @@ -276,7 +287,7 @@ semver exclusivity >=5.7.0-beta <5.7.1-rc const compilerHost = createCompilerHostFromProgramHost(host, () => compilerOptions, directoryStructureHost); setGetSourceFileAsHashVersioned(compilerHost); const getNewSourceFile = compilerHost.getSourceFile; -@@ -127616,6 +127768,10 @@ function createWatchProgram(host) { +@@ -127616,6 +127772,10 @@ function createWatchProgram(host) { configFileWatcher.close(); configFileWatcher = void 0; } @@ -287,7 +298,7 @@ semver exclusivity >=5.7.0-beta <5.7.1-rc extendedConfigCache == null ? void 0 : extendedConfigCache.clear(); extendedConfigCache = void 0; if (sharedExtendedConfigFileWatchers) { -@@ -127651,7 +127807,7 @@ function createWatchProgram(host) { +@@ -127651,7 +127811,7 @@ function createWatchProgram(host) { function getCurrentProgram() { return builderProgram && builderProgram.getProgramOrUndefined(); } @@ -296,7 +307,7 @@ semver exclusivity >=5.7.0-beta <5.7.1-rc writeLog(`Synchronizing program`); Debug.assert(compilerOptions); Debug.assert(rootFileNames); -@@ -127663,7 +127819,7 @@ function createWatchProgram(host) { +@@ -127663,7 +127823,7 @@ function createWatchProgram(host) { resolutionCache.onChangesAffectModuleResolution(); } } @@ -305,7 +316,7 @@ semver exclusivity >=5.7.0-beta <5.7.1-rc const { originalReadFile, originalFileExists, -@@ -127881,6 +128037,12 @@ function createWatchProgram(host) { +@@ -127881,6 +128041,12 @@ function createWatchProgram(host) { updateLevel = 2 /* Full */; scheduleProgramUpdate(); } @@ -318,7 +329,7 @@ semver exclusivity >=5.7.0-beta <5.7.1-rc function updateProgramWithWatchStatus() { timerToUpdateProgram = void 0; reportFileChangeDetectedOnCreateProgram = true; -@@ -127894,6 +128056,12 @@ function createWatchProgram(host) { +@@ -127894,6 +128060,12 @@ function createWatchProgram(host) { case 2 /* Full */: reloadConfigFile(); break; @@ -332,17 +343,21 @@ semver exclusivity >=5.7.0-beta <5.7.1-rc synchronizeProgram(); break; diff --git a/lib/_tsserver.js b/lib/_tsserver.js -index 473b8d224..ee2581d3d 100644 +index 473b..fed2 100644 semver exclusivity >=5.7.0-beta <5.7.1-rc --- a/lib/_tsserver.js +++ b/lib/_tsserver.js -@@ -53,6 +53,25 @@ var import_net = __toESM(require("net")); +@@ -53,6 +53,29 @@ var import_net = __toESM(require("net")); var import_os = __toESM(require("os")); var import_readline = __toESM(require("readline")); +// src/compiler/pnpapi.ts ++function isPnpEnabled() { ++ var _a; ++ return typeof process !== "undefined" && typeof ((_a = process == null ? void 0 : process.versions) == null ? void 0 : _a.pnp) !== "undefined"; ++} +function getPnpApi(path) { -+ if (typeof process.versions.pnp === "undefined") { ++ if (!isPnpEnabled()) { + return; + } + const { findPnpApi } = require("module"); @@ -362,7 +377,7 @@ semver exclusivity >=5.7.0-beta <5.7.1-rc // src/tsserver/common.ts function getLogLevel(level) { if (level) { -@@ -243,6 +262,10 @@ function initializeNodeSystem() { +@@ -243,6 +266,10 @@ function initializeNodeSystem() { } try { const args = [(0, typescript_exports.combinePaths)(libDirectory, "watchGuard.js"), path]; @@ -373,7 +388,7 @@ semver exclusivity >=5.7.0-beta <5.7.1-rc if (logger.hasLevel(typescript_exports.server.LogLevel.verbose)) { logger.info(`Starting ${process.execPath} with args:${typescript_exports.server.stringifyIndented(args)}`); } -@@ -419,6 +442,10 @@ function startNodeSession(options, logger, cancellationToken) { +@@ -419,6 +446,10 @@ function startNodeSession(options, logger, cancellationToken) { break; } } @@ -385,7 +400,7 @@ semver exclusivity >=5.7.0-beta <5.7.1-rc this.installer = import_child_process.default.fork(typingsInstaller, args, { execArgv }); this.installer.on("message", (m) => this.handleMessage(m)); diff --git a/lib/typescript.d.ts b/lib/typescript.d.ts -index 0ed1d1e83..0e64ca342 100644 +index 0ed1..0e64 100644 semver exclusivity >=5.7.0-beta <5.7.1-rc --- a/lib/typescript.d.ts +++ b/lib/typescript.d.ts @@ -415,27 +430,21 @@ semver exclusivity >=5.7.0-beta <5.7.1-rc function findConfigFile(searchPath: string, fileExists: (fileName: string) => boolean, configName?: string): string | undefined; function resolveTripleslashReference(moduleName: string, containingFile: string): string; diff --git a/lib/typescript.js b/lib/typescript.js -index 3e8556611..aafcef8c2 100644 +index 3e85..ee76 100644 semver exclusivity >=5.7.0-beta <5.7.1-rc --- a/lib/typescript.js +++ b/lib/typescript.js -@@ -8469,6 +8469,9 @@ var sys = (() => { - } - } - function isFileSystemCaseSensitive() { -+ if (typeof process.versions.pnp !== `undefined`) { -+ return true; -+ } - if (platform === "win32" || platform === "win64") { - return false; - } -@@ -43579,6 +43582,69 @@ function getDefaultValueForOption(option) { - } - } +@@ -7283,6 +7283,29 @@ var JSDocParsingMode = /* @__PURE__ */ ((JSDocParsingMode6) => { + return JSDocParsingMode6; + })(JSDocParsingMode || {}); +// src/compiler/pnpapi.ts ++function isPnpEnabled() { ++ var _a; ++ return typeof process !== "undefined" && typeof ((_a = process == null ? void 0 : process.versions) == null ? void 0 : _a.pnp) !== "undefined"; ++} +function getPnpApi(path) { -+ if (typeof process.versions.pnp === "undefined") { ++ if (!isPnpEnabled()) { + return; + } + const { findPnpApi } = require("module"); @@ -452,6 +461,23 @@ semver exclusivity >=5.7.0-beta <5.7.1-rc + ); +} + + // src/compiler/sys.ts + function generateDjb2Hash(data) { + let acc = 5381; +@@ -8469,6 +8492,9 @@ var sys = (() => { + } + } + function isFileSystemCaseSensitive() { ++ if (isPnpEnabled()) { ++ return true; ++ } + if (platform === "win32" || platform === "win64") { + return false; + } +@@ -43579,6 +43605,50 @@ function getDefaultValueForOption(option) { + } + } + +// src/compiler/pnp.ts +function getPnpTypeRoots(currentDirectory) { + const pnpApi = getPnpApi(currentDirectory); @@ -499,7 +525,7 @@ semver exclusivity >=5.7.0-beta <5.7.1-rc // src/compiler/moduleNameResolver.ts function trace(host, message, ...args) { host.trace(formatMessage(message, ...args)); -@@ -43804,7 +43870,7 @@ function getEffectiveTypeRoots(options, host) { +@@ -43804,7 +43874,7 @@ function getEffectiveTypeRoots(options, host) { return getDefaultTypeRoots(currentDirectory); } } @@ -508,7 +534,7 @@ semver exclusivity >=5.7.0-beta <5.7.1-rc let typeRoots; forEachAncestorDirectory(normalizePath(currentDirectory), (directory) => { const atTypes = combinePaths(directory, nodeModulesAtTypes); -@@ -43817,6 +43883,15 @@ function arePathsEqual(path1, path2, host) { +@@ -43817,6 +43887,15 @@ function arePathsEqual(path1, path2, host) { const useCaseSensitiveFileNames2 = typeof host.useCaseSensitiveFileNames === "function" ? host.useCaseSensitiveFileNames() : host.useCaseSensitiveFileNames; return comparePaths(path1, path2, !useCaseSensitiveFileNames2) === 0 /* EqualTo */; } @@ -524,7 +550,7 @@ semver exclusivity >=5.7.0-beta <5.7.1-rc function getOriginalAndResolvedFileName(fileName, host, traceEnabled) { const resolvedFileName = realPath(fileName, host, traceEnabled); const pathsAreEqual = arePathsEqual(fileName, resolvedFileName, host); -@@ -44066,6 +44141,21 @@ function getConditions(options, resolutionMode) { +@@ -44066,6 +44145,21 @@ function getConditions(options, resolutionMode) { } function resolvePackageNameToPackageJson(packageName, containingDirectory, options, host, cache) { const moduleResolutionState = getTemporaryModuleResolutionState(cache == null ? void 0 : cache.getPackageJsonInfoCache(), host, options); @@ -546,7 +572,7 @@ semver exclusivity >=5.7.0-beta <5.7.1-rc return forEachAncestorDirectoryStoppingAtGlobalCache(host, containingDirectory, (ancestorDirectory) => { if (getBaseFileName(ancestorDirectory) !== "node_modules") { const nodeModulesFolder = combinePaths(ancestorDirectory, "node_modules"); -@@ -45850,6 +45940,14 @@ function loadModuleFromNearestNodeModulesDirectoryWorker(extensions, moduleName, +@@ -45850,6 +45944,14 @@ function loadModuleFromNearestNodeModulesDirectoryWorker(extensions, moduleName, return lookup(secondaryExtensions); } function lookup(extensions2) { @@ -561,7 +587,7 @@ semver exclusivity >=5.7.0-beta <5.7.1-rc return forEachAncestorDirectoryStoppingAtGlobalCache( state.host, normalizeSlashes(directory), -@@ -45898,11 +45996,40 @@ function loadModuleFromImmediateNodeModulesDirectory(extensions, moduleName, dir +@@ -45898,11 +46000,40 @@ function loadModuleFromImmediateNodeModulesDirectory(extensions, moduleName, dir return loadModuleFromSpecificNodeModulesDirectory(4 /* Declaration */, mangleScopedPackageNameWithTrace(moduleName, state), nodeModulesAtTypes2, nodeModulesAtTypesExists, state, cache, redirectedReference); } } @@ -603,7 +629,7 @@ semver exclusivity >=5.7.0-beta <5.7.1-rc let rootPackageInfo; let packageInfo = getPackageJsonInfo(candidate, !nodeModulesDirectoryExists, state); if (rest !== "" && packageInfo && (!(state.features & 8 /* Exports */) || !hasProperty(((_a = rootPackageInfo = getPackageJsonInfo(packageDirectory, !nodeModulesDirectoryExists, state)) == null ? void 0 : _a.contents.packageJsonContent) ?? emptyArray, "exports"))) { -@@ -46197,6 +46324,18 @@ function traceIfEnabled(state, diagnostic, ...args) { +@@ -46197,6 +46328,18 @@ function traceIfEnabled(state, diagnostic, ...args) { function useCaseSensitiveFileNames(state) { return !state.host.useCaseSensitiveFileNames ? true : typeof state.host.useCaseSensitiveFileNames === "boolean" ? state.host.useCaseSensitiveFileNames : state.host.useCaseSensitiveFileNames(); } @@ -622,7 +648,7 @@ semver exclusivity >=5.7.0-beta <5.7.1-rc // src/compiler/binder.ts var ModuleInstanceState = /* @__PURE__ */ ((ModuleInstanceState2) => { -@@ -49826,7 +49965,15 @@ function getAllModulePathsWorker(info, importedFileName, host, compilerOptions, +@@ -49826,7 +49969,15 @@ function getAllModulePathsWorker(info, importedFileName, host, compilerOptions, /*preferSymlinks*/ true, (path, isRedirect) => { @@ -639,7 +665,7 @@ semver exclusivity >=5.7.0-beta <5.7.1-rc allFileNames.set(path, { path: info.getCanonicalFileName(path), isRedirect, isInNodeModules }); importedFileFromNodeModules = importedFileFromNodeModules || isInNodeModules; } -@@ -50142,7 +50289,41 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa +@@ -50142,7 +50293,41 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa if (!host.fileExists || !host.readFile) { return void 0; } @@ -682,7 +708,7 @@ semver exclusivity >=5.7.0-beta <5.7.1-rc if (!parts) { return void 0; } -@@ -50179,14 +50360,16 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa +@@ -50179,14 +50364,16 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa if (isRedirect && !isPackageRootPath) { return void 0; } @@ -690,7 +716,7 @@ semver exclusivity >=5.7.0-beta <5.7.1-rc - const pathToTopLevelNodeModules = getCanonicalFileName(moduleSpecifier.substring(0, parts.topLevelNodeModulesIndex)); - if (!(startsWith(canonicalSourceDirectory, pathToTopLevelNodeModules) || globalTypingsCacheLocation && startsWith(getCanonicalFileName(globalTypingsCacheLocation), pathToTopLevelNodeModules))) { - return void 0; -+ if (typeof process.versions.pnp === "undefined") { ++ if (!isPnpEnabled()) { + const globalTypingsCacheLocation = host.getGlobalTypingsCacheLocation && host.getGlobalTypingsCacheLocation(); + const pathToTopLevelNodeModules = getCanonicalFileName(moduleSpecifier.substring(0, parts.topLevelNodeModulesIndex)); + if (!(startsWith(canonicalSourceDirectory, pathToTopLevelNodeModules) || globalTypingsCacheLocation && startsWith(getCanonicalFileName(globalTypingsCacheLocation), pathToTopLevelNodeModules))) { @@ -706,7 +732,7 @@ semver exclusivity >=5.7.0-beta <5.7.1-rc function tryDirectoryWithPackageJson(packageRootIndex) { var _a, _b; const packageRootPath = path.substring(0, packageRootIndex); -@@ -50199,14 +50382,14 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa +@@ -50199,14 +50386,14 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa const importMode = overrideMode || getDefaultResolutionModeForFile(importingSourceFile, host, options); if (getResolvePackageJsonExports(options)) { const nodeModulesDirectoryName2 = packageRootPath.substring(parts.topLevelPackageNameIndex + 1); @@ -723,7 +749,7 @@ semver exclusivity >=5.7.0-beta <5.7.1-rc packageJsonContent.exports, conditions ) : void 0; -@@ -124275,6 +124458,7 @@ var ProgramUpdateLevel = /* @__PURE__ */ ((ProgramUpdateLevel2) => { +@@ -124275,6 +124462,7 @@ var ProgramUpdateLevel = /* @__PURE__ */ ((ProgramUpdateLevel2) => { ProgramUpdateLevel2[ProgramUpdateLevel2["Update"] = 0] = "Update"; ProgramUpdateLevel2[ProgramUpdateLevel2["RootNamesAndUpdate"] = 1] = "RootNamesAndUpdate"; ProgramUpdateLevel2[ProgramUpdateLevel2["Full"] = 2] = "Full"; @@ -731,7 +757,7 @@ semver exclusivity >=5.7.0-beta <5.7.1-rc return ProgramUpdateLevel2; })(ProgramUpdateLevel || {}); function updateSharedExtendedConfigFileWatcher(projectPath, options, extendedConfigFilesMap, createExtendedConfigFileWatch, toPath3) { -@@ -132483,6 +132667,11 @@ function createWatchProgram(host) { +@@ -132483,6 +132671,11 @@ function createWatchProgram(host) { if (configFileName) { configFileWatcher = watchFile2(configFileName, scheduleProgramReload, 2e3 /* High */, watchOptions, WatchType.ConfigFile); } @@ -743,7 +769,7 @@ semver exclusivity >=5.7.0-beta <5.7.1-rc const compilerHost = createCompilerHostFromProgramHost(host, () => compilerOptions, directoryStructureHost); setGetSourceFileAsHashVersioned(compilerHost); const getNewSourceFile = compilerHost.getSourceFile; -@@ -132544,6 +132733,10 @@ function createWatchProgram(host) { +@@ -132544,6 +132737,10 @@ function createWatchProgram(host) { configFileWatcher.close(); configFileWatcher = void 0; } @@ -754,7 +780,7 @@ semver exclusivity >=5.7.0-beta <5.7.1-rc extendedConfigCache == null ? void 0 : extendedConfigCache.clear(); extendedConfigCache = void 0; if (sharedExtendedConfigFileWatchers) { -@@ -132579,7 +132772,7 @@ function createWatchProgram(host) { +@@ -132579,7 +132776,7 @@ function createWatchProgram(host) { function getCurrentProgram() { return builderProgram && builderProgram.getProgramOrUndefined(); } @@ -763,7 +789,7 @@ semver exclusivity >=5.7.0-beta <5.7.1-rc writeLog(`Synchronizing program`); Debug.assert(compilerOptions); Debug.assert(rootFileNames); -@@ -132591,7 +132784,7 @@ function createWatchProgram(host) { +@@ -132591,7 +132788,7 @@ function createWatchProgram(host) { resolutionCache.onChangesAffectModuleResolution(); } } @@ -772,7 +798,7 @@ semver exclusivity >=5.7.0-beta <5.7.1-rc const { originalReadFile, originalFileExists, -@@ -132809,6 +133002,12 @@ function createWatchProgram(host) { +@@ -132809,6 +133006,12 @@ function createWatchProgram(host) { updateLevel = 2 /* Full */; scheduleProgramUpdate(); } @@ -785,7 +811,7 @@ semver exclusivity >=5.7.0-beta <5.7.1-rc function updateProgramWithWatchStatus() { timerToUpdateProgram = void 0; reportFileChangeDetectedOnCreateProgram = true; -@@ -132822,6 +133021,12 @@ function createWatchProgram(host) { +@@ -132822,6 +133025,12 @@ function createWatchProgram(host) { case 2 /* Full */: reloadConfigFile(); break; @@ -798,7 +824,7 @@ semver exclusivity >=5.7.0-beta <5.7.1-rc default: synchronizeProgram(); break; -@@ -140244,7 +140449,14 @@ function createPackageJsonImportFilter(fromFile, preferences, host) { +@@ -140244,7 +140453,14 @@ function createPackageJsonImportFilter(fromFile, preferences, host) { return false; } function getNodeModulesPackageNameFromFileName(importedFileName, moduleSpecifierResolutionHost) { @@ -814,7 +840,7 @@ semver exclusivity >=5.7.0-beta <5.7.1-rc return void 0; } const specifier = ts_moduleSpecifiers_exports.getNodeModulesPackageName( -@@ -140811,6 +141023,9 @@ function fileContainsPackageImport(sourceFile, packageName) { +@@ -140811,6 +141027,9 @@ function fileContainsPackageImport(sourceFile, packageName) { return sourceFile.imports && sourceFile.imports.some((i) => i.text === packageName || i.text.startsWith(packageName + "/")); } function isImportablePath(fromPath, toPath3, getCanonicalFileName, globalCachePath, host) { @@ -824,7 +850,7 @@ semver exclusivity >=5.7.0-beta <5.7.1-rc const toNodeModules = forEachAncestorDirectoryStoppingAtGlobalCache( host, toPath3, -@@ -169863,7 +170078,34 @@ function getCompletionEntriesForNonRelativeModules(fragment, scriptPath, mode, p +@@ -169863,7 +170082,34 @@ function getCompletionEntriesForNonRelativeModules(fragment, scriptPath, mode, p ); } }; @@ -860,7 +886,7 @@ semver exclusivity >=5.7.0-beta <5.7.1-rc const nodeModulesDirectoryLookup = ancestorLookup; ancestorLookup = (ancestor) => { const components = getPathComponents(fragment); -@@ -169882,35 +170124,53 @@ function getCompletionEntriesForNonRelativeModules(fragment, scriptPath, mode, p +@@ -169882,35 +170128,53 @@ function getCompletionEntriesForNonRelativeModules(fragment, scriptPath, mode, p const packageDirectory = combinePaths(ancestor, "node_modules", packagePath); const packageFile = combinePaths(packageDirectory, "package.json"); if (tryFileExists(host, packageFile)) { @@ -934,7 +960,7 @@ semver exclusivity >=5.7.0-beta <5.7.1-rc } } return arrayFrom(result.values()); -@@ -170044,9 +170304,15 @@ function getCompletionEntriesFromTypings(host, program, scriptPath, fragmentDire +@@ -170044,9 +170308,15 @@ function getCompletionEntriesFromTypings(host, program, scriptPath, fragmentDire for (const root of typeRoots) { getCompletionEntriesFromDirectories(root); } @@ -953,11 +979,11 @@ semver exclusivity >=5.7.0-beta <5.7.1-rc } return result; function getCompletionEntriesFromDirectories(directory) { -@@ -187340,6 +187606,29 @@ var ConfiguredProject2 = class extends Project2 { +@@ -187340,6 +187610,29 @@ var ConfiguredProject2 = class extends Project2 { return this.projectReferences; } updateReferences(refs) { -+ if (typeof process.versions.pnp !== `undefined`) { ++ if (isPnpEnabled()) { + const basePath = this.getCurrentDirectory(); + const getPnpPath = (path) => { + try { @@ -983,7 +1009,7 @@ semver exclusivity >=5.7.0-beta <5.7.1-rc this.projectReferences = refs; this.potentialProjectReferences = void 0; } -@@ -188145,6 +188434,7 @@ var _ProjectService = class _ProjectService { +@@ -188145,6 +188438,7 @@ var _ProjectService = class _ProjectService { getDetailWatchInfo ); this.canUseWatchEvents = getCanUseWatchEvents(this, opts.canUseWatchEvents); @@ -991,7 +1017,7 @@ semver exclusivity >=5.7.0-beta <5.7.1-rc (_a = opts.incrementalVerifier) == null ? void 0 : _a.call(opts, this); } toPath(fileName) { -@@ -190099,7 +190389,7 @@ Dynamic files must always be opened with service's current directory or service +@@ -190099,7 +190393,7 @@ Dynamic files must always be opened with service's current directory or service this.performanceEventHandler = performanceEventHandler; } setHostConfiguration(args) { @@ -1000,7 +1026,7 @@ semver exclusivity >=5.7.0-beta <5.7.1-rc if (args.file) { const info = this.getScriptInfoForNormalizedPath(toNormalizedPath(args.file)); if (info) { -@@ -190148,6 +190438,8 @@ Dynamic files must always be opened with service's current directory or service +@@ -190148,6 +190442,8 @@ Dynamic files must always be opened with service's current directory or service this.hostConfiguration.watchOptions = substitution; this.hostConfiguration.beforeSubstitution = substitution === watchOptions ? void 0 : watchOptions; this.logger.info(`Host watch options changed to ${JSON.stringify(this.hostConfiguration.watchOptions)}, it will be take effect for next watches.`); @@ -1009,7 +1035,7 @@ semver exclusivity >=5.7.0-beta <5.7.1-rc } } } -@@ -191343,6 +191635,28 @@ Dynamic files must always be opened with service's current directory or service +@@ -191343,6 +191639,28 @@ Dynamic files must always be opened with service's current directory or service } ); } diff --git a/packages/plugin-compat/extra/typescript/patch-14d8ce3d823cd5772f690ee6089998f1.diff b/packages/plugin-compat/extra/typescript/patches/patch-8bd6f88e66216e476448c6a449b8824f.diff similarity index 91% rename from packages/plugin-compat/extra/typescript/patch-14d8ce3d823cd5772f690ee6089998f1.diff rename to packages/plugin-compat/extra/typescript/patches/patch-8bd6f88e66216e476448c6a449b8824f.diff index 958be0281e9d..860da1aca38f 100644 --- a/packages/plugin-compat/extra/typescript/patch-14d8ce3d823cd5772f690ee6089998f1.diff +++ b/packages/plugin-compat/extra/typescript/patches/patch-8bd6f88e66216e476448c6a449b8824f.diff @@ -1,25 +1,19 @@ diff --git a/lib/tsc.js b/lib/tsc.js -index 49a42a27b..0625b052d 100644 +index 49a4..0086 100644 semver exclusivity >=5.4.1-rc <5.5.0-beta --- a/lib/tsc.js +++ b/lib/tsc.js -@@ -5063,6 +5063,9 @@ var sys = (() => { - return Buffer.from && Buffer.from !== Int8Array.from ? Buffer.from(input, encoding) : new Buffer(input, encoding); - } - function isFileSystemCaseSensitive() { -+ if (typeof process.versions.pnp !== `undefined`) { -+ return true; -+ } - if (platform === "win32" || platform === "win64") { - return false; - } -@@ -37160,6 +37163,46 @@ function getDefaultValueForOption(option) { +@@ -3932,6 +3932,29 @@ var commentPragmas = { } - } + }; -+// src/compiler/pnp.ts ++// src/compiler/pnpapi.ts ++function isPnpEnabled() { ++ var _a; ++ return typeof process !== "undefined" && typeof ((_a = process == null ? void 0 : process.versions) == null ? void 0 : _a.pnp) !== "undefined"; ++} +function getPnpApi(path) { -+ if (typeof process.versions.pnp === "undefined") { ++ if (!isPnpEnabled()) { + return; + } + const { findPnpApi } = require("module"); @@ -35,6 +29,25 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta + null + ); +} ++ + // src/compiler/sys.ts + function generateDjb2Hash(data) { + let acc = 5381; +@@ -5063,6 +5086,9 @@ var sys = (() => { + return Buffer.from && Buffer.from !== Int8Array.from ? Buffer.from(input, encoding) : new Buffer(input, encoding); + } + function isFileSystemCaseSensitive() { ++ if (isPnpEnabled()) { ++ return true; ++ } + if (platform === "win32" || platform === "win64") { + return false; + } +@@ -37160,6 +37186,29 @@ function getDefaultValueForOption(option) { + } + } + ++// src/compiler/pnp.ts +function getPnpTypeRoots(currentDirectory) { + const pnpApi = getPnpApi(currentDirectory); + if (!pnpApi) { @@ -60,7 +73,7 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta // src/compiler/moduleNameResolver.ts function trace(host, message, ...args) { host.trace(formatMessage(message, ...args)); -@@ -37387,7 +37430,7 @@ function getEffectiveTypeRoots(options, host) { +@@ -37387,7 +37436,7 @@ function getEffectiveTypeRoots(options, host) { return getDefaultTypeRoots(currentDirectory); } } @@ -69,7 +82,7 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta let typeRoots; forEachAncestorDirectory(normalizePath(currentDirectory), (directory) => { const atTypes = combinePaths(directory, nodeModulesAtTypes); -@@ -37400,6 +37443,15 @@ function arePathsEqual(path1, path2, host) { +@@ -37400,6 +37449,15 @@ function arePathsEqual(path1, path2, host) { const useCaseSensitiveFileNames2 = typeof host.useCaseSensitiveFileNames === "function" ? host.useCaseSensitiveFileNames() : host.useCaseSensitiveFileNames; return comparePaths(path1, path2, !useCaseSensitiveFileNames2) === 0 /* EqualTo */; } @@ -85,7 +98,7 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta function getOriginalAndResolvedFileName(fileName, host, traceEnabled) { const resolvedFileName = realPath(fileName, host, traceEnabled); const pathsAreEqual = arePathsEqual(fileName, resolvedFileName, host); -@@ -39288,7 +39340,15 @@ function loadModuleFromNearestNodeModulesDirectoryWorker(extensions, moduleName, +@@ -39288,7 +39346,15 @@ function loadModuleFromNearestNodeModulesDirectoryWorker(extensions, moduleName, return lookup(secondaryExtensions); } function lookup(extensions2) { @@ -102,7 +115,7 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta if (getBaseFileName(ancestorDirectory) !== "node_modules") { const resolutionFromCache = tryFindNonRelativeModuleNameInCache(cache, moduleName, mode, ancestorDirectory, redirectedReference, state); if (resolutionFromCache) { -@@ -39323,11 +39383,40 @@ function loadModuleFromImmediateNodeModulesDirectory(extensions, moduleName, dir +@@ -39323,11 +39389,40 @@ function loadModuleFromImmediateNodeModulesDirectory(extensions, moduleName, dir return loadModuleFromSpecificNodeModulesDirectory(4 /* Declaration */, mangleScopedPackageNameWithTrace(moduleName, state), nodeModulesAtTypes2, nodeModulesAtTypesExists, state, cache, redirectedReference); } } @@ -144,7 +157,7 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta let rootPackageInfo; let packageInfo = getPackageJsonInfo(candidate, !nodeModulesDirectoryExists, state); if (rest !== "" && packageInfo && (!(state.features & 8 /* Exports */) || !hasProperty(((_a = rootPackageInfo = getPackageJsonInfo(packageDirectory, !nodeModulesDirectoryExists, state)) == null ? void 0 : _a.contents.packageJsonContent) ?? emptyArray, "exports"))) { -@@ -39632,6 +39721,18 @@ function traceIfEnabled(state, diagnostic, ...args) { +@@ -39632,6 +39727,18 @@ function traceIfEnabled(state, diagnostic, ...args) { function useCaseSensitiveFileNames(state) { return !state.host.useCaseSensitiveFileNames ? true : typeof state.host.useCaseSensitiveFileNames === "boolean" ? state.host.useCaseSensitiveFileNames : state.host.useCaseSensitiveFileNames(); } @@ -163,7 +176,7 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta // src/compiler/binder.ts function getModuleInstanceState(node, visited) { -@@ -42954,7 +43055,15 @@ function getAllModulePathsWorker(info, importedFileName, host) { +@@ -42954,7 +43061,15 @@ function getAllModulePathsWorker(info, importedFileName, host) { /*preferSymlinks*/ true, (path, isRedirect) => { @@ -180,7 +193,7 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta allFileNames.set(path, { path: info.getCanonicalFileName(path), isRedirect, isInNodeModules }); importedFileFromNodeModules = importedFileFromNodeModules || isInNodeModules; } -@@ -43253,7 +43362,41 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa +@@ -43253,7 +43368,41 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa if (!host.fileExists || !host.readFile) { return void 0; } @@ -223,7 +236,7 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta if (!parts) { return void 0; } -@@ -43291,14 +43434,16 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa +@@ -43291,14 +43440,16 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa if (isRedirect && !isPackageRootPath) { return void 0; } @@ -231,7 +244,7 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta - const pathToTopLevelNodeModules = getCanonicalFileName(moduleSpecifier.substring(0, parts.topLevelNodeModulesIndex)); - if (!(startsWith(canonicalSourceDirectory, pathToTopLevelNodeModules) || globalTypingsCacheLocation && startsWith(getCanonicalFileName(globalTypingsCacheLocation), pathToTopLevelNodeModules))) { - return void 0; -+ if (typeof process.versions.pnp === "undefined") { ++ if (!isPnpEnabled()) { + const globalTypingsCacheLocation = host.getGlobalTypingsCacheLocation && host.getGlobalTypingsCacheLocation(); + const pathToTopLevelNodeModules = getCanonicalFileName(moduleSpecifier.substring(0, parts.topLevelNodeModulesIndex)); + if (!(startsWith(canonicalSourceDirectory, pathToTopLevelNodeModules) || globalTypingsCacheLocation && startsWith(getCanonicalFileName(globalTypingsCacheLocation), pathToTopLevelNodeModules))) { @@ -247,7 +260,7 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta function tryDirectoryWithPackageJson(packageRootIndex) { var _a, _b; const packageRootPath = path.substring(0, packageRootIndex); -@@ -43311,9 +43456,9 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa +@@ -43311,9 +43462,9 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa const importMode = overrideMode || importingSourceFile.impliedNodeFormat; if (getResolvePackageJsonExports(options)) { const nodeModulesDirectoryName2 = packageRootPath.substring(parts.topLevelPackageNameIndex + 1); @@ -259,7 +272,7 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta if (fromExports) { return { ...fromExports, verbatimFromExports: true }; } -@@ -124303,6 +124448,11 @@ function createWatchProgram(host) { +@@ -124303,6 +124454,11 @@ function createWatchProgram(host) { if (configFileName) { configFileWatcher = watchFile2(configFileName, scheduleProgramReload, 2e3 /* High */, watchOptions, WatchType.ConfigFile); } @@ -271,7 +284,7 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta const compilerHost = createCompilerHostFromProgramHost(host, () => compilerOptions, directoryStructureHost); setGetSourceFileAsHashVersioned(compilerHost); const getNewSourceFile = compilerHost.getSourceFile; -@@ -124366,6 +124516,10 @@ function createWatchProgram(host) { +@@ -124366,6 +124522,10 @@ function createWatchProgram(host) { configFileWatcher.close(); configFileWatcher = void 0; } @@ -282,7 +295,7 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta extendedConfigCache == null ? void 0 : extendedConfigCache.clear(); extendedConfigCache = void 0; if (sharedExtendedConfigFileWatchers) { -@@ -124401,7 +124555,7 @@ function createWatchProgram(host) { +@@ -124401,7 +124561,7 @@ function createWatchProgram(host) { function getCurrentProgram() { return builderProgram && builderProgram.getProgramOrUndefined(); } @@ -291,7 +304,7 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta writeLog(`Synchronizing program`); Debug.assert(compilerOptions); Debug.assert(rootFileNames); -@@ -124413,7 +124567,7 @@ function createWatchProgram(host) { +@@ -124413,7 +124573,7 @@ function createWatchProgram(host) { resolutionCache.onChangesAffectModuleResolution(); } } @@ -300,7 +313,7 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta const { originalReadFile, originalFileExists, -@@ -124625,13 +124779,19 @@ function createWatchProgram(host) { +@@ -124625,13 +124785,19 @@ function createWatchProgram(host) { updateLevel = 2 /* Full */; scheduleProgramUpdate(); } @@ -321,7 +334,7 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta switch (updateLevel) { case 1 /* RootNamesAndUpdate */: (_a = perfLogger) == null ? void 0 : _a.logStartUpdateProgram("PartialConfigReload"); -@@ -124641,12 +124801,19 @@ function createWatchProgram(host) { +@@ -124641,12 +124807,19 @@ function createWatchProgram(host) { (_b = perfLogger) == null ? void 0 : _b.logStartUpdateProgram("FullConfigReload"); reloadConfigFile(); break; @@ -344,27 +357,21 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta } function reloadFileNamesFromConfigFile() { diff --git a/lib/tsserver.js b/lib/tsserver.js -index 707a6387a..491cb8fa7 100644 +index 707a..b3cf 100644 semver exclusivity >=5.4.1-rc <5.5.0-beta --- a/lib/tsserver.js +++ b/lib/tsserver.js -@@ -8611,6 +8611,9 @@ var sys = (() => { - return Buffer2.from && Buffer2.from !== Int8Array.from ? Buffer2.from(input, encoding) : new Buffer2(input, encoding); - } - function isFileSystemCaseSensitive() { -+ if (typeof process.versions.pnp !== `undefined`) { -+ return true; -+ } - if (platform === "win32" || platform === "win64") { - return false; - } -@@ -41668,6 +41671,67 @@ function getDefaultValueForOption(option) { - } - } +@@ -7464,6 +7464,29 @@ var JSDocParsingMode = /* @__PURE__ */ ((JSDocParsingMode6) => { + return JSDocParsingMode6; + })(JSDocParsingMode || {}); -+// src/compiler/pnp.ts ++// src/compiler/pnpapi.ts ++function isPnpEnabled() { ++ var _a; ++ return typeof process !== "undefined" && typeof ((_a = process == null ? void 0 : process.versions) == null ? void 0 : _a.pnp) !== "undefined"; ++} +function getPnpApi(path) { -+ if (typeof process.versions.pnp === "undefined") { ++ if (!isPnpEnabled()) { + return; + } + const { findPnpApi } = require("module"); @@ -380,6 +387,25 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta + null + ); +} ++ + // src/compiler/sys.ts + function generateDjb2Hash(data) { + let acc = 5381; +@@ -8611,6 +8634,9 @@ var sys = (() => { + return Buffer2.from && Buffer2.from !== Int8Array.from ? Buffer2.from(input, encoding) : new Buffer2(input, encoding); + } + function isFileSystemCaseSensitive() { ++ if (isPnpEnabled()) { ++ return true; ++ } + if (platform === "win32" || platform === "win64") { + return false; + } +@@ -41668,6 +41694,50 @@ function getDefaultValueForOption(option) { + } + } + ++// src/compiler/pnp.ts +function getPnpTypeRoots(currentDirectory) { + const pnpApi = getPnpApi(currentDirectory); + if (!pnpApi) { @@ -426,7 +452,7 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta // src/compiler/moduleNameResolver.ts function trace(host, message, ...args) { host.trace(formatMessage(message, ...args)); -@@ -41907,7 +41971,7 @@ function getEffectiveTypeRoots(options, host) { +@@ -41907,7 +41977,7 @@ function getEffectiveTypeRoots(options, host) { return getDefaultTypeRoots(currentDirectory); } } @@ -435,7 +461,7 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta let typeRoots; forEachAncestorDirectory(normalizePath(currentDirectory), (directory) => { const atTypes = combinePaths(directory, nodeModulesAtTypes); -@@ -41920,6 +41984,15 @@ function arePathsEqual(path1, path2, host) { +@@ -41920,6 +41990,15 @@ function arePathsEqual(path1, path2, host) { const useCaseSensitiveFileNames2 = typeof host.useCaseSensitiveFileNames === "function" ? host.useCaseSensitiveFileNames() : host.useCaseSensitiveFileNames; return comparePaths(path1, path2, !useCaseSensitiveFileNames2) === 0 /* EqualTo */; } @@ -451,7 +477,7 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta function getOriginalAndResolvedFileName(fileName, host, traceEnabled) { const resolvedFileName = realPath(fileName, host, traceEnabled); const pathsAreEqual = arePathsEqual(fileName, resolvedFileName, host); -@@ -42172,6 +42245,21 @@ function getConditions(options, resolutionMode) { +@@ -42172,6 +42251,21 @@ function getConditions(options, resolutionMode) { } function resolvePackageNameToPackageJson(packageName, containingDirectory, options, host, cache) { const moduleResolutionState = getTemporaryModuleResolutionState(cache == null ? void 0 : cache.getPackageJsonInfoCache(), host, options); @@ -473,7 +499,7 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta return forEachAncestorDirectory(containingDirectory, (ancestorDirectory) => { if (getBaseFileName(ancestorDirectory) !== "node_modules") { const nodeModulesFolder = combinePaths(ancestorDirectory, "node_modules"); -@@ -43960,7 +44048,15 @@ function loadModuleFromNearestNodeModulesDirectoryWorker(extensions, moduleName, +@@ -43960,7 +44054,15 @@ function loadModuleFromNearestNodeModulesDirectoryWorker(extensions, moduleName, return lookup(secondaryExtensions); } function lookup(extensions2) { @@ -490,7 +516,7 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta if (getBaseFileName(ancestorDirectory) !== "node_modules") { const resolutionFromCache = tryFindNonRelativeModuleNameInCache(cache, moduleName, mode, ancestorDirectory, redirectedReference, state); if (resolutionFromCache) { -@@ -43995,11 +44091,40 @@ function loadModuleFromImmediateNodeModulesDirectory(extensions, moduleName, dir +@@ -43995,11 +44097,40 @@ function loadModuleFromImmediateNodeModulesDirectory(extensions, moduleName, dir return loadModuleFromSpecificNodeModulesDirectory(4 /* Declaration */, mangleScopedPackageNameWithTrace(moduleName, state), nodeModulesAtTypes2, nodeModulesAtTypesExists, state, cache, redirectedReference); } } @@ -532,7 +558,7 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta let rootPackageInfo; let packageInfo = getPackageJsonInfo(candidate, !nodeModulesDirectoryExists, state); if (rest !== "" && packageInfo && (!(state.features & 8 /* Exports */) || !hasProperty(((_a = rootPackageInfo = getPackageJsonInfo(packageDirectory, !nodeModulesDirectoryExists, state)) == null ? void 0 : _a.contents.packageJsonContent) ?? emptyArray, "exports"))) { -@@ -44304,6 +44429,18 @@ function traceIfEnabled(state, diagnostic, ...args) { +@@ -44304,6 +44435,18 @@ function traceIfEnabled(state, diagnostic, ...args) { function useCaseSensitiveFileNames(state) { return !state.host.useCaseSensitiveFileNames ? true : typeof state.host.useCaseSensitiveFileNames === "boolean" ? state.host.useCaseSensitiveFileNames : state.host.useCaseSensitiveFileNames(); } @@ -551,7 +577,7 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta // src/compiler/binder.ts var ModuleInstanceState = /* @__PURE__ */ ((ModuleInstanceState2) => { -@@ -47698,7 +47835,15 @@ function getAllModulePathsWorker(info, importedFileName, host) { +@@ -47698,7 +47841,15 @@ function getAllModulePathsWorker(info, importedFileName, host) { /*preferSymlinks*/ true, (path, isRedirect) => { @@ -568,7 +594,7 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta allFileNames.set(path, { path: info.getCanonicalFileName(path), isRedirect, isInNodeModules }); importedFileFromNodeModules = importedFileFromNodeModules || isInNodeModules; } -@@ -47997,7 +48142,41 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa +@@ -47997,7 +48148,41 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa if (!host.fileExists || !host.readFile) { return void 0; } @@ -611,7 +637,7 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta if (!parts) { return void 0; } -@@ -48035,14 +48214,16 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa +@@ -48035,14 +48220,16 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa if (isRedirect && !isPackageRootPath) { return void 0; } @@ -619,7 +645,7 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta - const pathToTopLevelNodeModules = getCanonicalFileName(moduleSpecifier.substring(0, parts.topLevelNodeModulesIndex)); - if (!(startsWith(canonicalSourceDirectory, pathToTopLevelNodeModules) || globalTypingsCacheLocation && startsWith(getCanonicalFileName(globalTypingsCacheLocation), pathToTopLevelNodeModules))) { - return void 0; -+ if (typeof process.versions.pnp === "undefined") { ++ if (!isPnpEnabled()) { + const globalTypingsCacheLocation = host.getGlobalTypingsCacheLocation && host.getGlobalTypingsCacheLocation(); + const pathToTopLevelNodeModules = getCanonicalFileName(moduleSpecifier.substring(0, parts.topLevelNodeModulesIndex)); + if (!(startsWith(canonicalSourceDirectory, pathToTopLevelNodeModules) || globalTypingsCacheLocation && startsWith(getCanonicalFileName(globalTypingsCacheLocation), pathToTopLevelNodeModules))) { @@ -635,7 +661,7 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta function tryDirectoryWithPackageJson(packageRootIndex) { var _a, _b; const packageRootPath = path.substring(0, packageRootIndex); -@@ -48055,9 +48236,9 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa +@@ -48055,9 +48242,9 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa const importMode = overrideMode || importingSourceFile.impliedNodeFormat; if (getResolvePackageJsonExports(options)) { const nodeModulesDirectoryName2 = packageRootPath.substring(parts.topLevelPackageNameIndex + 1); @@ -647,7 +673,7 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta if (fromExports) { return { ...fromExports, verbatimFromExports: true }; } -@@ -121374,6 +121555,7 @@ var ProgramUpdateLevel = /* @__PURE__ */ ((ProgramUpdateLevel2) => { +@@ -121374,6 +121561,7 @@ var ProgramUpdateLevel = /* @__PURE__ */ ((ProgramUpdateLevel2) => { ProgramUpdateLevel2[ProgramUpdateLevel2["Update"] = 0] = "Update"; ProgramUpdateLevel2[ProgramUpdateLevel2["RootNamesAndUpdate"] = 1] = "RootNamesAndUpdate"; ProgramUpdateLevel2[ProgramUpdateLevel2["Full"] = 2] = "Full"; @@ -655,7 +681,7 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta return ProgramUpdateLevel2; })(ProgramUpdateLevel || {}); function updateSharedExtendedConfigFileWatcher(projectPath, options, extendedConfigFilesMap, createExtendedConfigFileWatch, toPath3) { -@@ -129332,6 +129514,11 @@ function createWatchProgram(host) { +@@ -129332,6 +129520,11 @@ function createWatchProgram(host) { if (configFileName) { configFileWatcher = watchFile2(configFileName, scheduleProgramReload, 2e3 /* High */, watchOptions, WatchType.ConfigFile); } @@ -667,7 +693,7 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta const compilerHost = createCompilerHostFromProgramHost(host, () => compilerOptions, directoryStructureHost); setGetSourceFileAsHashVersioned(compilerHost); const getNewSourceFile = compilerHost.getSourceFile; -@@ -129395,6 +129582,10 @@ function createWatchProgram(host) { +@@ -129395,6 +129588,10 @@ function createWatchProgram(host) { configFileWatcher.close(); configFileWatcher = void 0; } @@ -678,7 +704,7 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta extendedConfigCache == null ? void 0 : extendedConfigCache.clear(); extendedConfigCache = void 0; if (sharedExtendedConfigFileWatchers) { -@@ -129430,7 +129621,7 @@ function createWatchProgram(host) { +@@ -129430,7 +129627,7 @@ function createWatchProgram(host) { function getCurrentProgram() { return builderProgram && builderProgram.getProgramOrUndefined(); } @@ -687,7 +713,7 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta writeLog(`Synchronizing program`); Debug.assert(compilerOptions); Debug.assert(rootFileNames); -@@ -129442,7 +129633,7 @@ function createWatchProgram(host) { +@@ -129442,7 +129639,7 @@ function createWatchProgram(host) { resolutionCache.onChangesAffectModuleResolution(); } } @@ -696,7 +722,7 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta const { originalReadFile, originalFileExists, -@@ -129654,13 +129845,19 @@ function createWatchProgram(host) { +@@ -129654,13 +129851,19 @@ function createWatchProgram(host) { updateLevel = 2 /* Full */; scheduleProgramUpdate(); } @@ -717,7 +743,7 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta switch (updateLevel) { case 1 /* RootNamesAndUpdate */: (_a = perfLogger) == null ? void 0 : _a.logStartUpdateProgram("PartialConfigReload"); -@@ -129670,12 +129867,19 @@ function createWatchProgram(host) { +@@ -129670,12 +129873,19 @@ function createWatchProgram(host) { (_b = perfLogger) == null ? void 0 : _b.logStartUpdateProgram("FullConfigReload"); reloadConfigFile(); break; @@ -739,7 +765,7 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta return getCurrentBuilderProgram(); } function reloadFileNamesFromConfigFile() { -@@ -135185,7 +135389,14 @@ function createPackageJsonImportFilter(fromFile, preferences, host) { +@@ -135185,7 +135395,14 @@ function createPackageJsonImportFilter(fromFile, preferences, host) { return false; } function getNodeModulesPackageNameFromFileName(importedFileName, moduleSpecifierResolutionHost) { @@ -755,7 +781,7 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta return void 0; } const specifier = ts_moduleSpecifiers_exports.getNodeModulesPackageName( -@@ -135709,6 +135920,9 @@ function isImportableFile(program, from, to, preferences, packageJsonFilter, mod +@@ -135709,6 +135926,9 @@ function isImportableFile(program, from, to, preferences, packageJsonFilter, mod return hasImportablePath; } function isImportablePath(fromPath, toPath3, getCanonicalFileName, globalCachePath) { @@ -765,7 +791,7 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta const toNodeModules = forEachAncestorDirectory(toPath3, (ancestor) => getBaseFileName(ancestor) === "node_modules" ? ancestor : void 0); const toNodeModulesParent = toNodeModules && getDirectoryPath(getCanonicalFileName(toNodeModules)); return toNodeModulesParent === void 0 || startsWith(getCanonicalFileName(fromPath), toNodeModulesParent) || !!globalCachePath && startsWith(getCanonicalFileName(globalCachePath), toNodeModulesParent); -@@ -163300,7 +163514,33 @@ function getCompletionEntriesForNonRelativeModules(fragment, scriptPath, mode, c +@@ -163300,7 +163520,33 @@ function getCompletionEntriesForNonRelativeModules(fragment, scriptPath, mode, c ); } }; @@ -800,7 +826,7 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta const nodeModulesDirectoryLookup = ancestorLookup; ancestorLookup = (ancestor) => { const components = getPathComponents(fragment); -@@ -163319,34 +163559,52 @@ function getCompletionEntriesForNonRelativeModules(fragment, scriptPath, mode, c +@@ -163319,34 +163565,52 @@ function getCompletionEntriesForNonRelativeModules(fragment, scriptPath, mode, c const packageDirectory = combinePaths(ancestor, "node_modules", packagePath); const packageFile = combinePaths(packageDirectory, "package.json"); if (tryFileExists(host, packageFile)) { @@ -873,7 +899,7 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta } } return arrayFrom(result.values()); -@@ -163477,9 +163735,15 @@ function getCompletionEntriesFromTypings(host, options, scriptPath, fragmentDire +@@ -163477,9 +163741,15 @@ function getCompletionEntriesFromTypings(host, options, scriptPath, fragmentDire for (const root of typeRoots) { getCompletionEntriesFromDirectories(root); } @@ -892,11 +918,11 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta } return result; function getCompletionEntriesFromDirectories(directory) { -@@ -180609,6 +180873,29 @@ var ConfiguredProject2 = class extends Project3 { +@@ -180609,6 +180879,29 @@ var ConfiguredProject2 = class extends Project3 { return this.projectReferences; } updateReferences(refs) { -+ if (typeof process.versions.pnp !== `undefined`) { ++ if (isPnpEnabled()) { + const basePath = this.getCurrentDirectory(); + const getPnpPath = (path) => { + try { @@ -922,7 +948,7 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta this.projectReferences = refs; this.potentialProjectReferences = void 0; } -@@ -181281,6 +181568,7 @@ var _ProjectService = class _ProjectService { +@@ -181281,6 +181574,7 @@ var _ProjectService = class _ProjectService { log, getDetailWatchInfo ); @@ -930,7 +956,7 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta (_a = opts.incrementalVerifier) == null ? void 0 : _a.call(opts, this); } toPath(fileName) { -@@ -183115,7 +183403,7 @@ Dynamic files must always be opened with service's current directory or service +@@ -183115,7 +183409,7 @@ Dynamic files must always be opened with service's current directory or service this.performanceEventHandler = performanceEventHandler; } setHostConfiguration(args) { @@ -939,7 +965,7 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta if (args.file) { const info = this.getScriptInfoForNormalizedPath(toNormalizedPath(args.file)); if (info) { -@@ -183160,6 +183448,8 @@ Dynamic files must always be opened with service's current directory or service +@@ -183160,6 +183454,8 @@ Dynamic files must always be opened with service's current directory or service if (args.watchOptions) { this.hostConfiguration.watchOptions = (_a = convertWatchOptions(args.watchOptions)) == null ? void 0 : _a.watchOptions; this.logger.info(`Host watch options changed to ${JSON.stringify(this.hostConfiguration.watchOptions)}, it will be take effect for next watches.`); @@ -948,7 +974,7 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta } } } -@@ -184100,6 +184390,29 @@ Dynamic files must always be opened with service's current directory or service +@@ -184100,6 +184396,29 @@ Dynamic files must always be opened with service's current directory or service }); } /** @internal */ @@ -978,7 +1004,7 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta watchPackageJsonFile(file, path, project) { Debug.assert(project !== void 0); let result = (this.packageJsonFilesMap ?? (this.packageJsonFilesMap = /* @__PURE__ */ new Map())).get(path); -@@ -188887,6 +189200,10 @@ function initializeNodeSystem() { +@@ -188887,6 +189206,10 @@ function initializeNodeSystem() { } try { const args = [combinePaths(libDirectory, "watchGuard.js"), path]; @@ -989,7 +1015,7 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta if (logger.hasLevel(3 /* verbose */)) { logger.info(`Starting ${process.execPath} with args:${stringifyIndented(args)}`); } -@@ -189069,6 +189386,10 @@ function startNodeSession(options, logger, cancellationToken) { +@@ -189069,6 +189392,10 @@ function startNodeSession(options, logger, cancellationToken) { break; } } @@ -1001,7 +1027,7 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta this.installer = childProcess.fork(typingsInstaller, args, { execArgv }); this.installer.on("message", (m) => this.handleMessage(m)); diff --git a/lib/typescript.d.ts b/lib/typescript.d.ts -index a13173346..b0e8856e1 100644 +index a131..b0e8 100644 semver exclusivity >=5.4.1-rc <5.5.0-beta --- a/lib/typescript.d.ts +++ b/lib/typescript.d.ts @@ -1015,27 +1041,21 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta function findConfigFile(searchPath: string, fileExists: (fileName: string) => boolean, configName?: string): string | undefined; function resolveTripleslashReference(moduleName: string, containingFile: string): string; diff --git a/lib/typescript.js b/lib/typescript.js -index a75d7ba4b..fd5189269 100644 +index a75d..602d 100644 semver exclusivity >=5.4.1-rc <5.5.0-beta --- a/lib/typescript.js +++ b/lib/typescript.js -@@ -6370,6 +6370,9 @@ ${lanes.join("\n")} - return Buffer2.from && Buffer2.from !== Int8Array.from ? Buffer2.from(input, encoding) : new Buffer2(input, encoding); - } - function isFileSystemCaseSensitive() { -+ if (typeof process.versions.pnp !== `undefined`) { -+ return true; -+ } - if (platform === "win32" || platform === "win64") { - return false; - } -@@ -39516,6 +39519,73 @@ ${lanes.join("\n")} +@@ -5215,6 +5215,34 @@ ${lanes.join("\n")} } }); -+ // src/compiler/pnp.ts ++ // src/compiler/pnpapi.ts ++ function isPnpEnabled() { ++ var _a; ++ return typeof process !== "undefined" && typeof ((_a = process == null ? void 0 : process.versions) == null ? void 0 : _a.pnp) !== "undefined"; ++ } + function getPnpApi(path) { -+ if (typeof process.versions.pnp === "undefined") { ++ if (!isPnpEnabled()) { + return; + } + const { findPnpApi } = require("module"); @@ -1051,6 +1071,38 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta + null + ); + } ++ var init_pnpapi = __esm({ ++ "src/compiler/pnpapi.ts"() { ++ "use strict"; ++ } ++ }); ++ + // src/compiler/sys.ts + function generateDjb2Hash(data) { + let acc = 5381; +@@ -6119,6 +6147,7 @@ ${lanes.join("\n")} + "src/compiler/sys.ts"() { + "use strict"; + init_ts2(); ++ init_pnpapi(); + FileWatcherEventKind = /* @__PURE__ */ ((FileWatcherEventKind2) => { + FileWatcherEventKind2[FileWatcherEventKind2["Created"] = 0] = "Created"; + FileWatcherEventKind2[FileWatcherEventKind2["Changed"] = 1] = "Changed"; +@@ -6370,6 +6399,9 @@ ${lanes.join("\n")} + return Buffer2.from && Buffer2.from !== Int8Array.from ? Buffer2.from(input, encoding) : new Buffer2(input, encoding); + } + function isFileSystemCaseSensitive() { ++ if (isPnpEnabled()) { ++ return true; ++ } + if (platform === "win32" || platform === "win64") { + return false; + } +@@ -39516,6 +39548,57 @@ ${lanes.join("\n")} + } + }); + ++ // src/compiler/pnp.ts + function getPnpTypeRoots(currentDirectory) { + const pnpApi = getPnpApi(currentDirectory); + if (!pnpApi) { @@ -1097,13 +1149,14 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta + "src/compiler/pnp.ts"() { + "use strict"; + init_path(); ++ init_pnpapi(); + } + }); + // src/compiler/moduleNameResolver.ts function trace(host, message, ...args) { host.trace(formatMessage(message, ...args)); -@@ -39754,7 +39824,7 @@ ${lanes.join("\n")} +@@ -39754,7 +39837,7 @@ ${lanes.join("\n")} return getDefaultTypeRoots(currentDirectory); } } @@ -1112,7 +1165,7 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta let typeRoots; forEachAncestorDirectory(normalizePath(currentDirectory), (directory) => { const atTypes = combinePaths(directory, nodeModulesAtTypes); -@@ -39766,6 +39836,15 @@ ${lanes.join("\n")} +@@ -39766,6 +39849,15 @@ ${lanes.join("\n")} const useCaseSensitiveFileNames2 = typeof host.useCaseSensitiveFileNames === "function" ? host.useCaseSensitiveFileNames() : host.useCaseSensitiveFileNames; return comparePaths(path1, path2, !useCaseSensitiveFileNames2) === 0 /* EqualTo */; } @@ -1128,7 +1181,7 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta function getOriginalAndResolvedFileName(fileName, host, traceEnabled) { const resolvedFileName = realPath(fileName, host, traceEnabled); const pathsAreEqual = arePathsEqual(fileName, resolvedFileName, host); -@@ -40018,6 +40097,21 @@ ${lanes.join("\n")} +@@ -40018,6 +40110,21 @@ ${lanes.join("\n")} } function resolvePackageNameToPackageJson(packageName, containingDirectory, options, host, cache) { const moduleResolutionState = getTemporaryModuleResolutionState(cache == null ? void 0 : cache.getPackageJsonInfoCache(), host, options); @@ -1150,7 +1203,7 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta return forEachAncestorDirectory(containingDirectory, (ancestorDirectory) => { if (getBaseFileName(ancestorDirectory) !== "node_modules") { const nodeModulesFolder = combinePaths(ancestorDirectory, "node_modules"); -@@ -41792,7 +41886,15 @@ ${lanes.join("\n")} +@@ -41792,7 +41899,15 @@ ${lanes.join("\n")} return lookup(secondaryExtensions); } function lookup(extensions2) { @@ -1167,7 +1220,7 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta if (getBaseFileName(ancestorDirectory) !== "node_modules") { const resolutionFromCache = tryFindNonRelativeModuleNameInCache(cache, moduleName, mode, ancestorDirectory, redirectedReference, state); if (resolutionFromCache) { -@@ -41827,11 +41929,40 @@ ${lanes.join("\n")} +@@ -41827,11 +41942,40 @@ ${lanes.join("\n")} return loadModuleFromSpecificNodeModulesDirectory(4 /* Declaration */, mangleScopedPackageNameWithTrace(moduleName, state), nodeModulesAtTypes2, nodeModulesAtTypesExists, state, cache, redirectedReference); } } @@ -1209,7 +1262,7 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta let rootPackageInfo; let packageInfo = getPackageJsonInfo(candidate, !nodeModulesDirectoryExists, state); if (rest !== "" && packageInfo && (!(state.features & 8 /* Exports */) || !hasProperty(((_a = rootPackageInfo = getPackageJsonInfo(packageDirectory, !nodeModulesDirectoryExists, state)) == null ? void 0 : _a.contents.packageJsonContent) ?? emptyArray, "exports"))) { -@@ -42135,11 +42266,24 @@ ${lanes.join("\n")} +@@ -42135,11 +42279,25 @@ ${lanes.join("\n")} function useCaseSensitiveFileNames(state) { return !state.host.useCaseSensitiveFileNames ? true : typeof state.host.useCaseSensitiveFileNames === "boolean" ? state.host.useCaseSensitiveFileNames : state.host.useCaseSensitiveFileNames(); } @@ -1231,10 +1284,11 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta "use strict"; init_ts2(); + init_pnp(); ++ init_pnpapi(); nodeModulesAtTypes = combinePaths("node_modules", "@types"); NodeResolutionFeatures = /* @__PURE__ */ ((NodeResolutionFeatures2) => { NodeResolutionFeatures2[NodeResolutionFeatures2["None"] = 0] = "None"; -@@ -45542,7 +45686,15 @@ ${lanes.join("\n")} +@@ -45542,7 +45700,15 @@ ${lanes.join("\n")} /*preferSymlinks*/ true, (path, isRedirect) => { @@ -1251,7 +1305,7 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta allFileNames.set(path, { path: info.getCanonicalFileName(path), isRedirect, isInNodeModules }); importedFileFromNodeModules = importedFileFromNodeModules || isInNodeModules; } -@@ -45841,7 +45993,41 @@ ${lanes.join("\n")} +@@ -45841,7 +46007,41 @@ ${lanes.join("\n")} if (!host.fileExists || !host.readFile) { return void 0; } @@ -1294,7 +1348,7 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta if (!parts) { return void 0; } -@@ -45879,14 +46065,16 @@ ${lanes.join("\n")} +@@ -45879,14 +46079,16 @@ ${lanes.join("\n")} if (isRedirect && !isPackageRootPath) { return void 0; } @@ -1302,7 +1356,7 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta - const pathToTopLevelNodeModules = getCanonicalFileName(moduleSpecifier.substring(0, parts.topLevelNodeModulesIndex)); - if (!(startsWith(canonicalSourceDirectory, pathToTopLevelNodeModules) || globalTypingsCacheLocation && startsWith(getCanonicalFileName(globalTypingsCacheLocation), pathToTopLevelNodeModules))) { - return void 0; -+ if (typeof process.versions.pnp === "undefined") { ++ if (!isPnpEnabled()) { + const globalTypingsCacheLocation = host.getGlobalTypingsCacheLocation && host.getGlobalTypingsCacheLocation(); + const pathToTopLevelNodeModules = getCanonicalFileName(moduleSpecifier.substring(0, parts.topLevelNodeModulesIndex)); + if (!(startsWith(canonicalSourceDirectory, pathToTopLevelNodeModules) || globalTypingsCacheLocation && startsWith(getCanonicalFileName(globalTypingsCacheLocation), pathToTopLevelNodeModules))) { @@ -1318,7 +1372,7 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta function tryDirectoryWithPackageJson(packageRootIndex) { var _a, _b; const packageRootPath = path.substring(0, packageRootIndex); -@@ -45899,9 +46087,9 @@ ${lanes.join("\n")} +@@ -45899,9 +46101,9 @@ ${lanes.join("\n")} const importMode = overrideMode || importingSourceFile.impliedNodeFormat; if (getResolvePackageJsonExports(options)) { const nodeModulesDirectoryName2 = packageRootPath.substring(parts.topLevelPackageNameIndex + 1); @@ -1330,15 +1384,15 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta if (fromExports) { return { ...fromExports, verbatimFromExports: true }; } -@@ -46053,6 +46241,7 @@ ${lanes.join("\n")} +@@ -46053,6 +46255,7 @@ ${lanes.join("\n")} "src/compiler/moduleSpecifiers.ts"() { "use strict"; init_ts2(); -+ init_pnp(); ++ init_pnpapi(); RelativePreference = /* @__PURE__ */ ((RelativePreference2) => { RelativePreference2[RelativePreference2["Relative"] = 0] = "Relative"; RelativePreference2[RelativePreference2["NonRelative"] = 1] = "NonRelative"; -@@ -119745,6 +119934,7 @@ ${lanes.join("\n")} +@@ -119745,6 +119948,7 @@ ${lanes.join("\n")} ProgramUpdateLevel2[ProgramUpdateLevel2["Update"] = 0] = "Update"; ProgramUpdateLevel2[ProgramUpdateLevel2["RootNamesAndUpdate"] = 1] = "RootNamesAndUpdate"; ProgramUpdateLevel2[ProgramUpdateLevel2["Full"] = 2] = "Full"; @@ -1346,7 +1400,7 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta return ProgramUpdateLevel2; })(ProgramUpdateLevel || {}); WatchLogLevel = /* @__PURE__ */ ((WatchLogLevel2) => { -@@ -127477,6 +127667,11 @@ ${lanes.join("\n")} +@@ -127477,6 +127681,11 @@ ${lanes.join("\n")} if (configFileName) { configFileWatcher = watchFile2(configFileName, scheduleProgramReload, 2e3 /* High */, watchOptions, WatchType.ConfigFile); } @@ -1358,7 +1412,7 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta const compilerHost = createCompilerHostFromProgramHost(host, () => compilerOptions, directoryStructureHost); setGetSourceFileAsHashVersioned(compilerHost); const getNewSourceFile = compilerHost.getSourceFile; -@@ -127540,6 +127735,10 @@ ${lanes.join("\n")} +@@ -127540,6 +127749,10 @@ ${lanes.join("\n")} configFileWatcher.close(); configFileWatcher = void 0; } @@ -1369,7 +1423,7 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta extendedConfigCache == null ? void 0 : extendedConfigCache.clear(); extendedConfigCache = void 0; if (sharedExtendedConfigFileWatchers) { -@@ -127575,7 +127774,7 @@ ${lanes.join("\n")} +@@ -127575,7 +127788,7 @@ ${lanes.join("\n")} function getCurrentProgram() { return builderProgram && builderProgram.getProgramOrUndefined(); } @@ -1378,7 +1432,7 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta writeLog(`Synchronizing program`); Debug.assert(compilerOptions); Debug.assert(rootFileNames); -@@ -127587,7 +127786,7 @@ ${lanes.join("\n")} +@@ -127587,7 +127800,7 @@ ${lanes.join("\n")} resolutionCache.onChangesAffectModuleResolution(); } } @@ -1387,7 +1441,7 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta const { originalReadFile, originalFileExists, -@@ -127799,13 +127998,19 @@ ${lanes.join("\n")} +@@ -127799,13 +128012,19 @@ ${lanes.join("\n")} updateLevel = 2 /* Full */; scheduleProgramUpdate(); } @@ -1408,7 +1462,7 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta switch (updateLevel) { case 1 /* RootNamesAndUpdate */: (_a = perfLogger) == null ? void 0 : _a.logStartUpdateProgram("PartialConfigReload"); -@@ -127815,12 +128020,19 @@ ${lanes.join("\n")} +@@ -127815,12 +128034,19 @@ ${lanes.join("\n")} (_b = perfLogger) == null ? void 0 : _b.logStartUpdateProgram("FullConfigReload"); reloadConfigFile(); break; @@ -1430,15 +1484,15 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta return getCurrentBuilderProgram(); } function reloadFileNamesFromConfigFile() { -@@ -128106,6 +128318,7 @@ ${lanes.join("\n")} +@@ -128106,6 +128332,7 @@ ${lanes.join("\n")} "src/compiler/watchPublic.ts"() { "use strict"; init_ts2(); -+ init_pnp(); ++ init_pnpapi(); } }); -@@ -133432,7 +133645,14 @@ ${lanes.join("\n")} +@@ -133432,7 +133659,14 @@ ${lanes.join("\n")} return false; } function getNodeModulesPackageNameFromFileName(importedFileName, moduleSpecifierResolutionHost) { @@ -1454,15 +1508,15 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta return void 0; } const specifier = ts_moduleSpecifiers_exports.getNodeModulesPackageName( -@@ -133721,6 +133941,7 @@ ${lanes.join("\n")} +@@ -133721,6 +133955,7 @@ ${lanes.join("\n")} var init_utilities4 = __esm({ "src/services/utilities.ts"() { "use strict"; -+ init_pnp(); ++ init_pnpapi(); init_ts4(); scanner = createScanner( 99 /* Latest */, -@@ -133999,6 +134220,9 @@ ${lanes.join("\n")} +@@ -133999,6 +134234,9 @@ ${lanes.join("\n")} return hasImportablePath; } function isImportablePath(fromPath, toPath3, getCanonicalFileName, globalCachePath) { @@ -1472,15 +1526,16 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta const toNodeModules = forEachAncestorDirectory(toPath3, (ancestor) => getBaseFileName(ancestor) === "node_modules" ? ancestor : void 0); const toNodeModulesParent = toNodeModules && getDirectoryPath(getCanonicalFileName(toNodeModules)); return toNodeModulesParent === void 0 || startsWith(getCanonicalFileName(fromPath), toNodeModulesParent) || !!globalCachePath && startsWith(getCanonicalFileName(globalCachePath), toNodeModulesParent); -@@ -134197,6 +134421,7 @@ ${lanes.join("\n")} +@@ -134197,6 +134435,8 @@ ${lanes.join("\n")} var init_exportInfoMap = __esm({ "src/services/exportInfoMap.ts"() { "use strict"; + init_pnp(); ++ init_pnpapi(); init_ts4(); ImportKind = /* @__PURE__ */ ((ImportKind2) => { ImportKind2[ImportKind2["Named"] = 0] = "Named"; -@@ -162567,7 +162792,33 @@ ${newComment.split("\n").map((c) => ` * ${c}`).join("\n")} +@@ -162567,7 +162807,33 @@ ${newComment.split("\n").map((c) => ` * ${c}`).join("\n")} ); } }; @@ -1515,7 +1570,7 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta const nodeModulesDirectoryLookup = ancestorLookup; ancestorLookup = (ancestor) => { const components = getPathComponents(fragment); -@@ -162586,34 +162837,52 @@ ${newComment.split("\n").map((c) => ` * ${c}`).join("\n")} +@@ -162586,34 +162852,52 @@ ${newComment.split("\n").map((c) => ` * ${c}`).join("\n")} const packageDirectory = combinePaths(ancestor, "node_modules", packagePath); const packageFile = combinePaths(packageDirectory, "package.json"); if (tryFileExists(host, packageFile)) { @@ -1588,7 +1643,7 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta } } return arrayFrom(result.values()); -@@ -162744,9 +163013,15 @@ ${newComment.split("\n").map((c) => ` * ${c}`).join("\n")} +@@ -162744,9 +163028,15 @@ ${newComment.split("\n").map((c) => ` * ${c}`).join("\n")} for (const root of typeRoots) { getCompletionEntriesFromDirectories(root); } @@ -1607,27 +1662,28 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta } return result; function getCompletionEntriesFromDirectories(directory) { -@@ -162830,6 +163105,7 @@ ${newComment.split("\n").map((c) => ` * ${c}`).join("\n")} +@@ -162830,6 +163120,8 @@ ${newComment.split("\n").map((c) => ` * ${c}`).join("\n")} "src/services/stringCompletions.ts"() { "use strict"; init_moduleSpecifiers(); + init_pnp(); ++ init_pnpapi(); init_ts4(); init_ts_Completions(); kindPrecedence = { -@@ -175824,6 +176100,7 @@ ${options.prefix}` : "\n" : options.prefix +@@ -175824,6 +176116,7 @@ ${options.prefix}` : "\n" : options.prefix var init_project = __esm({ "src/server/project.ts"() { "use strict"; -+ init_pnp(); ++ init_pnpapi(); init_ts7(); init_ts7(); init_ts_server3(); -@@ -177906,6 +178183,29 @@ ${options.prefix}` : "\n" : options.prefix +@@ -177906,6 +178199,29 @@ ${options.prefix}` : "\n" : options.prefix return this.projectReferences; } updateReferences(refs) { -+ if (typeof process.versions.pnp !== `undefined`) { ++ if (isPnpEnabled()) { + const basePath = this.getCurrentDirectory(); + const getPnpPath = (path) => { + try { @@ -1653,15 +1709,15 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta this.projectReferences = refs; this.potentialProjectReferences = void 0; } -@@ -178371,6 +178671,7 @@ ${options.prefix}` : "\n" : options.prefix +@@ -178371,6 +178687,7 @@ ${options.prefix}` : "\n" : options.prefix var init_editorServices = __esm({ "src/server/editorServices.ts"() { "use strict"; -+ init_pnp(); ++ init_pnpapi(); init_ts7(); init_ts_server3(); init_protocol(); -@@ -178602,6 +178903,7 @@ ${options.prefix}` : "\n" : options.prefix +@@ -178602,6 +178919,7 @@ ${options.prefix}` : "\n" : options.prefix log, getDetailWatchInfo ); @@ -1669,7 +1725,7 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta (_a = opts.incrementalVerifier) == null ? void 0 : _a.call(opts, this); } toPath(fileName) { -@@ -180436,7 +180738,7 @@ Dynamic files must always be opened with service's current directory or service +@@ -180436,7 +180754,7 @@ Dynamic files must always be opened with service's current directory or service this.performanceEventHandler = performanceEventHandler; } setHostConfiguration(args) { @@ -1678,7 +1734,7 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta if (args.file) { const info = this.getScriptInfoForNormalizedPath(toNormalizedPath(args.file)); if (info) { -@@ -180481,6 +180783,8 @@ Dynamic files must always be opened with service's current directory or service +@@ -180481,6 +180799,8 @@ Dynamic files must always be opened with service's current directory or service if (args.watchOptions) { this.hostConfiguration.watchOptions = (_a = convertWatchOptions(args.watchOptions)) == null ? void 0 : _a.watchOptions; this.logger.info(`Host watch options changed to ${JSON.stringify(this.hostConfiguration.watchOptions)}, it will be take effect for next watches.`); @@ -1687,7 +1743,7 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta } } } -@@ -181421,6 +181725,29 @@ Dynamic files must always be opened with service's current directory or service +@@ -181421,6 +181741,29 @@ Dynamic files must always be opened with service's current directory or service }); } /** @internal */ @@ -1718,27 +1774,21 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta Debug.assert(project !== void 0); let result = (this.packageJsonFilesMap ?? (this.packageJsonFilesMap = /* @__PURE__ */ new Map())).get(path); diff --git a/lib/typingsInstaller.js b/lib/typingsInstaller.js -index 7d305c002..0162dd8ae 100644 +index 7d30..de92 100644 semver exclusivity >=5.4.1-rc <5.5.0-beta --- a/lib/typingsInstaller.js +++ b/lib/typingsInstaller.js -@@ -4475,6 +4475,9 @@ var sys = (() => { - return Buffer2.from && Buffer2.from !== Int8Array.from ? Buffer2.from(input, encoding) : new Buffer2(input, encoding); - } - function isFileSystemCaseSensitive() { -+ if (typeof process.versions.pnp !== `undefined`) { -+ return true; -+ } - if (platform === "win32" || platform === "win64") { - return false; - } -@@ -27622,6 +27625,17 @@ function specToDiagnostic(spec, disallowTrailingRecursion) { +@@ -3347,6 +3347,21 @@ var commentPragmas = { } - } + }; -+// src/compiler/pnp.ts ++// src/compiler/pnpapi.ts ++function isPnpEnabled() { ++ var _a; ++ return typeof process !== "undefined" && typeof ((_a = process == null ? void 0 : process.versions) == null ? void 0 : _a.pnp) !== "undefined"; ++} +function getPnpApi(path2) { -+ if (typeof process.versions.pnp === "undefined") { ++ if (!isPnpEnabled()) { + return; + } + const { findPnpApi } = require("module"); @@ -1747,10 +1797,20 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta + } +} + - // src/compiler/moduleNameResolver.ts - function trace(host, message, ...args) { - host.trace(formatMessage(message, ...args)); -@@ -29130,7 +29144,15 @@ function loadModuleFromNearestNodeModulesDirectoryWorker(extensions, moduleName, + // src/compiler/sys.ts + function generateDjb2Hash(data) { + let acc = 5381; +@@ -4475,6 +4490,9 @@ var sys = (() => { + return Buffer2.from && Buffer2.from !== Int8Array.from ? Buffer2.from(input, encoding) : new Buffer2(input, encoding); + } + function isFileSystemCaseSensitive() { ++ if (isPnpEnabled()) { ++ return true; ++ } + if (platform === "win32" || platform === "win64") { + return false; + } +@@ -29130,7 +29148,15 @@ function loadModuleFromNearestNodeModulesDirectoryWorker(extensions, moduleName, return lookup(secondaryExtensions); } function lookup(extensions2) { @@ -1767,7 +1827,7 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta if (getBaseFileName(ancestorDirectory) !== "node_modules") { const resolutionFromCache = tryFindNonRelativeModuleNameInCache(cache, moduleName, mode, ancestorDirectory, redirectedReference, state); if (resolutionFromCache) { -@@ -29165,11 +29187,40 @@ function loadModuleFromImmediateNodeModulesDirectory(extensions, moduleName, dir +@@ -29165,11 +29191,40 @@ function loadModuleFromImmediateNodeModulesDirectory(extensions, moduleName, dir return loadModuleFromSpecificNodeModulesDirectory(4 /* Declaration */, mangleScopedPackageNameWithTrace(moduleName, state), nodeModulesAtTypes2, nodeModulesAtTypesExists, state, cache, redirectedReference); } } @@ -1809,7 +1869,7 @@ semver exclusivity >=5.4.1-rc <5.5.0-beta let rootPackageInfo; let packageInfo = getPackageJsonInfo(candidate, !nodeModulesDirectoryExists, state); if (rest !== "" && packageInfo && (!(state.features & 8 /* Exports */) || !hasProperty(((_a = rootPackageInfo = getPackageJsonInfo(packageDirectory, !nodeModulesDirectoryExists, state)) == null ? void 0 : _a.contents.packageJsonContent) ?? emptyArray, "exports"))) { -@@ -29411,6 +29462,18 @@ function traceIfEnabled(state, diagnostic, ...args) { +@@ -29411,6 +29466,18 @@ function traceIfEnabled(state, diagnostic, ...args) { function useCaseSensitiveFileNames(state) { return !state.host.useCaseSensitiveFileNames ? true : typeof state.host.useCaseSensitiveFileNames === "boolean" ? state.host.useCaseSensitiveFileNames : state.host.useCaseSensitiveFileNames(); } diff --git a/packages/plugin-compat/extra/typescript/patch-8d2f8f40dfabf44c8c92c0ad8ae31cce.diff b/packages/plugin-compat/extra/typescript/patches/patch-8d2f8f40dfabf44c8c92c0ad8ae31cce.diff similarity index 99% rename from packages/plugin-compat/extra/typescript/patch-8d2f8f40dfabf44c8c92c0ad8ae31cce.diff rename to packages/plugin-compat/extra/typescript/patches/patch-8d2f8f40dfabf44c8c92c0ad8ae31cce.diff index d9997a9c3809..dbad57bef006 100644 --- a/packages/plugin-compat/extra/typescript/patch-8d2f8f40dfabf44c8c92c0ad8ae31cce.diff +++ b/packages/plugin-compat/extra/typescript/patches/patch-8d2f8f40dfabf44c8c92c0ad8ae31cce.diff @@ -1,5 +1,5 @@ diff --git a/lib/tsc.js b/lib/tsc.js -index 361e447f8..f07d1f913 100644 +index 361e..f07d 100644 semver exclusivity >=3.9 <4.0 --- a/lib/tsc.js +++ b/lib/tsc.js @@ -206,7 +206,7 @@ semver exclusivity >=3.9 <4.0 var packageRootPath = moduleFileName.substring(0, packageRootIndex); var packageJsonPath = ts.combinePaths(packageRootPath, "package.json"); diff --git a/lib/tsserver.js b/lib/tsserver.js -index 2b6f035cc..21f9ad412 100644 +index 2b6f..21f9 100644 semver exclusivity >=3.9 <4.0 --- a/lib/tsserver.js +++ b/lib/tsserver.js @@ -504,7 +504,7 @@ semver exclusivity >=3.9 <4.0 return moduleSpecifierToValidIdentifier(ts.removeFileExtension(ts.stripQuotes(moduleSymbol.name)), target); } diff --git a/lib/tsserverlibrary.js b/lib/tsserverlibrary.js -index 60e8447a1..3a7bcfa00 100644 +index 60e8..3a7b 100644 semver exclusivity >=3.9 <4.0 --- a/lib/tsserverlibrary.js +++ b/lib/tsserverlibrary.js @@ -802,7 +802,7 @@ semver exclusivity >=3.9 <4.0 return moduleSpecifierToValidIdentifier(ts.removeFileExtension(ts.stripQuotes(moduleSymbol.name)), target); } diff --git a/lib/typescript.js b/lib/typescript.js -index 90202c1c5..081b7b5cc 100644 +index 9020..081b 100644 semver exclusivity >=3.9 <4.0 --- a/lib/typescript.js +++ b/lib/typescript.js @@ -1100,7 +1100,7 @@ semver exclusivity >=3.9 <4.0 return moduleSpecifierToValidIdentifier(ts.removeFileExtension(ts.stripQuotes(moduleSymbol.name)), target); } diff --git a/lib/typescriptServices.js b/lib/typescriptServices.js -index d78fb9eda..124497dd8 100644 +index d78f..1244 100644 semver exclusivity >=3.9 <4.0 --- a/lib/typescriptServices.js +++ b/lib/typescriptServices.js @@ -1398,7 +1398,7 @@ semver exclusivity >=3.9 <4.0 return moduleSpecifierToValidIdentifier(ts.removeFileExtension(ts.stripQuotes(moduleSymbol.name)), target); } diff --git a/lib/typingsInstaller.js b/lib/typingsInstaller.js -index 967aad4ef..9c4eca225 100644 +index 967a..9c4e 100644 semver exclusivity >=3.9 <4.0 --- a/lib/typingsInstaller.js +++ b/lib/typingsInstaller.js diff --git a/packages/plugin-compat/extra/typescript/patch-9b9654c39d521a93691971e09fa5c237.diff b/packages/plugin-compat/extra/typescript/patches/patch-9b9654c39d521a93691971e09fa5c237.diff similarity index 99% rename from packages/plugin-compat/extra/typescript/patch-9b9654c39d521a93691971e09fa5c237.diff rename to packages/plugin-compat/extra/typescript/patches/patch-9b9654c39d521a93691971e09fa5c237.diff index f2a393e23e55..217aeb23fc3c 100644 --- a/packages/plugin-compat/extra/typescript/patch-9b9654c39d521a93691971e09fa5c237.diff +++ b/packages/plugin-compat/extra/typescript/patches/patch-9b9654c39d521a93691971e09fa5c237.diff @@ -1,5 +1,5 @@ diff --git a/lib/tsc.js b/lib/tsc.js -index d58b28264..bd70c0b3f 100644 +index d58b..bd70 100644 semver exclusivity >=4.9.1-beta <4.9.2-rc --- a/lib/tsc.js +++ b/lib/tsc.js @@ -308,7 +308,7 @@ semver exclusivity >=4.9.1-beta <4.9.2-rc ts.perfLogger.logStartUpdateProgram("SynchronizeProgram"); synchronizeProgram(); diff --git a/lib/tsserver.js b/lib/tsserver.js -index 5d1d55532..cca7af8e5 100644 +index 5d1d..cca7 100644 semver exclusivity >=4.9.1-beta <4.9.2-rc --- a/lib/tsserver.js +++ b/lib/tsserver.js @@ -989,7 +989,7 @@ semver exclusivity >=4.9.1-beta <4.9.2-rc this.installer.on("message", function (m) { return _this.handleMessage(m); }); // We have to schedule this event to the next tick diff --git a/lib/tsserverlibrary.js b/lib/tsserverlibrary.js -index 00143e7ae..ca55c4366 100644 +index 0014..ca55 100644 semver exclusivity >=4.9.1-beta <4.9.2-rc --- a/lib/tsserverlibrary.js +++ b/lib/tsserverlibrary.js @@ -1644,7 +1644,7 @@ semver exclusivity >=4.9.1-beta <4.9.2-rc var _this = this; var watchers = this.packageJsonFilesMap || (this.packageJsonFilesMap = new ts.Map()); diff --git a/lib/typescript.js b/lib/typescript.js -index 947429a39..b09fa897b 100644 +index 9474..b09f 100644 semver exclusivity >=4.9.1-beta <4.9.2-rc --- a/lib/typescript.js +++ b/lib/typescript.js @@ -2193,7 +2193,7 @@ semver exclusivity >=4.9.1-beta <4.9.2-rc return statement; }); diff --git a/lib/typescriptServices.js b/lib/typescriptServices.js -index 0b6841d28..c07e46d37 100644 +index 0b68..c07e 100644 semver exclusivity >=4.9.1-beta <4.9.2-rc --- a/lib/typescriptServices.js +++ b/lib/typescriptServices.js @@ -2742,7 +2742,7 @@ semver exclusivity >=4.9.1-beta <4.9.2-rc return statement; }); diff --git a/lib/typingsInstaller.js b/lib/typingsInstaller.js -index 284a066b2..77f900d44 100644 +index 284a..77f9 100644 semver exclusivity >=4.9.1-beta <4.9.2-rc --- a/lib/typingsInstaller.js +++ b/lib/typingsInstaller.js diff --git a/packages/plugin-compat/extra/typescript/patch-ff931f179c594dcc9a5b599c91314dee.diff b/packages/plugin-compat/extra/typescript/patches/patch-9e2198a01e29dcc93aa9afe9d0c75b13.diff similarity index 91% rename from packages/plugin-compat/extra/typescript/patch-ff931f179c594dcc9a5b599c91314dee.diff rename to packages/plugin-compat/extra/typescript/patches/patch-9e2198a01e29dcc93aa9afe9d0c75b13.diff index 3c6dc9cce1ba..9513cce7fd9e 100644 --- a/packages/plugin-compat/extra/typescript/patch-ff931f179c594dcc9a5b599c91314dee.diff +++ b/packages/plugin-compat/extra/typescript/patches/patch-9e2198a01e29dcc93aa9afe9d0c75b13.diff @@ -1,25 +1,19 @@ diff --git a/lib/tsc.js b/lib/tsc.js -index 4a425cf3d..5bb8e25e1 100644 +index 4a42..0991 100644 semver exclusivity >=5.4.0-beta <5.4.1-rc --- a/lib/tsc.js +++ b/lib/tsc.js -@@ -5063,6 +5063,9 @@ var sys = (() => { - return Buffer.from && Buffer.from !== Int8Array.from ? Buffer.from(input, encoding) : new Buffer(input, encoding); - } - function isFileSystemCaseSensitive() { -+ if (typeof process.versions.pnp !== `undefined`) { -+ return true; -+ } - if (platform === "win32" || platform === "win64") { - return false; - } -@@ -37157,6 +37160,46 @@ function getDefaultValueForOption(option) { +@@ -3932,6 +3932,29 @@ var commentPragmas = { } - } + }; -+// src/compiler/pnp.ts ++// src/compiler/pnpapi.ts ++function isPnpEnabled() { ++ var _a; ++ return typeof process !== "undefined" && typeof ((_a = process == null ? void 0 : process.versions) == null ? void 0 : _a.pnp) !== "undefined"; ++} +function getPnpApi(path) { -+ if (typeof process.versions.pnp === "undefined") { ++ if (!isPnpEnabled()) { + return; + } + const { findPnpApi } = require("module"); @@ -35,6 +29,25 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc + null + ); +} ++ + // src/compiler/sys.ts + function generateDjb2Hash(data) { + let acc = 5381; +@@ -5063,6 +5086,9 @@ var sys = (() => { + return Buffer.from && Buffer.from !== Int8Array.from ? Buffer.from(input, encoding) : new Buffer(input, encoding); + } + function isFileSystemCaseSensitive() { ++ if (isPnpEnabled()) { ++ return true; ++ } + if (platform === "win32" || platform === "win64") { + return false; + } +@@ -37157,6 +37183,29 @@ function getDefaultValueForOption(option) { + } + } + ++// src/compiler/pnp.ts +function getPnpTypeRoots(currentDirectory) { + const pnpApi = getPnpApi(currentDirectory); + if (!pnpApi) { @@ -60,7 +73,7 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc // src/compiler/moduleNameResolver.ts function trace(host, message, ...args) { host.trace(formatMessage(message, ...args)); -@@ -37384,7 +37427,7 @@ function getEffectiveTypeRoots(options, host) { +@@ -37384,7 +37433,7 @@ function getEffectiveTypeRoots(options, host) { return getDefaultTypeRoots(currentDirectory); } } @@ -69,7 +82,7 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc let typeRoots; forEachAncestorDirectory(normalizePath(currentDirectory), (directory) => { const atTypes = combinePaths(directory, nodeModulesAtTypes); -@@ -37397,6 +37440,15 @@ function arePathsEqual(path1, path2, host) { +@@ -37397,6 +37446,15 @@ function arePathsEqual(path1, path2, host) { const useCaseSensitiveFileNames2 = typeof host.useCaseSensitiveFileNames === "function" ? host.useCaseSensitiveFileNames() : host.useCaseSensitiveFileNames; return comparePaths(path1, path2, !useCaseSensitiveFileNames2) === 0 /* EqualTo */; } @@ -85,7 +98,7 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc function getOriginalAndResolvedFileName(fileName, host, traceEnabled) { const resolvedFileName = realPath(fileName, host, traceEnabled); const pathsAreEqual = arePathsEqual(fileName, resolvedFileName, host); -@@ -39295,7 +39347,15 @@ function loadModuleFromNearestNodeModulesDirectoryWorker(extensions, moduleName, +@@ -39295,7 +39353,15 @@ function loadModuleFromNearestNodeModulesDirectoryWorker(extensions, moduleName, return lookup(secondaryExtensions); } function lookup(extensions2) { @@ -102,7 +115,7 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc if (getBaseFileName(ancestorDirectory) !== "node_modules") { const resolutionFromCache = tryFindNonRelativeModuleNameInCache(cache, moduleName, mode, ancestorDirectory, redirectedReference, state); if (resolutionFromCache) { -@@ -39330,11 +39390,40 @@ function loadModuleFromImmediateNodeModulesDirectory(extensions, moduleName, dir +@@ -39330,11 +39396,40 @@ function loadModuleFromImmediateNodeModulesDirectory(extensions, moduleName, dir return loadModuleFromSpecificNodeModulesDirectory(4 /* Declaration */, mangleScopedPackageNameWithTrace(moduleName, state), nodeModulesAtTypes2, nodeModulesAtTypesExists, state, cache, redirectedReference); } } @@ -144,7 +157,7 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc let rootPackageInfo; let packageInfo = getPackageJsonInfo(candidate, !nodeModulesDirectoryExists, state); if (rest !== "" && packageInfo && (!(state.features & 8 /* Exports */) || !hasProperty(((_a = rootPackageInfo = getPackageJsonInfo(packageDirectory, !nodeModulesDirectoryExists, state)) == null ? void 0 : _a.contents.packageJsonContent) ?? emptyArray, "exports"))) { -@@ -39639,6 +39728,18 @@ function traceIfEnabled(state, diagnostic, ...args) { +@@ -39639,6 +39734,18 @@ function traceIfEnabled(state, diagnostic, ...args) { function useCaseSensitiveFileNames(state) { return !state.host.useCaseSensitiveFileNames ? true : typeof state.host.useCaseSensitiveFileNames === "boolean" ? state.host.useCaseSensitiveFileNames : state.host.useCaseSensitiveFileNames(); } @@ -163,7 +176,7 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc // src/compiler/binder.ts function getModuleInstanceState(node, visited) { -@@ -42960,7 +43061,15 @@ function getAllModulePathsWorker(info, importedFileName, host) { +@@ -42960,7 +43067,15 @@ function getAllModulePathsWorker(info, importedFileName, host) { /*preferSymlinks*/ true, (path, isRedirect) => { @@ -180,7 +193,7 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc allFileNames.set(path, { path: info.getCanonicalFileName(path), isRedirect, isInNodeModules }); importedFileFromNodeModules = importedFileFromNodeModules || isInNodeModules; } -@@ -43259,7 +43368,41 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa +@@ -43259,7 +43374,41 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa if (!host.fileExists || !host.readFile) { return void 0; } @@ -223,7 +236,7 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc if (!parts) { return void 0; } -@@ -43297,14 +43440,16 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa +@@ -43297,14 +43446,16 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa if (isRedirect && !isPackageRootPath) { return void 0; } @@ -231,7 +244,7 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc - const pathToTopLevelNodeModules = getCanonicalFileName(moduleSpecifier.substring(0, parts.topLevelNodeModulesIndex)); - if (!(startsWith(canonicalSourceDirectory, pathToTopLevelNodeModules) || globalTypingsCacheLocation && startsWith(getCanonicalFileName(globalTypingsCacheLocation), pathToTopLevelNodeModules))) { - return void 0; -+ if (typeof process.versions.pnp === "undefined") { ++ if (!isPnpEnabled()) { + const globalTypingsCacheLocation = host.getGlobalTypingsCacheLocation && host.getGlobalTypingsCacheLocation(); + const pathToTopLevelNodeModules = getCanonicalFileName(moduleSpecifier.substring(0, parts.topLevelNodeModulesIndex)); + if (!(startsWith(canonicalSourceDirectory, pathToTopLevelNodeModules) || globalTypingsCacheLocation && startsWith(getCanonicalFileName(globalTypingsCacheLocation), pathToTopLevelNodeModules))) { @@ -247,7 +260,7 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc function tryDirectoryWithPackageJson(packageRootIndex) { var _a, _b; const packageRootPath = path.substring(0, packageRootIndex); -@@ -43317,9 +43462,9 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa +@@ -43317,9 +43468,9 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa const importMode = overrideMode || importingSourceFile.impliedNodeFormat; if (getResolvePackageJsonExports(options)) { const nodeModulesDirectoryName2 = packageRootPath.substring(parts.topLevelPackageNameIndex + 1); @@ -259,7 +272,7 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc if (fromExports) { return { ...fromExports, verbatimFromExports: true }; } -@@ -124257,6 +124402,11 @@ function createWatchProgram(host) { +@@ -124257,6 +124408,11 @@ function createWatchProgram(host) { if (configFileName) { configFileWatcher = watchFile2(configFileName, scheduleProgramReload, 2e3 /* High */, watchOptions, WatchType.ConfigFile); } @@ -271,7 +284,7 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc const compilerHost = createCompilerHostFromProgramHost(host, () => compilerOptions, directoryStructureHost); setGetSourceFileAsHashVersioned(compilerHost); const getNewSourceFile = compilerHost.getSourceFile; -@@ -124320,6 +124470,10 @@ function createWatchProgram(host) { +@@ -124320,6 +124476,10 @@ function createWatchProgram(host) { configFileWatcher.close(); configFileWatcher = void 0; } @@ -282,7 +295,7 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc extendedConfigCache == null ? void 0 : extendedConfigCache.clear(); extendedConfigCache = void 0; if (sharedExtendedConfigFileWatchers) { -@@ -124355,7 +124509,7 @@ function createWatchProgram(host) { +@@ -124355,7 +124515,7 @@ function createWatchProgram(host) { function getCurrentProgram() { return builderProgram && builderProgram.getProgramOrUndefined(); } @@ -291,7 +304,7 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc writeLog(`Synchronizing program`); Debug.assert(compilerOptions); Debug.assert(rootFileNames); -@@ -124367,7 +124521,7 @@ function createWatchProgram(host) { +@@ -124367,7 +124527,7 @@ function createWatchProgram(host) { resolutionCache.onChangesAffectModuleResolution(); } } @@ -300,7 +313,7 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc const { originalReadFile, originalFileExists, -@@ -124579,13 +124733,19 @@ function createWatchProgram(host) { +@@ -124579,13 +124739,19 @@ function createWatchProgram(host) { updateLevel = 2 /* Full */; scheduleProgramUpdate(); } @@ -321,7 +334,7 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc switch (updateLevel) { case 1 /* RootNamesAndUpdate */: (_a = perfLogger) == null ? void 0 : _a.logStartUpdateProgram("PartialConfigReload"); -@@ -124595,12 +124755,19 @@ function createWatchProgram(host) { +@@ -124595,12 +124761,19 @@ function createWatchProgram(host) { (_b = perfLogger) == null ? void 0 : _b.logStartUpdateProgram("FullConfigReload"); reloadConfigFile(); break; @@ -344,27 +357,21 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc } function reloadFileNamesFromConfigFile() { diff --git a/lib/tsserver.js b/lib/tsserver.js -index 7254b1aff..8a3ea0c8f 100644 +index 7254..6595 100644 semver exclusivity >=5.4.0-beta <5.4.1-rc --- a/lib/tsserver.js +++ b/lib/tsserver.js -@@ -8611,6 +8611,9 @@ var sys = (() => { - return Buffer2.from && Buffer2.from !== Int8Array.from ? Buffer2.from(input, encoding) : new Buffer2(input, encoding); - } - function isFileSystemCaseSensitive() { -+ if (typeof process.versions.pnp !== `undefined`) { -+ return true; -+ } - if (platform === "win32" || platform === "win64") { - return false; - } -@@ -41665,6 +41668,67 @@ function getDefaultValueForOption(option) { - } - } +@@ -7464,6 +7464,29 @@ var JSDocParsingMode = /* @__PURE__ */ ((JSDocParsingMode6) => { + return JSDocParsingMode6; + })(JSDocParsingMode || {}); -+// src/compiler/pnp.ts ++// src/compiler/pnpapi.ts ++function isPnpEnabled() { ++ var _a; ++ return typeof process !== "undefined" && typeof ((_a = process == null ? void 0 : process.versions) == null ? void 0 : _a.pnp) !== "undefined"; ++} +function getPnpApi(path) { -+ if (typeof process.versions.pnp === "undefined") { ++ if (!isPnpEnabled()) { + return; + } + const { findPnpApi } = require("module"); @@ -380,6 +387,25 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc + null + ); +} ++ + // src/compiler/sys.ts + function generateDjb2Hash(data) { + let acc = 5381; +@@ -8611,6 +8634,9 @@ var sys = (() => { + return Buffer2.from && Buffer2.from !== Int8Array.from ? Buffer2.from(input, encoding) : new Buffer2(input, encoding); + } + function isFileSystemCaseSensitive() { ++ if (isPnpEnabled()) { ++ return true; ++ } + if (platform === "win32" || platform === "win64") { + return false; + } +@@ -41665,6 +41691,50 @@ function getDefaultValueForOption(option) { + } + } + ++// src/compiler/pnp.ts +function getPnpTypeRoots(currentDirectory) { + const pnpApi = getPnpApi(currentDirectory); + if (!pnpApi) { @@ -426,7 +452,7 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc // src/compiler/moduleNameResolver.ts function trace(host, message, ...args) { host.trace(formatMessage(message, ...args)); -@@ -41904,7 +41968,7 @@ function getEffectiveTypeRoots(options, host) { +@@ -41904,7 +41974,7 @@ function getEffectiveTypeRoots(options, host) { return getDefaultTypeRoots(currentDirectory); } } @@ -435,7 +461,7 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc let typeRoots; forEachAncestorDirectory(normalizePath(currentDirectory), (directory) => { const atTypes = combinePaths(directory, nodeModulesAtTypes); -@@ -41917,6 +41981,15 @@ function arePathsEqual(path1, path2, host) { +@@ -41917,6 +41987,15 @@ function arePathsEqual(path1, path2, host) { const useCaseSensitiveFileNames2 = typeof host.useCaseSensitiveFileNames === "function" ? host.useCaseSensitiveFileNames() : host.useCaseSensitiveFileNames; return comparePaths(path1, path2, !useCaseSensitiveFileNames2) === 0 /* EqualTo */; } @@ -451,7 +477,7 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc function getOriginalAndResolvedFileName(fileName, host, traceEnabled) { const resolvedFileName = realPath(fileName, host, traceEnabled); const pathsAreEqual = arePathsEqual(fileName, resolvedFileName, host); -@@ -42169,6 +42242,21 @@ function getConditions(options, resolutionMode) { +@@ -42169,6 +42248,21 @@ function getConditions(options, resolutionMode) { } function resolvePackageNameToPackageJson(packageName, containingDirectory, options, host, cache) { const moduleResolutionState = getTemporaryModuleResolutionState(cache == null ? void 0 : cache.getPackageJsonInfoCache(), host, options); @@ -473,7 +499,7 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc return forEachAncestorDirectory(containingDirectory, (ancestorDirectory) => { if (getBaseFileName(ancestorDirectory) !== "node_modules") { const nodeModulesFolder = combinePaths(ancestorDirectory, "node_modules"); -@@ -43967,7 +44055,15 @@ function loadModuleFromNearestNodeModulesDirectoryWorker(extensions, moduleName, +@@ -43967,7 +44061,15 @@ function loadModuleFromNearestNodeModulesDirectoryWorker(extensions, moduleName, return lookup(secondaryExtensions); } function lookup(extensions2) { @@ -490,7 +516,7 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc if (getBaseFileName(ancestorDirectory) !== "node_modules") { const resolutionFromCache = tryFindNonRelativeModuleNameInCache(cache, moduleName, mode, ancestorDirectory, redirectedReference, state); if (resolutionFromCache) { -@@ -44002,11 +44098,40 @@ function loadModuleFromImmediateNodeModulesDirectory(extensions, moduleName, dir +@@ -44002,11 +44104,40 @@ function loadModuleFromImmediateNodeModulesDirectory(extensions, moduleName, dir return loadModuleFromSpecificNodeModulesDirectory(4 /* Declaration */, mangleScopedPackageNameWithTrace(moduleName, state), nodeModulesAtTypes2, nodeModulesAtTypesExists, state, cache, redirectedReference); } } @@ -532,7 +558,7 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc let rootPackageInfo; let packageInfo = getPackageJsonInfo(candidate, !nodeModulesDirectoryExists, state); if (rest !== "" && packageInfo && (!(state.features & 8 /* Exports */) || !hasProperty(((_a = rootPackageInfo = getPackageJsonInfo(packageDirectory, !nodeModulesDirectoryExists, state)) == null ? void 0 : _a.contents.packageJsonContent) ?? emptyArray, "exports"))) { -@@ -44311,6 +44436,18 @@ function traceIfEnabled(state, diagnostic, ...args) { +@@ -44311,6 +44442,18 @@ function traceIfEnabled(state, diagnostic, ...args) { function useCaseSensitiveFileNames(state) { return !state.host.useCaseSensitiveFileNames ? true : typeof state.host.useCaseSensitiveFileNames === "boolean" ? state.host.useCaseSensitiveFileNames : state.host.useCaseSensitiveFileNames(); } @@ -551,7 +577,7 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc // src/compiler/binder.ts var ModuleInstanceState = /* @__PURE__ */ ((ModuleInstanceState2) => { -@@ -47695,7 +47832,15 @@ function getAllModulePathsWorker(info, importedFileName, host) { +@@ -47695,7 +47838,15 @@ function getAllModulePathsWorker(info, importedFileName, host) { /*preferSymlinks*/ true, (path, isRedirect) => { @@ -568,7 +594,7 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc allFileNames.set(path, { path: info.getCanonicalFileName(path), isRedirect, isInNodeModules }); importedFileFromNodeModules = importedFileFromNodeModules || isInNodeModules; } -@@ -47994,7 +48139,41 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa +@@ -47994,7 +48145,41 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa if (!host.fileExists || !host.readFile) { return void 0; } @@ -611,7 +637,7 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc if (!parts) { return void 0; } -@@ -48032,14 +48211,16 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa +@@ -48032,14 +48217,16 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa if (isRedirect && !isPackageRootPath) { return void 0; } @@ -619,7 +645,7 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc - const pathToTopLevelNodeModules = getCanonicalFileName(moduleSpecifier.substring(0, parts.topLevelNodeModulesIndex)); - if (!(startsWith(canonicalSourceDirectory, pathToTopLevelNodeModules) || globalTypingsCacheLocation && startsWith(getCanonicalFileName(globalTypingsCacheLocation), pathToTopLevelNodeModules))) { - return void 0; -+ if (typeof process.versions.pnp === "undefined") { ++ if (!isPnpEnabled()) { + const globalTypingsCacheLocation = host.getGlobalTypingsCacheLocation && host.getGlobalTypingsCacheLocation(); + const pathToTopLevelNodeModules = getCanonicalFileName(moduleSpecifier.substring(0, parts.topLevelNodeModulesIndex)); + if (!(startsWith(canonicalSourceDirectory, pathToTopLevelNodeModules) || globalTypingsCacheLocation && startsWith(getCanonicalFileName(globalTypingsCacheLocation), pathToTopLevelNodeModules))) { @@ -635,7 +661,7 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc function tryDirectoryWithPackageJson(packageRootIndex) { var _a, _b; const packageRootPath = path.substring(0, packageRootIndex); -@@ -48052,9 +48233,9 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa +@@ -48052,9 +48239,9 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa const importMode = overrideMode || importingSourceFile.impliedNodeFormat; if (getResolvePackageJsonExports(options)) { const nodeModulesDirectoryName2 = packageRootPath.substring(parts.topLevelPackageNameIndex + 1); @@ -647,7 +673,7 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc if (fromExports) { return { ...fromExports, verbatimFromExports: true }; } -@@ -121319,6 +121500,7 @@ var ProgramUpdateLevel = /* @__PURE__ */ ((ProgramUpdateLevel2) => { +@@ -121319,6 +121506,7 @@ var ProgramUpdateLevel = /* @__PURE__ */ ((ProgramUpdateLevel2) => { ProgramUpdateLevel2[ProgramUpdateLevel2["Update"] = 0] = "Update"; ProgramUpdateLevel2[ProgramUpdateLevel2["RootNamesAndUpdate"] = 1] = "RootNamesAndUpdate"; ProgramUpdateLevel2[ProgramUpdateLevel2["Full"] = 2] = "Full"; @@ -655,7 +681,7 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc return ProgramUpdateLevel2; })(ProgramUpdateLevel || {}); function updateSharedExtendedConfigFileWatcher(projectPath, options, extendedConfigFilesMap, createExtendedConfigFileWatch, toPath3) { -@@ -129277,6 +129459,11 @@ function createWatchProgram(host) { +@@ -129277,6 +129465,11 @@ function createWatchProgram(host) { if (configFileName) { configFileWatcher = watchFile2(configFileName, scheduleProgramReload, 2e3 /* High */, watchOptions, WatchType.ConfigFile); } @@ -667,7 +693,7 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc const compilerHost = createCompilerHostFromProgramHost(host, () => compilerOptions, directoryStructureHost); setGetSourceFileAsHashVersioned(compilerHost); const getNewSourceFile = compilerHost.getSourceFile; -@@ -129340,6 +129527,10 @@ function createWatchProgram(host) { +@@ -129340,6 +129533,10 @@ function createWatchProgram(host) { configFileWatcher.close(); configFileWatcher = void 0; } @@ -678,7 +704,7 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc extendedConfigCache == null ? void 0 : extendedConfigCache.clear(); extendedConfigCache = void 0; if (sharedExtendedConfigFileWatchers) { -@@ -129375,7 +129566,7 @@ function createWatchProgram(host) { +@@ -129375,7 +129572,7 @@ function createWatchProgram(host) { function getCurrentProgram() { return builderProgram && builderProgram.getProgramOrUndefined(); } @@ -687,7 +713,7 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc writeLog(`Synchronizing program`); Debug.assert(compilerOptions); Debug.assert(rootFileNames); -@@ -129387,7 +129578,7 @@ function createWatchProgram(host) { +@@ -129387,7 +129584,7 @@ function createWatchProgram(host) { resolutionCache.onChangesAffectModuleResolution(); } } @@ -696,7 +722,7 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc const { originalReadFile, originalFileExists, -@@ -129599,13 +129790,19 @@ function createWatchProgram(host) { +@@ -129599,13 +129796,19 @@ function createWatchProgram(host) { updateLevel = 2 /* Full */; scheduleProgramUpdate(); } @@ -717,7 +743,7 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc switch (updateLevel) { case 1 /* RootNamesAndUpdate */: (_a = perfLogger) == null ? void 0 : _a.logStartUpdateProgram("PartialConfigReload"); -@@ -129615,12 +129812,19 @@ function createWatchProgram(host) { +@@ -129615,12 +129818,19 @@ function createWatchProgram(host) { (_b = perfLogger) == null ? void 0 : _b.logStartUpdateProgram("FullConfigReload"); reloadConfigFile(); break; @@ -739,7 +765,7 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc return getCurrentBuilderProgram(); } function reloadFileNamesFromConfigFile() { -@@ -135130,7 +135334,14 @@ function createPackageJsonImportFilter(fromFile, preferences, host) { +@@ -135130,7 +135340,14 @@ function createPackageJsonImportFilter(fromFile, preferences, host) { return false; } function getNodeModulesPackageNameFromFileName(importedFileName, moduleSpecifierResolutionHost) { @@ -755,7 +781,7 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc return void 0; } const specifier = ts_moduleSpecifiers_exports.getNodeModulesPackageName( -@@ -135654,6 +135865,9 @@ function isImportableFile(program, from, to, preferences, packageJsonFilter, mod +@@ -135654,6 +135871,9 @@ function isImportableFile(program, from, to, preferences, packageJsonFilter, mod return hasImportablePath; } function isImportablePath(fromPath, toPath3, getCanonicalFileName, globalCachePath) { @@ -765,7 +791,7 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc const toNodeModules = forEachAncestorDirectory(toPath3, (ancestor) => getBaseFileName(ancestor) === "node_modules" ? ancestor : void 0); const toNodeModulesParent = toNodeModules && getDirectoryPath(getCanonicalFileName(toNodeModules)); return toNodeModulesParent === void 0 || startsWith(getCanonicalFileName(fromPath), toNodeModulesParent) || !!globalCachePath && startsWith(getCanonicalFileName(globalCachePath), toNodeModulesParent); -@@ -163194,7 +163408,31 @@ function getCompletionEntriesForNonRelativeModules(fragment, scriptPath, mode, c +@@ -163194,7 +163414,31 @@ function getCompletionEntriesForNonRelativeModules(fragment, scriptPath, mode, c ); } }; @@ -798,7 +824,7 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc const nodeModulesDirectoryLookup = ancestorLookup; ancestorLookup = (ancestor) => { const components = getPathComponents(fragment); -@@ -163213,32 +163451,52 @@ function getCompletionEntriesForNonRelativeModules(fragment, scriptPath, mode, c +@@ -163213,32 +163457,52 @@ function getCompletionEntriesForNonRelativeModules(fragment, scriptPath, mode, c const packageDirectory = combinePaths(ancestor, "node_modules", packagePath); const packageFile = combinePaths(packageDirectory, "package.json"); if (tryFileExists(host, packageFile)) { @@ -869,7 +895,7 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc } } return arrayFrom(result.values()); -@@ -163369,9 +163627,15 @@ function getCompletionEntriesFromTypings(host, options, scriptPath, fragmentDire +@@ -163369,9 +163633,15 @@ function getCompletionEntriesFromTypings(host, options, scriptPath, fragmentDire for (const root of typeRoots) { getCompletionEntriesFromDirectories(root); } @@ -888,11 +914,11 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc } return result; function getCompletionEntriesFromDirectories(directory) { -@@ -180476,6 +180740,29 @@ var ConfiguredProject2 = class extends Project3 { +@@ -180476,6 +180746,29 @@ var ConfiguredProject2 = class extends Project3 { return this.projectReferences; } updateReferences(refs) { -+ if (typeof process.versions.pnp !== `undefined`) { ++ if (isPnpEnabled()) { + const basePath = this.getCurrentDirectory(); + const getPnpPath = (path) => { + try { @@ -918,7 +944,7 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc this.projectReferences = refs; this.potentialProjectReferences = void 0; } -@@ -181146,6 +181433,7 @@ var _ProjectService = class _ProjectService { +@@ -181146,6 +181439,7 @@ var _ProjectService = class _ProjectService { log, getDetailWatchInfo ); @@ -926,7 +952,7 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc (_a = opts.incrementalVerifier) == null ? void 0 : _a.call(opts, this); } toPath(fileName) { -@@ -182981,7 +183269,7 @@ Dynamic files must always be opened with service's current directory or service +@@ -182981,7 +183275,7 @@ Dynamic files must always be opened with service's current directory or service this.performanceEventHandler = performanceEventHandler; } setHostConfiguration(args) { @@ -935,7 +961,7 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc if (args.file) { const info = this.getScriptInfoForNormalizedPath(toNormalizedPath(args.file)); if (info) { -@@ -183024,6 +183312,8 @@ Dynamic files must always be opened with service's current directory or service +@@ -183024,6 +183318,8 @@ Dynamic files must always be opened with service's current directory or service if (args.watchOptions) { this.hostConfiguration.watchOptions = (_a = convertWatchOptions(args.watchOptions)) == null ? void 0 : _a.watchOptions; this.logger.info(`Host watch options changed to ${JSON.stringify(this.hostConfiguration.watchOptions)}, it will be take effect for next watches.`); @@ -944,7 +970,7 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc } } } -@@ -183969,6 +184259,29 @@ Dynamic files must always be opened with service's current directory or service +@@ -183969,6 +184265,29 @@ Dynamic files must always be opened with service's current directory or service }); } /** @internal */ @@ -974,7 +1000,7 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc watchPackageJsonFile(file, path, project) { Debug.assert(project !== void 0); let result = (this.packageJsonFilesMap ?? (this.packageJsonFilesMap = /* @__PURE__ */ new Map())).get(path); -@@ -188748,6 +189061,10 @@ function initializeNodeSystem() { +@@ -188748,6 +189067,10 @@ function initializeNodeSystem() { } try { const args = [combinePaths(libDirectory, "watchGuard.js"), path]; @@ -985,7 +1011,7 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc if (logger.hasLevel(3 /* verbose */)) { logger.info(`Starting ${process.execPath} with args:${stringifyIndented(args)}`); } -@@ -188930,6 +189247,10 @@ function startNodeSession(options, logger, cancellationToken) { +@@ -188930,6 +189253,10 @@ function startNodeSession(options, logger, cancellationToken) { break; } } @@ -997,7 +1023,7 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc this.installer = childProcess.fork(typingsInstaller, args, { execArgv }); this.installer.on("message", (m) => this.handleMessage(m)); diff --git a/lib/typescript.d.ts b/lib/typescript.d.ts -index 100081fb8..d63bc238e 100644 +index 1000..d63b 100644 semver exclusivity >=5.4.0-beta <5.4.1-rc --- a/lib/typescript.d.ts +++ b/lib/typescript.d.ts @@ -1011,27 +1037,21 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc function findConfigFile(searchPath: string, fileExists: (fileName: string) => boolean, configName?: string): string | undefined; function resolveTripleslashReference(moduleName: string, containingFile: string): string; diff --git a/lib/typescript.js b/lib/typescript.js -index 6cd6c983a..c20a7353f 100644 +index 6cd6..dac7 100644 semver exclusivity >=5.4.0-beta <5.4.1-rc --- a/lib/typescript.js +++ b/lib/typescript.js -@@ -6370,6 +6370,9 @@ ${lanes.join("\n")} - return Buffer2.from && Buffer2.from !== Int8Array.from ? Buffer2.from(input, encoding) : new Buffer2(input, encoding); - } - function isFileSystemCaseSensitive() { -+ if (typeof process.versions.pnp !== `undefined`) { -+ return true; -+ } - if (platform === "win32" || platform === "win64") { - return false; - } -@@ -39513,6 +39516,73 @@ ${lanes.join("\n")} +@@ -5215,6 +5215,34 @@ ${lanes.join("\n")} } }); -+ // src/compiler/pnp.ts ++ // src/compiler/pnpapi.ts ++ function isPnpEnabled() { ++ var _a; ++ return typeof process !== "undefined" && typeof ((_a = process == null ? void 0 : process.versions) == null ? void 0 : _a.pnp) !== "undefined"; ++ } + function getPnpApi(path) { -+ if (typeof process.versions.pnp === "undefined") { ++ if (!isPnpEnabled()) { + return; + } + const { findPnpApi } = require("module"); @@ -1047,6 +1067,38 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc + null + ); + } ++ var init_pnpapi = __esm({ ++ "src/compiler/pnpapi.ts"() { ++ "use strict"; ++ } ++ }); ++ + // src/compiler/sys.ts + function generateDjb2Hash(data) { + let acc = 5381; +@@ -6119,6 +6147,7 @@ ${lanes.join("\n")} + "src/compiler/sys.ts"() { + "use strict"; + init_ts2(); ++ init_pnpapi(); + FileWatcherEventKind = /* @__PURE__ */ ((FileWatcherEventKind2) => { + FileWatcherEventKind2[FileWatcherEventKind2["Created"] = 0] = "Created"; + FileWatcherEventKind2[FileWatcherEventKind2["Changed"] = 1] = "Changed"; +@@ -6370,6 +6399,9 @@ ${lanes.join("\n")} + return Buffer2.from && Buffer2.from !== Int8Array.from ? Buffer2.from(input, encoding) : new Buffer2(input, encoding); + } + function isFileSystemCaseSensitive() { ++ if (isPnpEnabled()) { ++ return true; ++ } + if (platform === "win32" || platform === "win64") { + return false; + } +@@ -39513,6 +39545,57 @@ ${lanes.join("\n")} + } + }); + ++ // src/compiler/pnp.ts + function getPnpTypeRoots(currentDirectory) { + const pnpApi = getPnpApi(currentDirectory); + if (!pnpApi) { @@ -1093,13 +1145,14 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc + "src/compiler/pnp.ts"() { + "use strict"; + init_path(); ++ init_pnpapi(); + } + }); + // src/compiler/moduleNameResolver.ts function trace(host, message, ...args) { host.trace(formatMessage(message, ...args)); -@@ -39751,7 +39821,7 @@ ${lanes.join("\n")} +@@ -39751,7 +39834,7 @@ ${lanes.join("\n")} return getDefaultTypeRoots(currentDirectory); } } @@ -1108,7 +1161,7 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc let typeRoots; forEachAncestorDirectory(normalizePath(currentDirectory), (directory) => { const atTypes = combinePaths(directory, nodeModulesAtTypes); -@@ -39763,6 +39833,15 @@ ${lanes.join("\n")} +@@ -39763,6 +39846,15 @@ ${lanes.join("\n")} const useCaseSensitiveFileNames2 = typeof host.useCaseSensitiveFileNames === "function" ? host.useCaseSensitiveFileNames() : host.useCaseSensitiveFileNames; return comparePaths(path1, path2, !useCaseSensitiveFileNames2) === 0 /* EqualTo */; } @@ -1124,7 +1177,7 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc function getOriginalAndResolvedFileName(fileName, host, traceEnabled) { const resolvedFileName = realPath(fileName, host, traceEnabled); const pathsAreEqual = arePathsEqual(fileName, resolvedFileName, host); -@@ -40015,6 +40094,21 @@ ${lanes.join("\n")} +@@ -40015,6 +40107,21 @@ ${lanes.join("\n")} } function resolvePackageNameToPackageJson(packageName, containingDirectory, options, host, cache) { const moduleResolutionState = getTemporaryModuleResolutionState(cache == null ? void 0 : cache.getPackageJsonInfoCache(), host, options); @@ -1146,7 +1199,7 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc return forEachAncestorDirectory(containingDirectory, (ancestorDirectory) => { if (getBaseFileName(ancestorDirectory) !== "node_modules") { const nodeModulesFolder = combinePaths(ancestorDirectory, "node_modules"); -@@ -41799,7 +41893,15 @@ ${lanes.join("\n")} +@@ -41799,7 +41906,15 @@ ${lanes.join("\n")} return lookup(secondaryExtensions); } function lookup(extensions2) { @@ -1163,7 +1216,7 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc if (getBaseFileName(ancestorDirectory) !== "node_modules") { const resolutionFromCache = tryFindNonRelativeModuleNameInCache(cache, moduleName, mode, ancestorDirectory, redirectedReference, state); if (resolutionFromCache) { -@@ -41834,11 +41936,40 @@ ${lanes.join("\n")} +@@ -41834,11 +41949,40 @@ ${lanes.join("\n")} return loadModuleFromSpecificNodeModulesDirectory(4 /* Declaration */, mangleScopedPackageNameWithTrace(moduleName, state), nodeModulesAtTypes2, nodeModulesAtTypesExists, state, cache, redirectedReference); } } @@ -1205,7 +1258,7 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc let rootPackageInfo; let packageInfo = getPackageJsonInfo(candidate, !nodeModulesDirectoryExists, state); if (rest !== "" && packageInfo && (!(state.features & 8 /* Exports */) || !hasProperty(((_a = rootPackageInfo = getPackageJsonInfo(packageDirectory, !nodeModulesDirectoryExists, state)) == null ? void 0 : _a.contents.packageJsonContent) ?? emptyArray, "exports"))) { -@@ -42142,11 +42273,24 @@ ${lanes.join("\n")} +@@ -42142,11 +42286,25 @@ ${lanes.join("\n")} function useCaseSensitiveFileNames(state) { return !state.host.useCaseSensitiveFileNames ? true : typeof state.host.useCaseSensitiveFileNames === "boolean" ? state.host.useCaseSensitiveFileNames : state.host.useCaseSensitiveFileNames(); } @@ -1227,10 +1280,11 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc "use strict"; init_ts2(); + init_pnp(); ++ init_pnpapi(); nodeModulesAtTypes = combinePaths("node_modules", "@types"); NodeResolutionFeatures = /* @__PURE__ */ ((NodeResolutionFeatures2) => { NodeResolutionFeatures2[NodeResolutionFeatures2["None"] = 0] = "None"; -@@ -45548,7 +45692,15 @@ ${lanes.join("\n")} +@@ -45548,7 +45706,15 @@ ${lanes.join("\n")} /*preferSymlinks*/ true, (path, isRedirect) => { @@ -1247,7 +1301,7 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc allFileNames.set(path, { path: info.getCanonicalFileName(path), isRedirect, isInNodeModules }); importedFileFromNodeModules = importedFileFromNodeModules || isInNodeModules; } -@@ -45847,7 +45999,41 @@ ${lanes.join("\n")} +@@ -45847,7 +46013,41 @@ ${lanes.join("\n")} if (!host.fileExists || !host.readFile) { return void 0; } @@ -1290,7 +1344,7 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc if (!parts) { return void 0; } -@@ -45885,14 +46071,16 @@ ${lanes.join("\n")} +@@ -45885,14 +46085,16 @@ ${lanes.join("\n")} if (isRedirect && !isPackageRootPath) { return void 0; } @@ -1298,7 +1352,7 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc - const pathToTopLevelNodeModules = getCanonicalFileName(moduleSpecifier.substring(0, parts.topLevelNodeModulesIndex)); - if (!(startsWith(canonicalSourceDirectory, pathToTopLevelNodeModules) || globalTypingsCacheLocation && startsWith(getCanonicalFileName(globalTypingsCacheLocation), pathToTopLevelNodeModules))) { - return void 0; -+ if (typeof process.versions.pnp === "undefined") { ++ if (!isPnpEnabled()) { + const globalTypingsCacheLocation = host.getGlobalTypingsCacheLocation && host.getGlobalTypingsCacheLocation(); + const pathToTopLevelNodeModules = getCanonicalFileName(moduleSpecifier.substring(0, parts.topLevelNodeModulesIndex)); + if (!(startsWith(canonicalSourceDirectory, pathToTopLevelNodeModules) || globalTypingsCacheLocation && startsWith(getCanonicalFileName(globalTypingsCacheLocation), pathToTopLevelNodeModules))) { @@ -1314,7 +1368,7 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc function tryDirectoryWithPackageJson(packageRootIndex) { var _a, _b; const packageRootPath = path.substring(0, packageRootIndex); -@@ -45905,9 +46093,9 @@ ${lanes.join("\n")} +@@ -45905,9 +46107,9 @@ ${lanes.join("\n")} const importMode = overrideMode || importingSourceFile.impliedNodeFormat; if (getResolvePackageJsonExports(options)) { const nodeModulesDirectoryName2 = packageRootPath.substring(parts.topLevelPackageNameIndex + 1); @@ -1326,15 +1380,15 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc if (fromExports) { return { ...fromExports, verbatimFromExports: true }; } -@@ -46058,6 +46246,7 @@ ${lanes.join("\n")} +@@ -46058,6 +46260,7 @@ ${lanes.join("\n")} "src/compiler/moduleSpecifiers.ts"() { "use strict"; init_ts2(); -+ init_pnp(); ++ init_pnpapi(); } }); -@@ -119689,6 +119878,7 @@ ${lanes.join("\n")} +@@ -119689,6 +119892,7 @@ ${lanes.join("\n")} ProgramUpdateLevel2[ProgramUpdateLevel2["Update"] = 0] = "Update"; ProgramUpdateLevel2[ProgramUpdateLevel2["RootNamesAndUpdate"] = 1] = "RootNamesAndUpdate"; ProgramUpdateLevel2[ProgramUpdateLevel2["Full"] = 2] = "Full"; @@ -1342,7 +1396,7 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc return ProgramUpdateLevel2; })(ProgramUpdateLevel || {}); WatchLogLevel = /* @__PURE__ */ ((WatchLogLevel2) => { -@@ -127421,6 +127611,11 @@ ${lanes.join("\n")} +@@ -127421,6 +127625,11 @@ ${lanes.join("\n")} if (configFileName) { configFileWatcher = watchFile2(configFileName, scheduleProgramReload, 2e3 /* High */, watchOptions, WatchType.ConfigFile); } @@ -1354,7 +1408,7 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc const compilerHost = createCompilerHostFromProgramHost(host, () => compilerOptions, directoryStructureHost); setGetSourceFileAsHashVersioned(compilerHost); const getNewSourceFile = compilerHost.getSourceFile; -@@ -127484,6 +127679,10 @@ ${lanes.join("\n")} +@@ -127484,6 +127693,10 @@ ${lanes.join("\n")} configFileWatcher.close(); configFileWatcher = void 0; } @@ -1365,7 +1419,7 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc extendedConfigCache == null ? void 0 : extendedConfigCache.clear(); extendedConfigCache = void 0; if (sharedExtendedConfigFileWatchers) { -@@ -127519,7 +127718,7 @@ ${lanes.join("\n")} +@@ -127519,7 +127732,7 @@ ${lanes.join("\n")} function getCurrentProgram() { return builderProgram && builderProgram.getProgramOrUndefined(); } @@ -1374,7 +1428,7 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc writeLog(`Synchronizing program`); Debug.assert(compilerOptions); Debug.assert(rootFileNames); -@@ -127531,7 +127730,7 @@ ${lanes.join("\n")} +@@ -127531,7 +127744,7 @@ ${lanes.join("\n")} resolutionCache.onChangesAffectModuleResolution(); } } @@ -1383,7 +1437,7 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc const { originalReadFile, originalFileExists, -@@ -127743,13 +127942,19 @@ ${lanes.join("\n")} +@@ -127743,13 +127956,19 @@ ${lanes.join("\n")} updateLevel = 2 /* Full */; scheduleProgramUpdate(); } @@ -1404,7 +1458,7 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc switch (updateLevel) { case 1 /* RootNamesAndUpdate */: (_a = perfLogger) == null ? void 0 : _a.logStartUpdateProgram("PartialConfigReload"); -@@ -127759,12 +127964,19 @@ ${lanes.join("\n")} +@@ -127759,12 +127978,19 @@ ${lanes.join("\n")} (_b = perfLogger) == null ? void 0 : _b.logStartUpdateProgram("FullConfigReload"); reloadConfigFile(); break; @@ -1426,15 +1480,15 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc return getCurrentBuilderProgram(); } function reloadFileNamesFromConfigFile() { -@@ -128050,6 +128262,7 @@ ${lanes.join("\n")} +@@ -128050,6 +128276,7 @@ ${lanes.join("\n")} "src/compiler/watchPublic.ts"() { "use strict"; init_ts2(); -+ init_pnp(); ++ init_pnpapi(); } }); -@@ -133376,7 +133589,14 @@ ${lanes.join("\n")} +@@ -133376,7 +133603,14 @@ ${lanes.join("\n")} return false; } function getNodeModulesPackageNameFromFileName(importedFileName, moduleSpecifierResolutionHost) { @@ -1450,15 +1504,15 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc return void 0; } const specifier = ts_moduleSpecifiers_exports.getNodeModulesPackageName( -@@ -133665,6 +133885,7 @@ ${lanes.join("\n")} +@@ -133665,6 +133899,7 @@ ${lanes.join("\n")} var init_utilities4 = __esm({ "src/services/utilities.ts"() { "use strict"; -+ init_pnp(); ++ init_pnpapi(); init_ts4(); scanner = createScanner( 99 /* Latest */, -@@ -133943,6 +134164,9 @@ ${lanes.join("\n")} +@@ -133943,6 +134178,9 @@ ${lanes.join("\n")} return hasImportablePath; } function isImportablePath(fromPath, toPath3, getCanonicalFileName, globalCachePath) { @@ -1468,15 +1522,16 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc const toNodeModules = forEachAncestorDirectory(toPath3, (ancestor) => getBaseFileName(ancestor) === "node_modules" ? ancestor : void 0); const toNodeModulesParent = toNodeModules && getDirectoryPath(getCanonicalFileName(toNodeModules)); return toNodeModulesParent === void 0 || startsWith(getCanonicalFileName(fromPath), toNodeModulesParent) || !!globalCachePath && startsWith(getCanonicalFileName(globalCachePath), toNodeModulesParent); -@@ -134141,6 +134365,7 @@ ${lanes.join("\n")} +@@ -134141,6 +134379,8 @@ ${lanes.join("\n")} var init_exportInfoMap = __esm({ "src/services/exportInfoMap.ts"() { "use strict"; + init_pnp(); ++ init_pnpapi(); init_ts4(); ImportKind = /* @__PURE__ */ ((ImportKind2) => { ImportKind2[ImportKind2["Named"] = 0] = "Named"; -@@ -162460,7 +162685,31 @@ ${newComment.split("\n").map((c) => ` * ${c}`).join("\n")} +@@ -162460,7 +162700,31 @@ ${newComment.split("\n").map((c) => ` * ${c}`).join("\n")} ); } }; @@ -1509,7 +1564,7 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc const nodeModulesDirectoryLookup = ancestorLookup; ancestorLookup = (ancestor) => { const components = getPathComponents(fragment); -@@ -162479,32 +162728,52 @@ ${newComment.split("\n").map((c) => ` * ${c}`).join("\n")} +@@ -162479,32 +162743,52 @@ ${newComment.split("\n").map((c) => ` * ${c}`).join("\n")} const packageDirectory = combinePaths(ancestor, "node_modules", packagePath); const packageFile = combinePaths(packageDirectory, "package.json"); if (tryFileExists(host, packageFile)) { @@ -1580,7 +1635,7 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc } } return arrayFrom(result.values()); -@@ -162635,9 +162904,15 @@ ${newComment.split("\n").map((c) => ` * ${c}`).join("\n")} +@@ -162635,9 +162919,15 @@ ${newComment.split("\n").map((c) => ` * ${c}`).join("\n")} for (const root of typeRoots) { getCompletionEntriesFromDirectories(root); } @@ -1599,27 +1654,28 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc } return result; function getCompletionEntriesFromDirectories(directory) { -@@ -162720,6 +162995,7 @@ ${newComment.split("\n").map((c) => ` * ${c}`).join("\n")} +@@ -162720,6 +163010,8 @@ ${newComment.split("\n").map((c) => ` * ${c}`).join("\n")} var init_stringCompletions = __esm({ "src/services/stringCompletions.ts"() { "use strict"; + init_pnp(); ++ init_pnpapi(); init_ts4(); init_ts_Completions(); kindPrecedence = { -@@ -175700,6 +175976,7 @@ ${options.prefix}` : "\n" : options.prefix +@@ -175700,6 +175992,7 @@ ${options.prefix}` : "\n" : options.prefix var init_project = __esm({ "src/server/project.ts"() { "use strict"; -+ init_pnp(); ++ init_pnpapi(); init_ts7(); init_ts7(); init_ts_server3(); -@@ -177771,6 +178048,29 @@ ${options.prefix}` : "\n" : options.prefix +@@ -177771,6 +178064,29 @@ ${options.prefix}` : "\n" : options.prefix return this.projectReferences; } updateReferences(refs) { -+ if (typeof process.versions.pnp !== `undefined`) { ++ if (isPnpEnabled()) { + const basePath = this.getCurrentDirectory(); + const getPnpPath = (path) => { + try { @@ -1645,15 +1701,15 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc this.projectReferences = refs; this.potentialProjectReferences = void 0; } -@@ -178236,6 +178536,7 @@ ${options.prefix}` : "\n" : options.prefix +@@ -178236,6 +178552,7 @@ ${options.prefix}` : "\n" : options.prefix var init_editorServices = __esm({ "src/server/editorServices.ts"() { "use strict"; -+ init_pnp(); ++ init_pnpapi(); init_ts7(); init_ts_server3(); init_protocol(); -@@ -178465,6 +178766,7 @@ ${options.prefix}` : "\n" : options.prefix +@@ -178465,6 +178782,7 @@ ${options.prefix}` : "\n" : options.prefix log, getDetailWatchInfo ); @@ -1661,7 +1717,7 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc (_a = opts.incrementalVerifier) == null ? void 0 : _a.call(opts, this); } toPath(fileName) { -@@ -180300,7 +180602,7 @@ Dynamic files must always be opened with service's current directory or service +@@ -180300,7 +180618,7 @@ Dynamic files must always be opened with service's current directory or service this.performanceEventHandler = performanceEventHandler; } setHostConfiguration(args) { @@ -1670,7 +1726,7 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc if (args.file) { const info = this.getScriptInfoForNormalizedPath(toNormalizedPath(args.file)); if (info) { -@@ -180343,6 +180645,8 @@ Dynamic files must always be opened with service's current directory or service +@@ -180343,6 +180661,8 @@ Dynamic files must always be opened with service's current directory or service if (args.watchOptions) { this.hostConfiguration.watchOptions = (_a = convertWatchOptions(args.watchOptions)) == null ? void 0 : _a.watchOptions; this.logger.info(`Host watch options changed to ${JSON.stringify(this.hostConfiguration.watchOptions)}, it will be take effect for next watches.`); @@ -1679,7 +1735,7 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc } } } -@@ -181288,6 +181592,29 @@ Dynamic files must always be opened with service's current directory or service +@@ -181288,6 +181608,29 @@ Dynamic files must always be opened with service's current directory or service }); } /** @internal */ @@ -1710,27 +1766,21 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc Debug.assert(project !== void 0); let result = (this.packageJsonFilesMap ?? (this.packageJsonFilesMap = /* @__PURE__ */ new Map())).get(path); diff --git a/lib/typingsInstaller.js b/lib/typingsInstaller.js -index 691d2a967..395ce7e14 100644 +index 691d..c369 100644 semver exclusivity >=5.4.0-beta <5.4.1-rc --- a/lib/typingsInstaller.js +++ b/lib/typingsInstaller.js -@@ -4475,6 +4475,9 @@ var sys = (() => { - return Buffer2.from && Buffer2.from !== Int8Array.from ? Buffer2.from(input, encoding) : new Buffer2(input, encoding); - } - function isFileSystemCaseSensitive() { -+ if (typeof process.versions.pnp !== `undefined`) { -+ return true; -+ } - if (platform === "win32" || platform === "win64") { - return false; - } -@@ -27623,6 +27626,17 @@ function specToDiagnostic(spec, disallowTrailingRecursion) { +@@ -3347,6 +3347,21 @@ var commentPragmas = { } - } + }; -+// src/compiler/pnp.ts ++// src/compiler/pnpapi.ts ++function isPnpEnabled() { ++ var _a; ++ return typeof process !== "undefined" && typeof ((_a = process == null ? void 0 : process.versions) == null ? void 0 : _a.pnp) !== "undefined"; ++} +function getPnpApi(path2) { -+ if (typeof process.versions.pnp === "undefined") { ++ if (!isPnpEnabled()) { + return; + } + const { findPnpApi } = require("module"); @@ -1739,10 +1789,20 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc + } +} + - // src/compiler/moduleNameResolver.ts - function trace(host, message, ...args) { - host.trace(formatMessage(message, ...args)); -@@ -29141,7 +29155,15 @@ function loadModuleFromNearestNodeModulesDirectoryWorker(extensions, moduleName, + // src/compiler/sys.ts + function generateDjb2Hash(data) { + let acc = 5381; +@@ -4475,6 +4490,9 @@ var sys = (() => { + return Buffer2.from && Buffer2.from !== Int8Array.from ? Buffer2.from(input, encoding) : new Buffer2(input, encoding); + } + function isFileSystemCaseSensitive() { ++ if (isPnpEnabled()) { ++ return true; ++ } + if (platform === "win32" || platform === "win64") { + return false; + } +@@ -29141,7 +29159,15 @@ function loadModuleFromNearestNodeModulesDirectoryWorker(extensions, moduleName, return lookup(secondaryExtensions); } function lookup(extensions2) { @@ -1759,7 +1819,7 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc if (getBaseFileName(ancestorDirectory) !== "node_modules") { const resolutionFromCache = tryFindNonRelativeModuleNameInCache(cache, moduleName, mode, ancestorDirectory, redirectedReference, state); if (resolutionFromCache) { -@@ -29176,11 +29198,40 @@ function loadModuleFromImmediateNodeModulesDirectory(extensions, moduleName, dir +@@ -29176,11 +29202,40 @@ function loadModuleFromImmediateNodeModulesDirectory(extensions, moduleName, dir return loadModuleFromSpecificNodeModulesDirectory(4 /* Declaration */, mangleScopedPackageNameWithTrace(moduleName, state), nodeModulesAtTypes2, nodeModulesAtTypesExists, state, cache, redirectedReference); } } @@ -1801,7 +1861,7 @@ semver exclusivity >=5.4.0-beta <5.4.1-rc let rootPackageInfo; let packageInfo = getPackageJsonInfo(candidate, !nodeModulesDirectoryExists, state); if (rest !== "" && packageInfo && (!(state.features & 8 /* Exports */) || !hasProperty(((_a = rootPackageInfo = getPackageJsonInfo(packageDirectory, !nodeModulesDirectoryExists, state)) == null ? void 0 : _a.contents.packageJsonContent) ?? emptyArray, "exports"))) { -@@ -29422,6 +29473,18 @@ function traceIfEnabled(state, diagnostic, ...args) { +@@ -29422,6 +29477,18 @@ function traceIfEnabled(state, diagnostic, ...args) { function useCaseSensitiveFileNames(state) { return !state.host.useCaseSensitiveFileNames ? true : typeof state.host.useCaseSensitiveFileNames === "boolean" ? state.host.useCaseSensitiveFileNames : state.host.useCaseSensitiveFileNames(); } diff --git a/packages/plugin-compat/extra/typescript/patch-b50a64a58349eb6122d5bfe14615ddb2.diff b/packages/plugin-compat/extra/typescript/patches/patch-b50a64a58349eb6122d5bfe14615ddb2.diff similarity index 99% rename from packages/plugin-compat/extra/typescript/patch-b50a64a58349eb6122d5bfe14615ddb2.diff rename to packages/plugin-compat/extra/typescript/patches/patch-b50a64a58349eb6122d5bfe14615ddb2.diff index 9a448a05bf61..aa2710a91de4 100644 --- a/packages/plugin-compat/extra/typescript/patch-b50a64a58349eb6122d5bfe14615ddb2.diff +++ b/packages/plugin-compat/extra/typescript/patches/patch-b50a64a58349eb6122d5bfe14615ddb2.diff @@ -1,5 +1,5 @@ diff --git a/lib/tsc.js b/lib/tsc.js -index 2473792a3..159499703 100644 +index 2473..1594 100644 semver exclusivity >=5.0.0-beta <5.0.1-rc --- a/lib/tsc.js +++ b/lib/tsc.js @@ -285,7 +285,7 @@ semver exclusivity >=5.0.0-beta <5.0.1-rc perfLogger.logStartUpdateProgram("SynchronizeProgram"); synchronizeProgram(); diff --git a/lib/tsserver.js b/lib/tsserver.js -index 53e29897d..9188c7960 100644 +index 53e2..9188 100644 semver exclusivity >=5.0.0-beta <5.0.1-rc --- a/lib/tsserver.js +++ b/lib/tsserver.js @@ -853,7 +853,7 @@ semver exclusivity >=5.0.0-beta <5.0.1-rc this.installer = childProcess.fork(typingsInstaller, args, { execArgv }); this.installer.on("message", (m) => this.handleMessage(m)); diff --git a/lib/tsserverlibrary.js b/lib/tsserverlibrary.js -index 717a22480..5e03a2696 100644 +index 717a..5e03 100644 semver exclusivity >=5.0.0-beta <5.0.1-rc --- a/lib/tsserverlibrary.js +++ b/lib/tsserverlibrary.js @@ -1458,7 +1458,7 @@ semver exclusivity >=5.0.0-beta <5.0.1-rc const watchers = this.packageJsonFilesMap || (this.packageJsonFilesMap = /* @__PURE__ */ new Map()); if (!watchers.has(path)) { diff --git a/lib/typescript.js b/lib/typescript.js -index 9977523ac..395520564 100644 +index 9977..3955 100644 semver exclusivity >=5.0.0-beta <5.0.1-rc --- a/lib/typescript.js +++ b/lib/typescript.js @@ -1961,7 +1961,7 @@ semver exclusivity >=5.0.0-beta <5.0.1-rc init_ts_Completions(); kindPrecedence = { diff --git a/lib/typingsInstaller.js b/lib/typingsInstaller.js -index 6314e1db8..32c8eb311 100644 +index 6314..32c8 100644 semver exclusivity >=5.0.0-beta <5.0.1-rc --- a/lib/typingsInstaller.js +++ b/lib/typingsInstaller.js diff --git a/packages/plugin-compat/extra/typescript/patch-bd47b146c0aada1998e69c2809c181b0.diff b/packages/plugin-compat/extra/typescript/patches/patch-bd47b146c0aada1998e69c2809c181b0.diff similarity index 99% rename from packages/plugin-compat/extra/typescript/patch-bd47b146c0aada1998e69c2809c181b0.diff rename to packages/plugin-compat/extra/typescript/patches/patch-bd47b146c0aada1998e69c2809c181b0.diff index c244cae5f239..d89d114f9f86 100644 --- a/packages/plugin-compat/extra/typescript/patch-bd47b146c0aada1998e69c2809c181b0.diff +++ b/packages/plugin-compat/extra/typescript/patches/patch-bd47b146c0aada1998e69c2809c181b0.diff @@ -1,5 +1,5 @@ diff --git a/lib/tsc.js b/lib/tsc.js -index 80afaea53..202bd4ec7 100644 +index 80af..202b 100644 semver exclusivity >=4.9.4 <5.0.0-beta --- a/lib/tsc.js +++ b/lib/tsc.js @@ -326,7 +326,7 @@ semver exclusivity >=4.9.4 <5.0.0-beta ts.perfLogger.logStartUpdateProgram("SynchronizeProgram"); synchronizeProgram(); diff --git a/lib/tsserver.js b/lib/tsserver.js -index a2960e9f6..68378ab1e 100644 +index a296..6837 100644 semver exclusivity >=4.9.4 <5.0.0-beta --- a/lib/tsserver.js +++ b/lib/tsserver.js @@ -1025,7 +1025,7 @@ semver exclusivity >=4.9.4 <5.0.0-beta this.installer.on("message", function (m) { return _this.handleMessage(m); }); // We have to schedule this event to the next tick diff --git a/lib/tsserverlibrary.js b/lib/tsserverlibrary.js -index 1b41c9347..ecd9a1116 100644 +index 1b41..ecd9 100644 semver exclusivity >=4.9.4 <5.0.0-beta --- a/lib/tsserverlibrary.js +++ b/lib/tsserverlibrary.js @@ -1698,7 +1698,7 @@ semver exclusivity >=4.9.4 <5.0.0-beta var _this = this; var watchers = this.packageJsonFilesMap || (this.packageJsonFilesMap = new ts.Map()); diff --git a/lib/typescript.js b/lib/typescript.js -index c2688dd27..04943bd83 100644 +index c268..0494 100644 semver exclusivity >=4.9.4 <5.0.0-beta --- a/lib/typescript.js +++ b/lib/typescript.js @@ -2265,7 +2265,7 @@ semver exclusivity >=4.9.4 <5.0.0-beta return statement; }); diff --git a/lib/typescriptServices.js b/lib/typescriptServices.js -index 98086d72a..653507c8c 100644 +index 9808..6535 100644 semver exclusivity >=4.9.4 <5.0.0-beta --- a/lib/typescriptServices.js +++ b/lib/typescriptServices.js @@ -2832,7 +2832,7 @@ semver exclusivity >=4.9.4 <5.0.0-beta return statement; }); diff --git a/lib/typingsInstaller.js b/lib/typingsInstaller.js -index a4a6c6314..051c4d5f2 100644 +index a4a6..051c 100644 semver exclusivity >=4.9.4 <5.0.0-beta --- a/lib/typingsInstaller.js +++ b/lib/typingsInstaller.js diff --git a/packages/plugin-compat/extra/typescript/patch-51ab57a4392bdf0fe1e44f78309540a3.diff b/packages/plugin-compat/extra/typescript/patches/patch-ce82b9aabc122e9870247ab801bd933d.diff similarity index 91% rename from packages/plugin-compat/extra/typescript/patch-51ab57a4392bdf0fe1e44f78309540a3.diff rename to packages/plugin-compat/extra/typescript/patches/patch-ce82b9aabc122e9870247ab801bd933d.diff index 05c729e6520e..bb8328ddb3b7 100644 --- a/packages/plugin-compat/extra/typescript/patch-51ab57a4392bdf0fe1e44f78309540a3.diff +++ b/packages/plugin-compat/extra/typescript/patches/patch-ce82b9aabc122e9870247ab801bd933d.diff @@ -1,25 +1,19 @@ diff --git a/lib/tsc.js b/lib/tsc.js -index 06f7f5ec9..4a7e28076 100644 +index 06f7..5e65 100644 semver exclusivity >=5.5.0-beta <5.5.2 --- a/lib/tsc.js +++ b/lib/tsc.js -@@ -5120,6 +5120,9 @@ var sys = (() => { - } - } - function isFileSystemCaseSensitive() { -+ if (typeof process.versions.pnp !== `undefined`) { -+ return true; -+ } - if (platform === "win32" || platform === "win64") { - return false; - } -@@ -38652,6 +38655,48 @@ function getDefaultValueForOption(option) { +@@ -3927,6 +3927,29 @@ var commentPragmas = { } - } + }; +// src/compiler/pnpapi.ts ++function isPnpEnabled() { ++ var _a; ++ return typeof process !== "undefined" && typeof ((_a = process == null ? void 0 : process.versions) == null ? void 0 : _a.pnp) !== "undefined"; ++} +function getPnpApi(path) { -+ if (typeof process.versions.pnp === "undefined") { ++ if (!isPnpEnabled()) { + return; + } + const { findPnpApi } = require("module"); @@ -36,6 +30,23 @@ semver exclusivity >=5.5.0-beta <5.5.2 + ); +} + + // src/compiler/sys.ts + function generateDjb2Hash(data) { + let acc = 5381; +@@ -5120,6 +5143,9 @@ var sys = (() => { + } + } + function isFileSystemCaseSensitive() { ++ if (isPnpEnabled()) { ++ return true; ++ } + if (platform === "win32" || platform === "win64") { + return false; + } +@@ -38652,6 +38678,29 @@ function getDefaultValueForOption(option) { + } + } + +// src/compiler/pnp.ts +function getPnpTypeRoots(currentDirectory) { + const pnpApi = getPnpApi(currentDirectory); @@ -62,7 +73,7 @@ semver exclusivity >=5.5.0-beta <5.5.2 // src/compiler/moduleNameResolver.ts function trace(host, message, ...args) { host.trace(formatMessage(message, ...args)); -@@ -38882,7 +38927,7 @@ function getEffectiveTypeRoots(options, host) { +@@ -38882,7 +38931,7 @@ function getEffectiveTypeRoots(options, host) { return getDefaultTypeRoots(currentDirectory); } } @@ -71,7 +82,7 @@ semver exclusivity >=5.5.0-beta <5.5.2 let typeRoots; forEachAncestorDirectory(normalizePath(currentDirectory), (directory) => { const atTypes = combinePaths(directory, nodeModulesAtTypes); -@@ -38895,6 +38940,15 @@ function arePathsEqual(path1, path2, host) { +@@ -38895,6 +38944,15 @@ function arePathsEqual(path1, path2, host) { const useCaseSensitiveFileNames2 = typeof host.useCaseSensitiveFileNames === "function" ? host.useCaseSensitiveFileNames() : host.useCaseSensitiveFileNames; return comparePaths(path1, path2, !useCaseSensitiveFileNames2) === 0 /* EqualTo */; } @@ -87,7 +98,7 @@ semver exclusivity >=5.5.0-beta <5.5.2 function getOriginalAndResolvedFileName(fileName, host, traceEnabled) { const resolvedFileName = realPath(fileName, host, traceEnabled); const pathsAreEqual = arePathsEqual(fileName, resolvedFileName, host); -@@ -40823,7 +40877,15 @@ function loadModuleFromNearestNodeModulesDirectoryWorker(extensions, moduleName, +@@ -40823,7 +40881,15 @@ function loadModuleFromNearestNodeModulesDirectoryWorker(extensions, moduleName, return lookup(secondaryExtensions); } function lookup(extensions2) { @@ -104,7 +115,7 @@ semver exclusivity >=5.5.0-beta <5.5.2 if (getBaseFileName(ancestorDirectory) !== "node_modules") { const resolutionFromCache = tryFindNonRelativeModuleNameInCache(cache, moduleName, mode, ancestorDirectory, redirectedReference, state); if (resolutionFromCache) { -@@ -40858,11 +40920,40 @@ function loadModuleFromImmediateNodeModulesDirectory(extensions, moduleName, dir +@@ -40858,11 +40924,40 @@ function loadModuleFromImmediateNodeModulesDirectory(extensions, moduleName, dir return loadModuleFromSpecificNodeModulesDirectory(4 /* Declaration */, mangleScopedPackageNameWithTrace(moduleName, state), nodeModulesAtTypes2, nodeModulesAtTypesExists, state, cache, redirectedReference); } } @@ -146,7 +157,7 @@ semver exclusivity >=5.5.0-beta <5.5.2 let rootPackageInfo; let packageInfo = getPackageJsonInfo(candidate, !nodeModulesDirectoryExists, state); if (rest !== "" && packageInfo && (!(state.features & 8 /* Exports */) || !hasProperty(((_a = rootPackageInfo = getPackageJsonInfo(packageDirectory, !nodeModulesDirectoryExists, state)) == null ? void 0 : _a.contents.packageJsonContent) ?? emptyArray, "exports"))) { -@@ -41167,6 +41258,18 @@ function traceIfEnabled(state, diagnostic, ...args) { +@@ -41167,6 +41262,18 @@ function traceIfEnabled(state, diagnostic, ...args) { function useCaseSensitiveFileNames(state) { return !state.host.useCaseSensitiveFileNames ? true : typeof state.host.useCaseSensitiveFileNames === "boolean" ? state.host.useCaseSensitiveFileNames : state.host.useCaseSensitiveFileNames(); } @@ -165,7 +176,7 @@ semver exclusivity >=5.5.0-beta <5.5.2 // src/compiler/binder.ts function getModuleInstanceState(node, visited) { -@@ -44615,7 +44718,15 @@ function getAllModulePathsWorker(info, importedFileName, host, compilerOptions, +@@ -44615,7 +44722,15 @@ function getAllModulePathsWorker(info, importedFileName, host, compilerOptions, /*preferSymlinks*/ true, (path, isRedirect) => { @@ -182,7 +193,7 @@ semver exclusivity >=5.5.0-beta <5.5.2 allFileNames.set(path, { path: info.getCanonicalFileName(path), isRedirect, isInNodeModules }); importedFileFromNodeModules = importedFileFromNodeModules || isInNodeModules; } -@@ -44914,7 +45025,41 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa +@@ -44914,7 +45029,41 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa if (!host.fileExists || !host.readFile) { return void 0; } @@ -225,7 +236,7 @@ semver exclusivity >=5.5.0-beta <5.5.2 if (!parts) { return void 0; } -@@ -44952,14 +45097,16 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa +@@ -44952,14 +45101,16 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa if (isRedirect && !isPackageRootPath) { return void 0; } @@ -233,7 +244,7 @@ semver exclusivity >=5.5.0-beta <5.5.2 - const pathToTopLevelNodeModules = getCanonicalFileName(moduleSpecifier.substring(0, parts.topLevelNodeModulesIndex)); - if (!(startsWith(canonicalSourceDirectory, pathToTopLevelNodeModules) || globalTypingsCacheLocation && startsWith(getCanonicalFileName(globalTypingsCacheLocation), pathToTopLevelNodeModules))) { - return void 0; -+ if (typeof process.versions.pnp === "undefined") { ++ if (!isPnpEnabled()) { + const globalTypingsCacheLocation = host.getGlobalTypingsCacheLocation && host.getGlobalTypingsCacheLocation(); + const pathToTopLevelNodeModules = getCanonicalFileName(moduleSpecifier.substring(0, parts.topLevelNodeModulesIndex)); + if (!(startsWith(canonicalSourceDirectory, pathToTopLevelNodeModules) || globalTypingsCacheLocation && startsWith(getCanonicalFileName(globalTypingsCacheLocation), pathToTopLevelNodeModules))) { @@ -249,7 +260,7 @@ semver exclusivity >=5.5.0-beta <5.5.2 function tryDirectoryWithPackageJson(packageRootIndex) { var _a, _b; const packageRootPath = path.substring(0, packageRootIndex); -@@ -44972,9 +45119,9 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa +@@ -44972,9 +45123,9 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa const importMode = overrideMode || getDefaultResolutionModeForFile(importingSourceFile, host, options); if (getResolvePackageJsonExports(options)) { const nodeModulesDirectoryName2 = packageRootPath.substring(parts.topLevelPackageNameIndex + 1); @@ -261,7 +272,7 @@ semver exclusivity >=5.5.0-beta <5.5.2 if (fromExports) { return { ...fromExports, verbatimFromExports: true }; } -@@ -125700,6 +125847,11 @@ function createWatchProgram(host) { +@@ -125700,6 +125851,11 @@ function createWatchProgram(host) { if (configFileName) { configFileWatcher = watchFile2(configFileName, scheduleProgramReload, 2e3 /* High */, watchOptions, WatchType.ConfigFile); } @@ -273,7 +284,7 @@ semver exclusivity >=5.5.0-beta <5.5.2 const compilerHost = createCompilerHostFromProgramHost(host, () => compilerOptions, directoryStructureHost); setGetSourceFileAsHashVersioned(compilerHost); const getNewSourceFile = compilerHost.getSourceFile; -@@ -125763,6 +125915,10 @@ function createWatchProgram(host) { +@@ -125763,6 +125919,10 @@ function createWatchProgram(host) { configFileWatcher.close(); configFileWatcher = void 0; } @@ -284,7 +295,7 @@ semver exclusivity >=5.5.0-beta <5.5.2 extendedConfigCache == null ? void 0 : extendedConfigCache.clear(); extendedConfigCache = void 0; if (sharedExtendedConfigFileWatchers) { -@@ -125798,7 +125954,7 @@ function createWatchProgram(host) { +@@ -125798,7 +125958,7 @@ function createWatchProgram(host) { function getCurrentProgram() { return builderProgram && builderProgram.getProgramOrUndefined(); } @@ -293,7 +304,7 @@ semver exclusivity >=5.5.0-beta <5.5.2 writeLog(`Synchronizing program`); Debug.assert(compilerOptions); Debug.assert(rootFileNames); -@@ -125810,7 +125966,7 @@ function createWatchProgram(host) { +@@ -125810,7 +125970,7 @@ function createWatchProgram(host) { resolutionCache.onChangesAffectModuleResolution(); } } @@ -302,7 +313,7 @@ semver exclusivity >=5.5.0-beta <5.5.2 const { originalReadFile, originalFileExists, -@@ -126022,13 +126178,19 @@ function createWatchProgram(host) { +@@ -126022,13 +126182,19 @@ function createWatchProgram(host) { updateLevel = 2 /* Full */; scheduleProgramUpdate(); } @@ -323,7 +334,7 @@ semver exclusivity >=5.5.0-beta <5.5.2 switch (updateLevel) { case 1 /* RootNamesAndUpdate */: (_a = perfLogger) == null ? void 0 : _a.logStartUpdateProgram("PartialConfigReload"); -@@ -126038,12 +126200,19 @@ function createWatchProgram(host) { +@@ -126038,12 +126204,19 @@ function createWatchProgram(host) { (_b = perfLogger) == null ? void 0 : _b.logStartUpdateProgram("FullConfigReload"); reloadConfigFile(); break; @@ -346,17 +357,21 @@ semver exclusivity >=5.5.0-beta <5.5.2 } function reloadFileNamesFromConfigFile() { diff --git a/lib/tsserver.js b/lib/tsserver.js -index 50cc6659c..9cefc330a 100644 +index 50cc..af02 100644 semver exclusivity >=5.5.0-beta <5.5.2 --- a/lib/tsserver.js +++ b/lib/tsserver.js -@@ -33,6 +33,25 @@ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "defau +@@ -33,6 +33,29 @@ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "defau var typescript_exports = {}; __reExport(typescript_exports, require("./typescript.js")); +// src/compiler/pnpapi.ts ++function isPnpEnabled() { ++ var _a; ++ return typeof process !== "undefined" && typeof ((_a = process == null ? void 0 : process.versions) == null ? void 0 : _a.pnp) !== "undefined"; ++} +function getPnpApi(path) { -+ if (typeof process.versions.pnp === "undefined") { ++ if (!isPnpEnabled()) { + return; + } + const { findPnpApi } = require("module"); @@ -376,7 +391,7 @@ semver exclusivity >=5.5.0-beta <5.5.2 // src/tsserver/common.ts function getLogLevel(level) { if (level) { -@@ -240,6 +259,10 @@ function initializeNodeSystem() { +@@ -240,6 +263,10 @@ function initializeNodeSystem() { } try { const args = [(0, typescript_exports.combinePaths)(libDirectory, "watchGuard.js"), path]; @@ -387,7 +402,7 @@ semver exclusivity >=5.5.0-beta <5.5.2 if (logger.hasLevel(typescript_exports.server.LogLevel.verbose)) { logger.info(`Starting ${process.execPath} with args:${typescript_exports.server.stringifyIndented(args)}`); } -@@ -422,6 +445,10 @@ function startNodeSession(options, logger, cancellationToken) { +@@ -422,6 +449,10 @@ function startNodeSession(options, logger, cancellationToken) { break; } } @@ -399,7 +414,7 @@ semver exclusivity >=5.5.0-beta <5.5.2 this.installer = childProcess.fork(typingsInstaller, args, { execArgv }); this.installer.on("message", (m) => this.handleMessage(m)); diff --git a/lib/typescript.d.ts b/lib/typescript.d.ts -index f4c59a844..631850d94 100644 +index f4c5..6318 100644 semver exclusivity >=5.5.0-beta <5.5.2 --- a/lib/typescript.d.ts +++ b/lib/typescript.d.ts @@ -413,27 +428,21 @@ semver exclusivity >=5.5.0-beta <5.5.2 function findConfigFile(searchPath: string, fileExists: (fileName: string) => boolean, configName?: string): string | undefined; function resolveTripleslashReference(moduleName: string, containingFile: string): string; diff --git a/lib/typescript.js b/lib/typescript.js -index 6b52dd675..22cf43d26 100644 +index 6b52..00cf 100644 semver exclusivity >=5.5.0-beta <5.5.2 --- a/lib/typescript.js +++ b/lib/typescript.js -@@ -8708,6 +8708,9 @@ var sys = (() => { - } - } - function isFileSystemCaseSensitive() { -+ if (typeof process.versions.pnp !== `undefined`) { -+ return true; -+ } - if (platform === "win32" || platform === "win64") { - return false; - } -@@ -43194,6 +43197,69 @@ function getDefaultValueForOption(option) { - } - } +@@ -7499,6 +7499,29 @@ var JSDocParsingMode = /* @__PURE__ */ ((JSDocParsingMode6) => { + return JSDocParsingMode6; + })(JSDocParsingMode || {}); +// src/compiler/pnpapi.ts ++function isPnpEnabled() { ++ var _a; ++ return typeof process !== "undefined" && typeof ((_a = process == null ? void 0 : process.versions) == null ? void 0 : _a.pnp) !== "undefined"; ++} +function getPnpApi(path) { -+ if (typeof process.versions.pnp === "undefined") { ++ if (!isPnpEnabled()) { + return; + } + const { findPnpApi } = require("module"); @@ -450,6 +459,23 @@ semver exclusivity >=5.5.0-beta <5.5.2 + ); +} + + // src/compiler/sys.ts + function generateDjb2Hash(data) { + let acc = 5381; +@@ -8708,6 +8731,9 @@ var sys = (() => { + } + } + function isFileSystemCaseSensitive() { ++ if (isPnpEnabled()) { ++ return true; ++ } + if (platform === "win32" || platform === "win64") { + return false; + } +@@ -43194,6 +43220,50 @@ function getDefaultValueForOption(option) { + } + } + +// src/compiler/pnp.ts +function getPnpTypeRoots(currentDirectory) { + const pnpApi = getPnpApi(currentDirectory); @@ -497,7 +523,7 @@ semver exclusivity >=5.5.0-beta <5.5.2 // src/compiler/moduleNameResolver.ts function trace(host, message, ...args) { host.trace(formatMessage(message, ...args)); -@@ -43436,7 +43502,7 @@ function getEffectiveTypeRoots(options, host) { +@@ -43436,7 +43506,7 @@ function getEffectiveTypeRoots(options, host) { return getDefaultTypeRoots(currentDirectory); } } @@ -506,7 +532,7 @@ semver exclusivity >=5.5.0-beta <5.5.2 let typeRoots; forEachAncestorDirectory(normalizePath(currentDirectory), (directory) => { const atTypes = combinePaths(directory, nodeModulesAtTypes); -@@ -43449,6 +43515,15 @@ function arePathsEqual(path1, path2, host) { +@@ -43449,6 +43519,15 @@ function arePathsEqual(path1, path2, host) { const useCaseSensitiveFileNames2 = typeof host.useCaseSensitiveFileNames === "function" ? host.useCaseSensitiveFileNames() : host.useCaseSensitiveFileNames; return comparePaths(path1, path2, !useCaseSensitiveFileNames2) === 0 /* EqualTo */; } @@ -522,7 +548,7 @@ semver exclusivity >=5.5.0-beta <5.5.2 function getOriginalAndResolvedFileName(fileName, host, traceEnabled) { const resolvedFileName = realPath(fileName, host, traceEnabled); const pathsAreEqual = arePathsEqual(fileName, resolvedFileName, host); -@@ -43701,6 +43776,21 @@ function getConditions(options, resolutionMode) { +@@ -43701,6 +43780,21 @@ function getConditions(options, resolutionMode) { } function resolvePackageNameToPackageJson(packageName, containingDirectory, options, host, cache) { const moduleResolutionState = getTemporaryModuleResolutionState(cache == null ? void 0 : cache.getPackageJsonInfoCache(), host, options); @@ -544,7 +570,7 @@ semver exclusivity >=5.5.0-beta <5.5.2 return forEachAncestorDirectory(containingDirectory, (ancestorDirectory) => { if (getBaseFileName(ancestorDirectory) !== "node_modules") { const nodeModulesFolder = combinePaths(ancestorDirectory, "node_modules"); -@@ -45529,7 +45619,15 @@ function loadModuleFromNearestNodeModulesDirectoryWorker(extensions, moduleName, +@@ -45529,7 +45623,15 @@ function loadModuleFromNearestNodeModulesDirectoryWorker(extensions, moduleName, return lookup(secondaryExtensions); } function lookup(extensions2) { @@ -561,7 +587,7 @@ semver exclusivity >=5.5.0-beta <5.5.2 if (getBaseFileName(ancestorDirectory) !== "node_modules") { const resolutionFromCache = tryFindNonRelativeModuleNameInCache(cache, moduleName, mode, ancestorDirectory, redirectedReference, state); if (resolutionFromCache) { -@@ -45564,11 +45662,40 @@ function loadModuleFromImmediateNodeModulesDirectory(extensions, moduleName, dir +@@ -45564,11 +45666,40 @@ function loadModuleFromImmediateNodeModulesDirectory(extensions, moduleName, dir return loadModuleFromSpecificNodeModulesDirectory(4 /* Declaration */, mangleScopedPackageNameWithTrace(moduleName, state), nodeModulesAtTypes2, nodeModulesAtTypesExists, state, cache, redirectedReference); } } @@ -603,7 +629,7 @@ semver exclusivity >=5.5.0-beta <5.5.2 let rootPackageInfo; let packageInfo = getPackageJsonInfo(candidate, !nodeModulesDirectoryExists, state); if (rest !== "" && packageInfo && (!(state.features & 8 /* Exports */) || !hasProperty(((_a = rootPackageInfo = getPackageJsonInfo(packageDirectory, !nodeModulesDirectoryExists, state)) == null ? void 0 : _a.contents.packageJsonContent) ?? emptyArray, "exports"))) { -@@ -45873,6 +46000,18 @@ function traceIfEnabled(state, diagnostic, ...args) { +@@ -45873,6 +46004,18 @@ function traceIfEnabled(state, diagnostic, ...args) { function useCaseSensitiveFileNames(state) { return !state.host.useCaseSensitiveFileNames ? true : typeof state.host.useCaseSensitiveFileNames === "boolean" ? state.host.useCaseSensitiveFileNames : state.host.useCaseSensitiveFileNames(); } @@ -622,7 +648,7 @@ semver exclusivity >=5.5.0-beta <5.5.2 // src/compiler/binder.ts var ModuleInstanceState = /* @__PURE__ */ ((ModuleInstanceState2) => { -@@ -49440,7 +49579,15 @@ function getAllModulePathsWorker(info, importedFileName, host, compilerOptions, +@@ -49440,7 +49583,15 @@ function getAllModulePathsWorker(info, importedFileName, host, compilerOptions, /*preferSymlinks*/ true, (path, isRedirect) => { @@ -639,7 +665,7 @@ semver exclusivity >=5.5.0-beta <5.5.2 allFileNames.set(path, { path: info.getCanonicalFileName(path), isRedirect, isInNodeModules }); importedFileFromNodeModules = importedFileFromNodeModules || isInNodeModules; } -@@ -49739,7 +49886,41 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa +@@ -49739,7 +49890,41 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa if (!host.fileExists || !host.readFile) { return void 0; } @@ -682,7 +708,7 @@ semver exclusivity >=5.5.0-beta <5.5.2 if (!parts) { return void 0; } -@@ -49777,14 +49958,16 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa +@@ -49777,14 +49962,16 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa if (isRedirect && !isPackageRootPath) { return void 0; } @@ -690,7 +716,7 @@ semver exclusivity >=5.5.0-beta <5.5.2 - const pathToTopLevelNodeModules = getCanonicalFileName(moduleSpecifier.substring(0, parts.topLevelNodeModulesIndex)); - if (!(startsWith(canonicalSourceDirectory, pathToTopLevelNodeModules) || globalTypingsCacheLocation && startsWith(getCanonicalFileName(globalTypingsCacheLocation), pathToTopLevelNodeModules))) { - return void 0; -+ if (typeof process.versions.pnp === "undefined") { ++ if (!isPnpEnabled()) { + const globalTypingsCacheLocation = host.getGlobalTypingsCacheLocation && host.getGlobalTypingsCacheLocation(); + const pathToTopLevelNodeModules = getCanonicalFileName(moduleSpecifier.substring(0, parts.topLevelNodeModulesIndex)); + if (!(startsWith(canonicalSourceDirectory, pathToTopLevelNodeModules) || globalTypingsCacheLocation && startsWith(getCanonicalFileName(globalTypingsCacheLocation), pathToTopLevelNodeModules))) { @@ -706,7 +732,7 @@ semver exclusivity >=5.5.0-beta <5.5.2 function tryDirectoryWithPackageJson(packageRootIndex) { var _a, _b; const packageRootPath = path.substring(0, packageRootIndex); -@@ -49797,9 +49980,9 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa +@@ -49797,9 +49984,9 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa const importMode = overrideMode || getDefaultResolutionModeForFile(importingSourceFile, host, options); if (getResolvePackageJsonExports(options)) { const nodeModulesDirectoryName2 = packageRootPath.substring(parts.topLevelPackageNameIndex + 1); @@ -718,7 +744,7 @@ semver exclusivity >=5.5.0-beta <5.5.2 if (fromExports) { return { ...fromExports, verbatimFromExports: true }; } -@@ -122821,6 +123004,7 @@ var ProgramUpdateLevel = /* @__PURE__ */ ((ProgramUpdateLevel2) => { +@@ -122821,6 +123008,7 @@ var ProgramUpdateLevel = /* @__PURE__ */ ((ProgramUpdateLevel2) => { ProgramUpdateLevel2[ProgramUpdateLevel2["Update"] = 0] = "Update"; ProgramUpdateLevel2[ProgramUpdateLevel2["RootNamesAndUpdate"] = 1] = "RootNamesAndUpdate"; ProgramUpdateLevel2[ProgramUpdateLevel2["Full"] = 2] = "Full"; @@ -726,7 +752,7 @@ semver exclusivity >=5.5.0-beta <5.5.2 return ProgramUpdateLevel2; })(ProgramUpdateLevel || {}); function updateSharedExtendedConfigFileWatcher(projectPath, options, extendedConfigFilesMap, createExtendedConfigFileWatch, toPath3) { -@@ -130835,6 +131019,11 @@ function createWatchProgram(host) { +@@ -130835,6 +131023,11 @@ function createWatchProgram(host) { if (configFileName) { configFileWatcher = watchFile2(configFileName, scheduleProgramReload, 2e3 /* High */, watchOptions, WatchType.ConfigFile); } @@ -738,7 +764,7 @@ semver exclusivity >=5.5.0-beta <5.5.2 const compilerHost = createCompilerHostFromProgramHost(host, () => compilerOptions, directoryStructureHost); setGetSourceFileAsHashVersioned(compilerHost); const getNewSourceFile = compilerHost.getSourceFile; -@@ -130898,6 +131087,10 @@ function createWatchProgram(host) { +@@ -130898,6 +131091,10 @@ function createWatchProgram(host) { configFileWatcher.close(); configFileWatcher = void 0; } @@ -749,7 +775,7 @@ semver exclusivity >=5.5.0-beta <5.5.2 extendedConfigCache == null ? void 0 : extendedConfigCache.clear(); extendedConfigCache = void 0; if (sharedExtendedConfigFileWatchers) { -@@ -130933,7 +131126,7 @@ function createWatchProgram(host) { +@@ -130933,7 +131130,7 @@ function createWatchProgram(host) { function getCurrentProgram() { return builderProgram && builderProgram.getProgramOrUndefined(); } @@ -758,7 +784,7 @@ semver exclusivity >=5.5.0-beta <5.5.2 writeLog(`Synchronizing program`); Debug.assert(compilerOptions); Debug.assert(rootFileNames); -@@ -130945,7 +131138,7 @@ function createWatchProgram(host) { +@@ -130945,7 +131142,7 @@ function createWatchProgram(host) { resolutionCache.onChangesAffectModuleResolution(); } } @@ -767,7 +793,7 @@ semver exclusivity >=5.5.0-beta <5.5.2 const { originalReadFile, originalFileExists, -@@ -131157,13 +131350,19 @@ function createWatchProgram(host) { +@@ -131157,13 +131354,19 @@ function createWatchProgram(host) { updateLevel = 2 /* Full */; scheduleProgramUpdate(); } @@ -788,7 +814,7 @@ semver exclusivity >=5.5.0-beta <5.5.2 switch (updateLevel) { case 1 /* RootNamesAndUpdate */: (_a = perfLogger) == null ? void 0 : _a.logStartUpdateProgram("PartialConfigReload"); -@@ -131173,12 +131372,19 @@ function createWatchProgram(host) { +@@ -131173,12 +131376,19 @@ function createWatchProgram(host) { (_b = perfLogger) == null ? void 0 : _b.logStartUpdateProgram("FullConfigReload"); reloadConfigFile(); break; @@ -810,7 +836,7 @@ semver exclusivity >=5.5.0-beta <5.5.2 return getCurrentBuilderProgram(); } function reloadFileNamesFromConfigFile() { -@@ -138135,7 +138341,14 @@ function createPackageJsonImportFilter(fromFile, preferences, host) { +@@ -138135,7 +138345,14 @@ function createPackageJsonImportFilter(fromFile, preferences, host) { return false; } function getNodeModulesPackageNameFromFileName(importedFileName, moduleSpecifierResolutionHost) { @@ -826,7 +852,7 @@ semver exclusivity >=5.5.0-beta <5.5.2 return void 0; } const specifier = ts_moduleSpecifiers_exports.getNodeModulesPackageName( -@@ -138693,6 +138906,9 @@ function isImportableFile(program, from, to, preferences, packageJsonFilter, mod +@@ -138693,6 +138910,9 @@ function isImportableFile(program, from, to, preferences, packageJsonFilter, mod return hasImportablePath; } function isImportablePath(fromPath, toPath3, getCanonicalFileName, globalCachePath) { @@ -836,7 +862,7 @@ semver exclusivity >=5.5.0-beta <5.5.2 const toNodeModules = forEachAncestorDirectory(toPath3, (ancestor) => getBaseFileName(ancestor) === "node_modules" ? ancestor : void 0); const toNodeModulesParent = toNodeModules && getDirectoryPath(getCanonicalFileName(toNodeModules)); return toNodeModulesParent === void 0 || startsWith(getCanonicalFileName(fromPath), toNodeModulesParent) || !!globalCachePath && startsWith(getCanonicalFileName(globalCachePath), toNodeModulesParent); -@@ -166731,7 +166947,34 @@ function getCompletionEntriesForNonRelativeModules(fragment, scriptPath, mode, p +@@ -166731,7 +166951,34 @@ function getCompletionEntriesForNonRelativeModules(fragment, scriptPath, mode, p ); } }; @@ -872,7 +898,7 @@ semver exclusivity >=5.5.0-beta <5.5.2 const nodeModulesDirectoryLookup = ancestorLookup; ancestorLookup = (ancestor) => { const components = getPathComponents(fragment); -@@ -166750,35 +166993,53 @@ function getCompletionEntriesForNonRelativeModules(fragment, scriptPath, mode, p +@@ -166750,35 +166997,53 @@ function getCompletionEntriesForNonRelativeModules(fragment, scriptPath, mode, p const packageDirectory = combinePaths(ancestor, "node_modules", packagePath); const packageFile = combinePaths(packageDirectory, "package.json"); if (tryFileExists(host, packageFile)) { @@ -946,7 +972,7 @@ semver exclusivity >=5.5.0-beta <5.5.2 } } return arrayFrom(result.values()); -@@ -166912,9 +167173,15 @@ function getCompletionEntriesFromTypings(host, program, scriptPath, fragmentDire +@@ -166912,9 +167177,15 @@ function getCompletionEntriesFromTypings(host, program, scriptPath, fragmentDire for (const root of typeRoots) { getCompletionEntriesFromDirectories(root); } @@ -965,11 +991,11 @@ semver exclusivity >=5.5.0-beta <5.5.2 } return result; function getCompletionEntriesFromDirectories(directory) { -@@ -184102,6 +184369,29 @@ var ConfiguredProject2 = class extends Project3 { +@@ -184102,6 +184373,29 @@ var ConfiguredProject2 = class extends Project3 { return this.projectReferences; } updateReferences(refs) { -+ if (typeof process.versions.pnp !== `undefined`) { ++ if (isPnpEnabled()) { + const basePath = this.getCurrentDirectory(); + const getPnpPath = (path) => { + try { @@ -995,7 +1021,7 @@ semver exclusivity >=5.5.0-beta <5.5.2 this.projectReferences = refs; this.potentialProjectReferences = void 0; } -@@ -184807,6 +185097,7 @@ var _ProjectService = class _ProjectService { +@@ -184807,6 +185101,7 @@ var _ProjectService = class _ProjectService { log, getDetailWatchInfo ); @@ -1003,7 +1029,7 @@ semver exclusivity >=5.5.0-beta <5.5.2 (_a = opts.incrementalVerifier) == null ? void 0 : _a.call(opts, this); } toPath(fileName) { -@@ -186737,7 +187028,7 @@ Dynamic files must always be opened with service's current directory or service +@@ -186737,7 +187032,7 @@ Dynamic files must always be opened with service's current directory or service this.performanceEventHandler = performanceEventHandler; } setHostConfiguration(args) { @@ -1012,7 +1038,7 @@ semver exclusivity >=5.5.0-beta <5.5.2 if (args.file) { const info = this.getScriptInfoForNormalizedPath(toNormalizedPath(args.file)); if (info) { -@@ -186786,6 +187077,8 @@ Dynamic files must always be opened with service's current directory or service +@@ -186786,6 +187081,8 @@ Dynamic files must always be opened with service's current directory or service this.hostConfiguration.watchOptions = substitution; this.hostConfiguration.beforeSubstitution = substitution === watchOptions ? void 0 : watchOptions; this.logger.info(`Host watch options changed to ${JSON.stringify(this.hostConfiguration.watchOptions)}, it will be take effect for next watches.`); @@ -1021,7 +1047,7 @@ semver exclusivity >=5.5.0-beta <5.5.2 } } } -@@ -187736,6 +188029,29 @@ Dynamic files must always be opened with service's current directory or service +@@ -187736,6 +188033,29 @@ Dynamic files must always be opened with service's current directory or service }); } /** @internal */ diff --git a/packages/plugin-compat/extra/typescript/patch-d6f4469677c4a233add73638f77090a1.diff b/packages/plugin-compat/extra/typescript/patches/patch-df4bcc98eed52192b8f730f165b227de.diff similarity index 91% rename from packages/plugin-compat/extra/typescript/patch-d6f4469677c4a233add73638f77090a1.diff rename to packages/plugin-compat/extra/typescript/patches/patch-df4bcc98eed52192b8f730f165b227de.diff index d0daba5dae5d..3d9169314b3e 100644 --- a/packages/plugin-compat/extra/typescript/patch-d6f4469677c4a233add73638f77090a1.diff +++ b/packages/plugin-compat/extra/typescript/patches/patch-df4bcc98eed52192b8f730f165b227de.diff @@ -1,25 +1,19 @@ diff --git a/lib/tsc.js b/lib/tsc.js -index e3dc24d79..d287f962a 100644 +index e3dc..0e10 100644 semver exclusivity >=5.5.2 <5.6.0-beta --- a/lib/tsc.js +++ b/lib/tsc.js -@@ -5067,6 +5067,9 @@ var sys = (() => { - } - } - function isFileSystemCaseSensitive() { -+ if (typeof process.versions.pnp !== `undefined`) { -+ return true; -+ } - if (platform === "win32" || platform === "win64") { - return false; - } -@@ -38558,6 +38561,48 @@ function getDefaultValueForOption(option) { +@@ -3898,6 +3898,29 @@ var commentPragmas = { } - } + }; +// src/compiler/pnpapi.ts ++function isPnpEnabled() { ++ var _a; ++ return typeof process !== "undefined" && typeof ((_a = process == null ? void 0 : process.versions) == null ? void 0 : _a.pnp) !== "undefined"; ++} +function getPnpApi(path) { -+ if (typeof process.versions.pnp === "undefined") { ++ if (!isPnpEnabled()) { + return; + } + const { findPnpApi } = require("module"); @@ -36,6 +30,23 @@ semver exclusivity >=5.5.2 <5.6.0-beta + ); +} + + // src/compiler/sys.ts + function generateDjb2Hash(data) { + let acc = 5381; +@@ -5067,6 +5090,9 @@ var sys = (() => { + } + } + function isFileSystemCaseSensitive() { ++ if (isPnpEnabled()) { ++ return true; ++ } + if (platform === "win32" || platform === "win64") { + return false; + } +@@ -38558,6 +38584,29 @@ function getDefaultValueForOption(option) { + } + } + +// src/compiler/pnp.ts +function getPnpTypeRoots(currentDirectory) { + const pnpApi = getPnpApi(currentDirectory); @@ -62,7 +73,7 @@ semver exclusivity >=5.5.2 <5.6.0-beta // src/compiler/moduleNameResolver.ts function trace(host, message, ...args) { host.trace(formatMessage(message, ...args)); -@@ -38775,7 +38820,7 @@ function getEffectiveTypeRoots(options, host) { +@@ -38775,7 +38824,7 @@ function getEffectiveTypeRoots(options, host) { return getDefaultTypeRoots(currentDirectory); } } @@ -71,7 +82,7 @@ semver exclusivity >=5.5.2 <5.6.0-beta let typeRoots; forEachAncestorDirectory(normalizePath(currentDirectory), (directory) => { const atTypes = combinePaths(directory, nodeModulesAtTypes); -@@ -38788,6 +38833,15 @@ function arePathsEqual(path1, path2, host) { +@@ -38788,6 +38837,15 @@ function arePathsEqual(path1, path2, host) { const useCaseSensitiveFileNames2 = typeof host.useCaseSensitiveFileNames === "function" ? host.useCaseSensitiveFileNames() : host.useCaseSensitiveFileNames; return comparePaths(path1, path2, !useCaseSensitiveFileNames2) === 0 /* EqualTo */; } @@ -87,7 +98,7 @@ semver exclusivity >=5.5.2 <5.6.0-beta function getOriginalAndResolvedFileName(fileName, host, traceEnabled) { const resolvedFileName = realPath(fileName, host, traceEnabled); const pathsAreEqual = arePathsEqual(fileName, resolvedFileName, host); -@@ -40676,7 +40730,15 @@ function loadModuleFromNearestNodeModulesDirectoryWorker(extensions, moduleName, +@@ -40676,7 +40734,15 @@ function loadModuleFromNearestNodeModulesDirectoryWorker(extensions, moduleName, return lookup(secondaryExtensions); } function lookup(extensions2) { @@ -104,7 +115,7 @@ semver exclusivity >=5.5.2 <5.6.0-beta if (getBaseFileName(ancestorDirectory) !== "node_modules") { const resolutionFromCache = tryFindNonRelativeModuleNameInCache(cache, moduleName, mode, ancestorDirectory, redirectedReference, state); if (resolutionFromCache) { -@@ -40711,11 +40773,40 @@ function loadModuleFromImmediateNodeModulesDirectory(extensions, moduleName, dir +@@ -40711,11 +40777,40 @@ function loadModuleFromImmediateNodeModulesDirectory(extensions, moduleName, dir return loadModuleFromSpecificNodeModulesDirectory(4 /* Declaration */, mangleScopedPackageNameWithTrace(moduleName, state), nodeModulesAtTypes2, nodeModulesAtTypesExists, state, cache, redirectedReference); } } @@ -146,7 +157,7 @@ semver exclusivity >=5.5.2 <5.6.0-beta let rootPackageInfo; let packageInfo = getPackageJsonInfo(candidate, !nodeModulesDirectoryExists, state); if (rest !== "" && packageInfo && (!(state.features & 8 /* Exports */) || !hasProperty(((_a = rootPackageInfo = getPackageJsonInfo(packageDirectory, !nodeModulesDirectoryExists, state)) == null ? void 0 : _a.contents.packageJsonContent) ?? emptyArray, "exports"))) { -@@ -41016,6 +41107,18 @@ function traceIfEnabled(state, diagnostic, ...args) { +@@ -41016,6 +41111,18 @@ function traceIfEnabled(state, diagnostic, ...args) { function useCaseSensitiveFileNames(state) { return !state.host.useCaseSensitiveFileNames ? true : typeof state.host.useCaseSensitiveFileNames === "boolean" ? state.host.useCaseSensitiveFileNames : state.host.useCaseSensitiveFileNames(); } @@ -165,7 +176,7 @@ semver exclusivity >=5.5.2 <5.6.0-beta // src/compiler/binder.ts function getModuleInstanceState(node, visited) { -@@ -44433,7 +44536,15 @@ function getAllModulePathsWorker(info, importedFileName, host, compilerOptions, +@@ -44433,7 +44540,15 @@ function getAllModulePathsWorker(info, importedFileName, host, compilerOptions, /*preferSymlinks*/ true, (path, isRedirect) => { @@ -182,7 +193,7 @@ semver exclusivity >=5.5.2 <5.6.0-beta allFileNames.set(path, { path: info.getCanonicalFileName(path), isRedirect, isInNodeModules }); importedFileFromNodeModules = importedFileFromNodeModules || isInNodeModules; } -@@ -44724,7 +44835,41 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa +@@ -44724,7 +44839,41 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa if (!host.fileExists || !host.readFile) { return void 0; } @@ -225,7 +236,7 @@ semver exclusivity >=5.5.2 <5.6.0-beta if (!parts) { return void 0; } -@@ -44761,14 +44906,16 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa +@@ -44761,14 +44910,16 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa if (isRedirect && !isPackageRootPath) { return void 0; } @@ -233,7 +244,7 @@ semver exclusivity >=5.5.2 <5.6.0-beta - const pathToTopLevelNodeModules = getCanonicalFileName(moduleSpecifier.substring(0, parts.topLevelNodeModulesIndex)); - if (!(startsWith(canonicalSourceDirectory, pathToTopLevelNodeModules) || globalTypingsCacheLocation && startsWith(getCanonicalFileName(globalTypingsCacheLocation), pathToTopLevelNodeModules))) { - return void 0; -+ if (typeof process.versions.pnp === "undefined") { ++ if (!isPnpEnabled()) { + const globalTypingsCacheLocation = host.getGlobalTypingsCacheLocation && host.getGlobalTypingsCacheLocation(); + const pathToTopLevelNodeModules = getCanonicalFileName(moduleSpecifier.substring(0, parts.topLevelNodeModulesIndex)); + if (!(startsWith(canonicalSourceDirectory, pathToTopLevelNodeModules) || globalTypingsCacheLocation && startsWith(getCanonicalFileName(globalTypingsCacheLocation), pathToTopLevelNodeModules))) { @@ -249,7 +260,7 @@ semver exclusivity >=5.5.2 <5.6.0-beta function tryDirectoryWithPackageJson(packageRootIndex) { var _a, _b; const packageRootPath = path.substring(0, packageRootIndex); -@@ -44781,9 +44928,9 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa +@@ -44781,9 +44932,9 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa const importMode = overrideMode || importingSourceFile.impliedNodeFormat; if (getResolvePackageJsonExports(options)) { const nodeModulesDirectoryName2 = packageRootPath.substring(parts.topLevelPackageNameIndex + 1); @@ -261,7 +272,7 @@ semver exclusivity >=5.5.2 <5.6.0-beta if (fromExports) { return { ...fromExports, verbatimFromExports: true }; } -@@ -125757,6 +125904,11 @@ function createWatchProgram(host) { +@@ -125757,6 +125908,11 @@ function createWatchProgram(host) { if (configFileName) { configFileWatcher = watchFile2(configFileName, scheduleProgramReload, 2e3 /* High */, watchOptions, WatchType.ConfigFile); } @@ -273,7 +284,7 @@ semver exclusivity >=5.5.2 <5.6.0-beta const compilerHost = createCompilerHostFromProgramHost(host, () => compilerOptions, directoryStructureHost); setGetSourceFileAsHashVersioned(compilerHost); const getNewSourceFile = compilerHost.getSourceFile; -@@ -125819,6 +125971,10 @@ function createWatchProgram(host) { +@@ -125819,6 +125975,10 @@ function createWatchProgram(host) { configFileWatcher.close(); configFileWatcher = void 0; } @@ -284,7 +295,7 @@ semver exclusivity >=5.5.2 <5.6.0-beta extendedConfigCache == null ? void 0 : extendedConfigCache.clear(); extendedConfigCache = void 0; if (sharedExtendedConfigFileWatchers) { -@@ -125854,7 +126010,7 @@ function createWatchProgram(host) { +@@ -125854,7 +126014,7 @@ function createWatchProgram(host) { function getCurrentProgram() { return builderProgram && builderProgram.getProgramOrUndefined(); } @@ -293,7 +304,7 @@ semver exclusivity >=5.5.2 <5.6.0-beta writeLog(`Synchronizing program`); Debug.assert(compilerOptions); Debug.assert(rootFileNames); -@@ -125866,7 +126022,7 @@ function createWatchProgram(host) { +@@ -125866,7 +126026,7 @@ function createWatchProgram(host) { resolutionCache.onChangesAffectModuleResolution(); } } @@ -302,7 +313,7 @@ semver exclusivity >=5.5.2 <5.6.0-beta const { originalReadFile, originalFileExists, -@@ -126074,13 +126230,19 @@ function createWatchProgram(host) { +@@ -126074,13 +126234,19 @@ function createWatchProgram(host) { updateLevel = 2 /* Full */; scheduleProgramUpdate(); } @@ -323,7 +334,7 @@ semver exclusivity >=5.5.2 <5.6.0-beta switch (updateLevel) { case 1 /* RootNamesAndUpdate */: (_a = perfLogger) == null ? void 0 : _a.logStartUpdateProgram("PartialConfigReload"); -@@ -126090,12 +126252,19 @@ function createWatchProgram(host) { +@@ -126090,12 +126256,19 @@ function createWatchProgram(host) { (_b = perfLogger) == null ? void 0 : _b.logStartUpdateProgram("FullConfigReload"); reloadConfigFile(); break; @@ -346,17 +357,21 @@ semver exclusivity >=5.5.2 <5.6.0-beta } function reloadFileNamesFromConfigFile() { diff --git a/lib/tsserver.js b/lib/tsserver.js -index 398a3a1ed..8a81feff1 100644 +index 398a..eb5c 100644 semver exclusivity >=5.5.2 <5.6.0-beta --- a/lib/tsserver.js +++ b/lib/tsserver.js -@@ -33,6 +33,25 @@ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "defau +@@ -33,6 +33,29 @@ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "defau var typescript_exports = {}; __reExport(typescript_exports, require("./typescript.js")); +// src/compiler/pnpapi.ts ++function isPnpEnabled() { ++ var _a; ++ return typeof process !== "undefined" && typeof ((_a = process == null ? void 0 : process.versions) == null ? void 0 : _a.pnp) !== "undefined"; ++} +function getPnpApi(path) { -+ if (typeof process.versions.pnp === "undefined") { ++ if (!isPnpEnabled()) { + return; + } + const { findPnpApi } = require("module"); @@ -376,7 +391,7 @@ semver exclusivity >=5.5.2 <5.6.0-beta // src/tsserver/common.ts function getLogLevel(level) { if (level) { -@@ -237,6 +256,10 @@ function initializeNodeSystem() { +@@ -237,6 +260,10 @@ function initializeNodeSystem() { } try { const args = [(0, typescript_exports.combinePaths)(libDirectory, "watchGuard.js"), path]; @@ -387,7 +402,7 @@ semver exclusivity >=5.5.2 <5.6.0-beta if (logger.hasLevel(typescript_exports.server.LogLevel.verbose)) { logger.info(`Starting ${process.execPath} with args:${typescript_exports.server.stringifyIndented(args)}`); } -@@ -417,6 +440,10 @@ function startNodeSession(options, logger, cancellationToken) { +@@ -417,6 +444,10 @@ function startNodeSession(options, logger, cancellationToken) { break; } } @@ -399,7 +414,7 @@ semver exclusivity >=5.5.2 <5.6.0-beta this.installer = childProcess.fork(typingsInstaller, args, { execArgv }); this.installer.on("message", (m) => this.handleMessage(m)); diff --git a/lib/typescript.d.ts b/lib/typescript.d.ts -index fbb3e4912..e601e3d32 100644 +index fbb3..e601 100644 semver exclusivity >=5.5.2 <5.6.0-beta --- a/lib/typescript.d.ts +++ b/lib/typescript.d.ts @@ -413,27 +428,21 @@ semver exclusivity >=5.5.2 <5.6.0-beta function findConfigFile(searchPath: string, fileExists: (fileName: string) => boolean, configName?: string): string | undefined; function resolveTripleslashReference(moduleName: string, containingFile: string): string; diff --git a/lib/typescript.js b/lib/typescript.js -index 714953f46..e30a70401 100644 +index 7149..9c68 100644 semver exclusivity >=5.5.2 <5.6.0-beta --- a/lib/typescript.js +++ b/lib/typescript.js -@@ -8626,6 +8626,9 @@ var sys = (() => { - } - } - function isFileSystemCaseSensitive() { -+ if (typeof process.versions.pnp !== `undefined`) { -+ return true; -+ } - if (platform === "win32" || platform === "win64") { - return false; - } -@@ -43044,6 +43047,69 @@ function getDefaultValueForOption(option) { - } - } +@@ -7441,6 +7441,29 @@ var JSDocParsingMode = /* @__PURE__ */ ((JSDocParsingMode6) => { + return JSDocParsingMode6; + })(JSDocParsingMode || {}); +// src/compiler/pnpapi.ts ++function isPnpEnabled() { ++ var _a; ++ return typeof process !== "undefined" && typeof ((_a = process == null ? void 0 : process.versions) == null ? void 0 : _a.pnp) !== "undefined"; ++} +function getPnpApi(path) { -+ if (typeof process.versions.pnp === "undefined") { ++ if (!isPnpEnabled()) { + return; + } + const { findPnpApi } = require("module"); @@ -450,6 +459,23 @@ semver exclusivity >=5.5.2 <5.6.0-beta + ); +} + + // src/compiler/sys.ts + function generateDjb2Hash(data) { + let acc = 5381; +@@ -8626,6 +8649,9 @@ var sys = (() => { + } + } + function isFileSystemCaseSensitive() { ++ if (isPnpEnabled()) { ++ return true; ++ } + if (platform === "win32" || platform === "win64") { + return false; + } +@@ -43044,6 +43070,50 @@ function getDefaultValueForOption(option) { + } + } + +// src/compiler/pnp.ts +function getPnpTypeRoots(currentDirectory) { + const pnpApi = getPnpApi(currentDirectory); @@ -497,7 +523,7 @@ semver exclusivity >=5.5.2 <5.6.0-beta // src/compiler/moduleNameResolver.ts function trace(host, message, ...args) { host.trace(formatMessage(message, ...args)); -@@ -43269,7 +43335,7 @@ function getEffectiveTypeRoots(options, host) { +@@ -43269,7 +43339,7 @@ function getEffectiveTypeRoots(options, host) { return getDefaultTypeRoots(currentDirectory); } } @@ -506,7 +532,7 @@ semver exclusivity >=5.5.2 <5.6.0-beta let typeRoots; forEachAncestorDirectory(normalizePath(currentDirectory), (directory) => { const atTypes = combinePaths(directory, nodeModulesAtTypes); -@@ -43282,6 +43348,15 @@ function arePathsEqual(path1, path2, host) { +@@ -43282,6 +43352,15 @@ function arePathsEqual(path1, path2, host) { const useCaseSensitiveFileNames2 = typeof host.useCaseSensitiveFileNames === "function" ? host.useCaseSensitiveFileNames() : host.useCaseSensitiveFileNames; return comparePaths(path1, path2, !useCaseSensitiveFileNames2) === 0 /* EqualTo */; } @@ -522,7 +548,7 @@ semver exclusivity >=5.5.2 <5.6.0-beta function getOriginalAndResolvedFileName(fileName, host, traceEnabled) { const resolvedFileName = realPath(fileName, host, traceEnabled); const pathsAreEqual = arePathsEqual(fileName, resolvedFileName, host); -@@ -43531,6 +43606,21 @@ function getConditions(options, resolutionMode) { +@@ -43531,6 +43610,21 @@ function getConditions(options, resolutionMode) { } function resolvePackageNameToPackageJson(packageName, containingDirectory, options, host, cache) { const moduleResolutionState = getTemporaryModuleResolutionState(cache == null ? void 0 : cache.getPackageJsonInfoCache(), host, options); @@ -544,7 +570,7 @@ semver exclusivity >=5.5.2 <5.6.0-beta return forEachAncestorDirectory(containingDirectory, (ancestorDirectory) => { if (getBaseFileName(ancestorDirectory) !== "node_modules") { const nodeModulesFolder = combinePaths(ancestorDirectory, "node_modules"); -@@ -45322,7 +45412,15 @@ function loadModuleFromNearestNodeModulesDirectoryWorker(extensions, moduleName, +@@ -45322,7 +45416,15 @@ function loadModuleFromNearestNodeModulesDirectoryWorker(extensions, moduleName, return lookup(secondaryExtensions); } function lookup(extensions2) { @@ -561,7 +587,7 @@ semver exclusivity >=5.5.2 <5.6.0-beta if (getBaseFileName(ancestorDirectory) !== "node_modules") { const resolutionFromCache = tryFindNonRelativeModuleNameInCache(cache, moduleName, mode, ancestorDirectory, redirectedReference, state); if (resolutionFromCache) { -@@ -45357,11 +45455,40 @@ function loadModuleFromImmediateNodeModulesDirectory(extensions, moduleName, dir +@@ -45357,11 +45459,40 @@ function loadModuleFromImmediateNodeModulesDirectory(extensions, moduleName, dir return loadModuleFromSpecificNodeModulesDirectory(4 /* Declaration */, mangleScopedPackageNameWithTrace(moduleName, state), nodeModulesAtTypes2, nodeModulesAtTypesExists, state, cache, redirectedReference); } } @@ -603,7 +629,7 @@ semver exclusivity >=5.5.2 <5.6.0-beta let rootPackageInfo; let packageInfo = getPackageJsonInfo(candidate, !nodeModulesDirectoryExists, state); if (rest !== "" && packageInfo && (!(state.features & 8 /* Exports */) || !hasProperty(((_a = rootPackageInfo = getPackageJsonInfo(packageDirectory, !nodeModulesDirectoryExists, state)) == null ? void 0 : _a.contents.packageJsonContent) ?? emptyArray, "exports"))) { -@@ -45662,6 +45789,18 @@ function traceIfEnabled(state, diagnostic, ...args) { +@@ -45662,6 +45793,18 @@ function traceIfEnabled(state, diagnostic, ...args) { function useCaseSensitiveFileNames(state) { return !state.host.useCaseSensitiveFileNames ? true : typeof state.host.useCaseSensitiveFileNames === "boolean" ? state.host.useCaseSensitiveFileNames : state.host.useCaseSensitiveFileNames(); } @@ -622,7 +648,7 @@ semver exclusivity >=5.5.2 <5.6.0-beta // src/compiler/binder.ts var ModuleInstanceState = /* @__PURE__ */ ((ModuleInstanceState2) => { -@@ -49197,7 +49336,15 @@ function getAllModulePathsWorker(info, importedFileName, host, compilerOptions, +@@ -49197,7 +49340,15 @@ function getAllModulePathsWorker(info, importedFileName, host, compilerOptions, /*preferSymlinks*/ true, (path, isRedirect) => { @@ -639,7 +665,7 @@ semver exclusivity >=5.5.2 <5.6.0-beta allFileNames.set(path, { path: info.getCanonicalFileName(path), isRedirect, isInNodeModules }); importedFileFromNodeModules = importedFileFromNodeModules || isInNodeModules; } -@@ -49488,7 +49635,41 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa +@@ -49488,7 +49639,41 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa if (!host.fileExists || !host.readFile) { return void 0; } @@ -682,7 +708,7 @@ semver exclusivity >=5.5.2 <5.6.0-beta if (!parts) { return void 0; } -@@ -49525,14 +49706,16 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa +@@ -49525,14 +49710,16 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa if (isRedirect && !isPackageRootPath) { return void 0; } @@ -690,7 +716,7 @@ semver exclusivity >=5.5.2 <5.6.0-beta - const pathToTopLevelNodeModules = getCanonicalFileName(moduleSpecifier.substring(0, parts.topLevelNodeModulesIndex)); - if (!(startsWith(canonicalSourceDirectory, pathToTopLevelNodeModules) || globalTypingsCacheLocation && startsWith(getCanonicalFileName(globalTypingsCacheLocation), pathToTopLevelNodeModules))) { - return void 0; -+ if (typeof process.versions.pnp === "undefined") { ++ if (!isPnpEnabled()) { + const globalTypingsCacheLocation = host.getGlobalTypingsCacheLocation && host.getGlobalTypingsCacheLocation(); + const pathToTopLevelNodeModules = getCanonicalFileName(moduleSpecifier.substring(0, parts.topLevelNodeModulesIndex)); + if (!(startsWith(canonicalSourceDirectory, pathToTopLevelNodeModules) || globalTypingsCacheLocation && startsWith(getCanonicalFileName(globalTypingsCacheLocation), pathToTopLevelNodeModules))) { @@ -706,7 +732,7 @@ semver exclusivity >=5.5.2 <5.6.0-beta function tryDirectoryWithPackageJson(packageRootIndex) { var _a, _b; const packageRootPath = path.substring(0, packageRootIndex); -@@ -49545,9 +49728,9 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa +@@ -49545,9 +49732,9 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa const importMode = overrideMode || importingSourceFile.impliedNodeFormat; if (getResolvePackageJsonExports(options)) { const nodeModulesDirectoryName2 = packageRootPath.substring(parts.topLevelPackageNameIndex + 1); @@ -718,7 +744,7 @@ semver exclusivity >=5.5.2 <5.6.0-beta if (fromExports) { return { ...fromExports, verbatimFromExports: true }; } -@@ -122919,6 +123102,7 @@ var ProgramUpdateLevel = /* @__PURE__ */ ((ProgramUpdateLevel2) => { +@@ -122919,6 +123106,7 @@ var ProgramUpdateLevel = /* @__PURE__ */ ((ProgramUpdateLevel2) => { ProgramUpdateLevel2[ProgramUpdateLevel2["Update"] = 0] = "Update"; ProgramUpdateLevel2[ProgramUpdateLevel2["RootNamesAndUpdate"] = 1] = "RootNamesAndUpdate"; ProgramUpdateLevel2[ProgramUpdateLevel2["Full"] = 2] = "Full"; @@ -726,7 +752,7 @@ semver exclusivity >=5.5.2 <5.6.0-beta return ProgramUpdateLevel2; })(ProgramUpdateLevel || {}); function updateSharedExtendedConfigFileWatcher(projectPath, options, extendedConfigFilesMap, createExtendedConfigFileWatch, toPath3) { -@@ -130823,6 +131007,11 @@ function createWatchProgram(host) { +@@ -130823,6 +131011,11 @@ function createWatchProgram(host) { if (configFileName) { configFileWatcher = watchFile2(configFileName, scheduleProgramReload, 2e3 /* High */, watchOptions, WatchType.ConfigFile); } @@ -738,7 +764,7 @@ semver exclusivity >=5.5.2 <5.6.0-beta const compilerHost = createCompilerHostFromProgramHost(host, () => compilerOptions, directoryStructureHost); setGetSourceFileAsHashVersioned(compilerHost); const getNewSourceFile = compilerHost.getSourceFile; -@@ -130885,6 +131074,10 @@ function createWatchProgram(host) { +@@ -130885,6 +131078,10 @@ function createWatchProgram(host) { configFileWatcher.close(); configFileWatcher = void 0; } @@ -749,7 +775,7 @@ semver exclusivity >=5.5.2 <5.6.0-beta extendedConfigCache == null ? void 0 : extendedConfigCache.clear(); extendedConfigCache = void 0; if (sharedExtendedConfigFileWatchers) { -@@ -130920,7 +131113,7 @@ function createWatchProgram(host) { +@@ -130920,7 +131117,7 @@ function createWatchProgram(host) { function getCurrentProgram() { return builderProgram && builderProgram.getProgramOrUndefined(); } @@ -758,7 +784,7 @@ semver exclusivity >=5.5.2 <5.6.0-beta writeLog(`Synchronizing program`); Debug.assert(compilerOptions); Debug.assert(rootFileNames); -@@ -130932,7 +131125,7 @@ function createWatchProgram(host) { +@@ -130932,7 +131129,7 @@ function createWatchProgram(host) { resolutionCache.onChangesAffectModuleResolution(); } } @@ -767,7 +793,7 @@ semver exclusivity >=5.5.2 <5.6.0-beta const { originalReadFile, originalFileExists, -@@ -131140,13 +131333,19 @@ function createWatchProgram(host) { +@@ -131140,13 +131337,19 @@ function createWatchProgram(host) { updateLevel = 2 /* Full */; scheduleProgramUpdate(); } @@ -788,7 +814,7 @@ semver exclusivity >=5.5.2 <5.6.0-beta switch (updateLevel) { case 1 /* RootNamesAndUpdate */: (_a = perfLogger) == null ? void 0 : _a.logStartUpdateProgram("PartialConfigReload"); -@@ -131156,12 +131355,19 @@ function createWatchProgram(host) { +@@ -131156,12 +131359,19 @@ function createWatchProgram(host) { (_b = perfLogger) == null ? void 0 : _b.logStartUpdateProgram("FullConfigReload"); reloadConfigFile(); break; @@ -810,7 +836,7 @@ semver exclusivity >=5.5.2 <5.6.0-beta return getCurrentBuilderProgram(); } function reloadFileNamesFromConfigFile() { -@@ -137947,7 +138153,14 @@ function createPackageJsonImportFilter(fromFile, preferences, host) { +@@ -137947,7 +138157,14 @@ function createPackageJsonImportFilter(fromFile, preferences, host) { return false; } function getNodeModulesPackageNameFromFileName(importedFileName, moduleSpecifierResolutionHost) { @@ -826,7 +852,7 @@ semver exclusivity >=5.5.2 <5.6.0-beta return void 0; } const specifier = ts_moduleSpecifiers_exports.getNodeModulesPackageName( -@@ -138520,6 +138733,9 @@ function isImportableFile(program, from, to, preferences, packageJsonFilter, mod +@@ -138520,6 +138737,9 @@ function isImportableFile(program, from, to, preferences, packageJsonFilter, mod return hasImportablePath; } function isImportablePath(fromPath, toPath3, getCanonicalFileName, globalCachePath) { @@ -836,7 +862,7 @@ semver exclusivity >=5.5.2 <5.6.0-beta const toNodeModules = forEachAncestorDirectory(toPath3, (ancestor) => getBaseFileName(ancestor) === "node_modules" ? ancestor : void 0); const toNodeModulesParent = toNodeModules && getDirectoryPath(getCanonicalFileName(toNodeModules)); return toNodeModulesParent === void 0 || startsWith(getCanonicalFileName(fromPath), toNodeModulesParent) || !!globalCachePath && startsWith(getCanonicalFileName(globalCachePath), toNodeModulesParent); -@@ -166819,7 +167035,33 @@ function getCompletionEntriesForNonRelativeModules(fragment, scriptPath, mode, c +@@ -166819,7 +167039,33 @@ function getCompletionEntriesForNonRelativeModules(fragment, scriptPath, mode, c ); } }; @@ -871,7 +897,7 @@ semver exclusivity >=5.5.2 <5.6.0-beta const nodeModulesDirectoryLookup = ancestorLookup; ancestorLookup = (ancestor) => { const components = getPathComponents(fragment); -@@ -166838,34 +167080,52 @@ function getCompletionEntriesForNonRelativeModules(fragment, scriptPath, mode, c +@@ -166838,34 +167084,52 @@ function getCompletionEntriesForNonRelativeModules(fragment, scriptPath, mode, c const packageDirectory = combinePaths(ancestor, "node_modules", packagePath); const packageFile = combinePaths(packageDirectory, "package.json"); if (tryFileExists(host, packageFile)) { @@ -944,7 +970,7 @@ semver exclusivity >=5.5.2 <5.6.0-beta } } return arrayFrom(result.values()); -@@ -166996,9 +167256,15 @@ function getCompletionEntriesFromTypings(host, options, scriptPath, fragmentDire +@@ -166996,9 +167260,15 @@ function getCompletionEntriesFromTypings(host, options, scriptPath, fragmentDire for (const root of typeRoots) { getCompletionEntriesFromDirectories(root); } @@ -963,11 +989,11 @@ semver exclusivity >=5.5.2 <5.6.0-beta } return result; function getCompletionEntriesFromDirectories(directory) { -@@ -184315,6 +184581,29 @@ var ConfiguredProject2 = class extends Project3 { +@@ -184315,6 +184585,29 @@ var ConfiguredProject2 = class extends Project3 { return this.projectReferences; } updateReferences(refs) { -+ if (typeof process.versions.pnp !== `undefined`) { ++ if (isPnpEnabled()) { + const basePath = this.getCurrentDirectory(); + const getPnpPath = (path) => { + try { @@ -993,7 +1019,7 @@ semver exclusivity >=5.5.2 <5.6.0-beta this.projectReferences = refs; this.potentialProjectReferences = void 0; } -@@ -185029,6 +185318,7 @@ var _ProjectService = class _ProjectService { +@@ -185029,6 +185322,7 @@ var _ProjectService = class _ProjectService { log, getDetailWatchInfo ); @@ -1001,7 +1027,7 @@ semver exclusivity >=5.5.2 <5.6.0-beta (_a = opts.incrementalVerifier) == null ? void 0 : _a.call(opts, this); } toPath(fileName) { -@@ -186911,7 +187201,7 @@ Dynamic files must always be opened with service's current directory or service +@@ -186911,7 +187205,7 @@ Dynamic files must always be opened with service's current directory or service this.performanceEventHandler = performanceEventHandler; } setHostConfiguration(args) { @@ -1010,7 +1036,7 @@ semver exclusivity >=5.5.2 <5.6.0-beta if (args.file) { const info = this.getScriptInfoForNormalizedPath(toNormalizedPath(args.file)); if (info) { -@@ -186960,6 +187250,8 @@ Dynamic files must always be opened with service's current directory or service +@@ -186960,6 +187254,8 @@ Dynamic files must always be opened with service's current directory or service this.hostConfiguration.watchOptions = substitution; this.hostConfiguration.beforeSubstitution = substitution === watchOptions ? void 0 : watchOptions; this.logger.info(`Host watch options changed to ${JSON.stringify(this.hostConfiguration.watchOptions)}, it will be take effect for next watches.`); @@ -1019,7 +1045,7 @@ semver exclusivity >=5.5.2 <5.6.0-beta } } } -@@ -187958,6 +188250,29 @@ Dynamic files must always be opened with service's current directory or service +@@ -187958,6 +188254,29 @@ Dynamic files must always be opened with service's current directory or service }); } /** @internal */ diff --git a/packages/plugin-compat/extra/typescript/patch-ea93502474b828e0fe0088bc8318e735.diff b/packages/plugin-compat/extra/typescript/patches/patch-ea93502474b828e0fe0088bc8318e735.diff similarity index 99% rename from packages/plugin-compat/extra/typescript/patch-ea93502474b828e0fe0088bc8318e735.diff rename to packages/plugin-compat/extra/typescript/patches/patch-ea93502474b828e0fe0088bc8318e735.diff index 72f2d15ff430..c8463259af1f 100644 --- a/packages/plugin-compat/extra/typescript/patch-ea93502474b828e0fe0088bc8318e735.diff +++ b/packages/plugin-compat/extra/typescript/patches/patch-ea93502474b828e0fe0088bc8318e735.diff @@ -1,5 +1,5 @@ diff --git a/lib/tsc.js b/lib/tsc.js -index c4e8dd5cc..a284f6e7d 100644 +index c4e8..a284 100644 semver exclusivity >=4.6.1-rc <4.7 --- a/lib/tsc.js +++ b/lib/tsc.js @@ -303,7 +303,7 @@ semver exclusivity >=4.6.1-rc <4.7 ts.perfLogger.logStartUpdateProgram("SynchronizeProgram"); synchronizeProgram(); diff --git a/lib/tsserver.js b/lib/tsserver.js -index a37b5abbc..284b2bf2a 100644 +index a37b..284b 100644 semver exclusivity >=4.6.1-rc <4.7 --- a/lib/tsserver.js +++ b/lib/tsserver.js @@ -924,7 +924,7 @@ semver exclusivity >=4.6.1-rc <4.7 this.installer.on("message", function (m) { return _this.handleMessage(m); }); // We have to schedule this event to the next tick diff --git a/lib/tsserverlibrary.js b/lib/tsserverlibrary.js -index ffd199fcd..2b432957f 100644 +index ffd1..2b43 100644 semver exclusivity >=4.6.1-rc <4.7 --- a/lib/tsserverlibrary.js +++ b/lib/tsserverlibrary.js @@ -1521,7 +1521,7 @@ semver exclusivity >=4.6.1-rc <4.7 var _this = this; var watchers = this.packageJsonFilesMap || (this.packageJsonFilesMap = new ts.Map()); diff --git a/lib/typescript.js b/lib/typescript.js -index 078ad70d5..b2f4aca83 100644 +index 078a..b2f4 100644 semver exclusivity >=4.6.1-rc <4.7 --- a/lib/typescript.js +++ b/lib/typescript.js @@ -2014,7 +2014,7 @@ semver exclusivity >=4.6.1-rc <4.7 return statement; }); diff --git a/lib/typescriptServices.js b/lib/typescriptServices.js -index 06d19d6fd..c391e2e70 100644 +index 06d1..c391 100644 semver exclusivity >=4.6.1-rc <4.7 --- a/lib/typescriptServices.js +++ b/lib/typescriptServices.js @@ -2507,7 +2507,7 @@ semver exclusivity >=4.6.1-rc <4.7 return statement; }); diff --git a/lib/typingsInstaller.js b/lib/typingsInstaller.js -index 31f3c7a89..5fc4faa0c 100644 +index 31f3..5fc4 100644 semver exclusivity >=4.6.1-rc <4.7 --- a/lib/typingsInstaller.js +++ b/lib/typingsInstaller.js diff --git a/packages/plugin-compat/extra/typescript/patch-ead1b459509b67bd007c51190f7b8d9b.diff b/packages/plugin-compat/extra/typescript/patches/patch-ead1b459509b67bd007c51190f7b8d9b.diff similarity index 99% rename from packages/plugin-compat/extra/typescript/patch-ead1b459509b67bd007c51190f7b8d9b.diff rename to packages/plugin-compat/extra/typescript/patches/patch-ead1b459509b67bd007c51190f7b8d9b.diff index f51df18eb7a5..b600a27fc71d 100644 --- a/packages/plugin-compat/extra/typescript/patch-ead1b459509b67bd007c51190f7b8d9b.diff +++ b/packages/plugin-compat/extra/typescript/patches/patch-ead1b459509b67bd007c51190f7b8d9b.diff @@ -1,5 +1,5 @@ diff --git a/lib/tsc.js b/lib/tsc.js -index a00b1dc78..df493562b 100644 +index a00b..df49 100644 semver exclusivity >=5.2.1-rc <5.3.0-beta --- a/lib/tsc.js +++ b/lib/tsc.js @@ -344,7 +344,7 @@ semver exclusivity >=5.2.1-rc <5.3.0-beta } function reloadFileNamesFromConfigFile() { diff --git a/lib/tsserver.js b/lib/tsserver.js -index c3ec359c2..1f8e6654e 100644 +index c3ec..1f8e 100644 semver exclusivity >=5.2.1-rc <5.3.0-beta --- a/lib/tsserver.js +++ b/lib/tsserver.js @@ -997,7 +997,7 @@ semver exclusivity >=5.2.1-rc <5.3.0-beta this.installer = childProcess.fork(typingsInstaller, args, { execArgv }); this.installer.on("message", (m) => this.handleMessage(m)); diff --git a/lib/tsserverlibrary.js b/lib/tsserverlibrary.js -index 7c50c4384..979b08d6c 100644 +index 7c50..979b 100644 semver exclusivity >=5.2.1-rc <5.3.0-beta --- a/lib/tsserverlibrary.js +++ b/lib/tsserverlibrary.js @@ -1696,7 +1696,7 @@ semver exclusivity >=5.2.1-rc <5.3.0-beta const watchers = this.packageJsonFilesMap || (this.packageJsonFilesMap = /* @__PURE__ */ new Map()); if (!watchers.has(path)) { diff --git a/lib/typescript.js b/lib/typescript.js -index 5361e5bb1..b05490242 100644 +index 5361..b054 100644 semver exclusivity >=5.2.1-rc <5.3.0-beta --- a/lib/typescript.js +++ b/lib/typescript.js @@ -2293,7 +2293,7 @@ semver exclusivity >=5.2.1-rc <5.3.0-beta init_ts_Completions(); kindPrecedence = { diff --git a/lib/typingsInstaller.js b/lib/typingsInstaller.js -index b106df24d..b52afd910 100644 +index b106..b52a 100644 semver exclusivity >=5.2.1-rc <5.3.0-beta --- a/lib/typingsInstaller.js +++ b/lib/typingsInstaller.js diff --git a/packages/plugin-compat/extra/typescript/patch-3171c5f0d6ba563d63efef87d42d0baf.diff b/packages/plugin-compat/extra/typescript/patches/patch-fa61263b1114fd9ec31efa7f409a09aa.diff similarity index 91% rename from packages/plugin-compat/extra/typescript/patch-3171c5f0d6ba563d63efef87d42d0baf.diff rename to packages/plugin-compat/extra/typescript/patches/patch-fa61263b1114fd9ec31efa7f409a09aa.diff index 7b50e28c59fe..5977cd9da0f6 100644 --- a/packages/plugin-compat/extra/typescript/patch-3171c5f0d6ba563d63efef87d42d0baf.diff +++ b/packages/plugin-compat/extra/typescript/patches/patch-fa61263b1114fd9ec31efa7f409a09aa.diff @@ -1,25 +1,19 @@ diff --git a/lib/tsc.js b/lib/tsc.js -index 1af7d4794..74d702d96 100644 +index 1af7..98c6 100644 semver exclusivity >=5.6.1-rc <5.7.0-beta --- a/lib/tsc.js +++ b/lib/tsc.js -@@ -5064,6 +5064,9 @@ var sys = (() => { - } - } - function isFileSystemCaseSensitive() { -+ if (typeof process.versions.pnp !== `undefined`) { -+ return true; -+ } - if (platform === "win32" || platform === "win64") { - return false; - } -@@ -38820,6 +38823,48 @@ function getDefaultValueForOption(option) { +@@ -3894,6 +3894,29 @@ var commentPragmas = { } - } + }; +// src/compiler/pnpapi.ts ++function isPnpEnabled() { ++ var _a; ++ return typeof process !== "undefined" && typeof ((_a = process == null ? void 0 : process.versions) == null ? void 0 : _a.pnp) !== "undefined"; ++} +function getPnpApi(path) { -+ if (typeof process.versions.pnp === "undefined") { ++ if (!isPnpEnabled()) { + return; + } + const { findPnpApi } = require("module"); @@ -36,6 +30,23 @@ semver exclusivity >=5.6.1-rc <5.7.0-beta + ); +} + + // src/compiler/sys.ts + function generateDjb2Hash(data) { + let acc = 5381; +@@ -5064,6 +5087,9 @@ var sys = (() => { + } + } + function isFileSystemCaseSensitive() { ++ if (isPnpEnabled()) { ++ return true; ++ } + if (platform === "win32" || platform === "win64") { + return false; + } +@@ -38820,6 +38846,29 @@ function getDefaultValueForOption(option) { + } + } + +// src/compiler/pnp.ts +function getPnpTypeRoots(currentDirectory) { + const pnpApi = getPnpApi(currentDirectory); @@ -62,7 +73,7 @@ semver exclusivity >=5.6.1-rc <5.7.0-beta // src/compiler/moduleNameResolver.ts function trace(host, message, ...args) { host.trace(formatMessage(message, ...args)); -@@ -39037,7 +39082,7 @@ function getEffectiveTypeRoots(options, host) { +@@ -39037,7 +39086,7 @@ function getEffectiveTypeRoots(options, host) { return getDefaultTypeRoots(currentDirectory); } } @@ -71,7 +82,7 @@ semver exclusivity >=5.6.1-rc <5.7.0-beta let typeRoots; forEachAncestorDirectory(normalizePath(currentDirectory), (directory) => { const atTypes = combinePaths(directory, nodeModulesAtTypes); -@@ -39050,6 +39095,15 @@ function arePathsEqual(path1, path2, host) { +@@ -39050,6 +39099,15 @@ function arePathsEqual(path1, path2, host) { const useCaseSensitiveFileNames2 = typeof host.useCaseSensitiveFileNames === "function" ? host.useCaseSensitiveFileNames() : host.useCaseSensitiveFileNames; return comparePaths(path1, path2, !useCaseSensitiveFileNames2) === 0 /* EqualTo */; } @@ -87,7 +98,7 @@ semver exclusivity >=5.6.1-rc <5.7.0-beta function getOriginalAndResolvedFileName(fileName, host, traceEnabled) { const resolvedFileName = realPath(fileName, host, traceEnabled); const pathsAreEqual = arePathsEqual(fileName, resolvedFileName, host); -@@ -40928,7 +40982,15 @@ function loadModuleFromNearestNodeModulesDirectoryWorker(extensions, moduleName, +@@ -40928,7 +40986,15 @@ function loadModuleFromNearestNodeModulesDirectoryWorker(extensions, moduleName, return lookup(secondaryExtensions); } function lookup(extensions2) { @@ -104,7 +115,7 @@ semver exclusivity >=5.6.1-rc <5.7.0-beta if (getBaseFileName(ancestorDirectory) !== "node_modules") { const resolutionFromCache = tryFindNonRelativeModuleNameInCache(cache, moduleName, mode, ancestorDirectory, redirectedReference, state); if (resolutionFromCache) { -@@ -40963,11 +41025,40 @@ function loadModuleFromImmediateNodeModulesDirectory(extensions, moduleName, dir +@@ -40963,11 +41029,40 @@ function loadModuleFromImmediateNodeModulesDirectory(extensions, moduleName, dir return loadModuleFromSpecificNodeModulesDirectory(4 /* Declaration */, mangleScopedPackageNameWithTrace(moduleName, state), nodeModulesAtTypes2, nodeModulesAtTypesExists, state, cache, redirectedReference); } } @@ -146,7 +157,7 @@ semver exclusivity >=5.6.1-rc <5.7.0-beta let rootPackageInfo; let packageInfo = getPackageJsonInfo(candidate, !nodeModulesDirectoryExists, state); if (rest !== "" && packageInfo && (!(state.features & 8 /* Exports */) || !hasProperty(((_a = rootPackageInfo = getPackageJsonInfo(packageDirectory, !nodeModulesDirectoryExists, state)) == null ? void 0 : _a.contents.packageJsonContent) ?? emptyArray, "exports"))) { -@@ -41268,6 +41359,18 @@ function traceIfEnabled(state, diagnostic, ...args) { +@@ -41268,6 +41363,18 @@ function traceIfEnabled(state, diagnostic, ...args) { function useCaseSensitiveFileNames(state) { return !state.host.useCaseSensitiveFileNames ? true : typeof state.host.useCaseSensitiveFileNames === "boolean" ? state.host.useCaseSensitiveFileNames : state.host.useCaseSensitiveFileNames(); } @@ -165,7 +176,7 @@ semver exclusivity >=5.6.1-rc <5.7.0-beta // src/compiler/binder.ts function getModuleInstanceState(node, visited) { -@@ -44749,7 +44852,15 @@ function getAllModulePathsWorker(info, importedFileName, host, compilerOptions, +@@ -44749,7 +44856,15 @@ function getAllModulePathsWorker(info, importedFileName, host, compilerOptions, /*preferSymlinks*/ true, (path, isRedirect) => { @@ -182,7 +193,7 @@ semver exclusivity >=5.6.1-rc <5.7.0-beta allFileNames.set(path, { path: info.getCanonicalFileName(path), isRedirect, isInNodeModules }); importedFileFromNodeModules = importedFileFromNodeModules || isInNodeModules; } -@@ -45065,7 +45176,41 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa +@@ -45065,7 +45180,41 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa if (!host.fileExists || !host.readFile) { return void 0; } @@ -225,7 +236,7 @@ semver exclusivity >=5.6.1-rc <5.7.0-beta if (!parts) { return void 0; } -@@ -45102,14 +45247,16 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa +@@ -45102,14 +45251,16 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa if (isRedirect && !isPackageRootPath) { return void 0; } @@ -233,7 +244,7 @@ semver exclusivity >=5.6.1-rc <5.7.0-beta - const pathToTopLevelNodeModules = getCanonicalFileName(moduleSpecifier.substring(0, parts.topLevelNodeModulesIndex)); - if (!(startsWith(canonicalSourceDirectory, pathToTopLevelNodeModules) || globalTypingsCacheLocation && startsWith(getCanonicalFileName(globalTypingsCacheLocation), pathToTopLevelNodeModules))) { - return void 0; -+ if (typeof process.versions.pnp === "undefined") { ++ if (!isPnpEnabled()) { + const globalTypingsCacheLocation = host.getGlobalTypingsCacheLocation && host.getGlobalTypingsCacheLocation(); + const pathToTopLevelNodeModules = getCanonicalFileName(moduleSpecifier.substring(0, parts.topLevelNodeModulesIndex)); + if (!(startsWith(canonicalSourceDirectory, pathToTopLevelNodeModules) || globalTypingsCacheLocation && startsWith(getCanonicalFileName(globalTypingsCacheLocation), pathToTopLevelNodeModules))) { @@ -249,7 +260,7 @@ semver exclusivity >=5.6.1-rc <5.7.0-beta function tryDirectoryWithPackageJson(packageRootIndex) { var _a, _b; const packageRootPath = path.substring(0, packageRootIndex); -@@ -45122,14 +45269,14 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa +@@ -45122,14 +45273,14 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa const importMode = overrideMode || getDefaultResolutionModeForFile(importingSourceFile, host, options); if (getResolvePackageJsonExports(options)) { const nodeModulesDirectoryName2 = packageRootPath.substring(parts.topLevelPackageNameIndex + 1); @@ -266,7 +277,7 @@ semver exclusivity >=5.6.1-rc <5.7.0-beta packageJsonContent.exports, conditions ) : void 0; -@@ -126889,6 +127036,11 @@ function createWatchProgram(host) { +@@ -126889,6 +127040,11 @@ function createWatchProgram(host) { if (configFileName) { configFileWatcher = watchFile2(configFileName, scheduleProgramReload, 2e3 /* High */, watchOptions, WatchType.ConfigFile); } @@ -278,7 +289,7 @@ semver exclusivity >=5.6.1-rc <5.7.0-beta const compilerHost = createCompilerHostFromProgramHost(host, () => compilerOptions, directoryStructureHost); setGetSourceFileAsHashVersioned(compilerHost); const getNewSourceFile = compilerHost.getSourceFile; -@@ -126952,6 +127104,10 @@ function createWatchProgram(host) { +@@ -126952,6 +127108,10 @@ function createWatchProgram(host) { configFileWatcher.close(); configFileWatcher = void 0; } @@ -289,7 +300,7 @@ semver exclusivity >=5.6.1-rc <5.7.0-beta extendedConfigCache == null ? void 0 : extendedConfigCache.clear(); extendedConfigCache = void 0; if (sharedExtendedConfigFileWatchers) { -@@ -126987,7 +127143,7 @@ function createWatchProgram(host) { +@@ -126987,7 +127147,7 @@ function createWatchProgram(host) { function getCurrentProgram() { return builderProgram && builderProgram.getProgramOrUndefined(); } @@ -298,7 +309,7 @@ semver exclusivity >=5.6.1-rc <5.7.0-beta writeLog(`Synchronizing program`); Debug.assert(compilerOptions); Debug.assert(rootFileNames); -@@ -126999,7 +127155,7 @@ function createWatchProgram(host) { +@@ -126999,7 +127159,7 @@ function createWatchProgram(host) { resolutionCache.onChangesAffectModuleResolution(); } } @@ -307,7 +318,7 @@ semver exclusivity >=5.6.1-rc <5.7.0-beta const { originalReadFile, originalFileExists, -@@ -127207,6 +127363,12 @@ function createWatchProgram(host) { +@@ -127207,6 +127367,12 @@ function createWatchProgram(host) { updateLevel = 2 /* Full */; scheduleProgramUpdate(); } @@ -320,7 +331,7 @@ semver exclusivity >=5.6.1-rc <5.7.0-beta function updateProgramWithWatchStatus() { timerToUpdateProgram = void 0; reportFileChangeDetectedOnCreateProgram = true; -@@ -127220,6 +127382,12 @@ function createWatchProgram(host) { +@@ -127220,6 +127386,12 @@ function createWatchProgram(host) { case 2 /* Full */: reloadConfigFile(); break; @@ -334,17 +345,21 @@ semver exclusivity >=5.6.1-rc <5.7.0-beta synchronizeProgram(); break; diff --git a/lib/tsserver.js b/lib/tsserver.js -index f38266561..a38dfeb1c 100644 +index f382..bba6 100644 semver exclusivity >=5.6.1-rc <5.7.0-beta --- a/lib/tsserver.js +++ b/lib/tsserver.js -@@ -53,6 +53,25 @@ var import_net = __toESM(require("net")); +@@ -53,6 +53,29 @@ var import_net = __toESM(require("net")); var import_os = __toESM(require("os")); var import_readline = __toESM(require("readline")); +// src/compiler/pnpapi.ts ++function isPnpEnabled() { ++ var _a; ++ return typeof process !== "undefined" && typeof ((_a = process == null ? void 0 : process.versions) == null ? void 0 : _a.pnp) !== "undefined"; ++} +function getPnpApi(path) { -+ if (typeof process.versions.pnp === "undefined") { ++ if (!isPnpEnabled()) { + return; + } + const { findPnpApi } = require("module"); @@ -364,7 +379,7 @@ semver exclusivity >=5.6.1-rc <5.7.0-beta // src/tsserver/common.ts function getLogLevel(level) { if (level) { -@@ -243,6 +262,10 @@ function initializeNodeSystem() { +@@ -243,6 +266,10 @@ function initializeNodeSystem() { } try { const args = [(0, typescript_exports.combinePaths)(libDirectory, "watchGuard.js"), path]; @@ -375,7 +390,7 @@ semver exclusivity >=5.6.1-rc <5.7.0-beta if (logger.hasLevel(typescript_exports.server.LogLevel.verbose)) { logger.info(`Starting ${process.execPath} with args:${typescript_exports.server.stringifyIndented(args)}`); } -@@ -419,6 +442,10 @@ function startNodeSession(options, logger, cancellationToken) { +@@ -419,6 +446,10 @@ function startNodeSession(options, logger, cancellationToken) { break; } } @@ -387,7 +402,7 @@ semver exclusivity >=5.6.1-rc <5.7.0-beta this.installer = import_child_process.default.fork(typingsInstaller, args, { execArgv }); this.installer.on("message", (m) => this.handleMessage(m)); diff --git a/lib/typescript.d.ts b/lib/typescript.d.ts -index 963c5732b..1ea17a9bc 100644 +index 963c..1ea1 100644 semver exclusivity >=5.6.1-rc <5.7.0-beta --- a/lib/typescript.d.ts +++ b/lib/typescript.d.ts @@ -417,27 +432,21 @@ semver exclusivity >=5.6.1-rc <5.7.0-beta function findConfigFile(searchPath: string, fileExists: (fileName: string) => boolean, configName?: string): string | undefined; function resolveTripleslashReference(moduleName: string, containingFile: string): string; diff --git a/lib/typescript.js b/lib/typescript.js -index 4dae4289c..842eaf260 100644 +index 4dae..83b3 100644 semver exclusivity >=5.6.1-rc <5.7.0-beta --- a/lib/typescript.js +++ b/lib/typescript.js -@@ -8450,6 +8450,9 @@ var sys = (() => { - } - } - function isFileSystemCaseSensitive() { -+ if (typeof process.versions.pnp !== `undefined`) { -+ return true; -+ } - if (platform === "win32" || platform === "win64") { - return false; - } -@@ -43162,6 +43165,69 @@ function getDefaultValueForOption(option) { - } - } +@@ -7264,6 +7264,29 @@ var JSDocParsingMode = /* @__PURE__ */ ((JSDocParsingMode6) => { + return JSDocParsingMode6; + })(JSDocParsingMode || {}); +// src/compiler/pnpapi.ts ++function isPnpEnabled() { ++ var _a; ++ return typeof process !== "undefined" && typeof ((_a = process == null ? void 0 : process.versions) == null ? void 0 : _a.pnp) !== "undefined"; ++} +function getPnpApi(path) { -+ if (typeof process.versions.pnp === "undefined") { ++ if (!isPnpEnabled()) { + return; + } + const { findPnpApi } = require("module"); @@ -454,6 +463,23 @@ semver exclusivity >=5.6.1-rc <5.7.0-beta + ); +} + + // src/compiler/sys.ts + function generateDjb2Hash(data) { + let acc = 5381; +@@ -8450,6 +8473,9 @@ var sys = (() => { + } + } + function isFileSystemCaseSensitive() { ++ if (isPnpEnabled()) { ++ return true; ++ } + if (platform === "win32" || platform === "win64") { + return false; + } +@@ -43162,6 +43188,50 @@ function getDefaultValueForOption(option) { + } + } + +// src/compiler/pnp.ts +function getPnpTypeRoots(currentDirectory) { + const pnpApi = getPnpApi(currentDirectory); @@ -501,7 +527,7 @@ semver exclusivity >=5.6.1-rc <5.7.0-beta // src/compiler/moduleNameResolver.ts function trace(host, message, ...args) { host.trace(formatMessage(message, ...args)); -@@ -43387,7 +43453,7 @@ function getEffectiveTypeRoots(options, host) { +@@ -43387,7 +43457,7 @@ function getEffectiveTypeRoots(options, host) { return getDefaultTypeRoots(currentDirectory); } } @@ -510,7 +536,7 @@ semver exclusivity >=5.6.1-rc <5.7.0-beta let typeRoots; forEachAncestorDirectory(normalizePath(currentDirectory), (directory) => { const atTypes = combinePaths(directory, nodeModulesAtTypes); -@@ -43400,6 +43466,15 @@ function arePathsEqual(path1, path2, host) { +@@ -43400,6 +43470,15 @@ function arePathsEqual(path1, path2, host) { const useCaseSensitiveFileNames2 = typeof host.useCaseSensitiveFileNames === "function" ? host.useCaseSensitiveFileNames() : host.useCaseSensitiveFileNames; return comparePaths(path1, path2, !useCaseSensitiveFileNames2) === 0 /* EqualTo */; } @@ -526,7 +552,7 @@ semver exclusivity >=5.6.1-rc <5.7.0-beta function getOriginalAndResolvedFileName(fileName, host, traceEnabled) { const resolvedFileName = realPath(fileName, host, traceEnabled); const pathsAreEqual = arePathsEqual(fileName, resolvedFileName, host); -@@ -43649,6 +43724,21 @@ function getConditions(options, resolutionMode) { +@@ -43649,6 +43728,21 @@ function getConditions(options, resolutionMode) { } function resolvePackageNameToPackageJson(packageName, containingDirectory, options, host, cache) { const moduleResolutionState = getTemporaryModuleResolutionState(cache == null ? void 0 : cache.getPackageJsonInfoCache(), host, options); @@ -548,7 +574,7 @@ semver exclusivity >=5.6.1-rc <5.7.0-beta return forEachAncestorDirectory(containingDirectory, (ancestorDirectory) => { if (getBaseFileName(ancestorDirectory) !== "node_modules") { const nodeModulesFolder = combinePaths(ancestorDirectory, "node_modules"); -@@ -45430,7 +45520,15 @@ function loadModuleFromNearestNodeModulesDirectoryWorker(extensions, moduleName, +@@ -45430,7 +45524,15 @@ function loadModuleFromNearestNodeModulesDirectoryWorker(extensions, moduleName, return lookup(secondaryExtensions); } function lookup(extensions2) { @@ -565,7 +591,7 @@ semver exclusivity >=5.6.1-rc <5.7.0-beta if (getBaseFileName(ancestorDirectory) !== "node_modules") { const resolutionFromCache = tryFindNonRelativeModuleNameInCache(cache, moduleName, mode, ancestorDirectory, redirectedReference, state); if (resolutionFromCache) { -@@ -45465,11 +45563,40 @@ function loadModuleFromImmediateNodeModulesDirectory(extensions, moduleName, dir +@@ -45465,11 +45567,40 @@ function loadModuleFromImmediateNodeModulesDirectory(extensions, moduleName, dir return loadModuleFromSpecificNodeModulesDirectory(4 /* Declaration */, mangleScopedPackageNameWithTrace(moduleName, state), nodeModulesAtTypes2, nodeModulesAtTypesExists, state, cache, redirectedReference); } } @@ -607,7 +633,7 @@ semver exclusivity >=5.6.1-rc <5.7.0-beta let rootPackageInfo; let packageInfo = getPackageJsonInfo(candidate, !nodeModulesDirectoryExists, state); if (rest !== "" && packageInfo && (!(state.features & 8 /* Exports */) || !hasProperty(((_a = rootPackageInfo = getPackageJsonInfo(packageDirectory, !nodeModulesDirectoryExists, state)) == null ? void 0 : _a.contents.packageJsonContent) ?? emptyArray, "exports"))) { -@@ -45770,6 +45897,18 @@ function traceIfEnabled(state, diagnostic, ...args) { +@@ -45770,6 +45901,18 @@ function traceIfEnabled(state, diagnostic, ...args) { function useCaseSensitiveFileNames(state) { return !state.host.useCaseSensitiveFileNames ? true : typeof state.host.useCaseSensitiveFileNames === "boolean" ? state.host.useCaseSensitiveFileNames : state.host.useCaseSensitiveFileNames(); } @@ -626,7 +652,7 @@ semver exclusivity >=5.6.1-rc <5.7.0-beta // src/compiler/binder.ts var ModuleInstanceState = /* @__PURE__ */ ((ModuleInstanceState2) => { -@@ -49369,7 +49508,15 @@ function getAllModulePathsWorker(info, importedFileName, host, compilerOptions, +@@ -49369,7 +49512,15 @@ function getAllModulePathsWorker(info, importedFileName, host, compilerOptions, /*preferSymlinks*/ true, (path, isRedirect) => { @@ -643,7 +669,7 @@ semver exclusivity >=5.6.1-rc <5.7.0-beta allFileNames.set(path, { path: info.getCanonicalFileName(path), isRedirect, isInNodeModules }); importedFileFromNodeModules = importedFileFromNodeModules || isInNodeModules; } -@@ -49685,7 +49832,41 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa +@@ -49685,7 +49836,41 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa if (!host.fileExists || !host.readFile) { return void 0; } @@ -686,7 +712,7 @@ semver exclusivity >=5.6.1-rc <5.7.0-beta if (!parts) { return void 0; } -@@ -49722,14 +49903,16 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa +@@ -49722,14 +49907,16 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa if (isRedirect && !isPackageRootPath) { return void 0; } @@ -694,7 +720,7 @@ semver exclusivity >=5.6.1-rc <5.7.0-beta - const pathToTopLevelNodeModules = getCanonicalFileName(moduleSpecifier.substring(0, parts.topLevelNodeModulesIndex)); - if (!(startsWith(canonicalSourceDirectory, pathToTopLevelNodeModules) || globalTypingsCacheLocation && startsWith(getCanonicalFileName(globalTypingsCacheLocation), pathToTopLevelNodeModules))) { - return void 0; -+ if (typeof process.versions.pnp === "undefined") { ++ if (!isPnpEnabled()) { + const globalTypingsCacheLocation = host.getGlobalTypingsCacheLocation && host.getGlobalTypingsCacheLocation(); + const pathToTopLevelNodeModules = getCanonicalFileName(moduleSpecifier.substring(0, parts.topLevelNodeModulesIndex)); + if (!(startsWith(canonicalSourceDirectory, pathToTopLevelNodeModules) || globalTypingsCacheLocation && startsWith(getCanonicalFileName(globalTypingsCacheLocation), pathToTopLevelNodeModules))) { @@ -710,7 +736,7 @@ semver exclusivity >=5.6.1-rc <5.7.0-beta function tryDirectoryWithPackageJson(packageRootIndex) { var _a, _b; const packageRootPath = path.substring(0, packageRootIndex); -@@ -49742,14 +49925,14 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa +@@ -49742,14 +49929,14 @@ function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileNa const importMode = overrideMode || getDefaultResolutionModeForFile(importingSourceFile, host, options); if (getResolvePackageJsonExports(options)) { const nodeModulesDirectoryName2 = packageRootPath.substring(parts.topLevelPackageNameIndex + 1); @@ -727,7 +753,7 @@ semver exclusivity >=5.6.1-rc <5.7.0-beta packageJsonContent.exports, conditions ) : void 0; -@@ -123633,6 +123816,7 @@ var ProgramUpdateLevel = /* @__PURE__ */ ((ProgramUpdateLevel2) => { +@@ -123633,6 +123820,7 @@ var ProgramUpdateLevel = /* @__PURE__ */ ((ProgramUpdateLevel2) => { ProgramUpdateLevel2[ProgramUpdateLevel2["Update"] = 0] = "Update"; ProgramUpdateLevel2[ProgramUpdateLevel2["RootNamesAndUpdate"] = 1] = "RootNamesAndUpdate"; ProgramUpdateLevel2[ProgramUpdateLevel2["Full"] = 2] = "Full"; @@ -735,7 +761,7 @@ semver exclusivity >=5.6.1-rc <5.7.0-beta return ProgramUpdateLevel2; })(ProgramUpdateLevel || {}); function updateSharedExtendedConfigFileWatcher(projectPath, options, extendedConfigFilesMap, createExtendedConfigFileWatch, toPath3) { -@@ -131834,6 +132018,11 @@ function createWatchProgram(host) { +@@ -131834,6 +132022,11 @@ function createWatchProgram(host) { if (configFileName) { configFileWatcher = watchFile2(configFileName, scheduleProgramReload, 2e3 /* High */, watchOptions, WatchType.ConfigFile); } @@ -747,7 +773,7 @@ semver exclusivity >=5.6.1-rc <5.7.0-beta const compilerHost = createCompilerHostFromProgramHost(host, () => compilerOptions, directoryStructureHost); setGetSourceFileAsHashVersioned(compilerHost); const getNewSourceFile = compilerHost.getSourceFile; -@@ -131897,6 +132086,10 @@ function createWatchProgram(host) { +@@ -131897,6 +132090,10 @@ function createWatchProgram(host) { configFileWatcher.close(); configFileWatcher = void 0; } @@ -758,7 +784,7 @@ semver exclusivity >=5.6.1-rc <5.7.0-beta extendedConfigCache == null ? void 0 : extendedConfigCache.clear(); extendedConfigCache = void 0; if (sharedExtendedConfigFileWatchers) { -@@ -131932,7 +132125,7 @@ function createWatchProgram(host) { +@@ -131932,7 +132129,7 @@ function createWatchProgram(host) { function getCurrentProgram() { return builderProgram && builderProgram.getProgramOrUndefined(); } @@ -767,7 +793,7 @@ semver exclusivity >=5.6.1-rc <5.7.0-beta writeLog(`Synchronizing program`); Debug.assert(compilerOptions); Debug.assert(rootFileNames); -@@ -131944,7 +132137,7 @@ function createWatchProgram(host) { +@@ -131944,7 +132141,7 @@ function createWatchProgram(host) { resolutionCache.onChangesAffectModuleResolution(); } } @@ -776,7 +802,7 @@ semver exclusivity >=5.6.1-rc <5.7.0-beta const { originalReadFile, originalFileExists, -@@ -132152,6 +132345,12 @@ function createWatchProgram(host) { +@@ -132152,6 +132349,12 @@ function createWatchProgram(host) { updateLevel = 2 /* Full */; scheduleProgramUpdate(); } @@ -789,7 +815,7 @@ semver exclusivity >=5.6.1-rc <5.7.0-beta function updateProgramWithWatchStatus() { timerToUpdateProgram = void 0; reportFileChangeDetectedOnCreateProgram = true; -@@ -132165,6 +132364,12 @@ function createWatchProgram(host) { +@@ -132165,6 +132368,12 @@ function createWatchProgram(host) { case 2 /* Full */: reloadConfigFile(); break; @@ -802,7 +828,7 @@ semver exclusivity >=5.6.1-rc <5.7.0-beta default: synchronizeProgram(); break; -@@ -138852,7 +139057,14 @@ function createPackageJsonImportFilter(fromFile, preferences, host) { +@@ -138852,7 +139061,14 @@ function createPackageJsonImportFilter(fromFile, preferences, host) { return false; } function getNodeModulesPackageNameFromFileName(importedFileName, moduleSpecifierResolutionHost) { @@ -818,7 +844,7 @@ semver exclusivity >=5.6.1-rc <5.7.0-beta return void 0; } const specifier = ts_moduleSpecifiers_exports.getNodeModulesPackageName( -@@ -139399,6 +139611,9 @@ function fileContainsPackageImport(sourceFile, packageName) { +@@ -139399,6 +139615,9 @@ function fileContainsPackageImport(sourceFile, packageName) { return sourceFile.imports && sourceFile.imports.some((i) => i.text === packageName || i.text.startsWith(packageName + "/")); } function isImportablePath(fromPath, toPath3, getCanonicalFileName, globalCachePath) { @@ -828,7 +854,7 @@ semver exclusivity >=5.6.1-rc <5.7.0-beta const toNodeModules = forEachAncestorDirectory(toPath3, (ancestor) => getBaseFileName(ancestor) === "node_modules" ? ancestor : void 0); const toNodeModulesParent = toNodeModules && getDirectoryPath(getCanonicalFileName(toNodeModules)); return toNodeModulesParent === void 0 || startsWith(getCanonicalFileName(fromPath), toNodeModulesParent) || !!globalCachePath && startsWith(getCanonicalFileName(globalCachePath), toNodeModulesParent); -@@ -168089,7 +168304,34 @@ function getCompletionEntriesForNonRelativeModules(fragment, scriptPath, mode, p +@@ -168089,7 +168308,34 @@ function getCompletionEntriesForNonRelativeModules(fragment, scriptPath, mode, p ); } }; @@ -864,7 +890,7 @@ semver exclusivity >=5.6.1-rc <5.7.0-beta const nodeModulesDirectoryLookup = ancestorLookup; ancestorLookup = (ancestor) => { const components = getPathComponents(fragment); -@@ -168108,35 +168350,53 @@ function getCompletionEntriesForNonRelativeModules(fragment, scriptPath, mode, p +@@ -168108,35 +168354,53 @@ function getCompletionEntriesForNonRelativeModules(fragment, scriptPath, mode, p const packageDirectory = combinePaths(ancestor, "node_modules", packagePath); const packageFile = combinePaths(packageDirectory, "package.json"); if (tryFileExists(host, packageFile)) { @@ -938,7 +964,7 @@ semver exclusivity >=5.6.1-rc <5.7.0-beta } } return arrayFrom(result.values()); -@@ -168270,9 +168530,15 @@ function getCompletionEntriesFromTypings(host, program, scriptPath, fragmentDire +@@ -168270,9 +168534,15 @@ function getCompletionEntriesFromTypings(host, program, scriptPath, fragmentDire for (const root of typeRoots) { getCompletionEntriesFromDirectories(root); } @@ -957,11 +983,11 @@ semver exclusivity >=5.6.1-rc <5.7.0-beta } return result; function getCompletionEntriesFromDirectories(directory) { -@@ -185460,6 +185726,29 @@ var ConfiguredProject2 = class extends Project2 { +@@ -185460,6 +185730,29 @@ var ConfiguredProject2 = class extends Project2 { return this.projectReferences; } updateReferences(refs) { -+ if (typeof process.versions.pnp !== `undefined`) { ++ if (isPnpEnabled()) { + const basePath = this.getCurrentDirectory(); + const getPnpPath = (path) => { + try { @@ -987,7 +1013,7 @@ semver exclusivity >=5.6.1-rc <5.7.0-beta this.projectReferences = refs; this.potentialProjectReferences = void 0; } -@@ -186185,6 +186474,7 @@ var _ProjectService = class _ProjectService { +@@ -186185,6 +186478,7 @@ var _ProjectService = class _ProjectService { getDetailWatchInfo ); this.canUseWatchEvents = getCanUseWatchEvents(this, opts.canUseWatchEvents); @@ -995,7 +1021,7 @@ semver exclusivity >=5.6.1-rc <5.7.0-beta (_a = opts.incrementalVerifier) == null ? void 0 : _a.call(opts, this); } toPath(fileName) { -@@ -188071,7 +188361,7 @@ Dynamic files must always be opened with service's current directory or service +@@ -188071,7 +188365,7 @@ Dynamic files must always be opened with service's current directory or service this.performanceEventHandler = performanceEventHandler; } setHostConfiguration(args) { @@ -1004,7 +1030,7 @@ semver exclusivity >=5.6.1-rc <5.7.0-beta if (args.file) { const info = this.getScriptInfoForNormalizedPath(toNormalizedPath(args.file)); if (info) { -@@ -188120,6 +188410,8 @@ Dynamic files must always be opened with service's current directory or service +@@ -188120,6 +188414,8 @@ Dynamic files must always be opened with service's current directory or service this.hostConfiguration.watchOptions = substitution; this.hostConfiguration.beforeSubstitution = substitution === watchOptions ? void 0 : watchOptions; this.logger.info(`Host watch options changed to ${JSON.stringify(this.hostConfiguration.watchOptions)}, it will be take effect for next watches.`); @@ -1013,7 +1039,7 @@ semver exclusivity >=5.6.1-rc <5.7.0-beta } } } -@@ -189169,6 +189461,28 @@ Dynamic files must always be opened with service's current directory or service +@@ -189169,6 +189465,28 @@ Dynamic files must always be opened with service's current directory or service } }); } diff --git a/packages/plugin-compat/extra/typescript/patch-fb547b5c4b551512372ff8352c69a5fa.diff b/packages/plugin-compat/extra/typescript/patches/patch-fb547b5c4b551512372ff8352c69a5fa.diff similarity index 99% rename from packages/plugin-compat/extra/typescript/patch-fb547b5c4b551512372ff8352c69a5fa.diff rename to packages/plugin-compat/extra/typescript/patches/patch-fb547b5c4b551512372ff8352c69a5fa.diff index e1abb1efe28c..3dc1d0acea00 100644 --- a/packages/plugin-compat/extra/typescript/patch-fb547b5c4b551512372ff8352c69a5fa.diff +++ b/packages/plugin-compat/extra/typescript/patches/patch-fb547b5c4b551512372ff8352c69a5fa.diff @@ -1,5 +1,5 @@ diff --git a/lib/tsc.js b/lib/tsc.js -index e144201b5..21c462e0c 100644 +index e144..21c4 100644 semver exclusivity >=4.5.2 <4.6 --- a/lib/tsc.js +++ b/lib/tsc.js @@ -303,7 +303,7 @@ semver exclusivity >=4.5.2 <4.6 ts.perfLogger.logStartUpdateProgram("SynchronizeProgram"); synchronizeProgram(); diff --git a/lib/tsserver.js b/lib/tsserver.js -index 6499e34af..2ee1a5416 100644 +index 6499..2ee1 100644 semver exclusivity >=4.5.2 <4.6 --- a/lib/tsserver.js +++ b/lib/tsserver.js @@ -924,7 +924,7 @@ semver exclusivity >=4.5.2 <4.6 this.installer.on("message", function (m) { return _this.handleMessage(m); }); // We have to schedule this event to the next tick diff --git a/lib/tsserverlibrary.js b/lib/tsserverlibrary.js -index 160c6c94d..cfc193f46 100644 +index 160c..cfc1 100644 semver exclusivity >=4.5.2 <4.6 --- a/lib/tsserverlibrary.js +++ b/lib/tsserverlibrary.js @@ -1521,7 +1521,7 @@ semver exclusivity >=4.5.2 <4.6 var _this = this; var watchers = this.packageJsonFilesMap || (this.packageJsonFilesMap = new ts.Map()); diff --git a/lib/typescript.js b/lib/typescript.js -index 0b317307b..da58afb9e 100644 +index 0b31..da58 100644 semver exclusivity >=4.5.2 <4.6 --- a/lib/typescript.js +++ b/lib/typescript.js @@ -2014,7 +2014,7 @@ semver exclusivity >=4.5.2 <4.6 return statement; }); diff --git a/lib/typescriptServices.js b/lib/typescriptServices.js -index bdd26eb4e..2e0e6adba 100644 +index bdd2..2e0e 100644 semver exclusivity >=4.5.2 <4.6 --- a/lib/typescriptServices.js +++ b/lib/typescriptServices.js @@ -2507,7 +2507,7 @@ semver exclusivity >=4.5.2 <4.6 return statement; }); diff --git a/lib/typingsInstaller.js b/lib/typingsInstaller.js -index 7a0fd43fa..cbbe83fb8 100644 +index 7a0f..cbbe 100644 semver exclusivity >=4.5.2 <4.6 --- a/lib/typingsInstaller.js +++ b/lib/typingsInstaller.js diff --git a/packages/plugin-compat/extra/utils.ts b/packages/plugin-compat/extra/utils.ts new file mode 100644 index 000000000000..36e0caa40eee --- /dev/null +++ b/packages/plugin-compat/extra/utils.ts @@ -0,0 +1,92 @@ +import chalk from 'chalk'; +import crossSpawn from 'cross-spawn'; +import type {SpawnOptions} from 'node:child_process'; +import {once} from 'node:events'; + +export function formatArg(arg: string) { + if (arg.includes(` `)) { + if (!arg.includes(`'`)) { + return `'${arg}'`; + } else if (!arg.includes(`"`) && !arg.includes(`$`) && !arg.includes(`\``) && !arg.includes(`\\`)) { + return `"${arg}"`; + } else { + return `'${arg.replace(/'/g, `'"'"'`)}'`; + } + } + + return arg; +} +export function spawn(binary: string, args: Array, opts: SpawnOptions = {}) { + const child = crossSpawn(binary, args, { + ...opts, + env: { + ...process.env, + NODE_OPTIONS: undefined, + ...opts.env, + }, + }); + + const outChunks: Array = []; + const allChunks: Array = []; + child.stdout?.on(`data`, chunk => { + outChunks.push(chunk); + allChunks.push(chunk); + }); + child.stderr?.on(`data`, chunk => { + allChunks.push(chunk); + }); + + const close = once(child, `close`).catch(err => { + err.message += `\n\n${Buffer.concat(allChunks).toString()}\n`; + throw err; + }); + close.catch(() => {}); // Prevent unhandled rejection - the caller should handle it + + return { + process: child, + cmd: `${binary} ${args.map(formatArg).join(` `)}`, + + close, + get exit() { + return close.then(([code]) => code); + }, + get success() { + return close.then(([code]) => { + if (code !== 0) { + throw new Error([ + `Process failed`, + ` Command: ${binary} ${args.join(` `)}`, + ` Exit code: ${code}`, + ` Output:\n${Buffer.concat(allChunks).toString()}`, + ].join(`\n`)); + } + }); + }, + + get output() { + return close.then(() => Buffer.concat(outChunks)); + }, + }; +} + +export const logger = { + indent: 0, + log(message: string) { + console.log(`${` `.repeat(this.indent)}${chalk.grey(message)}`); + }, + info(message: string) { + console.log(`${` `.repeat(this.indent)}${message}`); + }, + warn(message: string) { + console.log(`${` `.repeat(this.indent)}${chalk.yellow(message)}`); + }, + async section(title: string, cb: () => Promise): Promise { + this.info(`- ${title}`); + this.indent += 2; + try { + return await cb(); + } finally { + this.indent -= 2; + } + }, +}; diff --git a/packages/plugin-compat/package.json b/packages/plugin-compat/package.json index c05c9785df5c..0d078e775f0b 100644 --- a/packages/plugin-compat/package.json +++ b/packages/plugin-compat/package.json @@ -15,14 +15,19 @@ "@yarnpkg/extensions": "workspace:^" }, "devDependencies": { + "@types/cross-spawn": "6.0.0", "@types/lodash-es": "4.17.4", "@types/resolve": "^1.17.1", + "@types/semver": "^7.1.0", "@yarnpkg/cli": "workspace:^", "@yarnpkg/core": "workspace:^", "@yarnpkg/fslib": "workspace:^", "@yarnpkg/monorepo": "workspace:^", "@yarnpkg/plugin-npm": "workspace:^", "@yarnpkg/plugin-patch": "workspace:^", + "chalk": "^4.1.2", + "cross-spawn": "^7.0.3", + "p-limit": "^2.2.0", "resolve": "^1.17.0", "semver": "^7.1.2" }, @@ -35,7 +40,9 @@ "postpack": "rm -rf lib", "prepack": "run build:compile \"$(pwd)\"", "test:plugin-compat": "run test:unit --config \"$(pwd)/jest.config.js\"", - "debug:patch": "node -r @yarnpkg/monorepo/scripts/setup-ts-execution extra/debugPatch \"$INIT_CWD\"" + "build:patch:fsevents": "node -r @yarnpkg/monorepo/scripts/setup-ts-execution ./extra/fsevents/gen-fsevents-patch.ts", + "build:patch:resolve": "node -r @yarnpkg/monorepo/scripts/setup-ts-execution ./extra/resolve/gen-resolve-patch.ts", + "build:patch:typescript": "node -r @yarnpkg/monorepo/scripts/setup-ts-execution ./extra/typescript/gen-typescript-patch.ts" }, "publishConfig": { "main": "./lib/index.js", diff --git a/packages/plugin-compat/sources/patches/fsevents.patch.ts b/packages/plugin-compat/sources/patches/fsevents.patch.ts index 8e8a321aab10..0c36b49b6c91 100644 --- a/packages/plugin-compat/sources/patches/fsevents.patch.ts +++ b/packages/plugin-compat/sources/patches/fsevents.patch.ts @@ -2,7 +2,7 @@ let patch: string; export function getPatch() { if (typeof patch === `undefined`) - patch = require(`zlib`).brotliDecompressSync(Buffer.from(`G7weAByFTVk3Vs7UfHhq4yykgEM7pbW7TI43SG2S5tvGrwHBAzdz+s/npQ6tgEvobvxisrPIadkXeUAJotBn5bDZ5kAhcRqsIHe3F75Walet5hNalwgFDtxb0BiDUjiUQkjG0yW2hto9HPgiCkm316d6bC0kST72YN7D7rfkhCE9x4J0XwB0yavalxpUu2t9xszHrmtwalOxT7VslsxWcB1qpqZwERUra4psWhTV8BgwWeizurec82Caf1ABL11YMfbf8FJ9JBceZOkgmvrQPbC9DUldX/yMbmX06UQluCEjSwUoyO+EZPIjofr+/oAZUck2enraRD+oWLlnlYnj8xB+gwSo9lmmks4fXv574qSqcWA6z21uYkzMu3EWj+K23RxeQlLqiE35/rC8GcS4CGkKHKKq+zAIQwD9iRDNfiAqueLLpicFFrNsAI4zeTD/eO9MHcnRa5m8UT+M2+V+AkFST4BlKneiAQRSdST8KEAIyFlULt6wa9EBd0Ds28VmpaxquJdVt+nwdEs5xUskI13OVtFyY0UrQIRAlCuvvWivvlSKQfTO+2Q8OyUR1W5RvetaPz4jD27hdtwHFFA1Ptx6Ee/t2cY2rg2G46M1pNDRf2pWhvpy8pqMnuI3++4OF3+7OFIWXGjh+o7Nr2jNvbiYcQdQS1h903/jVFgOpA0yJ78z+x759bFA0rq+6aY5qPB4FzS3oYoLupDUhD9nDz6F6H7hpnlMf18KNKDu4IKjTWwrAnY6MFQw1W6ymOALHlFyCZmQhldg1MQHaMVVQTVgDC60TfaBqG++Y8PEoFhN/PBTZT175KNP/BlHDYGOOBmnBdzqJKplZ/ljiVG0ZBzfqeBRrrUkn6rA54462SgiliKoYVnbeptMdXNfAuaupIEi0bApF10TlgHfmEJAPUVidRVFyDupSem5po5vErPqWKhKbUIp0LozpYsIKK57dM/HKr+nguF+7924IIWMICkQ8JUigs9D+W+c4LnNoRtPPKNRUiCYmP+Jfo2lfKCKw8qpraEeWU3uiNRO6zcyKQoXPR5htmzzLznke7b4YbXW3I1lIRzmgG02Udb58U+7TpwyN7XymCgH+wuPDthZVQvRZuEP+SnLtMicz9m5zASWOBiAcLmkuFlTKuHspSIhCBD0yUPKcxu81A+4YD78rA2vtwsUEday9WNyrShyrl60rWmA+SmbYZkQOwFJWArxRYYc5jGhA5ikxYw1rx3ei4NmeX/lKiwpZ9Ln1tV2Ae7sArvxuVLbJjqJRjW1vFXAyHpvLG+8MJ6T2Ubx5M2KDa2SN6vuIGxJ9WQM9Mk3Q7aCNiZONXllhqq24DmoLbQfW2rYWsOgHWjtOmIQMyMKdiHZDjoyIq5+U700nZ6odJAoYXPQBvFNiQ78d5jaXliBqLTJEqUCwi+LiH2mx92EmNKDsJL74Z613+3lf20pxkV1+erOrjj8pW00vsPaahKUM+05ssd5uwM7K482KWEf3TCwlg/o3e5ngto7qSMz7YteIgCsF1UOcsLk7F7MxWbvrPMY473ew0G+noVL8EPbkmEMftMSeL6HFub/zy+2JQ==`, `base64`)).toString(); + patch = require(`zlib`).brotliDecompressSync(Buffer.from(`G3MeACwHeDI3kkFRX7l9s60I4rDkfIOfFoSpT6bI0PQKSAtPt7E5tNlvXU9ToqAGUWDru7+cf+dyyneYZKZ8sZNb6Rq6eV5hYjCRI00vgbSjCkca4J17P9qPFbVBotE6lEgqf2beDCqyfxfzSEiiEaLJ1Xw1i8ZbhNMJv4s00IQv1bMWstm458Hk2pWfwr6D8DtfjPsQNK7RQQyrJiX+WrVcFkejGSVwkYMZPb+Ev4KILw/EEoGpD+o9dQrZUjVTA3+VNqBIUC1EZSnC80w1ONCPWNkprmuVnBZEZCkBjapudOSPamrcbIDkPGQOnQmtu1U5b2ZgnuTrOMVaDOaN1pE8K66f3yNxYlDcmL4Hj1gGZc5RswJ909+uhT7cIo/Mzaw7ahKVCGhqHIKq+zASEQA8awh50cNApdKheWJY4hItE+M+Y69GPe8pebo4GqyjalhBVEaMiAu+8q3M5Z88MT5FM9JvyBo6QFfTelEslQsN4ZfkolVezo/QCqAh89n5TB4UMrXqok7oSJTyWod9eUFZXrC7VxiSBx7zGfe2BDWqYcfSKMA23jtnvE7jHhwVtc7bQjPBN8bkgwyd+25gyteWuwIFWfCC82m81cgj+q9Azvi5mZa2en38UVHlxKK0AGPyZ8PhTV2jkwq0rk/yIAbdHldQ5j6GUIEL9arEcRbiDQQ9KXkQZwQvE3B3N5N3HL0ZONjpoKHapCmN4YRa8IiGK8SBtL0iRt43AKsgQRWodkVOLfUhcbsZ9owjB5rVxA8/VA6BW37XFPziEQOQmSvKjAW8tUi8/sroY41RbClvvVH7RsQl1dRJ9fscmiyUolChX9ZmbEVh2GzMgvlXxoBItG0xd9eB5TBpvsaAnsQRCyPUoYIxyNHZQJ3aIkWqEzwMWncJwlpRICLF4rhv/v282U1D0Pgu6RZIUCAEQwGAT4poPk45Mix5bhS6/aQyLz0UABae/4VZLNEBE0cCErdQj64WnanUSu0bRHqCTDnoQ+NTrh09mHG1ROvEJJGsKOB0SuJoRW/ljMtBezA1nqjLphZxx70yUwvBZuUP1SnLVGTOTeAcdoQscTCAwuEdzc2YVMLkFaeVIADQpw/Fznbghb6Bm/nw5xB2vB0rFeHQeFcGimZjZ16HccB8bsqwTkhwxxAGoWBMkMM8BrRBDQmcbc1rh/dSoCSvv175NWVPWtw62o6R2zuR0mWEtlbKbjEqRF+Z4w8L8CIWU7vUYiGtWAgmXZZEEWHgRn0ymYdbypz5qSssCmDrEWGVRY+eNQEPprdyf+3+METeNgIyk5bUAEb+6ENNLMWlelCjD+kSzu2siW9KcFC/wtHWIqWDMRftQNqo2AQW2aFO4W5b0/56C8LNpmBGG3LyckxgsUbzG0wKXfX5k3ZymG4LYXYbtlDbu7+0MKWe1Tof2bo++3+zNEGB3HMKF+FvPmf04+BNIYHP955JVsLJU/9gh4ptbHr6jIy2syesaPawIyr+S9XRlH9+zkcB`, `base64`)).toString(); return patch; } diff --git a/packages/plugin-compat/sources/patches/resolve.patch.ts b/packages/plugin-compat/sources/patches/resolve.patch.ts index 3df8c3118a8a..074c82592899 100644 --- a/packages/plugin-compat/sources/patches/resolve.patch.ts +++ b/packages/plugin-compat/sources/patches/resolve.patch.ts @@ -2,7 +2,7 @@ let patch: string; export function getPatch() { if (typeof patch === `undefined`) - patch = require(`zlib`).brotliDecompressSync(Buffer.from(`G8MSIIzURnVBnObTcvb3XE6v2S9Qgc2K801Oa5otNKEtK8BINZNcaQHy+9/vf/WXBimwutXC33P2DPc64pps5rz7NGGWaOKNSPL4Y2KRE8twut2lFOIN+OXPtRmPMRhMTILib2bEQx43az2I5d3YS8Roa5UZpF/ujHb3Djd3GDvYUfvFYSUQ39vb2cmifp/rgB4J/65JK3wRBTvMBoNBmn3mbXC63/gbBkW/2IRPri0O8bcsRBsmarF328pAln04nyJFkwUAvNu934supAqLtyerZZpJ8I8suJHhf/ocMV+scKwa8NOiDKIPXw6Ex/EEZD6TEGaW8N5zvNHYF10l6Lfooj7D5W2k3dgvQSbp2Wv8TGOayS978gxlOLVjTGXs66ozewbrjwElLtyrYNnWTfzzdEutgROUFPVMhnMoy8EjJLLlWwIEoySxliim9kYW30JUHiPVyjt0iAw/ZpPmCbUCltYPnq6ZNblIKhTNhqS/oqC9iya5sGKZTOVsTEg34n92uZTf2iPpcZih8rPW8CzA+adIGmyCPcKdLMsBLShd+zuEbTrqpwuh+DLmracZcjPC5Sdf5odDAhKpFuOsQS67RT+1VgWWygSv3YwxDnylc04/PYuaMeIzhBkLrvs7e/OUzRTF56MmfY6rI63QtEjEQzq637zQqJ39nNhu3NmoRRhW/086bHGBUtx0PE0j3aEGvkdh9WJC8y8j8mqqke9/dQ5la+Q3ba4RlhvTbnfQhPDDab3tUifkjKuOsp13mXEmO00Mu88F/M67R7LXfoFDFLNtgCSWjWX+3Jn1371pJTK9xPBiMJafvDjtFyAzu8rxeQ0TKMQXNPs5xxiBOd+BRJP8KP88XPtJIbZKh/cdW8KvBUkpqKpGoiIaA32c3/JnQr4efXt85mXvidOvn/eU3Pase1typLYBalJ14mCso9h79nuMOuCa/kZAOkJHmTjP5RM2WNoPasZUAnT1TAE/NH25hUxcQv6hQWR/m1PKk4ooXMcM4SR1iYU3fUohvqk4RY2hbmTVVIXv6TvqO+0doOjgeVFAcom+RlwJQmOVH7pr1Q9LoJT6n1DeQEB+NHygsATbIwTcOKZlJsY8G4+suX1uQLjUWwLjjs0mvSvZcLTpIGAekeR7GCgl8eo3ndAqEe2XCav4huliHjdbIPBsGJuPX7lrO9HX1UbXRH5opOe1x6JsOSgHZR+EaxuXVhpLLxm6jk1LJtZfHSc6BKPun3CpYYVMJGwEUyk8MTGG0XL5MfEwaXpnc9TKnBmlGn6nHiGREc3ysn47XIBDzA+YvFdjZzVIEDcKGpS6PbUJehFRjEne8D0lVU1XuRtlgszq6pTNlQ/3MzNOEgCWPyTct22V2mEi2krizn5VDo9B19/X2DB3hCGRMM7ONbtnAcIx/OWB1u5uPbW1gsH8irXxT/IzG0PoXWYjhbMsH3KTuoOl5o17PulcgvsfTSnKFM354GWI8luqZnrswWjiXy3G+Vbyo1KMopFmmvBwNELgaS8z8dNZchx/Cl/xjddxhMcyqtzFyONb2Zdu90NkI8pAeufe7YlXrp53v8Dj/l8vWeVspRKBGXScBBPI/HinSTGmLDOGGOCIyH0JFdOZx0gWsacNlQLJMIrBhqRxXxHF/5pseWwejlAAvZ3klZSDSYY8mkToaWejXhgNomeGtx1DTLEUFMRkgF5yFB22WYdJnaWN14r1YJj81hGi45+jrADS5nYRhCiSlCJJ1nL8pYX+HDSMhdTEWyRcgHVp/IsUIZYMfT+YYncUQPgcxNGCHfZ88vDdrcUuaGIl6zhAsiaq7R5dfqrqXH/JcBhfjT8D0azayIyEz75Nxp6YkcyDxlJq3EXnJUpqDohJJOysL1t1uNiHESlvsxPb5cpbW0+ICZqJmUZus1BMW0F5IVBODLIo2zHHjA0=`, `base64`)).toString(); + patch = require(`zlib`).brotliDecompressSync(Buffer.from(`G7USIIzTBXVBvJDrCEk6/W+pdtfl9KxtINuwSulsK6e0qhhsYZsU0MBXmka9AtIC1K+W3wLROFCC8mfl1et5PdTspZAVoXt2f1SkpHAhOyRYTiIVhVb0oQCZXIbT7S6lEWuoAJeLazefYzxeOIKRD24qS665NzuG8nHiLmE6tcgC0i/WpusbQqyvrVlTuL1x78uSfXyyEcci/LuOXvFFlWI7G4/H2AYzq4zxJ/+GcTkqP8Mnp8tt/Fs2FvuEkfnj2v4M7GVUaChxdNkAQBbF/QwK2BOGbU8lSweT0ByFf17gP31K6ClWdFWMNRlBOqNHFgeRY0kCAW8TYutFbnPG887f2RnBs8UL9RnJbp+OGHMarHueGde0vtK3+DVPbnOBfd+6VCay3jjwB4j7aEpi/9JEL6Yekxkp4QwLO5Fw8lv6XdCReRNWQ9sgim8BlKVbve4+G5PAj3ax+0GvIYnRDZlsDFuXgov4sIDHCxBtE5KjEF9FFhf0c6RtYWjR/ZrdDyz3qf/V5aS/NaR5iR5VrafbZBQgt1EIMAlxCHcyHAfsOWn2u0PZvoHb6QAovk80vuEZognwQSkP9ceiAEiK5/bVYJUDz8en9ZvCshHBejUh+gavtK/pF9tkFSa5guup4Mzf9qHhoocoPq84+pRGRVpglyIxGznA/c5nizr4TyRm48xRWqTh5n+ycThESXHSGi0Tn6EX/K7A2+eOzL+P6ZOlRT7/yRzG18hv+nN/iLUwPdwOfuB+KK0PHVtCrrhip7r5gJtXrkOHsLMh4nfdXare+IsbopmNApaYuoj8rQPffG9cb5HhJVd+Krb+xprTnALr0VWWy7e4yKG+oJuTEm0D5nIGCk3qofyzcM2xUk2VA93HV1Q+C5HSUNWNxEUUAnOb38pbxr7u/PpWVsMbyb9+PsiZQVFIkqlRwE2KAQxCLVPvzveUbOQ1/G2AtGWORJrnsAn7MKQfbBFTC9BRMzn+sMvLXWwRCPn7jpG5PueSpxSxUh09g1PUCQNu+ppBejBpyRpLnRezpYnf6TuaM82MUR7YeaCgpWZfARdK0Bjdh85ajMqSKJX+V0zjoGA/Wt5JWIpNK4X0jbhiiIkZjWU2pnumIbhwlATaG2smv0uiGdqEoc51SGuHLBRQvP3BEvZGxH7LpFVywnDRipthKD77hJrXTsKp7+DrpLM10+8763nnuqx6ScqCHiW4/i6VlZ2krzumjH29mLjdql0nHohMS4mAKFJPoMq2bgaMcGVqYJJTMug250ylXA3JNLjTOyU/Y5TpeIu2u4BuWAOIll7M01NnO5wobNDepmsXPcKz6FGe+05kZstx7XproJoGaswxeXf3Ta0OSQDXOATeR1cqv4jG2a+F2/zVLSwHA6N5oxpadjgkE1GzLd3sWYKw9H5zoI+4I/t+O6ALvBJn7JP8lMYwd1O9kHKxyo/6o84QsbmwnkWdQzh37Sojpmm2xvxC3D5ijUEnPkSZ2NcIsbW3fO8UZTLSahIeVhIUnmaES582syX4C/iKb7yLHVxXoHIXpUu2NLJu82NjA6QTvUnsptNJ2LI7p3A9/48rMQt+ZojRDDnWQwlUvr9TVISUVUaV0OsZeSTjZtp0DaSdeOpeeY6rSQwxJLT0ChD/a7HluXkSxgn0cZJXsuZLquA+JMJPBzzotikgWmXY2FElFMuqAY8G7IUU0XGbSZU0TepJua5Mk51aYjr22dsKKO07H/YgVkLINghu1/hLz/ZTtHAe2hPv0ggRPlCLFwEgBgn9KLgV7VjlYOsOK6XYHmbj7rsj5TppEiV7U5PIilT3dDQ1qWJw/T2TSbp3zQGJMaqVViFcxa0u8YR37UEam6XBnU9bvKXmiKgHYhN9uR+HgV5NSPmYHdQuVy7aOkHULUw0dXabpaLRDsoLobJulHnb9nVlTAA=`, `base64`)).toString(); return patch; } diff --git a/packages/plugin-compat/sources/patches/typescript.patch.ts b/packages/plugin-compat/sources/patches/typescript.patch.ts index 3c7a1d3204ad..b7a3c76a1f3c 100644 --- a/packages/plugin-compat/sources/patches/typescript.patch.ts +++ b/packages/plugin-compat/sources/patches/typescript.patch.ts @@ -2,7 +2,7 @@ let patch: string; export function getPatch() { if (typeof patch === `undefined`) - patch = require(`zlib`).brotliDecompressSync(Buffer.from(`m9XmPqMRsZ7bFo1U5CxexdgYepcdMsrcAbbqv7/rCXGM7SZhmJ2jPScITf1tA+qxuDFE8KC9mQaCs84ftss/pB0UrlDfSS52Q7rXyYIcHbrGG2egYMqC8FFfnNfZVLU+4ZieJEVLu1qxY0MYkbD8opX7TYstjKzqxwBObq8HUIQwogljOgs72xyCrxj0q79cf/hN2Ys/0fU6gkRgxFedikACuQLS4lvO/N5NpZ85m+BdO3c5VplDLMcfEDt6umRCbfM16uxnqUKPvPFg/qtuzzId3SjAxZFoZRqK3pdtWt/C+VU6+zuX09NsoBs3MwobpU1yyoXZnzA1EmiMRS5GfJeLxV51/jSXrfgTWr1af9hwKvqCfSVHiQuk+uO/N16Cror2c1QlthM7WkS/86azhK3b47PG6f5TAJVtrK7g+zlR2boyKBV+QkdOXcfBDrI8yCciS3LktLb+d3gopE3R1QYFN1QWdQtrso2qK3+OTVYpTdPAfICTe9//3y/1+6mixIob4kfOI1WT3DxyD2ZuR06a6RPOPlftc/bZeqWqUtoqSetJlgP0AOBsOOeWqkpKJDtgP25CmIz+ZAo8+zwb3wI5ZD/0a7Qb7Q8Ag8HkWzhVQqzLFksA/nKSsR6hEu4tymzAQcZUDV4D2f17NbNSreHMVG0D1Knfa5n//prG6IzFVH7GSdEZn+1eEohVH5hmz6wxnj0biDxnMlq0fHQ2v7ogu8tEBnHaJICmVgLINf+jr4b/AVtDfPSZWelMen+u+pT60nu+9LrK0z0L/oyvC+kDtsi13AdC/i6pd29uB/1alOsA0Kc6N0wICwzbHkBQGJ94pBZ5TyKj7lzzUQ5CYn3Xp/cLhrJ2GpBakWmkymfeKcX2Vy2QEDcIxnju2369rf+l+H7E96GzyVs0gyDzUD0ipfKdmd7LN80sxjSiau/0PX2e7EMt4hNqThHEad9B1L44EDU1ZyFL+QJ0n1v7McxqupfO9zYGEBGJ0XxHdZmWuNKcV+0WJmzGd4y1qu3RfbunEBAQgZyBUWwjoXAwxk2XVRjBAy1jWcGsnb/Tu2oRKUbqGxHjFxUihoreyXW2M2ZnxkQYPfCorcVYq7rnrfuUV1ZYBNakboTPj+b+PLaIyFVsA5nmcP8ZS23WpTvTnSog5wfhixjwbRCqUZs5CmhOL9EgGmgj/26ysZ0jCMvtwDK2F7UktN2QnwoB1S1oLmpPmOrFf/CT8ITb/UkMLLqMjdVY/y/EH/MtrH9VkMaxM7mf8v/TkuD1ov5CqEgw9xvc/+8UXQ/+Idb2isH35w98+skf/i3b72L4ElozP8Dyc9wbdJcY70N/9F9PVz4uSI/nhcrSt21q/fpyf6UbWyso4Ds08/rSPGAcAJs8sBMCYualxyZxlLqfQnp9jYxdy/TQVs6vYmnTgEERAfmtB2No5xf8eqN4yCWgmnR91NQZQ4CmYCqijiU983mMTgUPedf8L8/XiCu9jbsDMIARuL0a0MZlq7lU2nxB8T+N/F7EFutvEuWhxf3XFlS0KcKMiAbpPy3gv/6r+NIQcVkdlqicBgiYOnzr6FjwJVz+QQxpM+uMAIW4F13oWQzNh95KZlI9LOFocgrLUo8g+i+ZNTor6ypk+7O/PlsJ9WsFhRgnLuNv5P2Isk25gqT6i2tMopOL1+RQcnRBuKZ06E8Ri4/BOrY/bQ4GAZPE+LXKsS5jTYjEl5jHNgnm+kjV9trqJ4C9pcDVxTWux8uovsXQUEYh9BP+NR07OqmcjOsakIEI/xofJioScCLW09tzJAVwZwgbQtVnkX3x8H1sI2y8Hs4AiQYfXRNklTmb9mn9RgbJl2yf19aSzCGZqFq79dXW791Na6an1ydMUb/LNp5HdEZkkmTAdP7EPMC563MSh6zxa+Bz5hMDuNq43JYIRJRIWCuNWvM1xTjf8XaHnVPKElBLyFDMJyWiSAElJ0FJVA++8CIBc8ItAWrxhecW+tOoGq4yReF6Dcz615ifhRWLpIOaf8WTs3zUcjEBS1JEXbIByQhm6+oAoTb3QPkok35qz9L2c/mp5WEuCJgerL5QCxMXUWHBJ80t+LevvZ65pBkFa72ITFw4oGQ05TynQJyDjU1AqBylBAdTE9uIflWo0b+xSUCJ9Ty3GlCggfasdT0PX/ue3w16GUfU+QVQddTm9XiY2Bckz2tKt2il7oUIGBRa7Ft5qJfrRIK3mVs9QsDo9higyTz0N9jmILeRhROdecjV44DDZzYnJNryISvfdIq2x4c2/8e2UXrlRm303TE6kxkQ/0kylxgtsQimZ/nb6jUaggIXXN+F2vyIqMGIuJXQR8yzdFIHknqeWFDgsdvcftmkZyWojcZc+ZFY4rua8nU3XuMNchfTDpBbrjMXsJGonJ+vKX0sZbNcoakrr9c9i+bj6uf6f4yNDdaiXLRhJrlh5zmfbkOGQkosfTqWYgpEKdYx2Kxfb+ZDz4Ufteybj63LzVc7oklSvXHh5Nab4+b8DeoXZihVLRZRCBJuj0J6zk3PtbkjaEH3sD3j6hHhwmufk+pBoGYd9qCJEFL21AmLzzHHktN9jW7GSpe1p91X10Bm5/Dhxo3BNex+EtiAFD3dTK0NcvT58F0IFIQIhgLP6s1MX8wofvtnPX1PQ/bLAwNP+ulKiokjXruRYKzTErNjFrvX5n6QD7oiRbOs3OQUswDgOxzcd+WwGZH1ONZJLEKk2T4VGPrrdkN9ncxP/oQ8UFvRbI7zGVrpNjlniCHT6nYmp7SlDcZ1XmS7tm9CXTMumh89LnaNuF3/wPVa/NLSE195Ntstwz1V2ZLc/sULMGaL4gdF3src9sR1Fh33/xiS3qOrJQlLpy2luR0/y+0q0RnVBBBe4yi4ueiNOdNAq/pR8JehYiEiu7YVJJcGBNBHlCOREQviO39dwxTxdulwW+UOO+OrXOskQ/csaLPIKxUOUHktlUtch/SkuaV5QD2G4vweAaCoSxMZ8k9jagIRR/irArsMUBBkvwQBZj1NYclQ1WtdeoYsd38CObL/DJksETohDEy6ZCixViSEPvNKiV1SSCwIiVk0dPGwTZxeNwPoA0BDhYNc4tIkej3DcTHVTS8W1vYFlURRUS4k2naQ5xI0fseTRBHJQ3WJ6Tn45afc9k9VffnLeTH+Kdd9X9Rnont4E39i8pr21YM+umrbIBTB8Ex2jNapeDYMPaeXACP6jpZnFy8NEyG2AF+Ega5vkvKIWjidXnkItArCkmeU63Fx+eg8KiP95JfLbUQus2hJTKPeGTz9b9A0TJtnTVcdJW15L/+3ZIOQ3jeoFsEuB9IGzxFY52ntO1vJvNdPQMJhXkvTNcRYz7Qz6l09rNUNGbfVNOW7tQgzdp42/0sZtnFW0+64nFJ127Niq3QLT8vwHYw3kOplK43u3yllVjU+RYv76vu3JMghXWGsSB0u3ESlir8CjF5ZIflzQoMn0xbP3qWknhPYHTAfu11TcndM/gV+npAK5/yKkwjnzWs5UXGXJHwAFo1FU99jtfiDBlqk9Xmq1YKsy7YkB5nOmw6dy9mjCqYT72Nz9S4+BsTCObdH/e/YZR3MzUt/j/sjQMujqJNOqABq9wAJCDwn/vwSbELgikVGYviA89VqCQjLBkWsMBf7qNjRT3hPXMbT+DM+fsTUEgPlFV5oq2qzdgZ6uAb0yK/szd/zKqTdSC0GlgQ//otU9TAFEtm4moY7QTBAIb2YdPBQAqhW1LevpeqAvf9tku0fT+IfpA8fDsqAOAQxGbPa0YLgAOIZRFlh3WHrFyBDcFLdrSJP+9Ikfv1V16ukcQt9i8sBbU/+m0SAUsjdTq6mtQfoeI7xPWpsP+1vTo73Rz8VnYLmgxaDWgOuNmD8+vxzpyCIC1upRk0+Wd7Z0smljU7G9IdJYlY5vyGTyzRkkN88RMEm9OKFJ4IHwBxzcQtMNeMUwwUATphdaafYwiPK8NptzFLY0dUIAFj2UVoHzUBmmTP1mWCmKvvesqnrG3hj+FHkfjO3nN+MaWXgorgAAA6K9IXTUD1+uwaqHXsEALRgD82K6GVuzjQznaC89QI2B34wNf1dPIwydDO38xCsAKCdf19/ePn1xejxPZgLmzLlTLvloYWMde1luC66/CFwUdwGF5iJ4QIAM5jvbl94r6EYr52H2W12SlcjAHBSzoVjusrp7UZh18Z/J+vwjQccSS/JBNE2b1adygAAyNgJ5P+bqz5+CPu24bqx6Gjcz84IAtVx2VEyBJTqrocOCI9I7r4vD7cz9L3AGZ6DBzEu36w6fQsAkN2IsmzCZWMxqbMTE75ymnyFiK09l327D2K9sywTANigkEkmLwTn4RqDiPxpy5HKA4aeYqbSoi0AUAKsGA5go3ZXjR0qpUsAoMWolyNxzyiIPZ+qsEM7QDgbHW9WJWwBADq5800tDEPPiPa6ialFj0uNAEDJEC4am4A/oPGPxmDmXdikl4cLKa8CgG7265rxY/wjtmbutfwJ6M9Mer8dKHyeZkalbAEA49jkE8MATNz+qKwsMOlGAEC+lkvGJh0ds/j5uNtg3tilTY+NTe/JnqF4N6uSDACAHKQP1Lht8vSzU7iEyzPjut2EPs/Y38IspIepXm+8s+bS2w8QPd+8ONuavlmV3gIAJLA8T+O2x6fBKOJyYweNq/YsVtd2SjETADgxiwkX4POo7fsmuHnc8rCP05hqlnABgBq023MivCisNnZRtK+sru0oXAIAK+fRHim5pkf85kL/YfPLQ/xReQkXAChjtR0XhfDJaiOHaB9ZXctR2AQARsyesDkUv0deoTWmffvT4f6SYAUA6+xXzrX3Smi6X8zthH22b/w19LM0XlWqr0rjAgAWs1Wq4T6AhPsAVGoEAAa5PpwVKjiHWlfJ2TZJf63FjF8SUG6KBOOL9A4PW3qOHE295pQyfVPIvxcJeU+CKduBk6Q+a2BAVtKhf4QnHrHLFpj6sNDUDvhCfNPmtn4pdDSUkHE1wPPrF1UvkQS/L1S52Zv0Sb/r9YK+jx51oWU+i39Owb1p4MDw3LcwvjpMvtDXPEWBlLcw4DNpOOC8f11nKez61/hc4txssbudIo5lL+aszAI1EiiSfkCetqOyBs4trCbou3jqJZ4diL4zvDnDBRgP+086X66Tvj3JOY1rJwmj/sJrubDrVb32PWhOs6BN+sJXQ+6nOZJTgPRg4PWz8sp/wWI3wsGBQoSU6tr0dWOkrwhDNCN5mfGAM5vfnawcoCdm2CdzIN0r72XbbDWqjom1cMjYh229sPnvzWLZAaSiQR3bSL1XjCwFH1wa4ZmmLeiaD4xutxAZfzu0FwMUkXTsvb7SX7TLM4zwjGg+HbjiaRWI92lgwaxTyKgiXbnThL9j7uBDihzuMULvXXes0e9x7PwRK+6mBLGD9z7PAt7b7va1J2EHu/zZfZ6JPoQVd849MZCk3RJOxd5Nsxi+O0lUD4Pochlk5+4naG1j6yiVRKBPobLOad//hDECeD1ORiB9M37JsSxMC6yAkKEdy7S1aRmXRGrLECneqByM8iQ8x6d71F1uhkYUi3WEjh/A9Yw//HCidh7pl7XD8vEkuN/f7XQ3+fhmSfR/9fHkNcRp4qCD13IGIBIAsQXtoDUnASJc+5H5f7YWufNDdZ3SiHJqVvKw8K1RNB/4mJi3YzQP47nmN2cw2BH4yKk+zk7wcLx2bVzeS773YW/7nMg8DMlWZGeYPJ8lYLzOnN4o/0fk9Fb9upq1yXbRyN7iDSRnOnj+kn3vLjHbn3NmA2tRwcfVd/KHGxPybUwcg9e742hY/XBtEgCQYe9Qh8t8fte6aEo1Lt7a9rryutsDxLxo0o9/lhdL/GMs9n3cCxZiuv3as0lchJm9dQGckDBOT/R+y2ft/W/eswB4NFnsqcrBTerQmx0BTPclttiZPF+ctHerFc2RW9MJzpuGOShqyTLCNsCjhPV3EtMF8nVQf2TL6GzI6EphQEjQgG6JrtMu/0zWg2e97o/uoTIf4ipUvVVM0KYey+VkMCWrFynVZh/hpTTXcm3+EV7yX7W6Ehrz8KON4P9MrENJx2msYomlnUT80OrH6Y1+KEfOWn8KyenbZuHQkjBZcDAx5+J64Aj6TSooLJw3anwLeZGOQeSSPXLe6dVY7MF7HhAl2HU9fwES3l2dLETAm5btht91AwjpdUoQghLn7RhAIRWFRVWJa2Jtc0Tm+dHRGiAvx6wG/OCGa7BsWuJ6U3LwfOzSY5qNsj3Qpt6+JyEhflEfl2YZ7jhjJ3y+3ehNh4IBG4eEmVuhYdlx/EQQvnVDqC5Lodj7NWEXjMFyT14tjF768alhticUJrdl3w6P7cKsF4rhxIKWxOSELDHpzaBPR0EgNZlKdZrSiJfPGaWK++nvRxwoo0gt4maZU1CAx33oq3e+NirCq8K514FHpLc0jbti5KzNlr3ttdqoSeYKrOsq+jS0w4q5Z2AMeYnbAgCra8oCHFF0wJ/PTdXUMVyIdTRhS8cJZVr5dTMliVhKm9/TZduaYLTA346l+ILCTo1es+CVq/f+2MU+XuX47AuupenBsoFCNMV/2ywHjCr2flEAWipfnI46tqmjq81ytF7IWoydKyHCSI4ew+k4+ATvUzq2buldaR6SAI4VKAMyMT7zkBkAMB00NLbwmtJqj2k7NAGAqHKufA41DAksWEk7A33esJTuBprShiAOZCMOdd72+E7b1umdzQCSOsdaB3BxZgCAIhUUSdbxYbW7MfnSRjQBAOeidlz5FgodFOhlNAn2jcFu6KmERUygbnHGMpnfdLZ+KTEVgF9WExaIcJy8hr/tp7Y+ofIvp0nKjrUMZqLMAMAsmaCWuxWW9dpVpoxoAgBXKtOVhyhPGCAhWFJty3Ija39F5udrAvbBC+QD+d2Qpx5Dhfh+FqLgzUW10AwAWChUQzuhruPOnJ3rUZXMdgmhZDvzdRCfX1UCN4/l/wPrk1X0qHN3KbpjTKBihdxy04nZgZFKr7EcDqvvSSpivzg7QGxmssgfLo5KZRV1TZtdbR+k3S/kYjTNfDUZyWrcFtxkiVhetaWfvcxumYBgVeSozNkvIgSbt+L/2Cl6TuiPToNFUi3gzvnWRxo0ES1a/Wjq0Zc47dikmBBXXE4/cj/BEnTUGU8vsXsssBsmrEbCzB27QqDQGPdcgFpmIb3VQSk9zfTyXFlADILp0V5qUnuHn2SAu8QszfXheW/UnD34sJXHTECWUYQhLc5QozwqlP1qnYO/j2pQmGU03C06s3d2EjlIdLNuy+Z0X9GIUUWCXDpwtAPYI/zXrF26ADyEpyyj5o5bn4GKoyNdkhskDGYenTTQ+fRqo0EL0yIqcAfyVOvo2jq3CjCRKOLgRzv8NZ30rd0sMLzpKrIwt866C8KrAes6AeYvDWFOdG2WjV8dNiG2wUyaYIU3T/cDo3COPFw8EPEFcIZAcCNE6BpH0CBPxefguDvpbTKPZF5TYE+uaLtxvaIUB3bIQI6/yK34JNzrQt1az5ucZEtXCMlBED4lW3rAfndm6l/kCGLzwMc1jaGqJo9VNR0VIO4dMQMAo+m4cpFwrKQXPzW3czk7Vehrc4bS6j+UCQBQhrljlDaOxR/+L+5R2jt6Tz+GWNGIJbKP1cd9mk9gzEk9hjdUxnNNvHTW4dOvtRS4MRoQDFpUwYuR+pe67JmTNfNtDqx7LG4zNLjh8a/7i6F+adgW4ci+DW1Ilf9ok+1zg/3+lfN6pK5X6QelSexeWGj2JnH1ym6sQa173zvfno297vUcHC6hAoTC/3enX+ej+9JNHu5RQubQD4++jHOK2fiK8Df3A4QC1LZSDmK46S0VdPvZ8VSJnWHbWlJDsshRGb3dyRkMr3d8VnqqBEcrMSKUyBqMsk6yUayfov2tM+rgwqxlrsiFu4pvawUNfFtcuWrc8FmGXzmz8Vn5LxfzeQoLfUX/JWNR9xC9tZZamjtBesX5eUAqtw7rpFfDcdbgXsMcsICLg6iqrNnoDTf4umgefPn5ZdXLAEaKmKr9K2jWq3EjfHsxMwBg48Ul4dwopQnV1GzvwQsXaQIAGfxz3b1L+LfNKAGAuxiMqmZyB+AYNU1XTRJXly88AYU39jt8cP2yet2jRRzcU6scgDEiEryUmuE0/9XcsZcfId18ZowZMT1Pn3IAxpBI9rrhhqfOkyl7L398ZNuIPH7ElH1o1LGcrV7PCOR1IzMAwAuoc0mYU0VR8SZmewtvuEATAGjx8Jyr7ndZRRabBAAakrqa1eFyutex5al/HR9+Pg/51BPSD406ljMQA8pRvJ9nBgCMQyre6J1RTDLuzPw1pAsbjcEeOqQ1rdTmu87PE3XTX6L5Gyznwp9PhH9fPkpGQ8UNREgtj619rgZb/3wPFNQVbHc/a4jvwl/8oBKYjqAA6N6ujHBoGb4ATrvhNBnDILjc0CJKnveWTCZsDPoCAtX87ot1zaqQIOzniFoY5+YhQw5B2c/phhnSAZA9ApFkx0IJ7sCLThlPpxnHyv9oR13WpgPR4gUqXIl2N4nXnTkJrp58Eu4njBlKzTOEZg8IxnUq8+sqOnQo9N2SE6jdRZ1z/fsQ3CJqNvCck7DRQdc3RveF/dc5mlOPI8T4uL+oz+Z8sJ9wZo/NELlDNct9N677yFvr2oYCQ3/83EfWnj06lnR27o268AYQhVTPo3RYYPpkhgyVUD50TQGcbIPBCGxagjGtFBjceJbYSX958r3v5q3JbgoA8LXamYl9ce+UOusgjorz1/LGw/LsWuxIqVZLUflBNNzqe8wfBnngUekITgge65Xj6xD8Ero1H/HAEgzxiww6j8ZB7I9hA4PQLxy2xTCSF3tJ/60ye1nRAiEhHZjEwgdaaD7HdmaDiTG4HD0ArtUhToud4pjcKlanIcEUD7j13JTtBA9u040VgeqfcMoXejWyk7YDcHR0TNJsYM2cyGylQEg654jKROckKeaXtByXo7DqAQhhd+e41CpRPIm6zoUBBU30L6veKGoHUvVujt12wrswKY0GCX7BAJ1ePs85euedVbtDdCFD6u6HVpjhIAJuyalS4D2EoUBc+OfKne64AHj8o92ql+v1XqI15bZv54pNU+xgh2zxoFup3vOQ40Jgk6wnrxfKqgVYJ8SCL5iRzYqxfYJEKQ6I4V7umobUg1tBdDZCI6wYso5GIsPj5aztuwBIib7SFoG3neHuUIkB0omw3HgYMqAVKWPKX3j0zEOeXOXa53uihs/cCwK2zTUdWfmdaBXGvP2ca3oubeEUEhTjUTjLD469sBTbSoNat4Q6NAHDoLn1d7TVHjJAmwfrggxygS3ojqv4siKiccTvzqizQ/sT37uxiPOJBH54kEryjipahqC4WYQ3Ztrduw39FZkaL80/Kl1M7mFa0VRxRoxS2hASYUpIdRLxT54CSsaACskZURcD6T7DueOjXevevtHYqtG2ZT+lHHVdNiMYIjJ4fu/nmbJp1zaOCONKPSKaP8J95Ije8V4Dnzyb3018HkdmaFbKBJDZMrXEB/VBy2mXVnq8WJSTK8CQuWPax3x8N3IdHtP+nKkRuXSj644Hnl38rAj9tk+2VVRuWRjNa1nsrvymeydN2VmUP4vo65rVvUozV8g+vFK0Pl3TTFjraGzjnpqnYj8fEn7y8xRGCb8o0PpJFDvkn5OOcISVLmQL98k0v89Y4snCvN8eEeM3lT34MjVzW2tBDx823AnRhLHF+wMcfn1USCfNH/y2+Nkmud//9f0xIbj11Zu5Zj4+4VjnVY/3brOKzwL+ejBmAOA47WPUljHF/2vcrorTjC9qauGcdjWqnl4Xqn61TABAfHiRvtpVT/BXt6udWv7G98iwegCujaC1eL1yhl59ATcUPRL3AaIOA+I5uupJcT1P8HWp2/hzT0Sgulz3jhhpRAGwRce+/k0LmNKMTfgx0HDnnYCoD4hwwcoVOwxDBCUhRKsQoCSRhCue2/9c9F4/djN/iU8vqQQAu2W7NleXuELigy7hrrH0ugYBzkBDFOm6hLH5gmTFDrY922J2jrjyFiDRWEKvovHJtvocMB+GdcfEc26nXAIxds31Zvyjgg9jDEkcu356cP45FQyWQ/2Xr9D3uuWTcP5rnCe2ZJ0E+rAzmSuB7q8l5kKexhJKIEgrqufzwt4z0Ma+6Z2Tc87Mxal5/108FsEkt5OMAUkkyPVYQvnEFI//BZi8mLGfYTCJKmKnPSOjj6PKKtrk9r4yTzXtIoLNfgCFXbO64O3y2dHOc0mB/cn4z5fkuA4VivPPReLcHVz8e0Cn05dLt14MyJdAU5yPV1oQSPcU194ylCH1I3Xt+oTMx7XGZgDuxpWddWvXNDuvgrl5OdL1SFnrVEM9U/0qfyz+6vo/VODmhzpDG/dFXZtJ7jTriHeSCKPhhLO5/uYBuSfw1POp6E8u60XdpKOROkyUcoWjqimnNyHhPDDdV1/7ND2Bh/7aiuxpFbYlYhwZNrk3v2ylTvyNsFmfuRontBwiqKx329Zob7jLYDIb9PrG+AWk4nN4QAF3naK32CroJjFK0dzBGBdbhqGvOwlO4Bqc2B+K8vMn9SgTYKOTXQpGthMF0aJQHsdrTiN+fG+eK6bKky6CiukeqBgoB0KYhl0ngc3MWhYQhR6ULDmmmrqvURCguRGH+xUW59GyJPI78e38CbKxEQpOnYlmZUheRl8+5Orw0KnDEZXpMdVzYEcr8V95gf54U3cS7adnQVQm9yAR5pkyblumE52RaVLbIouY4WxcNzoLJraAqsbN7CUaEyQRtqm83YVxgTXFBNPk2z9SfS/2mTSulgEfWUOYmQEfiAaWnX+P0ezKFz1BzO/T9SX4B8Sm7NUmDnbHI74izpe3Dq/k2jqvsxNBX7keI1eux798aA+Ee3pag6xpPDa7uIun6dXBDb9xrdpAFa1TYvlj/3iacVrXUYInG3OQv5lASKQr6Ok3CWTOFrkE3Ab4lFR8hbY0DZsgpiXw3Ic8YccFXomJeuZ+zNjq4CmlxYhcXQnrgtpWb2S+JXEp5JHh9APA4IjKN4hdm0qnHRzhSFfJCcOkg/RinGMzwtgNDahb4H/uNWjrIexsVRC9uYlMT3CCWCLeq12rSi3BlAQrnIAdFhL2INatBUy7ruc1TE+6eZ2XkZ/C6d6+CJrwouvF0ghjWDogxPbgxotmr56iGJoKnuwNF/VWHb037trPU+K8a9PCmGGWrqdiVkSOISAAc7D91xXG8Svq43DBvltxo/jeFylAbMWcCDXDm0rM6DbyRvFtLzAazwd/SPi1x5/NHyxHgX5VESDDn1tRHXzSlbjz2ulMvtv9Dp+Ic6KQZ3edNwa+9iZsx7kIwYF4aRfPuiAwhoYbkgvhVzlgwfF3Z5tX5KgmwkDs6AQdqyuZv1U3sFzdM7UxaJQ6JM5ELO+d+/k6PEylnYrwSOBlurpS2rECSHSp8S5Sbrm9jweZ44BxmkOBY4P5BmhH1PRRkCRcXYG91K0JRzOD/B1vQCcHf//8atBI/HuWuilLAbut+HwOMwBwqaIhe73RUkx4vCmUs4j6ALwz2cUa21NgLwszAYDj7hk5AvfEbG4HnKsavV0z2HZTPwBwNCiFQ3kIus/yxQ2assWZAi2zvyzAEU2C3XdnMwLHq7+vztaFd9UtqeZAqkKXkjoBs2vNdgByZS2cA1XNs70DCmO/0wQp1xWZZFWF8W3oy6uDaQnLF/YRxHk4rtJAAui5f4zymPhhpt+bgyGzSZdePfx3cSoXJIAuErW2pSJav7eSO0FL2bOd0eNgTenDatV0qcMQm4q085gBgJZgp6OlHCwNuT4pJjv46ZFji8t1ho8XaAIABIPsmTYL/HWV3harXQv7AQAWvtqIyuK3dJ+Cj9PGMb7K/JvB5xoGYzzTeucCQeXKMYa5Jh9EzhnyD3aGdQvU/FS1qMnjkPpyqtBQbX+HZgCANU1TteXcz9EMPZ0a78Xu1gxoX41fMf9Gx5SxOfgyF43WlePpTPS7KysCZeKjhxfH8OR2QZTGU8btjQNsDjEviJ5zZ659N/5Cs3tCTKjmg9XhwU2AieBC2CpJAc9MszqjvkvHbiHW4L7rMM9qMRXNBirYkwJvjoctYaKk80gNWxIUK2xDd1rykGGMhRq2glXBCIanrVbE4ctMSCncz7rDmN8J8+7xEr+37HpwPbbLV7DuIoUNODXiuNOYAYAdqqXg3NFSErZEqkops7NsF4dEt0pzJgBg3t6nyOT+ujWUO3o/HWboODheW/ZPjzH7Y2vJl5Vf1yz6cJxee134g1HHKtqNR06Yb1afnVoMAHh1fMz7KJmMuovLqpY/VRzDP+iqbrVar9VPSZxLCflzMZyzGDZ8juE3iuEfdIFWywg4UAxhvkt7H3Vz2Nmijfg10C3pDCGbW5HkGR033VTgXud+mVEqiPa0FRwBokdONicFMVWtN2cDyUBXkaaL5B06Dqt35stna5O88Hr68+Z+0vHQeOL7mZXCPby/RztHkz1eoTOcHLwcfGzDjP9lqtKlou5FzABAt+Kmy07cqDp8+QpF+lRyz702fCBvwQM5RRMAiMkiog3HhpH3/YCarpVzwsDVzQUBQNA83tWEAQVHZpGCKOs9UgWB0sS0CoJt+jEqKJxR4KigJF3udZC6mslAYLpqlIKwZZRLawYKHLe1OAacLM8+C5yT/b4tcDp1RVdidcVxOsa8Vfh2fiRZ4tPLrNuhQJAAyu8f42gdo2Z48/uSo/P29+J71n4oGiSAghLF0zoExPPe086JT6uNadoIQf+UfWOXtuWPNasWv/o8ZgCguhluxCuXg+UWd3uW2hGf5Yq3s0gTAMDia0wbFX5SKZfmYVwWGgQAHXyMEWXhV+k+Ar+tjd34iPkX4kOGQRqfp70XJHXkjm/sJ/ruOb4mSeuYnTfjCWFvoEcG4BwfnEtpFvRelrlGIum4+DYYBA7AtEQyHmxHxTHP/CVxmr/Sp7QXobUx4qP+rGJRXehvjg/uZD3fs2M5+cf7E5+fOPC8KOzGyYE0ZYwhuF0MBVh+MePAVk05a3djJn7kqrUyvLsOroqbM46Z+nM6JvdaGsEjVfwqoN2SfHc135EyJUq88XZEIX8I5nbsDEklYj4fVQqmNM/LjlmbbOv7O+qij/N1bqYrmUIugDHNlrEKYJjRKVYXlHSPdfyGYRC+RPqs64u/jo2ougiKUNbbpI+Db/x2xXsz0rs6VPAcqFgWBi/RYfXDhM5Ens0FyhIjELEM6DiViir7E6DJ9dNP4HqWVSnodz119e7ebZ8KbVAEGh++0g/ApiYn5VRNSkMFBkNiOgyUXPxXrPkCEEh32BdBNi3O8TCdjh1Kx36Mgtx2wdrve3T5Tblwg3Dy+gFH1Y8bEJ4Y8CpF3f2ifCSfFN4eSp3qgkZwRVzRWFGKT6KmfJbumRyGcIXhjcutiG3UCPipFIo5tES/QJQ4o5fA1zjdnptOZ6UTfGNOqVAk55iL3/7V9vAJgEzoLJTAOcpesyuSLJ9+IW+7q3ToWSR3w5Y1jIGVKSSunuyIIgcV81NlP/hsnTQRh8qFuSJCUR//D4NH89aIdvtqj5KNjOeCsW9jtsu+p9no9a8geJI1GJXPffb0anRpeUfz4mHRTMBWKl2PDpgKGxjEFyPzEZovmYVbBJqzI/RTaIuAbGwW7lIsDnvF2tLp7Hu1b3qfcsk+/G3PLnDBtaF3JHFxcZZjXgxceGu9ILgKdVl711k70N7xjW3vWAcAGE3Dl1+jmMZYWowjir3aY4c8NRZirPY0Ev1+E7PCsPpUUrFDWx5UL3Rodd/wKDQrtaeR5aVhbA3ILyE3ZJhjvRLYnEuAOyGwKzeB1SZsOJCWaGuT/p5rkM+b8QSzB+lVCEqxH0kxZyEM08yz5OVyjGpfkg0zhcnqroQ1mRg3mTReLxNIU9elAcNGtsPJ5lXSDFeEIunTdwmY2MhZ8LoROcH35TLh3OplkQ6JJnwA1CB9d6SN0ThG3scVgT6N+LHBf3cmMBRjqZn7XbXIGemgb/Xk8bt/mx5VZe42eAID680ptynUQBNR9Rf8HbSWhuPaSJA7qG83SvHE4ZU8OEZqIpGXZ2GlaMKbIbq4uiDYovInRvGODQYcpAO4zgeB4dnzqV7jSqHt230tB5CUBEsE9/4cJkpF0SBAh3k35zXTHvCenvz1Ud2TezFEu6rBNFZnsbQrAZqU7ErkypRSf6XKqPZigpk+a+0vsVaED2D3JhRNwxIY2pE+dvJNX6SJNv8AiFzDxFryAUsX4o48r+31f43Yzj4WI6eSDCeJu+GPFvJDu133wd1RnUutlzOH90ntQT/X7R/amKrLW7A0s7jEKi1VMJ5La3AvXzgwxMrp+bww7wFh1HKN3Xhvv+lKLFWQ4sUEOD0zd8CG7eucPfHjJI21YN1vyB1iSH3wVqtyGD321FZKYMEewOQgYKGh26SN3RxAK4uhux5ehCjaQ3GjyCMS4cIeECSG9Ami/Bv5lzzDc4SKixDRO7muxtyUi7xbSGtZIACJ1BYtKuVj8nKICZEkv6tAB0p5TtJpK/9/XVrKVqIC5Gn5Gl+0A2Rp6qk+LbeXn8lN20x2VCwnMxjORdqIQiITNmlKN5I4thKV3Ze3OPhGP46gumAIlPrjldf1dBKZVqhtblr7/oNQt+T9uE7exCNrEZu9oghu1pbzbmo/SpgGJQZbzXpocaLCH1LDy+GH68PkYGdP4CubBJyQ1g6E90ERC3NTSp0QBu/GHRqDgqyK3V2j9dxCEcVLFpXzSIB7on3SnT1kN8WtZr7ekIrjZi5f0VjZ7TRFA2LXcUfw+v714j3uPV07vb6V+Guqzup7wTfa5UOr6bDQ1T3NbY5CGPvUfib/szeX2BjA7h6u+ioHp1/cw2IrfMVok9S9Z7yhpsnxkOmq8Xo0MV1RmRf8bpBvDNH6cgLW961Vv5SeD4Jpn5HEoPWpbBq9Bpna680qtL7lTEt5D8J1k+uhkho8aCcB6XQ2X8v3eZNlMhvyPqR7PLF2hJCMfG8uj+rFeMWAK3akFPtO/o/VbnP2iGtkR7/rWe7ck92lDvk8q6oXiA3cZktHYFYSaLq/Wd2Evot7Yw3RHQToOu7B9UKkrATgIggmR6iaaXml2a1gHX2n548XA7GA0NQHEl1jZVE8ujv65YK5p+tg0LLvdzacpN/toxn+ebxUhZ9WrxYP/6fr9Dd/3jKT9qPcwb0ZHjwa/vmHOeZ72aED+8NvjT7aj4YMnL9DKEMLCLsQsf5EarQaDzcmTWgys8xKOyFBrbcOon9JCV+wNpa53kzxvzJ5O7bVGIgO402v5IAgHbO+6RUbSNbEWEGK5hXuh+Ctu9QahUtfNk/FnItXny1lltmcqOehqOIVT1blWCfzlpMrYeA2qZwB3KGKD+QmDdOALt20yVYVTB5tTj2+GmMDy7xkk08/ezZRHkiu8F0SYN6kOz01gIVGhx4PnxMBNNZ19oSmZ0G7FbhqlOWIIN2tq4hR3nQRsLN+eWFM6eCpGpYrQ5lDB1p4wKcLgCNRIbYX1syQAvEl1a7llGiQmb6ECq/7/nV3Xt89iAoMLWoQN9mTtC42bTObuALCdRI0FV310Ea36gJCuyQ4X4E50iOCXlEIKYZ45eU7UrnNCS17WqO8MCAmY/Yand6v9O4d4kmT7ZC6qk2ekv8GIkgTdUVpWwTWFjLkaZ6q9fkiCDJsYM825A3DCEUh5hZUZGJFNwjUOTlKo3HuGa4aRV7sQlx3cjhkPGRIchPPtePHjmm8Ip2DZR/q5o86FVBaF5Sk9XumrXpwRZPTIQ8bJxNId0kTDy1nEIPjmvYo3kUVH3D7CVqAmawsvm8JH2Z8KLO8/ycLE/DBQ4WvxhWo0Pph5K98UQLfVWZ/UytitHvuWl11gNnpSwBMZijoDMvuarjMIyi2buz2w3nFt2lpdsU17X3m7DfPdSAU9ozBqxNBx8mWf4WzrW5IfaqvHR+vH+6YsTi6rz0tLf4aYgt3gu05+/SiYYq5pqhILfws18fN2XL7xjVL8jw9EWjAFXcAuix8blRIvBCOgrr//dB0izhF6Q4oWfD+aK30NB7cqT/Opn3kXl2QFB4JyrpPrPt0JPzeIdIfbzbr/hE9plcxZZnOkVdFV/zSp8FxdslyWpjEPNJJXZ1ePgtW8Q+fbzcSjnd79KdsHHypr2ZwICYguSrAJJFHlydIA6Ttjc067yPgP6S3LV3rdJuwzy3VURPPHcEuBE9RKTDdFVjDOea4iMrycYG+WNjo2W4TIQg4t+3bQ0kjB2yZ4EE1MQaEyWQTd7kBeL8RFGoyLWXUR5C3g+NeYxfCxVsIvZVoBp9HFHTUJCbXacDeU4pAR7s52EfaGGusTdyg4bF2zu/jkG6jO2B4phg6J6GFn4PPaNgei5xBroUV92Oj5wuQfwYpJO3/plgv5Y0r80XSsnGEXuAWiWmZmY1lsQ8US4K1dYzPRcTy5Jlxw4fYlmKuVWTRbRMYKmuw1I33DmDEq1P8VP92Od4QKQnw9hFYWJPYbHR0xKSftb2WMjZ8tBAxQRPsko2tgFd8fyI6MCWnUbiNYeCpRs+YHAIoP5A+IMw7ilfD67stGzBQbPe0rkPkdzvafekGuhsTZkCc1If+8DSkV43eb9zvJrl1ePyIq5kn1iSK48mmVI5s6WKnHAb87PJYKWmHAK/LiVmO1GT1IDxFSZpp6kLIrQ7z8uqWdiM1+HzjCOwrqHqwKVQCrrOeaQZV3Cn2NWhvzqwXdibTusuLztkgAGUlBxHXhPHbYl7s4t/uGwwBytV2qw66lXlF+tFiQG8sAr/l2+r8X+oPmPxVda9IVEtMFPehuoD+szcvsVuBjanjPfYXvZ1sY08gp19W6SxEGa5MH9kyBEfRetwvbGSqFojHD2jSJn5jmQ3OFTtWNPaj6WgL4LGDmfRvLGMwm5o3lTJkx2kAkCf27T4iS0PfW7p0PeQeHjoPZ90eKsPWr9dxgOSg7PKMbAB5+v0/X3SUGA8BZjFKz+g1kLfK4vgHtHa9G7ODeBAEKJ7NZ+pZtitnlTsDdSbUu3PeQvYjt8EhRO0QBPg22kUkFv+JRStiXAXYTTqYAjjf+cCyqr7UJcxbMM371xP4jigI4Kub0l4rz7G2iqZkzSvv47XPVqmV/l/qyRaVUsyrWGaB8Foer1e7OepmcSpQxfAbod3dnOIX4z27UQXtQgJobSIkWYTYZkjCAP37uo9WcCNqL9w4NRW40ADhRMYBmRub96mtPmEO9KOezoayE3UFzDVvk8YxLZha/Bzt9LXEfY5sF/FVyV4e+iHBKpbaCoIB/I7Ntfnf+qFO6ZQlYjH5ecDmKYSk61/ngM7IN9BaZKepxqwDSNsMK7eQ/gnoyGTVPFcPQgoPz7GMBocsvBftsYYjogrg5iLJtK+2TCKSnAt8VEF6h8ypqi4A7HaAjqhK8eQZOfi9fjaw35vff2n6/3Hy5fs4iRuaT43Vwu+NN/BLTk6tyTyTsd6o3OFwet5g6ojRzhtMnS3peiBHGEcGtg2GVTrJWp2gIFIs5KPyrAophV8Onw+qo/HH+YrmB6vkPieGt7VPry2xQCKnJ+lVCQrgZd0AQMCqvBgQp+mYcCLJzoVtart15zDIVzi0momismLW61a7tTrqbvnlGgR2GxHMECE3111MlUkwFXYtx1vcYe3fbYFXXPoPAKAoMCf2s2xwctbtusDZ1cPHEXsrhg3/zviTN7gbp4AtQqyGI8COwAUt782BS/OxOwDrfsN2AABVtfQvvN+Hai79m45zarWdRnmo7b48HqADqqPphAJOcVWmE6TrpjEPAGAPOIiNuy1QkZ2ZPlALnj0c0LW8YUJQOzVQI7Hs7nij+oX37OGikkz/Wu24Xl39/yx0G2C/WP7edwTWwENB1ZgUIXWF4/F+Hr/JnytTZk0+iu+3VNsAqsF0OLj5/sh79nCxF2bkfPhkWvtMijpO7Xf5R9kf4nyPCXtlFsb3H7YCf10Rc171fYX4MvixfNsA9tosnsxd4BIi9GaGT9iv+W53tfpIK2XugXoVRKRQcdx53QCAj68BNFTUdcqnmZ0LqS3ukg5q5isckmNHUVkxdEhOiVRJXISuGBHtETFhrrvIs0ngCmrX4y0mW/s3YzC3S/8BgF4cqD32EwR0ZN2mDHppiwcL+sT+RgXMwSnAcSFsTduP80FQBb4rDv49Ge9DKs6aW2psI90rV4gcAt7Eced1AQDnKIrYj0f8uwKmfu8wMr+ex/at+DweCrbC59l7ZD2HUL4oysJnurkIaug40ygE01hSAAAwASJFtvhpiPUHId5mMwgZ6lpROiDZvVwHAFBCCGOLuZhnvWQqIkz3JdKaxm5xUzevRXZkZY2929k7imOvtveTwVj3lH3OvBEvfIB4tw9/pcogEIS51MV2nLx6pta2ufndi5N/XyuzHOp4tX07VU0OQJPa84WmSZDrrfWbtTcfv/T39LPko+c1rF7YEz9rM6U1rF96M59g9cktVllRpsCqYhx3PjcAsAqrGUXBMKXcZPANOTGTJeUMraxbO2swl+LlKxzaRURxdsUEzquwS5GzJE5olHIeIgAQaVnLCVY9BRMda0k5d/1pC0gNvOwfANA6kA2xHyfxZ0FOob30iIXKxTmcqD8XxRNkr+jI0nuOA5Q5l/Jq2URemRf4ru8IkTdlT1JNaolgiwm6GXecj6Cx55gVt7BVgStP9CpJzZzxZDKMpraMBPF149VfuDk5W+JGpq7KhshgFoHBMTY8t4SruiUqOBuCgtuPmODsnl5BFd3SdTQ73pZ8fnYEBJfWAo1wYJhoYDrBwFRigU2n1YOJBAYIBC6Vl740850tyXxjgoDL/nFsp8JEAHMIANYhIQCe+XZ6Ki4wtj9z4s37J596qh8oJuSRpUTYdqvLqsl1IUNgMbGRMMVQqerjwIoOBIvhvCkAwLkOnN3usRMeBy7stGOP+bpL3ptAVFwl49CpoGt7WR4AcBwjboIWbqo65luDaW/ux0yvmj+YTumfhIntczgdVuwSmAxrg0FquqAGm9CpGElDj+MzoaBJj1s1e8vq2PD8Ub2HA5/0xTXL6K5pu/r9MM/tLnWJod96/hO400WAK2z3904HZ8b1HBMZXTWZkKNVzTR4IrD65o26AQALhQp4AbG8mTGwc8Xd5VXAeQsBSI0FsgDUVRK44G+FVjUhAgAtQ+sCJ9jUbPh1vDfcvcq/u15rNNB14z8A4DLk6XV+vLY4F6t5HHCxBfFN67IRXJ6mvw0U11QrpXisIL3DrfdWpyz1CcoU42Cq6+fWA06z7mHXSHJldz1Bkhc25j3eTjWa2gGAlJE0ZPmG5u00UW83EtQFOSsNCaSuMQ8AcA48R8Oh45ZVgdmyMih2uCIF5pZlo6wCC7EG1KjAVndAsbwg4+KWFd314aQ4TlpwPkNrbKkHhuodKaKYFRv6GbIfc/DTIS/9MrZTgbEBVOVonNhbndOIfBT6ofxW+ho/Rk89QuxZWDnKVkL8bABfj2PvaSj90uinomMD2POweJQ+Be/a1Cs42xFUIjL6yvFiE2NViUHkDnHced0AwLTOPzTImzsFZKTtprPxkryFUOjqikroqCpQTJVErdB9TYgAQEPQ4oYTrGru8jzeG2ZV+zfX4LSW/gMAWhl0k/3EBfraag4BBtTFkzBTRYeW3rOkWslLmQW+pPdhq706C5QyfZhgboceEvIzWO9lEqQ/ZO9xT/HNeinsY643vp+BGEBexdfzbQAABp/qaNw2vRWCquO3vPmnlM4CUVXQ3ZaB1pHCzA0IZ/H5u0IIma4MsYIQth1nEYuQ0CoWEwAA0w7bVYgUzJcJKp0cm5hka1dmMgCz4uQadgCA2UKsWExpLWFdNnMDYE1LvDGwFmySEogbcIxKHHj06/lwe8wpUMf+TymTqZT6cQlfVbGD4QS7nmACn+6OoP3enWfJG24ruwwvWxvb68HL+c16gt2TNasMXmaRIQBw0wgS+ynUJluos5PourUM3SwnJ0+i6Jh8vnMBH/+0qCq7K1ACAtXukEDFAHoaEAEAAARd7lPLiAJJU3vVf9PRNLE6vfgfABhAc5D5sxXKqv6W3tzG39LG2/hb36bb5EtKrTsBavpEC4MXLK+L+eAi1n/VrN8H+SC7f/79K/05bxVuEMRc/u+Ca6A8krSyN+q8ZhSj3vrcZL3BMXZZjEh+4pkDr12cFHsL/559wPd/sIUbHivH/4Z5/tj48SgOcLjTe8v3zOSy2/2M/gD9GkMWsVtTdyTVvg+3W6uwXhxk1FmId6QMP/uZeku8OJb5sRrrttOGRRDG+lpD88P7L10woNhld50dJssC2L3OGDzF47ApDuFpTp8CAII2lRzF8nnl43Csejuv2TTXrZuiCoipt3LVOC0PABikV4MhsqosnJsXcqNaGTOB3Fwn21xB7shpsLqgtLcrKqoQbBdOMXxwF9rGKrzKaemo3h+DlyEn+EL3F9zk7rf19d/HjKBNRb3EHooiBcy33plc/Tq+s+a6zu92p3tcZQgAjDX4ErKRamcBDryZOGA15vzu1LqhQJ9MYfDu3aUOAXV1EvABnDIihDlXeK67OE1OtL0glpV/vEGwZDDsxn8AYCRou9f8WQRwqr+tN5f4C228xF9cW+ZKN5RiEvjuRGUEldYn6Vt6kYQpp0tCIGG2M1CioNRuuxtMQ+kqZyxYIdOdZe0AQFgFBdiWL2IhA6bbLuIhJbK0klBFVWCVpjwAgOXhVVVBBTZuakC27IxTIAme7VmQXt6QEkijCio1Ltwj4zaUKHzkPcM5RXxjvU0t/cBQqSFFqKKiiIIb/jhTMe8lrqmdy2oNoAJD4wToKYbsWyW9Ofg7we/ImDz9CLE/XaFI8Oi10pejA7vfHCY/l9oawP52tWFpigZrOPMgp/nE2huTszl7klaVCKxzoloEDgCk2x8faoc3NwRE0HbZXL8sZyH17dVYFBuoUp1EWUDHRgR6xv+f6y66tlSUkduLpmZr/6Z3ZEMdTFfjPwAwIDTXNH+2QtTUn9Ob2/hb2ngbf+vadq70glDzAu6AcGy/akkqsE1/TKEItTbUb1F8oT/nBx9PzPQmWmTCtfG1dm8LcVdwF5g4UxQft+VK5Nvoj208DiQ8dQu3/atIawDmRPJ43jNDVrWAFTJ0OAJEYJGQzpeDGKkybTYd5mukPmldavVcjb4/dyfi/gLd/Ozoq0tIKBWjJy2eLim1ITyuoX2Edm7GMqOichceVrfRhypP98e5uOAaIt1SMlMZ2IhIq6e3SphC+I/h0nbG27Ai2dMU2mYYBoNsoANzwdjT0gvkUj0hNRpsDGuJBYmO1C7D5OPki6qP4mLe/obk8oiOTLSuUWjYBtLtYyCHeyA5Tw3tYSJItv1hitwsHaSGHT2dNhvkLxqYUw9Hu7C9CIQD18omTNkPwc1IQXEGbuS07nkzR6JsqXjCoNSB/tnqWkLsaDcUAmA8z86JiEM/Ni+SODFvBxi1gEAWZHLIlnoB1VkBkOBrf239cXXlpVD8c2NFej6ddl8uARiyiGrmQ9Hka+APe1xY9NRUTfwzLfv6FcD5A6WEtXxtbID+ymrVY9/J4iwNREZjukGdhjkX8hGsswGUWk7vnC9l7ibCX6ASP04eueRlIMD4qCzdpyeVoe+2oS3Uyi7xW4CtNYNLneV35GHLjDUvqWAwFviZPsYXKd3Uqh3A9GlyAfPGM0WbZ5+eTm8XiG9bTN+ULlK8BXWhTt9eX0xw6fmhzbNPz7XywsmFvyOUfKx3j5Wv9QMd33Kp0ouJJv36ePfA/bGqXGotwjghbiLn9s4bFtrzcNYh5vdx9wS8PmsHjblJ8rX0ORBx4SCS1KvrdExAQ9xPWeNmlEJnwqBsif2jfm+PyTxBNaN3rYpFkTQK+0rrGNAOxWV/wBCJ0kwgxiXHwLVoG8NTIrrxMiIcUDX6olm6hzE3XbRZFf1Psjqff6ujR29sTcPei1pgfGRzvgAqIHDToyngNbDbYTzaHmDsZMwrhVALcC6VHdMmJNirZ+h4+Aqx1qof3sHNn848n6ekkUKtk4gQdIA2AD2rUSVwMTGA95YBHeotFyOYhipzN3srWpDN6Iflf14z5Ob9ObbbRt2rWegh7JrzO+k0WiiO3AYhqgJrXDZ2t8iMcJNlDZRCMV8DndlBfACGGHAiLJcZtnQk7PVJE6jP8ceelv9dOzC53kfXG+wBAH1T9CXY8UBfmYmhWLzTo5rAMblPkTRKEaBgtZkotQhQ7LLEKNFqfgwbPtog3XsLUMN2ClDrVbGAADVaNwDlEhNsrXS6Fh2BW9tuLbBiz44n5lsQyCo5cbubMgQ5d85YKiOkr0f5k9PV5zqcONcoRMnJkGJoUL1q4RSvmp3aVQeS0lXTQxLDB3tHSL1gYmoFOfhhlYFVoBnIPzXLs4M6sfAJNaRCERBjfr4x17J5b7xCQllj2FP/auE0VrHLhG4qKin4El9AiQ9IcW4M8pntZMUtXK5iTkRlzvjn7m0nwtCCXVkoqCIlK6MULVW0ja07CkDffd/ZVrm6DRDZeDQv+PL2Pp6XH5qd5BLchhHXRrowk70ZsWolmlycHZeoRNFvkmOKUHKbe+0bYAslGi3kgZycD86ZfTZmRG4vKBRMphUh1Fh9Fyxz3n5RsXa4Fg9wYMTpDx4t5qxHiwKc9GSKY51QEz8zu/ENXOaQh+f8YjWU34kzjdUuErVYbcqaQkD6BQqcfSpwev9ejYSyePgOtL5aFtgex6x8BCSSdarUMGq9tUM+h7pXYPAnPvxK/trfumJ1bVjGnipf9E19v5hwCkD6GkwAgIDA0KbHTMcJyqIElfmfNAhW0nXG7kKw5twCNhvBunaR2DIAlxHBWm6unYoAAIgDcKLFgUb0ddjaX3MDHDhqAAgAcgPyiv0YByqrMdO9MjKCLhXFyfWXFHSblSYEBzYKdrKXAAVHZQbsqWAE3rVVYFw1hFuLXOXsbizkapuNJcPbVzcNEAFAlmDqdN/2OGovNz01d7tgMgPJVU6FTCfNhAAAF8As2rgpAgylZ3bHfVXaGDx7r5hsZmUQhwMzqBE7mFVjglV1DsU4rHmlNPXnfG4FjY7fKtQNoFpGYwS66swnSb8lOekLqzlu++bV36rWDWBfvdqocZ33hBvhXyZ3r8G/Gvvp1d8mlzydVnUtBMW2bB4ObwAT5g2gVoMJAKBewCzTwzOGq2ZRAqr4HwQm2HQoY1SflfFGpgGCtzGSVHhyqa2mhdv52no9+aJxO0zx0cU1B1GL+QH6viaAAEAH/LX5A+GHWrPCAHcFsZJY9ojfZZZ68VGlgozuYRGP1v5ZE1vnlIRkfUa71ybJ9dO1uT3X5/5+4usJ2R6uGEEGCTDhlSIelpNdDXBgDfkhCBXLMqgScP45B8E35l8YsGcK4Fw7QxJghRXQANhjyxkDshs+AACXENSWw0JPISL192ZMEJPWDZvfcaNoUgUWr8my5pPkuicgZwfXzWjenE2FgLkUZ0UjcwqkCxvDOpLUmfI84zmoYq4lrtJtYlvE0Rg2OJGLBAwb6zDa3AKN0xtp9MFLGD3+0V35Odcp3O5aBh7+rXbNUcL9weBlnWkPdwtovF19Mk3c9umJgmBvNLbXy/I4RKcX1VEid0n29ti6Wru6riQeoFgn7W2ZsDdAig0mAEBqgOnh6eMB1GUAyrXvEuyg9owogT3MgADAXpZECI9aJAoAqCAKw4hoGqCovAslO1ssU2z+xIvrKK6WagMAKHdsYcxmqYUBGtQ1dLmFHLASXdRstJktG2pqLXHrVu9Km2j6dKTaNSRecmGA9qR1RQ8ybuAEjYHGvy5OlEYDp5devkvTF9419AjUSoOS5RqG+RsheEFXiOU99MAgRldcPnYA8spa/hAAHFTSddLyHYfI69FHjjvfTtr1GStXaUzA5sw2rd/bwkxqm3uXVrj2bTNHsIXt+zFbJgi2cKeKY9tlsEVYYQ+eGGyzT6kR88DR5/KUvrhw0VS4vVLkuHwZmhvWJcb9+vDTWxjn+VWHK/kX/SoUq3XqR0HBGTPh2QLmpsEEANhq4LoN9XPvOoKU+F8UBOnUn1Glx5gGAh7XSBLxrEWiAIAPYtCMiINxvTWehk9Wqi4xuspxDTzbEA8ATDcorOHi3J3Pg4quWM3oQAuaOJv+nCho05SaGjfypyDOlHa9bu2tZMVZa/9jA26ti1vDuy4Gt11HeEMwHM276IdGeBEfuyWDSxogAoBbgzdj++6Wwc3W3N0ddJriKpdNi1hptqqGbxb5nHT+/YIBNdzO2JKvoMZaZqCCOhrZIxV0H4OYKdDNGrFJoAbFpivYPtPh8zIXnWTb4NoMHX9Ry20AdRga5LxjHugH46M3mZujv7QGO7LVx3JrfbcB7NhWfIaTEPDHbemR6f1aLg16p7axgc96WnvDbFfX3mDZOmlPyYQ9BnxoMAEAfAGmwtNHAXhn/kkD4OGGbFt7xj6AHWZANMAelkQQj1wkCgDwIKrDiGiM3q4BivTrJaIktTL/gMNFewCAKzU3zCRFgIYLM84tHjj8KvxqvSnhc7TxCk/L23TBjwvXHiotEtbfKvw5+lkkFSKsNf9Thf0xxbdyL0dmfhsdeZV96q/qm31cL/cESbWfcYgVSXcZmWQwLWX/OcrSNJ3jpCS+0D1+A3c9q/MHX0J4ghoN41Frez4G87xwUEUa3SS4QtPiGQjKX3b3V3oW8PrArxQTyNmt9IIQV8IZNPPN+xiDR7jOYBlumI9m+ndavwQK8ml2TBDE7KrwJRJLIrn933ZRANS++RXGPp5aMdhSrynKLZVl246VVuF28T/3Hn5NBXZYO3PdwK5YwbGAq7bkp0NM8ZZ8AABTuwjFcFc0An8wqrLx71lPM8Nb7ER+vOdplI0sAMBin1K76Ch1eqH2yGZ2Lu3EDKrTZYurZ3nk8Y3q4OOG8SVdqLdVwHYO1puo1IsrUjqt6k1Phhu+CwaMh00+Km9c85JuEr71c6VVc6coTDYFApkwkL5KBMBGkf7cdn4lfi756Ou6Iy5S8+ndlkiwa9w/tg7BPXed8XgIXq2t5KXgpeNnDGFXYCAtFKodFqHWisX+NAQAQNKCjEjHjDI6QG/rdRLRB9bgS/YaTXsAQN9mECdZpIQpcB+s8gqBTWC2tJk4uAlsR0uMy9xNswksRi6FG5OXWJJ+ZU+6uIlKLJ8pQMyjuLRZO127IrQ5dg/uumPEImCZvK/Lml4CluX7+axh4z38jDODyjDNmCHlRwt7m+xaULzsS+/TFP+b2XbHspvwWjdkEDxXhn/+BvDZ6YmXQQ6sjdKFuQiUIcsugueudKltySz0EOPMn0RzN0l5hU0iIj7H5H1Gz+NIo14fqzygBDhyqr6EhzVel9pnCR4A5ye8oyUn4drLXgFM3DSeijXfhN5+ndLoizM2fjpdAmKqvn+Snqv+DW0Rk5GiKkcF03T2GfKlFk7koDmkTRmuCo6N/+zDxA9a0gLghsGHa3f7GzHXnwufk7RCTgAGCjS113fL3VyubGSz8C9VH+J/TK/wlYbHe0XiOoCssAqQhVkOS85pjRk2/zek1zm94jq4saDT5fWk/ic7uyhNxQaIu7LyxeJbA2YtXN1P8V+fA+oqF+5lf1IrZOQoEtY1WkB4fxbUSPoEY/6uc8T/1/ZhckpcKWjvprk6wVs6sg3IUODu0ZONHFcd5ZLmswfUJMfvlsiykJf3jDY0f+sAYIYjjho0sQ2dX8JZIXw89IAQsCMyZnx3zb0lYgpPOEjADm2GTHmEMGSyRfXChbWO2QPb1UZmJNavM3IH52+cZz5oByzl+TwmeeBoGVT4zh2AHcEd2CTOq5zP2JnU9ZIhEU3pEacXOubXNmPYT9Iyrz2PkZDbaY4WD/ht8sKMY9q9r4QvYas9aWviMNFJ7+q9aTPy/dt0kK9cnAfMlygmIvIQnsU/inaR6Tqd2tTz6bImJEJrFGYCwef/j8G584jsg7cSkZ1JF7UcWR22TCVpWf993SKBcqVNaP6vE2h0aYGTARq0Jjksjoe12bjEw032fDSJyPo4Bj9xi9L9O1yaT3PfAikuJrNzdXzglixr6TVyW9QzWhZk588b3VhVCbcC4xJTFxmnmDpX3GLqAY5jTDVTGFTkj1k0gaF7sdGOfOKJtC34HbEThv/ggIetpwlCFx6rmTp37GbqgujyqYuM7QyKgtJjP1OXKRb0zm/d6pY/XjR1aeJHUxcST5o6pzcy2PGmqQ5+/GnqIRKPmmph8ampSxavyhWCsQWKjmflDxIyLTn48a5yuvCMFxofIbGbU486JeA8t6yE1FZkNQufzUtrjxxFUZqkrRb2bTiFNhiUFOkCkzvjRVs3+aQn9s+dK3UXPLHo6UEST47bcLYJGx5JyYXpCWpTCk4rYnqgJwpNKUPiECRAmoNrbKSqfJtl4GbRdC1ZtfiNNVsnc5QVV2ZQiC+Z7KDjcoTZG7RxejediCl9yz/pDuqIWIO7v8c6o26FgDWcOKdW2qUNpk5wVqZ7ptFicadaSggAbPUME2/Blh11ariFwULd92UWmY1TY4TgZCMXELL7gAFASrd5nTm20qrowm2O0CZ0+fa8hEMp+VDfYeNfM73HtRrCU936vdKrvZ2nniDHEYbSlRIGzTajAABaAClphug+jeeCBFabf1QPM439WLly2aO58otQF1wCtUUMYVdgIk0EbBsR5Jmiu9MQAADJ1WMSuftRfQBU7eskAt2jRClNewAAeuaMqUxS2Iv5w5rVDXyc3mTjs7QxG59lTLGZgghu8cozqD3JijALFJ0U7Ukv0uFieJ16c5d/rCI8scluSbvbRFbhssluR6vflGlG6h44PE0v1L1aehIANKeQjcJSuwGgBUFNleVrp+PcBWxq45x6tt0YTNtUh6kya7DVlNJMCAAwAcZVyHWi8K1gynpm50IIyLOxByE6BoFriBHrxHhNcgY6eZNjNMYb9XN/jvYv8QwfriF/EQKegg4B6o66JycYhQ3/gt8TNnbp1ww6pQJB/iMzP1UdAlQoyG9/mDg3Ka+NJbtD+ZDoVVWZIP+3VeaOqpnlsf2PBdz2cZHwYETZAuOijAIAzNGsbHlXe4jpul6Isq3L6V9z+S53FV57s2dYur2pDXToHok04xKlpSclUQCAWtQQRD3ZgTpUnE1s0KhLewDAZF57QdJ1rqUPcxgOh3Kc2TpUDsTnTYZ6SZ26LYJIdt3145JnScv+tSRc8pb7FhtjgQf6vRj++ubchl+5sg5v9gEyLz1kYmWXk62IXeBlOdlNA7fTXAIA3BXC3dAN7g4qlnMQpmH+jUrIe5qxR/047jpiuT7FOGsrJx0bGcfNGL68lS4nhNEu+gAA5vImDjGNuCyDjgTaXTWQggSvl7IAAHABIkrMhex5e3g6EjGxmeQN2beiyFIsMcXT9hZ3iuyPG+xLwkZ0je1mWAbOHxQNfKQpTmx6utzIWX3CX3kE3jpVnVXcTXJZCUe/tcVqnzf82BTL1RHGinX5gk01owAAG7FypjoLb2AATgBlas80DSjLDDQENMWSNAH2VG67rHZ9nrYUejhRlKgUI1qpTGTGF3BJr5fDAwCcXlAK+1EKkkWrqewEvULy2BZrcEF5WZuGkObGuuqUfsEkKmkb9kSXnAomtUSlWMAa3PdzsXaHIWs4UdUo7dmdYd2c+PANkUj5mKNI0finPMZ+7Q5msZJbXywQAmte7Cnnh4AIx+4TS5oJIjFCTBcDy+MV4BASLz0JALBuJLJcajcA4MoQFrF8LJ1nmNgilrLejmU3h9yVoTCYvedGEsw0EgIAmCQ5IpvLtrRwFBa7UcG6ui3NGr1awncZ2ga+y4QwofRV11jkIzgc831wRyDcOfZ9wuF8ujaslSif6D1qlWhvh0erDpx815boU9Cr1KLjboNFyIRZ7GvDwHIUp6MAAAr20U0nSOBQBuBlksIR2mzXma6B0G67BToSoavmSDqPxezCtWtGuM/7f56GAACIsTlRYnxOZSIXyZlr1AYAeD1DEM6oqJj9aA7ScNpM7RakydliXc/yg6hZLqUDyUu6a/3qPrPClqjkqmgU9+kSttRiwKbAu9ie6H6RzVoltjmJKhJMBLfdpUCIcDlsFAMRicNDGRAxu/QkAKAiJHFZajcA0L1Iiqf7kq4xPKBUc8cMpKp2VgRSHNZiQgDg4oTUauPSAlHOYKZRT5Qgo9K2IKOGsPluuPIquJia7Nufg4G3vbzgle+an/rvjhIrkkdV8vSiyY9lgfZxkXAaK9ey5KKIAgDcpWVv9UHkSpghSn0tAS+jlbvU2vmzK/RObXBA79VIJ85ccydtbi5QRKe03cTCKVGigz/+PQ67vqfziSqw0toAQFIrt7eSTrjssPD1jSVsyFzDbt8UKhDfeknToq27Ma/VLILrCknIq1vdzfGkfZYf9ZBRkydeukarr4LTHYTj3U7fmBxSsz48bCRP1SNCuQWUAMCm2Vm6GwDqgOI+9x4Jq+Fm7uL3eAcFCoZBm/3YTPOXj3u/dodfCq9c7Sr9478LSSSCQ4BKAPnt8RFmePFS/GQXvScfH5UKAPnP/GhWjT2uNvJPhw2292QYi3DRA5VSAAABI9UbVTFgYAs7yjNoOSDSoKFslJSKOlgwcduCqmxaW6QsEoh8IsEsxgMAOUAVkBcEcwY0HxcY4dbg8Ddo5thf+Or2EaYtZpAaF1cr2j59eY/k8Naz34seqeGRQSO5bhwydxXC3YniHBMA4ASoiwakl6g5B2F5DHDHQOZqZ6YHyJWuHE6sOcdQmIotHwvYqf/lXd/fFAn/IrGkC+jKzMsKG72neWn9SgIMsZb0gFdVW3Mn8JjlLAAAywXOwHDZ61tZUxJXozMvs129AjtniVWVBoJQcfffVak6ZognkNVP0rE+MijVuHUtoVZ7UQkaA41/VZxg8FE/kVvCOfkeIhEmfDpSQocNvw/f8R4uGSfp859wPXeh6nPW+BNxc6zfmDBuANxFcVoKAOAKDfUecH0lwJr9vJReqfpsVeMvb9s02OAtTaQ9wIUHXWM8bJOTKS9s3l1+DE6Zs0mUO5/eFUA99zqJEK7rFSaF3oZ4AEB0V1IlN8J+jBxRODTKapqeY73IUFli805CgE9geLP0VnmSFnsYwPK13nD62MBJa2QKhKCqeZcDUHUPeuq1xJBt7MI8D3lu+yBlRJuYz75QuY4eDVN/v/mwJRiiwrOMep/u1Qw7Boqcn6jpOpjfhm/FvzwPNuLtrWabFcXgVWG9nBXG/FP3N5slV1GFVP2BcohbSVCoXrdT3gNr7w3KIMOut9BvxuXNTe3gami2d2hgW7A8QabjNRuaaAkZkGmRFSH76GMMtFKFF6VJ4Uk/YIv/iZQooCIDM7pFPSQzdF2/py+WDSQo9rU0Q+FWmX3+t1DKAxY3EyLKkl0CC6AJmtF4eRiEqgChrTDnsh09afuxJ9csBnUPYVk35msPV7WwyOp94BCpCvT7TvyTaqY33Lgq5XAIY5butFhBbjePXBgoRYpxNObIQbCz3csteRS/Y0EWHXc/4gp8MA6BCw/mcqvz8y4kSiAYbIJFhjzwzQ5mXg7Fgl1oFHSKB1FRQ8hxY/qFJ8RHJz0PfDInOMJNxcuVPWiQ7nfORkOaaKIRaKEL8U5h3cf9ad3HCa378I+OqNf707oPi3wrHIAew+4tfQMpqChw+0EvGZ7pow/ub0BNi5yLvx78hDIKKaXMOUxKEKYekUoU7gfrPoYWiBUR9j45q3jGPQsjh1z+aRO6Bjnjwzj8El9kRqyraAuDfhWNNQ5YuDmIVjteui6G2rVJChUNWOnidyteR21FVirTNPBOzlnqOQjmclsbhdH3SMKeoktqZ2QQN9OLakubJS8mIGcB6ZArqOPhJXwgFqOiuycvMyMcatrFJ2bLsKAkuMb6VQkBgNzKzcTMqga1eAGOsqz4cJdkgqKo+DSXZQdoUfENL38INKIyXfvk4erResTmPg3OhDBdBdj6neA1KyFTSxVNuut6XZv8wHE1H3xq5dEiRPGueZJ5Rcc973b8I5quLGvS5D43j6or2+R3nrqKnGvVGOqyeEDPD+BhmkwoL3CfTRF7Xy7xm3cRKhw82Kq1Pj/QfJWv0EPRiRbc7pTb4/FqWa1QYWdkMWH25IuiwN7lKAAA+xirKBDL0plFqEz+p7pvwFjp323tmUvrTwFczQxcAVxkSa7FQzfvAgAYCrfHiaZu5oNNxKFVidrrH3hHarggHgCwJBNl/lh7wezEKrysprWgqMLYkiX7du5JjKm9txJqr4mT1QxYuElUS9aFnrwhZ5MowM5E9BI4tkOgBoAT9bA6MclJo376/N/FYJSFy3Vtq9Pg7S4nEwDUZ0hNt6dijFSLjECcqns/By5c2VhxF0+UCkZbvbdr/l1EouPM7GRskga1MrxBptUsW21kOsMgpAZZyLlWnmwdqBH3a7xpiG2Or1z4XkcTYqL/hS6wEvOvVTF07bUi4dtd3LLXvdMoAIAd2XU6zZlKsiLAHY7bzur25s9ce/WXdtUGLrSrSnJxZtT9L14AwIgCS8SKibYoXIui2cQJTTG5BwBUkFlhUuoWP76pxp15Fmfyxt44BDPx6BBTS+2gpaP33O0xtsjH/u0dqSy6UrDhOtScTxxBQE3QhCgWxrJtPUglqWpkgJrdNmjmlsoEgA2EHFMdGkoQpICMiMBd70UycRc2MGvGYVenseu8jVaekEL8m87+AEIM8TtT5989vD9lOjZNbhqj8EIG707iqQ6t03YLLYYNTCkFABigpbpRrAF3odnps31ZQGus2EALOkrSgirxAgAGpi7aBZ1NHG7oS+4BAJ2y1DAplvwRTS9zEkQoPjdccYBcT79lBR7BfaDZv/E1qef/onV5e7KR/4/t5Pf0CzxQ+7+qPP1X9c3e17palAmNWjQBAEBUmGFzFJrYQS3VgFvoNTviIgDHfqowrVLB+DuZ89x+zu953TiSprj7L+uPO6uJPq+ykAMAwGhd3JJaGW1w8H+vYfXZpBdaAIAx+qZyuU4FDIaSBpx5o+tY6ysxMbXW16qJ1Ky7ir2RUMZ/T91WKEiT+YGjqL2fzz/hHILfaDlBfarPwwjhnUJLzm0XUgCAKtpWcUMPQxQHvSiOAIvWO0s3smfOL+MtDQuD0SJZ9hxfazCqOwGEaWJ5FwDYwWhcnFF0nEtLProykWAVXhQPAHDxO2UX1g2yB9WH9CYXH6ONBXysKSXi6/R3hO8yBBKo1cO62lMDdm6yBduZ2N4ApBwCGgaoOGw0l0/T/10MRq3AQdc2HYG8Xk4mANC3EM1tTzlZJK0wAs60sUxy4AJruYqsxlS0gppaSAgATGX59QrWroVjGumTixk0g3y31hdazoZb69vzNuQgxIbqyVTFeM7P+6EhF+CDRh6WG1wf8aE4lFQvVYwDFc3u36vTOeHtZ1Txj6ejAAAqHpVTX52cnsoEVDNxVTzzzJl/fWTlSgZjZOWMpmPYogCkcRcAwDY0BXKiaaaBlhOpxqpE9wPu/46kuCAeAPBKpmW6WJ08zIO+UIzW9O52o2RlLbHTzeQlNag5JhUWmJ3idbsKocmKUyj+t1EQOpJQLMML/fhSJRT3GnpuonCa23qVCFY4nxVWO+eES6PG/5PwV5JjFG7dsa2eQapKy8kEAKEbUrvbU3EbqfZ1DYpXwKHZijtb5BQxUUMhAMCrZcrpY3WczSBNPaNmkLaZLTJIrwkhk/HEninzMcz0nzcDTo/z2RgbWqo9Z7SJof1NQSycOWQ6SokUAEDreTj+aCM/Bim1SwLejgZ1eTeyo9Kb1chc3cWVuZ8pf51qVt20ijFR9yzwAgADdCsuygvaOvGcqcSH6r7VcArxAMBokSx+dgOFsgjDmpOoZFrk4+IqZD0cqFoKDc2yK2ooeL9eyzEOKIvgHULLrn0MflgNbjpRfbQkAbSgwnAK0XaYCiUZ/UPfWNntSHdWoUwAKC0SGHV0sLKDq762BIrdk9PYYeP5CxDvGAte8KL06EJC/1ygT2p9ANGGeH50zxuWpP5ojzHlEiqVIw0J+tOCHkYMZ4pvPTVWKQUAWBXij8Z7YJBSqQbcheYyaARKHBiAcBqgS7wAQICKizJDn4fqM59YXMdiPAAQQBUQFgRzBjQfFxgx1eCE77oT8aG1hn+95Xg+xvMXOaKLqezwhuK7lqc/qjx4YZa9HELc2NV1mT1F6MFFEwDAQMRt0IMacEC98/td9tQ8eRs4/GBSFZlDFMve1d00hqHsblKeWYuQ8FFBMdFaXny6/Jou6idliJ+l3XXWcr3WLGpPXXl5UI4NLWx4V8qNCa14+0nhSQkOEAKyd3GFiuo18uLGPC+8MGFqQrFj3kmpv67078hXk0stMi2+frECpzezP5xLzKqmaqr+BIwIAHlx0mWje/pBvMGCHABgKMRMgbHMHJOxRSGZoLLmvMLsI3mdZhYAQEVB8pTposztl6cjSUFspm4WH/1BKVsPVEEcQaWYe6LeHZzl1vpL29NBmCA2NVDrsLRGsA60Uofd2c0BR4OG3DvDvOoIWsBXqc8/KWXy6td56555jDWs9IKBNcgXZK0vttHbZw6L7aiJj0RqozCEw6v8WHSlmhJqSqRATNPjaCEl9KYqiKQ73l9EeRL00EAN3JG8B59DKynocr5jPTlSDj6WNkLiMEHZhGxGciDWQnd3go42qClbafoELdPTDKM+/PrHeW+Iw/tdlTu5vqxiVkqanOxXrlg9QVTfbdZysCRR6mYUAEAaARNohgUb1yYPJIVYNgHFLe4B1Ecxhi+XUo0zYqzdTqFdJCR8VF0j2qqN9Ezkg8Mkz2lYRF/L5PHRJp2uINr+hcNcT/RitpEddkKCh4aWVF3zLjXuXw4XTpe/KzfMNa6xwnwF58PaMBxDV0J+hKulnP6E252B+GxGD6U1Ert8FwDQhkHX8iPOnlG09fitJ2NRl2heeaMiTXRDPABgubJ8pQA2f8ICOpHC7tuRaXaYWygUb0dWXCARUGjejnK7Rt8MEGfsNzI1hCLFC0MgQ0BY5XgRU5MCyrcqE6eQko8PxIWUprVwkrL/pFCltM0XM0RKN3Xb2WPgTkOZADAgmNCi7pFBpg2Cqw3NMP+tdLTGyu48xidts5kQAHA53Y0gi23jPAUNdu3MONCwwrPHCw0JBjEpaJXpMtsRJaPsxNklyHI7eR6H+EyAFr+Wu1tt+t7CSZCs/r/ONq6YFQWqy4bqrYWpLdVSUwspAADFht6u04NaSe5T0RpQ5HuGETJrbi5gZQYBsMQLACyomOgGejrYU4n1xIuDldwDAJr07YFSVPQzFfQdrKC5A146CsG4RnTvQch3ggndi56+BzucCEwxwnndLnYfcElnIhsD7AwjcGUO7aN2GZtrQe0xRteBuq7ddhf+saFMAHALdK1FNZuBa+sGTUCphKGE9aQzzU53X4hSIQDQYIW4+iXXwQkyPbSiHrDIHnuw4wd7MHkyMNDhKrwhI9zDMe6C+OWIeUU66f88q+/5bW7dywGKJYYbYCkFACAwoaGjCxYFSTgRSEC5uQUnMwggJV4AoFF7WjR34OQTl+u6GA8ACGwBZLCYUyD5eAHV7zrQDF7gSAHQnu60i91p7NkG57E7n9gb3yRlBYFnVZ0DJdhGB0owrpauzG3XaTVwoUwAoBYNGLV0sHKDraU9FQquNhPfk9rG91ypqz/kOwT2Ff2wRbbifQr3p/RAgEhX/K4dAJNcD2hetJu2v4D6iES54v9LDbPOdVxpeGK4AJRSAAAAkeoFrAgEwNzcgMkMNuASLwBQ4ERFj2Z9C5NPHLAW4wEAESz5Ixpc0Gxo9DqIUKyDlO8LiF/T1n/2LCb8d+qfvfXzbgzq18A/vhj2xwCb7fLg95bz4BvVQeTDRAPfs50lK1CV+dDjBRMAYJZ2qrlhmsbZkYMtCwKQBbuE1bV75mcPPbrSByhaGu+r6q74MPzus25ffqCBnb4/swfE/1X++1BdqH41n57m2UV39mbKtBUa2mmbMo3pijBXLQnXETtN1rJbid0/qYtdNeobpJrXZAEACO6JN86opJvmSq6FXDqt6U59KTfLta0uNqRy3fe3l9E7xFJQxtJ6l5XlmwRl3FqUsjiR5/hA8mtVILxavKcfPQIzjR8zj6aU0NEUTq9YsFYCk4oaMWHNAbo0owAArgLCMdMz3fQbIcYmoPTE498wUXHN1csxAqmtFVQVYBekfFwGOzu1EwAIaI62uZxooaSCmmx1baLjCXe16l0UDwBM42vzP+c+S4rv0ZvT+KnCeCoMky8lrfE+wV/o7xv8lSlwh7fNvHCDt6hPxC3ekBPogDfibDrhjTmjzngztdu6sDq3oEwAqGKgk0bt4WGdKgd7GXRPCcU3pWykNMvNhACAJeBgC5e+hhWkArOyM1uuUIZptsCztwaaxTKI7YL2wm6yA8/1mfYPU3HjUuX1KQBnOHmBh/jMaqX+RvfOlLzGFyswVv/5nL+qwNpM09lQw1qYyv3LNLWUAgBQtGHq9EzXU+FMjE4ApdqfxL9n9oXJmpsjaq4W5B2kK+oCAAInIjqQ2unBmkoswqGsG+YS8QBAffvuICOXfWTvG9vkQmal8dMDHYybhpAOtnwH6OB6noLlW6xwckiCBU4vEsHwLvLqlxUipK5Eqiy5bXfAVCB3xgqbPjjaSZ3GT5erYy7mJPexY9tc83aj0UwmAKgPafrsqfd4u5kxCHwVTEoOXDSdkWJlivj2HlSaEAB4pvs7qADXNEPvQYaZdI7HwY6zdXAiCB3E1JznlOvllt0FxUOllxDdpDdXOB5bcZf9EyOGg9qlFABAB0CqB+UqkAd0bs4AZwZ5KC3qAgA+ELKIIPOJAqcUDwBMt+3DwhFADSZsdgrqHsYnHwss+W6wGTwghcCyITCnXeRuq6UdwSsTyWPjVv6TwOTENNl4g/AptNhBapOVjAWtZrcn3FAslgkABRanFo1XEGybnj8GlxCBkjV2ui/HdD9v/xrmsdqFjZTKBItmxfcSFEjigQDRrfhdewJmzdTXA9cuZRLtdCWyFf/LTuD5Jbfu9VpBi2EDU0oBABboSL3ZSWiBYsAdK8CCys0JRGZwARZ1AYAFOyrqvcdZiHwiwSzGAwA5MAKoAB85c+CyMWl88l1gMbhBsP/ga70JnBvwnJXpxVHhNbLd7ylG7fI9tRH4kDISAKY4gQate1Cx0nMYOyWmaQiB4cRZeURPolI7P5cY/UImFqe7Ptx3/mWSDm4C7Hlb3c4bwRCm6nPMAqbyj/fYoyx8Pw9W77Z5aBpW6sERWsYBCUkKeAXWLb65e3yvxWCRRWniEIzl7Qhf+rFTQr83mCUQtK1DrWnuwj82gX2cp0vK7f0a1a075sa4iCnp6FqsoRcVp9w98OxdpKHRn9KNK15VN3oEIzK7mIWuGWyVGuwGfH58x4KvDEIVM0FsFm8AgAZKzNwfK7L4dlFptgaVQf58X62yzAIAREdJlnTZznr7jw+6Pg3I4MydDgg9ICaG9wtI+lDr5R2brvFXBIEa4LFH1uJN5c04CEpJNg2d7DKdYo6NJnEgQMyzHVxKb9MEHa7ZW3tum9WxwijycNI0itQ3Tseox9mncAd3S9gKAAvg4Bnm8X2a85Vj852EwM6fX+PDqV2BaNC+L6ymBfnXy8rqC87WjZkp7GZJFwDoQGpBlNOxqx5QLjFd5xYHWdoDAHgoTxQohRMl2pWp/K6jBeWweQh21aMmGNsDM+swNzJw/yeYg+Hu8zVkjX+fYAocLnMQbIvFSa/aQg4ul2NGsexGKwqOblKi7ehmSjQe3Wzy20e35cUyAcDF5RmyattdanbQoEvjVCWcnnK8G+okCgGAnj2LpRmWQ8kVbNGZZfbQjsahpsg+HeLVEBA0midLc2eZLlBPJYeBwipvDhNL8B2sGeN2zkTsBPCbzBUA3k8zd8L5lf4BFAVeedXP+pya8zsaJwb9TGdSFwCQVIIoH5oY6ANyKjFlvHYQyT0A4BhVOFAKG5d0tLP8igqaDUJ5BxOGj1YfboqJfR5AB4FPSAB/fLBY0OHfW24JjfDS9pawJex8oti6E0lAtu5ZyUa27l3JSLZGKbstXjTAYpkAIDpOsWpYczY/GMiSKPMIuL37Qk/vHbvJxvCCOa4rQwAHxDJztFHfg4iyvb9wI4iMts1BTpQ5UHo49E7S3c/QD0Annn/AwVGYJm4FgAUF8Qzz+J76M3cZZcEisIDOzQVkZrAAFXUBgAIpiwwyn2ium2I8AABwRA/B8CZofHxssLIPARG8979uBxVQPFzcElzhpa13YUso+USxdXskAdm6c5KNbN1zkpFs3efsNnnRaBXLBADRMc2qYc1cfjCQKVFmF57dD83ptfkYPWNU0zVv76h7ErsCwMKnSJNzAFH4eD4jhDIktZVbYwT3W+YdReCT0BUAFmjG08zt698j/RelKpAHVG7OAGYGeSgu6gIAPhCySCDyieK6FOMBgAYjegA6bDb5hixcNhaNL/tgsMPrkauPZ5Hh/xTVx9cy8jhHMpzD47/4Fx99uptiNG6wG0M4Wxt16Kmzte735N/vgqq3BxDt4vuLXcuP+m5O/KrHNQOEt3e3r3MTR7zVhdiXtWt+OywrmazPDUA93Fd82qtWXlzDyREPXF0sFF2rpHiSRAqkm9O0vnks6JXW0auyN3kfrYqZzW01yFo6JSEMGEDoBHISrfXXnaGBn2PjjPi+NnGstVVr1s/TIu6iYgQ+YbAPYGN56wZnTGXU89pAVxIAAudXACJYLd7u5Hvn3hQsXE/1FcZ4gX0WQHXr/hQ/PRI6rf9AIZYYkUnwuCN2bL5AhOglScUiRHdVXGRT9J9hTa0H+dZKTgIfURn9ZCuJxD1q+feF48pEzVHxf6ZtDotC6aiPBpTXnYNmibyhxiWQ16hJGk2TTk5j49pcHznrISXLcPjoXjyL7qO12v4raIhVQOLpe8qCLLNZZPeMTX6tkvcoY1N+3Lg+clEl6S7CRFWURYeLjv0yT9uU/urrwkbNt+Ms+ysCjcAKz7N1tc6uFqHVQYvQoX32t/je8bVtNyQQP6rWCrvAa/vDNeWZ7nnOsDUxfEVIgQxzPmSaC5kFfrecfUoKW/lHUhGY0xBayFMsQBzRTW9d/5m3qdcTVj9/h9BZWAf9ScJkpocTjamoWmXZOJMEhuMGgWpWHGmUyE9msihjgijVMayAsVUeG8zpC7L6YqEHGeBIIiJpAW808RWYRE6HofNLAmKkXFs70Nxl/70AMe1jfUm+wKJJxLalbtlCU+ABmc2IWeVjgVYyuIh+SrLeyQ9DXUScL8SpKUA+bTEtCIgKOa3jvWSVu0B/3AqoqHepvrEA3nB0LSQxy3dMX8RpZJ5BSUMAqYumdWepHnuI/XQewBJXXw2mrjhzjlCehsGI6MSKvXqaNFQvncKU+fAmGIGsBHNDlRBk1eaU+3Gvu/yN+g7BRp1z0FUQkPXkZRjxEzE3VLJZQcFsxoJ5aAtb/zLKbBpk6aQYjInSGrQlnrnzuvOfOYV5qjQtT0XJd5oq+pYJmV39gxMgLlB9uLT9vNhCMpk7A9PJeasWPBbOUlxIJEBqorrIesY35MkdxrFj9WrFDCDCkeyg7Je92OW05tDhKwiEnIWGwKkRpXURVNugtDIoMtm/XAKxpYZnzkT0YYnwxifqwmBJbqW0PtTNZvDU3te/d6b0Pt0X6kNuuKGHIxKDnyDu2Nq9Y3DYcPzDEtHiWZFDck++iCdgE9esQsy40FLokvtZ61HRKCrLTUIfBssNEEmHqbqfik6yMHX2w3v8hqGXdqyQjp0LDb8qhT7G/2Nvu73a78QS+5pYL6H5r9inSqjp8DJNqLnqoP7NvdlQMYSs0W3lopkwOX8O678qIepfbHXEH+ZGCq6yLd6yUA98mJLRse4/6Keyoa+zBb+bnzYhVeddHdxu6zBFhgxX6d63qeoJ6K4wu/seG7C+x49C6HWkkMTli+C1RBMSUdnmAiFYPRAPDHtUHqLPeReao6lgFEeI3EhzfReP1gjC8KlrdklHZoSX7Bj1W0Jnj7Ymv5tnADH3FDh+nVIytDyo1grvA0Do1k1IpVgE7nU8bFBDGRZD69nFSy3UvJf1OWwFrIhmWt90NtqgBDvj0fNHycyDc9QRRGvvgGUshqGtX42vAsO4tSt1DvJQ6UkBEIc+aXWOTVa99+WbOxDhMwRyYCZY7zYk3oihjI4Bj3kL7zfJ+BKQWzHwKH3DpQTdqeg7ED9yoRnQNJDCf7jcillJGhJxBYjYAdKwAaBsJ18S6D9nXmo4/0Lh+nPA8d9ZmIKPXeTN3dBwYB9C0UZp3KYoqKdEXz9k9zMNeD/9a0DyAwKKOmik5CAYeynb8raKJhY0Hc1g6fuEgWwmDO1mktqcDtBQXN5nqXnccYk8F1vfqQz7LE8mGKhHfkgsgwrUyHhBBdQO9F0QmHPB9MQU/YoUL/aNBXi5wPbup2Oa7DLrnACEWxzoLQ9QcTySOhYFZXvgQXcG8zE6q7xukivOOz8H44YT7rJJikywt0kwt1viT6vxy5oDz83yTouI78Z9Ux4EDbiWewhiI0fXSWVKSd+nUSdo2ZnBazv9m/rI9l1cH06KAswFolWytH4qZgmUJoE+lawZcgBlmXclXECDeU123a198j4H7Sq6GWUOTmj6tmqPJxGlopoSbbSo04Ci+jsTiUrROSNhs29ox7p2O98gnnrWh0S6UopfF8fRVZG6/o0nMEt8YpJH0iYKH3oXtdURpgo+zZI0pOnsWBZ5ha+gCftYn2KLHKSbUFQMC49QBm31FifBBwFENHeL0iTllYE5hRs57GbQ0LCI/z+gc5v+qZGBUY9HHYBU100FmUDfBVpn2QrLNamEbNhNWA+ynkyYvoLkZw1HdlmJ0dBB4ZhdmB/+DXVx3/Te3NZymCwMGM4MACcAvRGom6bwE2eKhIqHYVOtV2TgmoQDYw3qHl2HwrD+tM2+1ULm12r5nr4QjRzihyLnP4/edfJtsQWxdvD9YyfJxv/OeGDXhlF0x59Xv+UVvZm9XWFedVoyfQH2I0ztSxo20r1ZKcNmYXJC6PmIRwpNZp9S6lYVLsiUe5jR7JE35OFk1Ozsgojavt1k1ER7IohaZnd7lG8tmreZuYf2C43UlDQOfKx3WICBfv2VmUMjfcmdMTRyJOZ+KZGQ1eolpSWsOZ4qVm/qTnxP/6pP528flWdyglLkU5m6vnxPWUUFAptK2lE3ulEYfoiUlKlzR2TZ4EbuZDYDZwBYRfpZzvraIWXfTgZGt9t5YGE4435gov8/AwAC69pNBjLaXTJwe7sSckCDL15JSOvAiswKkb8HZr4YSLFd4EOchsPx6SL4efP+zAj6uIh2tqyebeyKLeqWraPrvGNyalt0n0tqRy99JfD5NOIPi4QCuTSTZyCZN0z+k9JewzvYJKhG7Kvkb+C/VPzjt3To9L7d5CPHfeXJembyomMU6pqBrBpcPgBncB8GdHkXgBPdZwEt7v4AnFtN0Hgz+wBM4RpYtPUuANO+Bhal2K0/DeT3zp9CPzGBb5MOCQhmi0oUuC4oHJzeUqkCV1gI22uNUzTGm2htZcG/r5QHAIYtTE5JBObnIiy/e4LVSVwaKCltZzKRuLu3rqBNp/eIkDZylGZ5iKMqoI01UReLUOSCj7DIgoEucKMXV4qKb6PKqT8HAj1Djqx/H3a5Fs8Gi2FZ+QVnERFZbSKHHHUN4TdjKApEeG9djAnBN8VfZPXMWsKxZZFvEb/SfJZOfvylx66TqaA2UjxdEG3TyEsSoUQtvZGkAxmzSov9x5toHtyz8+LXAiW68vpsbSnysrUogBb735H6ym8QdV5goZgU/qlQSMj3zjAIVzuFlfZP67IzcKUqA9hWiySaQiksO6PW6oZFO+vkQXcTKJX+asdnsYO7k2364jUgyVxH4jyuT3jl4jOFaOd4PCYixU28cAzA9kxmxEccZ5W+vgP7GIguiEjJc8x5CBsyX2gGQXvtHjQN7C3qAzjYxrKe0y+8RXAt7c4qEQixhKmPGUrUVqHR1/z8iMlni/EVOA29I+fINkuIQEDH59HwqBSfmitPhR/PM0RfBOLM/nyc0Nog1BON5D3QWzrGkMLaEbEkwqTR+V8f3y5gv+n0zn5M850OGBtfAApiQVsVfwwXEJVCH4WQTAl/5dvKHUF8UwJeSWeMRFdgUTnArtnOOdusnXNyWne2c153bnJid8ad2TK4GVI/a0jjrGKyxNhJQC/g6u+U5vLvFLv+O8c+gM7ufQGdYZ+ANyA0BBLy/OULODoFRJg6VoJwIUpx1Q5ZlDeqYRIVFgcTza1wmBQ7Iff+Oo6b7nq0qyjgQSqJSbUwnrDfOQaHtLm1/1GHd/PueSO0kCCUiSxb2Meps4Bad7mIfw39a1lJi0VlI765sx+ESHyMMyLHtuOD0QTK2yLayTMT3spDbUne9K0rp5iUA6XTrEpMk0tzs16wkk8oZzMhe8OHHoWA0sJIJsVXdjWnatsyay3IZRzCeqwY671Eza1dvLGVDCRJOfQDe0TMcB+sHoNJQemqQa2jjXaNyVlbGbtDQ4rfXSh8VfcN6N4xFR1rcp5Z4Jn9OCXcM9NGjSWbZIrBesmF1/iN86BGWmtvuQKJcpVGyYqbTdqAscRuR7cAD1d0p9z5TtnBGAYDRwqt+9ySNJvONDrn2TsDj3pWzmhQWN9R2oF27vxz1ZstYWeyUfI8qFMm5r4MDo+Ctsr+87qX0hum3GVWMnQlG4XCKSnql5PcV/e1RK0sW6K3/viVL6QqwJZkrPRasrNa1YLJxCg+GZMCM0dGRTYrUwDWo88FEaDCcG70apOyr8mXjNXqk7Fa3i6NKI7DKxNmJAwVrMlqh+XWSFHUOrAlVO+1ZGKWliI9qia9ymoJ2UHZqqmWJNZPLdFzQEZDk2Q45f4dufuyS8o1FRlzScWW+ZMeT7YpV1TIuaDiCIr7ur3KycRbtD+jTZyQbYnxmJKzKZThW4vzhdl9lTFufS6uqRIakE5ZNJACeJEQBS5xGgvljbLLN12Dk46bL0dx8TVwgfyy8XfXztmllhRfw7TpInvu/If6SrqmIuEr9krZsr8Ejc0Ts7hEvkwtsUEfGUterwtS5J98OfW5N1wzR8RbUgdCYq9GpuZvp5gHNEM5lZAFJCgJXbElXuiGByUFsMUl/yzkL4nILR4EgzmP4SVD9vyBVOu+ppTAacGj+v65MAWLr55QTV9kMTCfw+GiTCPM25vmGY/4E9+yD9T4hx4XX8pG/iT80Mx8Svng1YFTYKHgtXYqFz4CoTLA647tVU4I7tyfqyMsZX3XHfbFqSVtvZbbn9Hy/ORLoKNYofGbgo28BLeJapnGfgPig6vMrYu9okWpg2IzOyG3fiXpFeW834Q9yuNjJRF0nRjE0fZ7vv05MmviuhRP1dQP13cpQY3Ikf2AJU6UujIlOM5LzEXAi7QYN+iv1OL4Jgwau3Tresb39peHUu+2w591fvm9jY/Ivs5d2VHqqf694D4e9Hb1JnH3/Sx7XOag75knrm9oEFkEfZOChrCJy6RxVY+mUo/OKE6M34npq4GyF8enXlZf1ZBQSj4p8X1PA7hdkMREmnEgCa4iE8CU/Bp4oVCI5sKRaYp+tlQKweAJoJHwJpU7fHwOEQmhk/ntgyLZIGJB6ASXF5aWA6pT76qitdCeKT2QTYcFbffZ1s/7pqnywq3rWziqIKyvGnWIqlexPNQ1nJ+UP3vNTEIzjQksk/Lvy7DvKzGlLMBK/bC2AFjt2Ce+g0kg8gXdVfVW2wk7bstlfOjQAniWAA5wENiA6eLHcmubmEzvObFM+m6z77tB2qlNNcF/EKZWYU4Ty5gjOB0uBgt0GiGcofPoxOJgI0rc4oZRvCWB88saKH8wK6IFCRf4WgmuKMa9kg85JXjvEFKptgC+bQC2ADkDIISw06Li6lgbBlzSOcTlSitaDvhmAdyg0eFisQYARUSlXyPXgqGZdImceg/s3rWzr6sweDPYfqBVDKbaAvh6ACJtg0lTqSZk3mJbZmQmr1qDjAD2hwMGW7fRK77mUitexpHlc1msfthDomF11HS+hC7iq4IvNJhUmg+ONqc8l5R0QmPL89cKWUdTS3zxP8T6bgBB/DPok2JZOob4BOVxrENbnShM98RMysmfaXwqnbBlKYEO54w9X4wABB1OY8eOc3zWgkCodEEh5HqSqJ+aWLVmE//JKkBVrlqdjiJD+Wp9ukD451E7eM/As1ZCpOO7NaSZ13mh8fqGkFptLBwQ5uZ/4mXwf+K7Z8hvL8UmOHxZ0xWokU6fXq0BbuFfC/Lcxv2btgYYUW/YWLekvdmoKxN6qXV8qmEZdfj9d+CAzJudUy91O1bu4og01lJkTOTFHFHRO9frAEkHTzydVJwAQFDCC5wh2TOK6+enMTnXwVNK5RvCOWAFB5I94RgXL4ALTyk1CHLVgmKpIH301fWB8ibto2hKqRhhxQbECESYwtmTffMwaPV5lDDippaKi6GcQVjSBboYG0AODD2g5xXgTQWzKvPV/4IUDNQtRxdMrVYCNU3lT7ZZT3nzCBBAYK8F8DEFjD3RHvLw3sIdSE0GBuhXAELBWbdzUzbxq1A+aYWnYEt7PIxyZgF61g81yJa18fRK+hEl8ifpxh+Piz/xC5QFTuGaOZJsaXYINUAved54PjbeFwUHS5w8kc28cYfGno4OJizliCkGweF0sazgAkhMF/MPxIfj6tWUe+Ve4CTZW2Azf+zx2dM5o8ufVzqdYIoJazr/+HB8sFhuUAJCZw7nm388giN/2eLT4QIzfDocTofzD0ekw8VwASqIMQUxBZ+gEsJMUTv36ivJg5fgcdKsCT6/7IFI7IlGfM7ZE0JF1ndZeh1c50uDytl1k5Gj+UagknbzWfiVteODp9prGD3Fgtek4I65leMugso978cunBIfI8221n9WdL51XyAVAoOdDcc23YDZPt2muhvoS+NhdIbUuylyusTq9HIafR4dP/1zwFurCzmnm6r14eC5Z5cyFG3Icp8oOmLk9xGiQ7ePyOWRv+CFxXxKHhWR9JXwYAj7aqzQy2HtFX4CAKDzUwop3Kj9nAr+BK8I6QgKQipCA4GIAB9BB09owkQtPHUtCgy3wfSvtCzG6sABoxRV4mtaLOZW1Nyhj+Xady2aLyn/yRJcP86JBX2JRXWvHh5fH0N0QTujs5anK1eD9TgfRhJQi3zDL8/hC/kPvW/l0yvzFWOuT7dGZWE4gdFVMT1mTkbBjApPlBihJORJxsYKbxSo6b8r2Ow9WrA3aoEFmxxLGinRqEjEp+FR0ClQN39bcNyzsT3m73wUWguBiACg+/yVXFrBKv9tCbcXUq5bz8Dppkjpq75IvmROd0fGWVSgyQXYJlmjUdOIYIfAQnCCHm64d9LUPqk6KO1NlLGPsiaBGjNqkikJxKGnpx6dEHNlRT7MBRZL1psDk4eR2gN+RXt4M6hZye2qt1iP3xyAkHb6qv2eABhSnUVPIfAUM0JHPAIAFsrs8V0BTIRzxLwph/SN1g9OfWku8e3rCXY36mYvCj41ooH7Y57cpc0s10f4Oc2+Fox36Xv2+QVnCiQEv17N4zMZZAhE/Z2259iqT2baI2Y86YwnA5225+mCdNl5YZKJpQNe8P2HzwAAL1Yz46XcICq45KiUaLaHEzNHIPyZX5f0fY21m899lfmKUfwwUbdx8cGO0E3mvTfUPUOIkNO9FDKA0ViJSQCz4h5bhvuCY2foju96LsPldrCrolih55QtV4rMRHaruo43hCnaOeKBljBczeXNkUm4E7CsEIgnWTyJHry2askAXIS+mt0TV/xV0QAA3W6/ay9u9c1uGkW+QTRnPMqcZXmIyAVr+mn7Ka8ERWFD/moxtAiEQoBTP4OmsArmMYz1Dmmyrt2cwUc0XF2mzHWHC8EeB12GF6FpolsFosagKaJ7Kz2/GlVi3QJxYC+R9Wslt/w6S03FSVwT7eXXXUpy9k0sEZAwcQZXhNsDTWX0SRffyIprm1dJhFynuhD2ObfW3jn50W86OT0J/r4XmCHpKqLHyQLjhhIcnVySdhY7Xv75xrapwWY/MFfwPTn1wjSgsSxdUgmDk7C9WAeMI8kjil2onrJLbrrkSXrasCGQ8p422/I3YfAiXoqnYd6LptEZDxLPS808G7YlzW3RG9ETZ50DN7Z7uevubJaamvpOn0qjdovkBBN3hkq8pcTk+Gv4L82LZQ6aETE7bBQJEB1takIqYVyKUPYZpkT/pbNOZ19smJMNSmTURiiK77wKlZvYu8LmXmQFWP7zwaDaHbgNzBdgNBa+vHgA4TtnwO9I5N2RXI7etwscg7GFisbJi5v6o+68k5pPCiuvaIPwvkjbzOn1smMR7lzRyUKHhGFpzmdRTfOTpKiTOng3ehoHW/5UFM2LkgUg2wgnbcjAmsh+y0zQJj03oA8HJVNColAPYW9cVszdrRntOO2c5OBNqqitHOD1ZP0TiiX+noPLDLTMsx+7FtpmpgUFUsK6clkVK5bnQTn0Dv1WRcoj5qmhf4DN6jPP0xBt/Kk2X5KxA7NmWjs+MBe/zQNFbF+2jvwy0QdG5m6jmaIAHigFhb5LobPU1/My/2TeurS61yasvwNNbVkdM8AgMPSx4oL0yRm1DPqYaWP63AR9vGtb+myCPnW3eX0OQV96Wre+GYK+EK1p3xzJm08RJniX4vz88O5aiH5EegRIWr1q7VMNjO4zY8TcR51Wb8Qp2sQwKeNCUcCG4X1Am0kK0Tfqpw5vLMnjBpLS7ZRUhu7wds3dlAu2/vlaiS6Q/s06h11CjxfxcaoUKzCcx45U9M900Flq4HaXoAEArBWC8LFJcl1vnB1BVAxuZnq9EbNEZ97cDDQ71cG+pUPMXnXtbE1DyZ3rkt0yPYWECgcR1x/UAEKmjYFkAgh3bQukI4DY3eZBLgLIPa0bNEUAmWhNoQH1On103C3+/K2r3vy17GFlcQub/XBW/focHAPICc6nUOAtQ3c/c2JLbrAERGZM0Lpy5F5igG4U8Nm8JoFojvsJL5M/y/zJAHjAg30e2srcWH5yx7VFylr1i2/ZzhZZkrIYSUIDZXLX2ofdKejVbE8P4SFaX9/O4HZ1/5+JuqXnUwfAtqGpuWHvC5xKQ0eqsoJAsLsJ5iBBYXlCAABvQdDJPcQYEAE6/9QOxDm1HaptpH1tL3YO6dAW+UAo1ji6WQ7UFbV/zRmoMWnr20fCpvF1ydcO72AMXxTviK93PFn74/M6cGg8L/4SUpNwwwPRWhMu4PzSBYGIvWfrCpnu+n43ONzQ3Zk/fJxmIOd9zufJ6nSP42x+nd7qB5jucv+YfcTQ3eHW2gCAuvGwtluFwQ2NkS/Ma2h+IvCbm8DcRuNyNZM9JfrMp/dmxbB/MPpW/vz0ri5dSwg03CgdFRnOih9cfEaCwD2nghM13EJ79R6hw220qMI4jTskJhIFOD6fLOn4CFxLB6rZBCJOikDM14zAhHtkDEHA73ediZn8qdYFg0kQ4veVe19nci5/dxNv9XfesugnyIdnOfOolbWxdO+x8K1Vh8mlxMtx05pL1G4i/gr+QYsdFK67TfrGLgV42nwEXlFA9qYaxEUB7WxqQTYU0N2mPOSWHqb8u92V6GFQv9ceTMFqXm4COKQ+yKsinh6LwZ/fAazWf6039dGtZH7/MZKprOkc4TOTLuBLVfOmjzX1OmDHkiQ/OfIHQN0bgVLX+JCYnHC/XhKS89DfbylLpxaALXq63RR6Hdaro05eyxyGixAO65PR7mY9V0iC3Lq3+x/10KBo9f65U0d+L020uPWOAMCdZaK9f9zrNROd+W3UJ4r16UbfnQqvELGaJe3VUPbXoL435ou+fzNxmkn96ZH3j6aQDix1jykaDGOGvv77oexh4UAmz9433Levmf0wG8+yc6l+DfW6db9XyeWvUveUTUiElu5dbconDnSvsKUKocJjqNTjN758m/v0EXl8NLp4fXpIEAHEFMfGE7oDWrlkQZ/Po2J1VRArAoi/nWy42Rbc8Y4AYEqLTvX3eoct7H7EEQV4rpTn0+DYhyu9ubVjWDPvhLU93kHs9bVwewDDhEv3POHt7LGDRL1L0ACARGKYBOcEJ1mFAcHdW6wN66vDMP3M9kxypRPQQ2XF95PTbu1g7aAt3TVPpRVEdmvJtLx081zfBkemU3w0Uyg7mi4hTVzCFr/uzbuyorQR+sOJaNI07YfeeCT+kO2QLDmbIkdBEaZZpTRxoZ2VJSZ8ixPahjMTfYjn1Bi4QxzlmOtyJo7SQ0nOqP2mKz8K6wO0v+3Pr9NmPctarUhmuybxustm3pwRt4U3XZ23xYB1Z4R598GfZWqGGhJXuTMCJ81CrgIuYGVuQH+t+y6oquVLm7wRNB5Kfw1Vg79mfCcKSFEWhPkO/nnQUa02yaStZCVle9twrJ0Qn4Dhxto9COnri5l3buRlSuCV5bDJScQkAbjcNSmWWj3oYJk0yZQvJT2/YoagJNO8d/cqfIpqvRSPdPTw/q0DPyDbIx0/oj8ryM9Ds/3se5JEONLqIfNfN39k/Sck41nltNPfT0eoWWoPvei5O1J3JG98l5d9XQGUrR9v8skdAU7/eDAwfzoVp5zDWL2qlHR4aw0o8xu4LBIWahVb3xrdY3U/rMBWW4UtkX/t2SJneC67unXOuL+WoV1QW2HXVnhQhqqJjdg0x5CoNpEtDZYzkGCh3XN2HcRyloIBAGyjZyaQbK+kpmKBskLNjj9sMKQJt9Nfk5iD6/O2BpoLa9i3hZhb1u5sB5recV6G2WOcbhayR3AGVuZ84Jasy52B7bR5rhq+5EIHY66O0WTgohNr0IytX6Pzn82lO5Pj4DZsqvvqF8pX1zgFiy92MTHTzFutXSjP6x5yRUiLdglda9JV3UKRebjnO3O8mtGEpg/3+tEWO3VSNBow98QxxFRb6m20rTF2V87GETJu/3C7EHanrSdKhGFw6Drh8Lpt5O4VoHiq6lPWdtQeZNdK5Fq7t2Ta/Onm3XzLZJhmXUetz7pM473r3/Ngxg6mfyDu6tqBuzn/46ZaAFIxCGd9OcrrmQYTWPdQ6dPvOO9Q0t6ah/IO7L8LxFEuvNyh4ui4VjpUqozjPGlAi/csEW1L4/ItJQ2VKu2Mg8B8bHLA9tT+XQ5Yu4vapWamWn/HXTGuEHKBdyV0gx7Y/UkDu+2QsKaBE1obNge4UevCHgK3afPYa77EvisIsP0oeZ21jY99atCOjxomXbp0CP+OIWojqOah3Fc7Ptw/Z3ucENRt/oTu7V+vrfvwL12zwA83rNQMBY2qkXr/G3dWIWGVfxfTxztWnIgF3Qx0hVxWDgrycMt53Ic8bV9QpwxBN51OGAAJdzqUMDFzgus1jJCss4fjQBjzMsTCEmx1+J/glnge3v0i/ZfWfw4TOuUAQxzSbfWEESzdc7GSf3e/tP7kMmE8lx2Wl1djmpDsuaxofeylk6uRUn3P1RV5tNF2FWgLuwcrvA3FcqgXDhDeeYIVIwH0q+sBcAQQNh+zntA1UIklhWbD7yHBWap9aHcHnhhGrEhHADAHFh6fG2SEI2Depj46r1hfr1+DC9+b5DUeRxlWorgfhYRAMTaueIhzxT0/o6CzeikYAHAO09k6zM1ce5VbOtGX6elmfqFunYzSZhGXeP2rvM5fp0VfMhH8iM/q++1T7zMjvNLGq77GtxUk5DTfShc7jXcuFq6k43LugpTtTrRgek3BNL21eW56lasMjDrLYDU3SbC9jPVqgJY4HGSATI2eZLxRHbt76J1qdswjQLGsioHIpQDFrGJh3KvDTkap6ncWW5yMUvOqdmYgRz8fz2wcR7ggYxe/Mf8ezLRz5+feSh19zQ78H1WkPNGOi6anWzbV9/zsswMAk1/Q/VF98LP7ICi2MyMGYfjyXAhXD6sz6vCuonwvt542Mj555mIAAMChF1qextCbMMFWgUSZzEe8Rfl8ggcp2D2LwQAAtBRQO8uqF+1sWr0zizuC3k5tXhPILbh+HSVoS67dAQIq5C6RIMNwQSwKMts2xq4d2cJ1mBrbYpPrMFPugu3u/kzaGVfH40XaSyfWs8XIu7wHu/IWsyVMufQn27tMau6ga1x301FEXmuXIwQAxw10rHIPz16kU2L9m4XS43t+FHCiNbi5tmKRgbbA9njZDVzi6B4ciK5t/7hoiNNs61UswkRfkbzRjkI6qg6T6MnT0woyu9LDg+E04AAAo1L/lBYm1eFtXpcwhQVRMKu36Z/L0e6S8NcLzQCAHbxFVOf2qLdiZIvlbZPOPxcWvFYdelcBR9XHNIC3+x1pAqzc6qcoJNXHR1LHgFptk2FAt3aZRtKY3+kgU4v3PT4YH5zcB2nkYFbzITgYih0dyWBcLPhsSKW+xwgmdCR40FllwEcX+NJyK6u/Ny4Pq3uUDxmwakvVBZUl0ar0jg1OPT748z/OHsb/N/QQW9nIqaS3xGeLozO2Yyn+Ox4zRMoVSJtBkrPcc41GIJFzgg0JpPWYdqUkl/Dk6MYxkbRJ0R49xencyZ+rwXV7A2EPl5nuLHAKByZQnnzpVkSyLpUMC0mLF52VOIkbmrJGjkDz7L1zUEh1VSRcHkOHXeXRrfZg8Kqu/FXXmgdU9+F5BFDfAGg8oRRQiSWFvsZNz7EX3MH5QnUv0RfGkhhx4yYBwA648h99YCxDF+aPC+EPPYOfz7YgOd5X0PveM+rnVYeeYebN0cFxLgYo0g1OKQwAOGhLxAazAn7dt/Vi8HdjwvO58/2vN28eex/g8+Ojzpg247mlzEXvHnkO6L1a8EQ7mfp8u5/bWN0WlsEAgI39HLsAKop0yqZxASEmnDHa2W0gvVbnDSTEqcfGHDMkZFK1s3iyid4ZXRAUAPWp2hjUFdQ3aFvQCNS3dhfQPCT66OqAGiRQ5y6DOcKBipTffBT4V5EN8S5pI0F7K92zQnQrUZwLAACcQMfuCAUwxwRFAmky5mwAzjB0xaAaDWEAgGuB6dJXy3HhN4tWbBccuAUPWpzq88QDSdSwuxugUbdjErpyuS4HNpTVcZApjmzAm8g1tDJT1zcCMSfrMk0o53EXprXK6ZjtDN0tnOX0No8dDiMJiZwlbBZib0wpsucGBtOlUcUMkHY8pLbtZ85Ff0GLW/5oYkm7Pl3J69NPs3ToB6fyNeec9ryRFkyjVxU/1ESapHn/HPpfIC3o6n9ga0B8t9HjaA9if1aBk/pt4n+TiT735J/uB3VtBZPBIkgcUvRt0pdw6AhxfiTbW7rS6i0Fccd6MLiqtSpbzKHBdWEVpsteyZ60f949yLPd1qduuSEK6fUajgI732mg7x6Rp2bP0XQOkKoGHAAg1WDQ+gULBjAKcXgas9qGGoCZze6MgYOGF5oBADS+XdmTpX9ZZ8zdYMOdsu6PDaT7tgadK8jorY1RBeDgbuQUNALs/qQlV4WRuG8Oc0NX2hojAt3VtphVkLvlLpjNTZoAO7LR7wUGJnmwLdDBXcYrNlgHnSB2E2KjLytsEcnWsp6eAjtzQe09gimCqhiCtU5lH5p5rUk+7voUhTcSAACmfN3EglP5WnlOf27UCaZ0UsUcJ2xFwWDKc8rFcC3HRzHQ67vA9PmIDZJumwMbnsrj0q1kxpdKJ4bs7Uusd8EMVYbh4AeBcP2f1BeHe7wGrdFkwRHt/Qx55GI5gxWbgWpnOx/NFqHnzk+1WF51H55HAHUGAMcKsjtgicWFdsHqgYvOLvrqAhXcYFQIPP99BACpoF3nP86CkwxzmD/qgrRs07u/vQ323ixbI/agZ9BkHWPhszOz3saCo5WDCphmCX3yYwMFR3umwTg3yf5t+GKKnbBsVgwbwAunu6/dLAk6eI2PfesKE3IlhU6A6alZGhR4mEJn2spewVO9EtdXbbp+gK4Z+3EXxK0rn2diuop4UpXBlfOT7Mm/h6Cq0fCpGuuCMNbAF7p/jYPNjVNqtzTO9tehdaLuTGqKWI/mxerjx3dlUfrb5k8odZ1dOCA31SR72qON0BuV4sZAXYnwU4lz9CbIK8JUKrKxzJD+YO7Oky2gbI0QVFciRHRbGSAg2tYFLCboQMbADgNOGTuGA3AZMyzCwdv87k1rgz9fVet7FU8S37rZz0jeHI13tRAAADiCauidCSjYENwrDie6eznGPAIgwzy3Ik4l4u+cDwYArJHeLoO/ZsFXM9MXCsX2ksMtMR6I0nKmQs/QV1ex+/DEyp00dHCZL6fjXiinUkYIFPIPNA1amWFD07Z1GQqaznCGoV3lmDsOqzyj1gvshC+x9kJUtSvFNERh640iMJCmOSAAyBpMkR9uGtracfuXbjBpy3JaUBlrMTbobns8d6AspjsSlGq2fyGCDHptvWnCvR+8hVdHMfZe4B/tXTon74qzugFIVLmic3EAANPLWhhy6W39XtL1Kk7XkgFdwRCzThHvaGbvgMQ2mQEAYoHB/g7Gl+D9uTjpH85JOXCH0iWXx3YEFZ0YPCv/rkHMVGspCbhJJq93UxmzBuS+K4UHptfubw2IJiNREcTE2mgaZK11cQ1IFGNwHwNj2dFgGFjiwaMDlr7HpDTIbhYPoggKubBEAXNb6rnxXRTZi0SnUHGq6qIOZjB9TR8BwGWBHRuP3d2sEKfuYjkNJiTjBSYNpHlXi5IJMMvLZWoJ3F07FVYBW26NtmuA1bX3225gDrUVVzd8jD6GKqe/rwqbW/B0BaH6A/X5+EICqPQAZE/IC9RiSaOn6fdQ4CJWFGgHo1SMqOhHALAEVzePfb1wB+OrgtQR8jmSTztL6bmcWLsArN9kc/XJY/fymgogbeUQAcMxz8eHnEnBGSwGAwDmfDqppmw9FWflwCmGc1X0volr9L5s5epn8vDVXuXB7Wm1jhZvVbGz5oM7/7t41favd++//fife+PD3MryGqE8eqfrGCrC1vDB7aZ/Jj9PVR/kUeB2m8EAgJRUAHv1BZwFvDTisim1C8yoPm+X4DZq2M8WlqjduRnQFAvJHOgbHTN6omAI7TLbDu+ESIwBc0iswXZYhcRmeSwLJG8Y8JXWufUDI4SzT0KlhiRtLyp+0u0OgVAdPDHMSMk4Q9tKq2OnGdr2uYJ2wIa93fI3DnPv6nAqeikTPYcfLgoDAIb0jrULqgA4l+I0rJTSalOfFzZoqCJsKjkXzc4FS7U7A1/8jPmyBi0YIQNxUlZm5phMVFqXZYMxGMOK4KacnS03uBOHdmuIJKcuHB6x6+9g/D+JsaX5lBZm/39/j/8BVLxy5pQarOp6I7QZFKo5IACAF+yJgSgmmpY0t2GFC5O2vOonjfFUSzB+8x6dl2D0ridY/z1EBbpiPJESKuiKNp4zHpeJV1HaBb6qAHTmZ6n4siYOSKIZD8NOmtL85JCj6wOtrwr2ybvCwo5Ar5pOAIDeYV/7mU784ZCoHIV+GR/CRFAPL9QOkByvHi0ghWdbBWq7yQwA8BKc7Zq2awCd4mMsAXTX/rkIcq8O3WNAdbUxvgEc3o3GDW2l7f7CeVOm7zgk3l1x0tbmHHAu1uXOwNa6C6kaZKrjGgVtZIpwggMOGOKuExMM5m64Kva/S+2MIbeM2f/f7xOhDQ/hwMsKWoSAas4DIeP62yK48qKaWhA5E0E3ypPl7xxgd6EAAGAO5GTzF3oa4lWVIJureE1ZSKJ9gdE10jjWongKGO9lJOVl/K7j/0W2bPvn+3Drf/Zg87cglrtXhSH+2u/j0eUE7tWHMJcWaev2ACFeKY0v4G8qGK5IOHMcvGEE309e79B28qscVtOAbHFUaAOitQzRWqgzcreZh7mtc89zi6zkIcitFNX5YABAHCa1VsHVm7mfqbPScKjh5fSCJH6tof9L+vv6uPWpryoJez6948M7VDedwe7TOwHYhCk4RqbQefQ028JPLQoDANJshCnrC6QDEhlxk46XAWtX6F3y8EFvrx6bRWbI/jU5A8tPcj0p92AAXOiEgF35XByxkDaGPYFYaetC9OB0RKwhYyAwVztJYvvdSNHjYmFPSMd/1inf0e94n36o999UHX7hvMxf+DFpaAZJ3DixlIcp9LeMkGwUlMDanPg3KPO7yidJvXHRM51hTgHm9AInwyWcx+nMtBcqprbQmQJxFAy6LLhGeoPfhZO3f3drbiY7O0+F6cwFJCihz3gfqmBuzgkDAManVVXL1tXYpdNM9sAMYNaEc5WLtbH2WZ03Ja1vath3ho1Nj5U2c1LV4B8WnIWoF+VQRBDGQbpSlMZe4NcU9Pwkb6gkkW/4w626ZtNJwsEQdJ2MuILsWTAF+mmyLvkD+FT+CcF6KjzIcWIF5ilc6IJsyy2DtpA2ZtGEttJty8KAtobuwiJCLrYdoNWgy7Wfs07s6sR67kNHNlTFkhFVIa+nUsRxKatAcw2McVFk5JJyeDqwp7p/rgAy8tsj+Dacpol4U+wY6DLrnxx0Pb68nYJ8ncLtWIvG1B0GdtEiNxu4Ga4L5IueC4oTC5idcW0bZsYWTy0ryP5e2hp2cR5588OvEuHeENRY/wd+gaeeWYu7vt+IW9mpx3H7/vE7nuFhh6dJ+hk2kGmcJwG+Yk+Lvxl6ssISfPkkku8QOKj9bMCC7cFvaZVAmUU44kCP7Tdfq9qV891AIPcirduHo/6FQM3C2UuI4Qe31FqOBmirjr3x0zsV+kUTqjOZFwuDbuIKErqcOddRgcA6615enHLHxd9maKDSF+uQPaWw02DtBsA17AAAIOxl9IuZQF9ANG5hrBOGxau3Ds9laKfwrYVmAEDEYKWKtjEI0hybAQVV/k1ABbXo0dJb2PNMkRdq8FUIc1daCFT4O4pxSx8/pYAf4JsBfOwui/DSrWrz4QlTBfEuVG+mVeWU7jNJwikAyk/rmxAKeqxL1NmGIQZwGCLsNhDndxRmvD/xE9jxX0Em4e73sSWhh7P/UEamG5x4W2wVR7nLnBdCOY4OkEOCxoXFAzAs1rNuYJuXVRYH2Bo3o4sgxzUGvOEiSxYAgK4x+f3x3g1u4To23FBX5jLZFCCOdYlRsSBvuwsldYCCrctVvNUSqzKuu+huF3KJtkUBkcvY2ieDPHbXY6TNDx+1z2YeTbjH/MG3u/tP3t5A/wy4kmwmZlNnR2+6fL7RrqjgVRaDAQAHFWxtaf0arm1WDEsK+X08a/PeNZbeF5+plr2+qoPbC3VOiNj21DhtJ3xTgatiR1OHtQK8YYNSXQBn85waBY0UJGsxGADAU4HwKgwG4Zvav9S7h5W2GH/Wx6FtviD4bl9sWIfRqM0p3N+B4TXUzU8Tvn9uHpmlQtxcqqJUtOIL5K16mGwnjg2HwpsiPhLsuo/p1Gmy5zIOKmiKih501YqKtFY9Zks2r674l5Mza8zV7P863Tf9qtocqqPvE6lvjPrvCS1CMmE85aWQGrogSERZGWnwxbZFrsMXGYOMKVxaynMOkIZspgcpn3msxvlWVvKtohruZL0wb4X8xZvQnmjBHQnbn27dMz0hEymQuGkAAEgWuJLWucyEOwpcDxe8bQQ65z4DAv3L8HOVd6+0qapgMxgAoDoVj11e10Hum0khZx63RBlVYu9UoXc9FWP4V/rqwNxExZVhNBwmZ4xMXmr2uQPtqhZKpcMMCzk5YuzpqLIyZ0DHsXU5BzruMIbzIM93DtDNlfLSdmhvG5CbxYlMRh0qOZYj5Y0h9smmUJVcsr1kdH1xdH1BdH0F0/X9dM02mim1eKOrJJrWiHLGyPaS0vUZdE3+c+J5S7f30zWf0lipRTpdicw5hwyG4EoTp/9qFFmowXUrqi5sIiXctrUgMitgEAtqjckGxMs5boKPauDcUn0a/JfNhvXuDr4Hth6qifu+cVjpsFpX6iP3w9nvMn6kutByExbVhJ/SNdOO1gJeZW7Ipz1W63zQxB3qwdoy9QaEqu1fHYVp/Gri/e6KOHn7adnAtAi3ntbhfA55EzzG5r6tk7c3peumADcvDO4wx//BTx/GbV8WDUzICZdkaFU7CrP6JMwdz94juFSDGQBwDIQWOtqAIWCtRslNnxn72RjpHylrpqZuJwPkxJqzqbCayr+75zVt6F1bMjW7qUSonjXO4tTpGIfMuaAslMgqbJIlP2Bm969s0afumU7bAed16vPQ6SSm8SMlNftvpt+Mmw2nHGGvCborDTRX6dNlr4W9nW1iVBqhGcmkU4A2Gq3amskcNO6zLjO9ch6iMdtdmGFtckZ0mOYE5IzPCZ6LoC0XLYITAySH69ALMfFlhbuGeCLrUadDt5NafUkVYwhKMQ1kR7Cb/NYmobmmBQAAg9HqJrcvITR7xNXIdIMYXChxB3mqLjG+CTQzXYuypekkgxbM5WrNbLSKL7k7CcEVq+4TXaVAcEXxfv1VZIJr7Kpivz64q731t+j/Fxo6l8QIL0AqRH8oQycvx+/ti+LoD5fGF//K4BOdT1Yb8CgTLB5c9sU2rQo9fS9Zv5v0uBAGAKS1WgHVuqarUe6NRjxCD9nr4mDgFzx87jRotXJwk1ITO8lV8B6phnXYS26ttapiQR29G6EPQ7wOgYkwAMBeAjIGjbaqORvgdN6Yw+tAsxWdUlS1ZPAoxBvmXbMYhSy9IR2dHGXcIZnaSWWxi+2kFg1KnaO+r8BbDTTHOuoT5q3GgHmUd57xSvpd47IX3BH6VLs8AABMo+bIMw2h5KDQgxg6JFMtVfJcSzSkn8s7O2XgdJK6JNZxbPf2VNhIrowqR00+TzroSXgd8Ow9j0LFHxkENkjCCHH3c37FPxcyK55oXS4AT2IMF3LnYmkCraLRXlmdKsfGsf7aJNoDp86UOoRHKpFVj9CtMhGNV41v1z/Inrll6QkVUakZbHOlPsi+t8gW2cecWnZ+LXuP9xKXaWc20ZiarTdyKmqGIQ4Npo737xDE9oXNWSS7bS1UBDtljaVFqqtMN96CufIkFnfH/qEKeZWz79wQNuQeUjkaBevufHF3x8nbKxaCFaypYbP3sUqpw3upuIfcR6oMd7uS83UAgOOKihhxJWXDcGXL1sMKctqZjvBq77lmAMCh+HRlW8IKTLYNV3r+X9/993aUoiTOkxT3rkDf3vyf+XuFrwKNetwKyrpbi5mL37uyfI+gu584vL2CPe/n9g+p6/ZK8lvvL3EGM65h3/n1lmjHmG0isu15X9ayVBOu+jMGSQa0yt4MjT/WLyP8nRLDJohSyuqdyXQLbtsN3kKBXbnbsBcUwXUig4O+uJwa787kARZ0EhHv5qIqNOjMg3MoFZH9V8Zg/DBPs/CTuGHgzR/VuAAADLa3/89oo68mV82D8cMcdAYuGgxG4o/DGhMACMt6j7LLU24G1vG294qtNL7OfjOxwkKXmXQVeJVKlN78UIqW05eszbSYwoX3iqAYXTQcCwAU1La2n53dhxUUOnr9O4hC1cNOsw+D3wAYL3TwmZFby4HQKCDI5I42+6Nm1egSFC+FAQA76O4ZhAAT9Gf3tufFyMuWvCbCx9+TPLq9NFjpDvZQvyLUayethS3ExXjkYr+CDltjn14/3tf6LDEPuU4fn5X2XBW3C81zF0yq4vZsDN4xtBZ0z60dAmu9qhaDAQAHh3ZnugtsGKG037Oa3r3Pll+Um9J8FkLXqs9zIUE7JZ1hrVzH3ESFbkDuvmPK9p+Z9uwH3aN7PJsq7vVNr12XGsSZ3Lp8MJNv/FXyVLkgXg3kCdsYXxvy3OoXX850St4uxuDLZMcoU4ADlJ7dZIrLY4PKISiTN6zw7qa+92GMz65grmcc0HEk+/cx+B5Jn4K/N4xmuXFldyOqsWn6kHCt0FcFP9XBzfcT+/kBXXUCnGLACoHI1sX/zqsV63KPoYQG1g3964Dbhv7VEmevBynsEMJs6aIH+A3YOQBjKIwXewqwhifIscrtDAY/vx2l+b0oHJ5DMsSJtRjMVe8PXU/djVB7XIFAzhYMeDSyuV3urD1142583+I32Z2NWc03BJI4Oo3ew1QLpql0kLYoFInsqzpYe/No6WJL4Dn5wZcML+kXj4sOt7LX9Ql5wU7+r0+eDSRPhFs9+kwzH0bC+4Q/pBCV/N9j99bG99MjXrah7FP888CcJRPL5hfHSwJBMXaHLgSlY4N0IzjVaoznicLGGehOWry0qR25IAwAcBzqHb7OglNVikjl5MVzhY6KDK8zL7uBMjNd8DkvInPTuZHbgrBoZ4BVas3fgLW0C8KuDiXagLW3bQy7loB1pH5h53pMxDpdY+cXvM5ujwPEprnO7qFLy+ZA27RDtFRDm6MjtVeBMuxHcppXmih/rS/rLcCctbfx7yMZ15v9SO74SiPnMQEAa8bfNMjlhDct5Rrvgenh+qeDXJqkLpj94kBMsHnaGi9trhsow2krprBQZvO9NzVDoivLjG2I855042Qv6qQGo5Mhh5/5ML3dtLnZge3OzGyH0JQryQo0I7gZxjW+LYQ5bWI52VmIp0k+Fmsz5PMLxRNdcW9QX9qJWIyVee04ez8dcvZGUVGVvkcKMONiZ7PfKgVm1xRcRheGApmY50MVnO7FYADAjApUp76gawCRPM8MvUGNnpbApPWVbtlHOz/R/mwbDbp1IG1Gf58TPI8RcnXELe94+9Qy08Ba1iXV6/hQ8iYuQwrQHxlA4H66IqtX5VibvGGOfThx5zD6y/G3a2GBG7kie5xiOfR6yhlFqJxXonHYV6G/PExfYCdvz6UDXYQ76syf6CFdhsdA9dW/5O0PcpEcBK+0WAEAKAHI6R1yhaEkiIUzSGr1TAM6BRAwz9VrsGQF6akykJ2bZD9B3YJnA0JEpG8MvbBYURHtVuglUAxXw2cQsVxJkYFwfS4Bu3CvEnywDFItJBPx10XMrDpvIz6qaOmFgXLEJ0wGmFVVHqhfDkdWnZysI+WchhO1CRrFpYYEtq/TaYqODxGZ5eqjqZUd7umoAICUu/DDgfPwtM0T27J+eeck+c1z4by4mQ3luluLQfW9RMBL2We4wPOaxnCciCR2ktU8FNj8Er/D/o/SH4be//bMaS23l3LG1IsVvXbULkuH3GzimLOp7o4iiFRRyXgWYAgi1VFKg+lm6J+s7cfOJnpd4D9SHW5RGABQBzTowDdhpnLYEjyPoZfC056d5+5GrnjrSvjmcHgxcZWt3DCg+GSGZM59b1DisTPZymsJIQfrklWuU38nU/qHYCyk1MgTCcO92bNlGD2Ewz/FffCn4E7Y9xMfuroecun6/G5w9+qUsx7/BdRn/2A/gOe49gdftOrTCi8BqAHSb1fOQydWHq5SsmL5ejYbTp5uaGQG1FxuBAYw5SccEFU98jfgGwcWPaqaSnh8TDp6BK7k+eWFeP++s3kQ6PK7sSSwZOMFX1iH5+gSOPi9XH+6b3Y/cBe/Njjxd3h9Lub2VIfg7m/Wkp+fFaehNuqdqY7ORDGO8ewz/p9h5vPT4qo55YurCjzaLX8STLKf3ya4xZamKR30krko8TSYZDFNOu0u7rmLOqZigLFAU5AvYd9lS8pn7Ic+RzyBW5/D3K5n5gsjJ6Lt2NBHfV5KuWVZWr71XOmHmOFbXqFzXlvpmWjWXY6UoLYL+SJh09cnt+Q3hubO8COP6War8uqA+M9XqMh1l2+vFpfL4TU4H7gWB1cBfE7g+UFteZ7vI05o+u3xUsP9UZK3bgCNNCoAAI0D6NY76sWwwgYZaQyKByN1wjQ1oHfxTuXzPe7tCgq3GAwAMFRgKBN+05NcZkfAmOepBTipzpueqSzvJEXPhN9wHt9IQGs3tlLAJ5EEH6A72McDtjmqTJBB2bEBO1WKjpk1YIdWdMvCgB2NYi6sDNhrt25EiT9gb/afYgEQx7Vvp94/l4lQs3y6CpjUYRYL6FszcVtDtcmxChhMZolEADDXAGfpIG4dgHO/+42ekjghnfPv9q0OWvv8q/5UZR8eYx/f3Bvb+L6w7/pON2u7fbO85b0+3MlVn3053tMWO4O5xmTC1TofFrnRPXjqV+QxerGjYvs5jkrsR0f07/RUYf0w5vURO62d6WOAT+g4YLNWNuULi6qrWhCPU+jskS+PeK7S4LlRhzWPfrpIJ9ILzzZo5yfpZcvwbpisaQijY3lrQK64Oq/nkHdP3AUr4aEYG/qyG18xuJYrb+j2zYsdi1sFzZjG586pDdm9b/ZVu28Ca8fKT3aktXL+4rMD4H4jsyPodkZvG7OjPnfMKFeh/TmbB1kgnkauWMd0NbZUxN/JXs5nzij+XXnBF2UTNX/7m3YL63UvByhLwwXhxY7E6cOb7J8rx/4V9POIDU/l+xnxOsT4TbQn6svnbM8VFhiirzobqG7CMllCe++j7cI3F2l9Fnpwe67vKl14wWIFACDG2yl0vCDbVVBV5mBCT8efBwLEyqMvkagiXnxaGABgxJsqw98xPJ0dgTkzzxVnlhvJ2jP0dummQxlAX+Xm2ef5idunR18xMJThcjCJIR0Cbqf687AUB0F1F29XYG9sDGpV4AjbgoYKnMQX0HSLaEPrRhmJjq0BI2ANl+jKA/LuN0k3zNWcDWcUnDBQ+h7AOTO5krUrz+cekJFCPLOL/0THPo/AKTDmixuvK0vq9Ulp3dBwnWkOLa/4R9nkfs4U+aMIo00vYzBL1SeYrb3XoZplSZPq1Mvt2iUSAcDShVxM8UOzkFaK9Q8CpveiHw20NW0tlmkafNyGfV41X7yO/PcUnp3XZ+c1DM43ifNdG/8MbPHaM7ctvH7Bfe58+qy89rq+m+ziscCOY86oWkGDYscthaWA1uVBK5rxV1p9XuVEpti6T79c8Tg7i9Gl/YPz9uvXa4xrQ7a9TcBvPdn3rNsxnjiOveaCMABAc/iioafZem8NEzrTrSm8MECeZ+JARW/YPKvz4gUe8cSeqK0GiQz5/ETRF6Y8InJsl0NmmKSmSUfPzGTmhZOJe7MtW4OchAbDdjJnvzG7bfu2xQH21EJsOTxPXp8nr2ExvnyIdPR26W1/eH5x+D6ensGb1zDs4OA6HwX4qryTBV9CT8HeStOs6KvOZqiL3kwhONHhH+b156T7iGeuqDX6s9CDb73cd5M5wHONCgCAF8CWip1N5zMV2J7S4Pq0qkRnTa1mH8XLjT6SpoF5dvCLXtcnl02dqpxH8t42gwEAvps8UZ92+ka2PkQKETOT9WOHRTjexQxntaCiMg97QDODWT2nPlXwjN+Y1fcVA0N5UfojCuMOSN76sUtoaYQkcZ5DsGRjMJweBbcIz226ZcYtwteaC7MqsHXtG6sALNASsNAEKkiqDCJpMGIJVNt96k6qusBNfp1x5rVkx2sHMvorxoZ/qfU/87VzW1T9Hqi2arYe58Xt4n/WAYCthkgunYswtQKy/iD02p+bEGyVpIofsiQOxfsnBW7rgr8iQaruFF3BbUh3SrUU7SwapCkq//ZDm2P8bd+VPw8n6NvuWj/1sZt6S3d2UOFzb/eMqosIfIhLKXYsxK2UBuOkVa1BZePpFoUBAO4YpoHRVhcsm4VdjefJ6W2KNzo7b6NS9I7T7Znw9o7D1lSeBafbBFm3W5CCM9Ayh2ZhH8yWdrkwmG2D4Qbcon3bPnDLNmLRzKJzqCt5Ps+lYuchzZfhu/7UP+Hl9g2YZmXOe1PfTU4BaSxWAADSzb7uLTXPFd7aGLxG8e7Ka2P60duYUxPgqIYwAGCKfdsWB6xcYPA2Rt4dkd5MZR4xM4ArA7QKq0uxr+YniqC4snpAsQ2CdBewJYTHQbA4DzigBqeqmNkYj/Ex+gWHh1HKDCfiYt/YBnFjC9iDgqriRCmDN7KbvaEhH7bV4/9o8iqpt0UijZeK23fqXPbwbLEu9l5qH4qOLfxsXPvOyZqOi7ptV29mkEylzceyh1rHKduSdPqEVtt98zl85h7vsomK8+M9/w++WIvOoaq8J3yCf7UYvCR8OKm+lE/yGH2CB+m5Dv6JidLoIU/mh/hiOQXtjzhatQ85YkdsD7v/8VPmJEog7ZUKj2jCxvO6LsXNCcLK7+niPQryHDEdafxurmo3xH/8VbK/jwV5rg03y/tvC9T1Rd8JKI2usEZSQgV1ss8+gJtjtpcD`, `base64`)).toString(); + patch = require(`zlib`).brotliDecompressSync(Buffer.from(`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`, `base64`)).toString(); return patch; } diff --git a/yarn.lock b/yarn.lock index b92ba35bcded..ec47a8c4266c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6179,8 +6179,10 @@ __metadata: version: 0.0.0-use.local resolution: "@yarnpkg/plugin-compat@workspace:packages/plugin-compat" dependencies: + "@types/cross-spawn": "npm:6.0.0" "@types/lodash-es": "npm:4.17.4" "@types/resolve": "npm:^1.17.1" + "@types/semver": "npm:^7.1.0" "@yarnpkg/cli": "workspace:^" "@yarnpkg/core": "workspace:^" "@yarnpkg/extensions": "workspace:^" @@ -6188,6 +6190,9 @@ __metadata: "@yarnpkg/monorepo": "workspace:^" "@yarnpkg/plugin-npm": "workspace:^" "@yarnpkg/plugin-patch": "workspace:^" + chalk: "npm:^4.1.2" + cross-spawn: "npm:^7.0.3" + p-limit: "npm:^2.2.0" resolve: "npm:^1.17.0" semver: "npm:^7.1.2" peerDependencies: @@ -11302,7 +11307,7 @@ __metadata: "fsevents@patch:fsevents@npm%3A^2.3.2#optional!builtin, fsevents@patch:fsevents@npm%3A~2.3.2#optional!builtin": version: 2.3.2 - resolution: "fsevents@patch:fsevents@npm%3A2.3.2#optional!builtin::version=2.3.2&hash=df0bf1" + resolution: "fsevents@patch:fsevents@npm%3A2.3.2#optional!builtin::version=2.3.2&hash=37dad8" dependencies: node-gyp: "npm:latest" conditions: os=darwin @@ -19116,36 +19121,36 @@ pem@dexus/pem: "resolve@patch:resolve@npm%3A1.22.2#optional!builtin, resolve@patch:resolve@npm%3A^1.1.6#optional!builtin, resolve@patch:resolve@npm%3A^1.14.2#optional!builtin, resolve@patch:resolve@npm%3A^1.17.0#optional!builtin, resolve@patch:resolve@npm%3A^1.19.0#optional!builtin, resolve@patch:resolve@npm%3A^1.20.0#optional!builtin": version: 1.22.2 - resolution: "resolve@patch:resolve@npm%3A1.22.2#optional!builtin::version=1.22.2&hash=c3c19d" + resolution: "resolve@patch:resolve@npm%3A1.22.2#optional!builtin::version=1.22.2&hash=e6f707" dependencies: is-core-module: "npm:^2.11.0" path-parse: "npm:^1.0.7" supports-preserve-symlinks-flag: "npm:^1.0.0" bin: resolve: bin/resolve - checksum: 10/14594f99dbff19c1f51f6daac0caf0b75ed345256ada3722c23f63935eace79532dcfa349b3d8889d2771c143822c38dd5d7d8eb85fb8cff257b7abccbad7872 + checksum: 10/8b645560f64ead246a2118d7bf2ee5a78e62ed9ece4846744616c506b204d33122cf8cab60fb15c2d0162fcc7b091fbbbc22687a106811a81b6c2b21e2636dec languageName: node linkType: hard "resolve@patch:resolve@npm%3A1.9.0#optional!builtin": version: 1.9.0 - resolution: "resolve@patch:resolve@npm%3A1.9.0#optional!builtin::version=1.9.0&hash=c3c19d" + resolution: "resolve@patch:resolve@npm%3A1.9.0#optional!builtin::version=1.9.0&hash=e6f707" dependencies: path-parse: "npm:^1.0.6" - checksum: 10/2f534b82eb59b37d459f045dd339d9eacc2407474859ed82f753f56ed0d4207b5d4d1d0fd6b050e1ea5bfce7e4324290b50b0c753a3cee48a0ec5c6d4af3ddf2 + checksum: 10/a14dd5def5f846d20f1c0c5eda0d6024b99de7b9d2d77515950e34f75c6768c01dd58c66ddb07d30bbd6507e6fd810809707771a35532bc5a018f15289d6b8bc languageName: node linkType: hard "resolve@patch:resolve@npm%3A^2.0.0-next.5#optional!builtin": version: 2.0.0-next.5 - resolution: "resolve@patch:resolve@npm%3A2.0.0-next.5#optional!builtin::version=2.0.0-next.5&hash=c3c19d" + resolution: "resolve@patch:resolve@npm%3A2.0.0-next.5#optional!builtin::version=2.0.0-next.5&hash=e6f707" dependencies: is-core-module: "npm:^2.13.0" path-parse: "npm:^1.0.7" supports-preserve-symlinks-flag: "npm:^1.0.0" bin: resolve: bin/resolve - checksum: 10/05fa778de9d0347c8b889eb7a18f1f06bf0f801b0eb4610b4871a4b2f22e220900cf0ad525e94f990bb8d8921c07754ab2122c0c225ab4cdcea98f36e64fa4c2 + checksum: 10/76c221deb1d986c0a80cd576373b0ee09f42871e0085a1f76beda84f73ce04e0d21bab28dffd326eb006a7af83bbc582404566b384aa3b0baa217f56cf7e8618 languageName: node linkType: hard @@ -21084,11 +21089,11 @@ pem@dexus/pem: "typescript@patch:typescript@npm%3A^5.9.2#optional!builtin": version: 5.9.2 - resolution: "typescript@patch:typescript@npm%3A5.9.2#optional!builtin::version=5.9.2&hash=5786d5" + resolution: "typescript@patch:typescript@npm%3A5.9.2#optional!builtin::version=5.9.2&hash=0d3329" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 10/bd810ab13e8e557225a8b5122370385440b933e4e077d5c7641a8afd207fdc8be9c346e3c678adba934b64e0e70b0acf5eef9493ea05170a48ce22bef845fdc7 + checksum: 10/60ae962e20cc11ef39e8440dc69a0877e84dfe7a1a759976e6e78b029a34b88e0ea6517170db763f609b09d8e68f4c6cbab9d0c6ce0ddb964a809fe1f04e50b7 languageName: node linkType: hard