diff --git a/.pnp.cjs b/.pnp.cjs index 4dac491c71d1..35e8b6b48153 100755 --- a/.pnp.cjs +++ b/.pnp.cjs @@ -275,7 +275,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["jest-junit", "npm:10.0.0"], ["micromatch", "npm:4.0.2"], ["tslib", "npm:1.13.0"], - ["typescript", "patch:typescript@npm%3A4.3.0-beta#~builtin::version=4.3.0-beta&hash=ea7f47"] + ["typescript", "patch:typescript@npm%3A4.3.2#~builtin::version=4.3.2&hash=5e23b5"] ], "linkType": "SOFT", }] @@ -9536,7 +9536,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["regexpp", "npm:3.0.0"], ["semver", "npm:7.3.2"], ["tsutils", "virtual:6bf47b2ad271104a08c6662f1f96de96ef03c78d95922079272ee031fd5d0421b9b0b316dde114b15e69129623793a188cc48c1b4e5db399597b2a456377dcfd#npm:3.17.1"], - ["typescript", "patch:typescript@npm%3A4.3.0-beta#~builtin::version=4.3.0-beta&hash=ea7f47"] + ["typescript", "patch:typescript@npm%3A4.3.2#~builtin::version=4.3.2&hash=5e23b5"] ], "packagePeers": [ "@types/eslint", @@ -9586,7 +9586,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["functional-red-black-tree", "npm:1.0.1"], ["regexpp", "npm:3.0.0"], ["tsutils", "virtual:5f54d2b1a1f006985d0fdd9ec5559662aecdedf927326cad5264ae047905157bfa09fd75849ec664b5eb3a2d1ec3e16961d252b89cc360af383c9a7c3760e002#npm:3.17.1"], - ["typescript", "patch:typescript@npm%3A3.9.5#~builtin::version=3.9.5&hash=ea7f47"] + ["typescript", "patch:typescript@npm%3A3.9.5#~builtin::version=3.9.5&hash=5e23b5"] ], "packagePeers": [ "@types/eslint", @@ -9737,7 +9737,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["@typescript-eslint/typescript-estree", "virtual:afe155ec2f209914c9c5f8d2834bb420298a95f14e8b5381b5f4d510e40e286dab5bffe7ae67cdc28514ab80eaded9418e0f1fced15dbd23aa9a67187b4e58b3#npm:4.11.1"], ["debug", "virtual:ebe93d6532e43d78779479b0dabfe2d284fd2cc037fde073604e57fc384c1044e905ed82c7d081310a0af68c672c6a0a67f8fdbca758f0bd26d9fc4456fbf1af#npm:4.3.2"], ["eslint", "npm:6.8.0"], - ["typescript", "patch:typescript@npm%3A4.3.0-beta#~builtin::version=4.3.0-beta&hash=ea7f47"] + ["typescript", "patch:typescript@npm%3A4.3.2#~builtin::version=4.3.2&hash=5e23b5"] ], "packagePeers": [ "@types/eslint", @@ -9776,7 +9776,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["@typescript-eslint/typescript-estree", "virtual:ad13b5ab21f801b540b464ce4369c0ca688e0d6353ac7e356522b6c6dfb665757f139d77305652f9641cd74ed7e4db3d56c6d652029b271de6c7ee05c9c4d4f5#npm:2.29.0"], ["eslint", null], ["eslint-visitor-keys", "npm:1.1.0"], - ["typescript", "patch:typescript@npm%3A3.9.5#~builtin::version=3.9.5&hash=ea7f47"] + ["typescript", "patch:typescript@npm%3A3.9.5#~builtin::version=3.9.5&hash=5e23b5"] ], "packagePeers": [ "@types/eslint", @@ -9874,7 +9874,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["lodash", "npm:4.17.20"], ["semver", "npm:6.3.0"], ["tsutils", "virtual:5f54d2b1a1f006985d0fdd9ec5559662aecdedf927326cad5264ae047905157bfa09fd75849ec664b5eb3a2d1ec3e16961d252b89cc360af383c9a7c3760e002#npm:3.17.1"], - ["typescript", "patch:typescript@npm%3A3.9.5#~builtin::version=3.9.5&hash=ea7f47"] + ["typescript", "patch:typescript@npm%3A3.9.5#~builtin::version=3.9.5&hash=5e23b5"] ], "packagePeers": [ "@types/typescript", @@ -9894,7 +9894,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["lodash", "npm:4.17.20"], ["semver", "npm:7.3.2"], ["tsutils", "virtual:6bf47b2ad271104a08c6662f1f96de96ef03c78d95922079272ee031fd5d0421b9b0b316dde114b15e69129623793a188cc48c1b4e5db399597b2a456377dcfd#npm:3.17.1"], - ["typescript", "patch:typescript@npm%3A4.3.0-beta#~builtin::version=4.3.0-beta&hash=ea7f47"] + ["typescript", "patch:typescript@npm%3A4.3.2#~builtin::version=4.3.2&hash=5e23b5"] ], "packagePeers": [ "typescript" @@ -10293,7 +10293,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["terser-webpack-plugin", "virtual:e04a2594c769771b96db34e7a92a8a3af1c98ae86dce662589a5c5d5209e16875506f8cb5f4c2230a2b2ae06335b14466352c4ed470d39edf9edb6c515984525#npm:3.0.4"], ["ts-loader", "virtual:e04a2594c769771b96db34e7a92a8a3af1c98ae86dce662589a5c5d5209e16875506f8cb5f4c2230a2b2ae06335b14466352c4ed470d39edf9edb6c515984525#npm:7.0.5"], ["tslib", "npm:1.13.0"], - ["typescript", "patch:typescript@npm%3A4.3.0-beta#~builtin::version=4.3.0-beta&hash=ea7f47"], + ["typescript", "patch:typescript@npm%3A4.3.2#~builtin::version=4.3.2&hash=5e23b5"], ["val-loader", "virtual:e04a2594c769771b96db34e7a92a8a3af1c98ae86dce662589a5c5d5209e16875506f8cb5f4c2230a2b2ae06335b14466352c4ed470d39edf9edb6c515984525#npm:2.1.1"], ["webpack", "virtual:e04a2594c769771b96db34e7a92a8a3af1c98ae86dce662589a5c5d5209e16875506f8cb5f4c2230a2b2ae06335b14466352c4ed470d39edf9edb6c515984525#npm:5.1.1"], ["webpack-merge", "npm:4.2.2"] @@ -10331,7 +10331,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["terser-webpack-plugin", "virtual:e04a2594c769771b96db34e7a92a8a3af1c98ae86dce662589a5c5d5209e16875506f8cb5f4c2230a2b2ae06335b14466352c4ed470d39edf9edb6c515984525#npm:3.0.4"], ["ts-loader", "virtual:e04a2594c769771b96db34e7a92a8a3af1c98ae86dce662589a5c5d5209e16875506f8cb5f4c2230a2b2ae06335b14466352c4ed470d39edf9edb6c515984525#npm:7.0.5"], ["tslib", "npm:1.13.0"], - ["typescript", "patch:typescript@npm%3A4.3.0-beta#~builtin::version=4.3.0-beta&hash=ea7f47"], + ["typescript", "patch:typescript@npm%3A4.3.2#~builtin::version=4.3.2&hash=5e23b5"], ["val-loader", "virtual:e04a2594c769771b96db34e7a92a8a3af1c98ae86dce662589a5c5d5209e16875506f8cb5f4c2230a2b2ae06335b14466352c4ed470d39edf9edb6c515984525#npm:2.1.1"], ["webpack", "virtual:e04a2594c769771b96db34e7a92a8a3af1c98ae86dce662589a5c5d5209e16875506f8cb5f4c2230a2b2ae06335b14466352c4ed470d39edf9edb6c515984525#npm:5.1.1"], ["webpack-merge", "npm:4.2.2"] @@ -10369,7 +10369,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["terser-webpack-plugin", "virtual:e04a2594c769771b96db34e7a92a8a3af1c98ae86dce662589a5c5d5209e16875506f8cb5f4c2230a2b2ae06335b14466352c4ed470d39edf9edb6c515984525#npm:3.0.4"], ["ts-loader", "virtual:e04a2594c769771b96db34e7a92a8a3af1c98ae86dce662589a5c5d5209e16875506f8cb5f4c2230a2b2ae06335b14466352c4ed470d39edf9edb6c515984525#npm:7.0.5"], ["tslib", "npm:1.13.0"], - ["typescript", "patch:typescript@npm%3A4.3.0-beta#~builtin::version=4.3.0-beta&hash=ea7f47"], + ["typescript", "patch:typescript@npm%3A4.3.2#~builtin::version=4.3.2&hash=5e23b5"], ["val-loader", "virtual:e04a2594c769771b96db34e7a92a8a3af1c98ae86dce662589a5c5d5209e16875506f8cb5f4c2230a2b2ae06335b14466352c4ed470d39edf9edb6c515984525#npm:2.1.1"], ["webpack", "virtual:e04a2594c769771b96db34e7a92a8a3af1c98ae86dce662589a5c5d5209e16875506f8cb5f4c2230a2b2ae06335b14466352c4ed470d39edf9edb6c515984525#npm:5.1.1"], ["webpack-merge", "npm:4.2.2"] @@ -10406,7 +10406,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["terser-webpack-plugin", "virtual:e04a2594c769771b96db34e7a92a8a3af1c98ae86dce662589a5c5d5209e16875506f8cb5f4c2230a2b2ae06335b14466352c4ed470d39edf9edb6c515984525#npm:3.0.4"], ["ts-loader", "virtual:e04a2594c769771b96db34e7a92a8a3af1c98ae86dce662589a5c5d5209e16875506f8cb5f4c2230a2b2ae06335b14466352c4ed470d39edf9edb6c515984525#npm:7.0.5"], ["tslib", "npm:1.13.0"], - ["typescript", "patch:typescript@npm%3A4.3.0-beta#~builtin::version=4.3.0-beta&hash=ea7f47"], + ["typescript", "patch:typescript@npm%3A4.3.2#~builtin::version=4.3.2&hash=5e23b5"], ["val-loader", "virtual:e04a2594c769771b96db34e7a92a8a3af1c98ae86dce662589a5c5d5209e16875506f8cb5f4c2230a2b2ae06335b14466352c4ed470d39edf9edb6c515984525#npm:2.1.1"], ["webpack", "virtual:e04a2594c769771b96db34e7a92a8a3af1c98ae86dce662589a5c5d5209e16875506f8cb5f4c2230a2b2ae06335b14466352c4ed470d39edf9edb6c515984525#npm:5.1.1"], ["webpack-merge", "npm:4.2.2"] @@ -10453,7 +10453,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["semver", "npm:7.3.2"], ["tslib", "npm:1.13.0"], ["typanion", "npm:3.3.0"], - ["typescript", "patch:typescript@npm%3A4.3.0-beta#~builtin::version=4.3.0-beta&hash=ea7f47"], + ["typescript", "patch:typescript@npm%3A4.3.2#~builtin::version=4.3.2&hash=5e23b5"], ["yup", "npm:0.32.9"] ], "packagePeers": [ @@ -10500,7 +10500,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["semver", "npm:7.3.2"], ["tslib", "npm:1.13.0"], ["typanion", "npm:3.3.0"], - ["typescript", "patch:typescript@npm%3A4.3.0-beta#~builtin::version=4.3.0-beta&hash=ea7f47"], + ["typescript", "patch:typescript@npm%3A4.3.2#~builtin::version=4.3.2&hash=5e23b5"], ["yup", "npm:0.32.9"] ], "packagePeers": [ @@ -10547,7 +10547,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["semver", "npm:7.3.2"], ["tslib", "npm:1.13.0"], ["typanion", "npm:3.3.0"], - ["typescript", "patch:typescript@npm%3A4.3.0-beta#~builtin::version=4.3.0-beta&hash=ea7f47"], + ["typescript", "patch:typescript@npm%3A4.3.2#~builtin::version=4.3.2&hash=5e23b5"], ["yup", "npm:0.32.9"] ], "packagePeers": [ @@ -10594,7 +10594,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["semver", "npm:7.3.2"], ["tslib", "npm:1.13.0"], ["typanion", "npm:3.3.0"], - ["typescript", "patch:typescript@npm%3A4.3.0-beta#~builtin::version=4.3.0-beta&hash=ea7f47"], + ["typescript", "patch:typescript@npm%3A4.3.2#~builtin::version=4.3.2&hash=5e23b5"], ["yup", "npm:0.32.9"] ], "packagePeers": [ @@ -10641,7 +10641,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["semver", "npm:7.3.2"], ["tslib", "npm:1.13.0"], ["typanion", "npm:3.3.0"], - ["typescript", "patch:typescript@npm%3A4.3.0-beta#~builtin::version=4.3.0-beta&hash=ea7f47"], + ["typescript", "patch:typescript@npm%3A4.3.2#~builtin::version=4.3.2&hash=5e23b5"], ["yup", "npm:0.32.9"] ], "packagePeers": [ @@ -10688,7 +10688,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["semver", "npm:7.3.2"], ["tslib", "npm:1.13.0"], ["typanion", "npm:3.3.0"], - ["typescript", "patch:typescript@npm%3A4.3.0-beta#~builtin::version=4.3.0-beta&hash=ea7f47"], + ["typescript", "patch:typescript@npm%3A4.3.2#~builtin::version=4.3.2&hash=5e23b5"], ["yup", "npm:0.32.9"] ], "packagePeers": [ @@ -10735,7 +10735,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["semver", "npm:7.3.2"], ["tslib", "npm:1.13.0"], ["typanion", "npm:3.3.0"], - ["typescript", "patch:typescript@npm%3A4.3.0-beta#~builtin::version=4.3.0-beta&hash=ea7f47"], + ["typescript", "patch:typescript@npm%3A4.3.2#~builtin::version=4.3.2&hash=5e23b5"], ["yup", "npm:0.32.9"] ], "packagePeers": [ @@ -10782,7 +10782,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["semver", "npm:7.3.2"], ["tslib", "npm:1.13.0"], ["typanion", "npm:3.3.0"], - ["typescript", "patch:typescript@npm%3A4.3.0-beta#~builtin::version=4.3.0-beta&hash=ea7f47"], + ["typescript", "patch:typescript@npm%3A4.3.2#~builtin::version=4.3.2&hash=5e23b5"], ["yup", "npm:0.32.9"] ], "packagePeers": [ @@ -10829,7 +10829,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["semver", "npm:7.3.2"], ["tslib", "npm:1.13.0"], ["typanion", "npm:3.3.0"], - ["typescript", "patch:typescript@npm%3A4.3.0-beta#~builtin::version=4.3.0-beta&hash=ea7f47"], + ["typescript", "patch:typescript@npm%3A4.3.2#~builtin::version=4.3.2&hash=5e23b5"], ["yup", "npm:0.32.9"] ], "packagePeers": [ @@ -10876,7 +10876,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["semver", "npm:7.3.2"], ["tslib", "npm:1.13.0"], ["typanion", "npm:3.3.0"], - ["typescript", "patch:typescript@npm%3A4.3.0-beta#~builtin::version=4.3.0-beta&hash=ea7f47"], + ["typescript", "patch:typescript@npm%3A4.3.2#~builtin::version=4.3.2&hash=5e23b5"], ["yup", "npm:0.32.9"] ], "packagePeers": [ @@ -10923,7 +10923,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["semver", "npm:7.3.2"], ["tslib", "npm:1.13.0"], ["typanion", "npm:3.3.0"], - ["typescript", "patch:typescript@npm%3A4.3.0-beta#~builtin::version=4.3.0-beta&hash=ea7f47"], + ["typescript", "patch:typescript@npm%3A4.3.2#~builtin::version=4.3.2&hash=5e23b5"], ["yup", "npm:0.32.9"] ], "packagePeers": [ @@ -10970,7 +10970,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["semver", "npm:7.3.2"], ["tslib", "npm:1.13.0"], ["typanion", "npm:3.3.0"], - ["typescript", "patch:typescript@npm%3A4.3.0-beta#~builtin::version=4.3.0-beta&hash=ea7f47"], + ["typescript", "patch:typescript@npm%3A4.3.2#~builtin::version=4.3.2&hash=5e23b5"], ["yup", "npm:0.32.9"] ], "packagePeers": [ @@ -11016,7 +11016,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["semver", "npm:7.3.2"], ["tslib", "npm:1.13.0"], ["typanion", "npm:3.3.0"], - ["typescript", "patch:typescript@npm%3A4.3.0-beta#~builtin::version=4.3.0-beta&hash=ea7f47"], + ["typescript", "patch:typescript@npm%3A4.3.2#~builtin::version=4.3.2&hash=5e23b5"], ["yup", "npm:0.32.9"] ], "linkType": "SOFT", @@ -11098,7 +11098,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["micromatch", "npm:4.0.2"], ["p-limit", "npm:2.2.0"], ["tslib", "npm:1.13.0"], - ["typescript", "patch:typescript@npm%3A4.3.0-beta#~builtin::version=4.3.0-beta&hash=ea7f47"] + ["typescript", "patch:typescript@npm%3A4.3.2#~builtin::version=4.3.2&hash=5e23b5"] ], "linkType": "SOFT", }] @@ -11148,7 +11148,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["eslint", "npm:6.8.0"], ["eslint-plugin-arca", "npm:0.10.0"], ["eslint-plugin-react", "virtual:4b728ee22ccd3ae66b83e3be6d39acfb5b7a775112cc78b6b4322feb849fcfe6e39510452356cb4477dc6089bee57db31d02bbfb03b9fc8e914effa16a4145be#npm:7.20.0"], - ["typescript", "patch:typescript@npm%3A4.3.0-beta#~builtin::version=4.3.0-beta&hash=ea7f47"] + ["typescript", "patch:typescript@npm%3A4.3.2#~builtin::version=4.3.2&hash=5e23b5"] ], "packagePeers": [ "@types/eslint", @@ -11271,7 +11271,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["typedoc", "virtual:118b26a6cee620b5aa3e7e8d8b8e34cd9e486f75b92701001168da9be550fadd8c9d9b12643c642e2d528c2624fd8fe7e128eec9d715340efac44400432a0e0c#npm:0.17.0-3"], ["typedoc-neo-theme", "npm:1.0.7"], ["typedoc-plugin-yarn", "portal:./typedoc-plugin-yarn::locator=%40yarnpkg%2Fgatsby%40workspace%3Apackages%2Fgatsby"], - ["typescript", "patch:typescript@npm%3A4.3.0-beta#~builtin::version=4.3.0-beta&hash=ea7f47"], + ["typescript", "patch:typescript@npm%3A4.3.2#~builtin::version=4.3.2&hash=5e23b5"], ["unescape-html", "npm:1.1.0"], ["unfetch", "npm:4.1.0"], ["unified", "npm:7.1.0"], @@ -11374,7 +11374,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["jest-junit", "npm:10.0.0"], ["micromatch", "npm:4.0.2"], ["tslib", "npm:1.13.0"], - ["typescript", "patch:typescript@npm%3A4.3.0-beta#~builtin::version=4.3.0-beta&hash=ea7f47"] + ["typescript", "patch:typescript@npm%3A4.3.2#~builtin::version=4.3.2&hash=5e23b5"] ], "linkType": "SOFT", }] @@ -11737,7 +11737,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["node-emoji", "npm:1.10.0"], ["tau-prolog", "npm:0.2.66"], ["tslib", "npm:1.13.0"], - ["typescript", "patch:typescript@npm%3A4.3.0-beta#~builtin::version=4.3.0-beta&hash=ea7f47"] + ["typescript", "patch:typescript@npm%3A4.3.2#~builtin::version=4.3.2&hash=5e23b5"] ], "linkType": "SOFT", }] @@ -12495,7 +12495,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["@yarnpkg/core", "workspace:packages/yarnpkg-core"], ["@yarnpkg/fslib", "workspace:packages/yarnpkg-fslib"], ["tslib", "npm:1.13.0"], - ["typescript", "patch:typescript@npm%3A4.3.0-beta#~builtin::version=4.3.0-beta&hash=ea7f47"] + ["typescript", "patch:typescript@npm%3A4.3.2#~builtin::version=4.3.2&hash=5e23b5"] ], "linkType": "SOFT", }] @@ -12944,7 +12944,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["react", "npm:16.13.1"], ["semver", "npm:7.3.2"], ["tslib", "npm:1.13.0"], - ["typescript", "patch:typescript@npm%3A4.3.0-beta#~builtin::version=4.3.0-beta&hash=ea7f47"] + ["typescript", "patch:typescript@npm%3A4.3.2#~builtin::version=4.3.2&hash=5e23b5"] ], "linkType": "SOFT", }] @@ -15229,7 +15229,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["@yarnpkg/fslib", "workspace:packages/yarnpkg-fslib"], ["clipanion", "virtual:e04a2594c769771b96db34e7a92a8a3af1c98ae86dce662589a5c5d5209e16875506f8cb5f4c2230a2b2ae06335b14466352c4ed470d39edf9edb6c515984525#npm:3.0.0-rc.10"], ["tslib", "npm:1.13.0"], - ["typescript", "patch:typescript@npm%3A4.3.0-beta#~builtin::version=4.3.0-beta&hash=ea7f47"] + ["typescript", "patch:typescript@npm%3A4.3.2#~builtin::version=4.3.2&hash=5e23b5"] ], "packagePeers": [ "@types/yarnpkg__cli", @@ -15251,7 +15251,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["@yarnpkg/fslib", "workspace:packages/yarnpkg-fslib"], ["clipanion", "virtual:e04a2594c769771b96db34e7a92a8a3af1c98ae86dce662589a5c5d5209e16875506f8cb5f4c2230a2b2ae06335b14466352c4ed470d39edf9edb6c515984525#npm:3.0.0-rc.10"], ["tslib", "npm:1.13.0"], - ["typescript", "patch:typescript@npm%3A4.3.0-beta#~builtin::version=4.3.0-beta&hash=ea7f47"] + ["typescript", "patch:typescript@npm%3A4.3.2#~builtin::version=4.3.2&hash=5e23b5"] ], "packagePeers": [ "@types/yarnpkg__cli", @@ -15273,7 +15273,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["@yarnpkg/fslib", "workspace:packages/yarnpkg-fslib"], ["clipanion", "virtual:e04a2594c769771b96db34e7a92a8a3af1c98ae86dce662589a5c5d5209e16875506f8cb5f4c2230a2b2ae06335b14466352c4ed470d39edf9edb6c515984525#npm:3.0.0-rc.10"], ["tslib", "npm:1.13.0"], - ["typescript", "patch:typescript@npm%3A4.3.0-beta#~builtin::version=4.3.0-beta&hash=ea7f47"] + ["typescript", "patch:typescript@npm%3A4.3.2#~builtin::version=4.3.2&hash=5e23b5"] ], "packagePeers": [ "@types/yarnpkg__cli", @@ -15295,7 +15295,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["@yarnpkg/fslib", "workspace:packages/yarnpkg-fslib"], ["clipanion", "virtual:e04a2594c769771b96db34e7a92a8a3af1c98ae86dce662589a5c5d5209e16875506f8cb5f4c2230a2b2ae06335b14466352c4ed470d39edf9edb6c515984525#npm:3.0.0-rc.10"], ["tslib", "npm:1.13.0"], - ["typescript", "patch:typescript@npm%3A4.3.0-beta#~builtin::version=4.3.0-beta&hash=ea7f47"] + ["typescript", "patch:typescript@npm%3A4.3.2#~builtin::version=4.3.2&hash=5e23b5"] ], "packagePeers": [ "@types/yarnpkg__cli", @@ -15317,7 +15317,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["@yarnpkg/fslib", "workspace:packages/yarnpkg-fslib"], ["clipanion", "virtual:e04a2594c769771b96db34e7a92a8a3af1c98ae86dce662589a5c5d5209e16875506f8cb5f4c2230a2b2ae06335b14466352c4ed470d39edf9edb6c515984525#npm:3.0.0-rc.10"], ["tslib", "npm:1.13.0"], - ["typescript", "patch:typescript@npm%3A4.3.0-beta#~builtin::version=4.3.0-beta&hash=ea7f47"] + ["typescript", "patch:typescript@npm%3A4.3.2#~builtin::version=4.3.2&hash=5e23b5"] ], "packagePeers": [ "@types/yarnpkg__cli", @@ -15339,7 +15339,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["@yarnpkg/fslib", "workspace:packages/yarnpkg-fslib"], ["clipanion", "virtual:e04a2594c769771b96db34e7a92a8a3af1c98ae86dce662589a5c5d5209e16875506f8cb5f4c2230a2b2ae06335b14466352c4ed470d39edf9edb6c515984525#npm:3.0.0-rc.10"], ["tslib", "npm:1.13.0"], - ["typescript", "patch:typescript@npm%3A4.3.0-beta#~builtin::version=4.3.0-beta&hash=ea7f47"] + ["typescript", "patch:typescript@npm%3A4.3.2#~builtin::version=4.3.2&hash=5e23b5"] ], "packagePeers": [ "@types/yarnpkg__cli", @@ -15361,7 +15361,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["@yarnpkg/fslib", "workspace:packages/yarnpkg-fslib"], ["clipanion", "virtual:e04a2594c769771b96db34e7a92a8a3af1c98ae86dce662589a5c5d5209e16875506f8cb5f4c2230a2b2ae06335b14466352c4ed470d39edf9edb6c515984525#npm:3.0.0-rc.10"], ["tslib", "npm:1.13.0"], - ["typescript", "patch:typescript@npm%3A4.3.0-beta#~builtin::version=4.3.0-beta&hash=ea7f47"] + ["typescript", "patch:typescript@npm%3A4.3.2#~builtin::version=4.3.2&hash=5e23b5"] ], "packagePeers": [ "@types/yarnpkg__cli", @@ -15383,7 +15383,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["@yarnpkg/fslib", "workspace:packages/yarnpkg-fslib"], ["clipanion", "virtual:e04a2594c769771b96db34e7a92a8a3af1c98ae86dce662589a5c5d5209e16875506f8cb5f4c2230a2b2ae06335b14466352c4ed470d39edf9edb6c515984525#npm:3.0.0-rc.10"], ["tslib", "npm:1.13.0"], - ["typescript", "patch:typescript@npm%3A4.3.0-beta#~builtin::version=4.3.0-beta&hash=ea7f47"] + ["typescript", "patch:typescript@npm%3A4.3.2#~builtin::version=4.3.2&hash=5e23b5"] ], "packagePeers": [ "@types/yarnpkg__cli", @@ -15405,7 +15405,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["@yarnpkg/fslib", "workspace:packages/yarnpkg-fslib"], ["clipanion", "virtual:e04a2594c769771b96db34e7a92a8a3af1c98ae86dce662589a5c5d5209e16875506f8cb5f4c2230a2b2ae06335b14466352c4ed470d39edf9edb6c515984525#npm:3.0.0-rc.10"], ["tslib", "npm:1.13.0"], - ["typescript", "patch:typescript@npm%3A4.3.0-beta#~builtin::version=4.3.0-beta&hash=ea7f47"] + ["typescript", "patch:typescript@npm%3A4.3.2#~builtin::version=4.3.2&hash=5e23b5"] ], "packagePeers": [ "@types/yarnpkg__cli", @@ -15427,7 +15427,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["@yarnpkg/fslib", "workspace:packages/yarnpkg-fslib"], ["clipanion", "virtual:e04a2594c769771b96db34e7a92a8a3af1c98ae86dce662589a5c5d5209e16875506f8cb5f4c2230a2b2ae06335b14466352c4ed470d39edf9edb6c515984525#npm:3.0.0-rc.10"], ["tslib", "npm:1.13.0"], - ["typescript", "patch:typescript@npm%3A4.3.0-beta#~builtin::version=4.3.0-beta&hash=ea7f47"] + ["typescript", "patch:typescript@npm%3A4.3.2#~builtin::version=4.3.2&hash=5e23b5"] ], "packagePeers": [ "@types/yarnpkg__cli", @@ -15449,7 +15449,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["@yarnpkg/fslib", "workspace:packages/yarnpkg-fslib"], ["clipanion", "virtual:e04a2594c769771b96db34e7a92a8a3af1c98ae86dce662589a5c5d5209e16875506f8cb5f4c2230a2b2ae06335b14466352c4ed470d39edf9edb6c515984525#npm:3.0.0-rc.10"], ["tslib", "npm:1.13.0"], - ["typescript", "patch:typescript@npm%3A4.3.0-beta#~builtin::version=4.3.0-beta&hash=ea7f47"] + ["typescript", "patch:typescript@npm%3A4.3.2#~builtin::version=4.3.2&hash=5e23b5"] ], "packagePeers": [ "@types/yarnpkg__cli", @@ -15471,7 +15471,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["@yarnpkg/fslib", "workspace:packages/yarnpkg-fslib"], ["clipanion", "virtual:e04a2594c769771b96db34e7a92a8a3af1c98ae86dce662589a5c5d5209e16875506f8cb5f4c2230a2b2ae06335b14466352c4ed470d39edf9edb6c515984525#npm:3.0.0-rc.10"], ["tslib", "npm:1.13.0"], - ["typescript", "patch:typescript@npm%3A4.3.0-beta#~builtin::version=4.3.0-beta&hash=ea7f47"] + ["typescript", "patch:typescript@npm%3A4.3.2#~builtin::version=4.3.2&hash=5e23b5"] ], "packagePeers": [ "@types/yarnpkg__cli", @@ -15493,7 +15493,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["@yarnpkg/fslib", "workspace:packages/yarnpkg-fslib"], ["clipanion", "virtual:e04a2594c769771b96db34e7a92a8a3af1c98ae86dce662589a5c5d5209e16875506f8cb5f4c2230a2b2ae06335b14466352c4ed470d39edf9edb6c515984525#npm:3.0.0-rc.10"], ["tslib", "npm:1.13.0"], - ["typescript", "patch:typescript@npm%3A4.3.0-beta#~builtin::version=4.3.0-beta&hash=ea7f47"] + ["typescript", "patch:typescript@npm%3A4.3.2#~builtin::version=4.3.2&hash=5e23b5"] ], "packagePeers": [ "@types/yarnpkg__cli", @@ -15513,7 +15513,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["@yarnpkg/fslib", "workspace:packages/yarnpkg-fslib"], ["clipanion", "virtual:e04a2594c769771b96db34e7a92a8a3af1c98ae86dce662589a5c5d5209e16875506f8cb5f4c2230a2b2ae06335b14466352c4ed470d39edf9edb6c515984525#npm:3.0.0-rc.10"], ["tslib", "npm:1.13.0"], - ["typescript", "patch:typescript@npm%3A4.3.0-beta#~builtin::version=4.3.0-beta&hash=ea7f47"] + ["typescript", "patch:typescript@npm%3A4.3.2#~builtin::version=4.3.2&hash=5e23b5"] ], "linkType": "SOFT", }] @@ -15533,7 +15533,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["algoliasearch", "npm:4.2.0"], ["semver", "npm:7.3.2"], ["tslib", "npm:1.13.0"], - ["typescript", "patch:typescript@npm%3A4.3.0-beta#~builtin::version=4.3.0-beta&hash=ea7f47"] + ["typescript", "patch:typescript@npm%3A4.3.2#~builtin::version=4.3.2&hash=5e23b5"] ], "linkType": "SOFT", }] @@ -15557,7 +15557,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["react", "npm:16.13.1"], ["semver", "npm:7.3.2"], ["tslib", "npm:1.13.0"], - ["typescript", "patch:typescript@npm%3A4.3.0-beta#~builtin::version=4.3.0-beta&hash=ea7f47"] + ["typescript", "patch:typescript@npm%3A4.3.2#~builtin::version=4.3.2&hash=5e23b5"] ], "linkType": "SOFT", }] @@ -15577,7 +15577,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["p-limit", "npm:2.2.0"], ["tslib", "npm:1.13.0"], ["typanion", "npm:3.3.0"], - ["typescript", "patch:typescript@npm%3A4.3.0-beta#~builtin::version=4.3.0-beta&hash=ea7f47"] + ["typescript", "patch:typescript@npm%3A4.3.2#~builtin::version=4.3.2&hash=5e23b5"] ], "linkType": "SOFT", }] @@ -15594,7 +15594,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["@yarnpkg/monorepo", "workspace:."], ["resolve.exports", "npm:1.0.2"], ["tslib", "npm:1.13.0"], - ["typescript", "patch:typescript@npm%3A4.3.0-beta#~builtin::version=4.3.0-beta&hash=ea7f47"], + ["typescript", "patch:typescript@npm%3A4.3.2#~builtin::version=4.3.2&hash=5e23b5"], ["webpack", "virtual:16110bda3ce959c103b1979c5d750ceb8ac9cfbd2049c118b6278e46e65aa65fd17e71e04a0ce5f75b7ca3203efd8e9c9b03c948a76c7f4bca807539915b5cfc#npm:5.1.1"], ["webpack-cli", "virtual:16110bda3ce959c103b1979c5d750ceb8ac9cfbd2049c118b6278e46e65aa65fd17e71e04a0ce5f75b7ca3203efd8e9c9b03c948a76c7f4bca807539915b5cfc#npm:4.0.0-beta.8"] ], @@ -15621,7 +15621,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["eslint", "npm:6.8.0"], ["lodash", "npm:4.17.20"], ["tslib", "npm:1.13.0"], - ["typescript", "patch:typescript@npm%3A4.3.0-beta#~builtin::version=4.3.0-beta&hash=ea7f47"] + ["typescript", "patch:typescript@npm%3A4.3.2#~builtin::version=4.3.2&hash=5e23b5"] ], "packagePeers": [ "@types/eslint", @@ -15649,7 +15649,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["eslint", "npm:6.8.0"], ["lodash", "npm:4.17.20"], ["tslib", "npm:1.13.0"], - ["typescript", "patch:typescript@npm%3A4.3.0-beta#~builtin::version=4.3.0-beta&hash=ea7f47"] + ["typescript", "patch:typescript@npm%3A4.3.2#~builtin::version=4.3.2&hash=5e23b5"] ], "packagePeers": [ "@types/eslint", @@ -15675,7 +15675,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["eslint", "npm:6.8.0"], ["lodash", "npm:4.17.20"], ["tslib", "npm:1.13.0"], - ["typescript", "patch:typescript@npm%3A4.3.0-beta#~builtin::version=4.3.0-beta&hash=ea7f47"] + ["typescript", "patch:typescript@npm%3A4.3.2#~builtin::version=4.3.2&hash=5e23b5"] ], "linkType": "SOFT", }] @@ -23225,7 +23225,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["schema-utils", "npm:1.0.0"], ["semver", "npm:5.7.1"], ["tapable", "npm:1.1.3"], - ["typescript", "patch:typescript@npm%3A4.3.0-beta#~builtin::version=4.3.0-beta&hash=ea7f47"], + ["typescript", "patch:typescript@npm%3A4.3.2#~builtin::version=4.3.2&hash=5e23b5"], ["vue-template-compiler", null], ["webpack", "virtual:e04a2594c769771b96db34e7a92a8a3af1c98ae86dce662589a5c5d5209e16875506f8cb5f4c2230a2b2ae06335b14466352c4ed470d39edf9edb6c515984525#npm:5.1.1"] ], @@ -23884,7 +23884,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["strict-ui", "npm:0.1.3"], ["subscriptions-transport-ws", "virtual:e721af34745e2aded5d4d499d50f62b576dd2080eb1f2bb52977c4bfa58f87cba61c1a822a17998b163819d9d9ffb45f4e1cfaad85154aa3bbe0834010be88eb#npm:0.9.16"], ["theme-ui", "npm:0.4.0-highlight.0"], - ["typescript", "patch:typescript@npm%3A3.9.5#~builtin::version=3.9.5&hash=ea7f47"], + ["typescript", "patch:typescript@npm%3A3.9.5#~builtin::version=3.9.5&hash=5e23b5"], ["urql", "virtual:e721af34745e2aded5d4d499d50f62b576dd2080eb1f2bb52977c4bfa58f87cba61c1a822a17998b163819d9d9ffb45f4e1cfaad85154aa3bbe0834010be88eb#npm:1.9.8"], ["yup", "npm:0.29.1"] ], @@ -30892,7 +30892,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["react-dom", "virtual:118b26a6cee620b5aa3e7e8d8b8e34cd9e486f75b92701001168da9be550fadd8c9d9b12643c642e2d528c2624fd8fe7e128eec9d715340efac44400432a0e0c#npm:16.13.1"], ["react-lifecycles-compat", "npm:3.0.4"], ["shallowequal", "npm:1.1.0"], - ["typescript", "patch:typescript@npm%3A3.9.5#~builtin::version=3.9.5&hash=ea7f47"] + ["typescript", "patch:typescript@npm%3A3.9.5#~builtin::version=3.9.5&hash=5e23b5"] ], "packagePeers": [ "@types/react-dom", @@ -39578,7 +39578,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["loader-utils", "npm:1.4.0"], ["micromatch", "npm:4.0.2"], ["semver", "npm:6.3.0"], - ["typescript", "patch:typescript@npm%3A4.3.0-beta#~builtin::version=4.3.0-beta&hash=ea7f47"] + ["typescript", "patch:typescript@npm%3A4.3.2#~builtin::version=4.3.2&hash=5e23b5"] ], "packagePeers": [ "@types/typescript", @@ -39652,7 +39652,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["tsutils", "virtual:5f54d2b1a1f006985d0fdd9ec5559662aecdedf927326cad5264ae047905157bfa09fd75849ec664b5eb3a2d1ec3e16961d252b89cc360af383c9a7c3760e002#npm:3.17.1"], ["@types/typescript", null], ["tslib", "npm:1.13.0"], - ["typescript", "patch:typescript@npm%3A3.9.5#~builtin::version=3.9.5&hash=ea7f47"] + ["typescript", "patch:typescript@npm%3A3.9.5#~builtin::version=3.9.5&hash=5e23b5"] ], "packagePeers": [ "@types/typescript", @@ -39666,7 +39666,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["tsutils", "virtual:6bf47b2ad271104a08c6662f1f96de96ef03c78d95922079272ee031fd5d0421b9b0b316dde114b15e69129623793a188cc48c1b4e5db399597b2a456377dcfd#npm:3.17.1"], ["@types/typescript", null], ["tslib", "npm:1.13.0"], - ["typescript", "patch:typescript@npm%3A4.3.0-beta#~builtin::version=4.3.0-beta&hash=ea7f47"] + ["typescript", "patch:typescript@npm%3A4.3.2#~builtin::version=4.3.2&hash=5e23b5"] ], "packagePeers": [ "@types/typescript", @@ -39904,7 +39904,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["typedoc-default-themes", "npm:0.8.0-0"], ["typedoc-neo-theme", "npm:1.0.7"], ["typedoc-plugin-yarn", "portal:./typedoc-plugin-yarn::locator=%40yarnpkg%2Fgatsby%40workspace%3Apackages%2Fgatsby"], - ["typescript", "patch:typescript@npm%3A4.3.0-beta#~builtin::version=4.3.0-beta&hash=ea7f47"] + ["typescript", "patch:typescript@npm%3A4.3.2#~builtin::version=4.3.2&hash=5e23b5"] ], "packagePeers": [ "@strictsoftware/typedoc-plugin-monorepo", @@ -39933,7 +39933,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["typedoc-default-themes", "npm:0.8.0-0"], ["typedoc-neo-theme", null], ["typedoc-plugin-yarn", "portal:./typedoc-plugin-yarn::locator=%40yarnpkg%2Fgatsby%40workspace%3Apackages%2Fgatsby"], - ["typescript", "patch:typescript@npm%3A3.9.5#~builtin::version=3.9.5&hash=ea7f47"] + ["typescript", "patch:typescript@npm%3A3.9.5#~builtin::version=3.9.5&hash=5e23b5"] ], "packagePeers": [ "@strictsoftware/typedoc-plugin-monorepo", @@ -39961,7 +39961,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["typedoc-default-themes", "npm:0.7.2"], ["typedoc-neo-theme", "npm:1.0.7"], ["typedoc-plugin-yarn", null], - ["typescript", "patch:typescript@npm%3A3.7.5#~builtin::version=3.7.5&hash=ea7f47"] + ["typescript", "patch:typescript@npm%3A3.7.5#~builtin::version=3.7.5&hash=5e23b5"] ], "packagePeers": [ "@strictsoftware/typedoc-plugin-monorepo", @@ -40011,30 +40011,30 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { "packageDependencies": [ ["typedoc-plugin-yarn", "portal:./typedoc-plugin-yarn::locator=%40yarnpkg%2Fgatsby%40workspace%3Apackages%2Fgatsby"], ["typedoc", "virtual:258c95d7dd1da51c9c624f238593e0bc1c34b7bd8de0b85fefd9552f2220a4555cad458eb72d96f0c7b341784726b6a8e9c8b4e838a9d27aac3796b29de01981#npm:0.17.0-3"], - ["typescript", "patch:typescript@npm%3A3.9.5#~builtin::version=3.9.5&hash=ea7f47"] + ["typescript", "patch:typescript@npm%3A3.9.5#~builtin::version=3.9.5&hash=5e23b5"] ], "linkType": "SOFT", }] ]], ["typescript", [ - ["patch:typescript@npm%3A3.7.5#~builtin::version=3.7.5&hash=ea7f47", { - "packageLocation": "./.yarn/cache/typescript-patch-1bfd6f21e9-fb62f24bfd.zip/node_modules/typescript/", + ["patch:typescript@npm%3A3.7.5#~builtin::version=3.7.5&hash=5e23b5", { + "packageLocation": "./.yarn/cache/typescript-patch-27393e5d9e-fb62f24bfd.zip/node_modules/typescript/", "packageDependencies": [ - ["typescript", "patch:typescript@npm%3A3.7.5#~builtin::version=3.7.5&hash=ea7f47"] + ["typescript", "patch:typescript@npm%3A3.7.5#~builtin::version=3.7.5&hash=5e23b5"] ], "linkType": "HARD", }], - ["patch:typescript@npm%3A3.9.5#~builtin::version=3.9.5&hash=ea7f47", { - "packageLocation": "./.yarn/cache/typescript-patch-c1e370d24c-ac6b67d951.zip/node_modules/typescript/", + ["patch:typescript@npm%3A3.9.5#~builtin::version=3.9.5&hash=5e23b5", { + "packageLocation": "./.yarn/cache/typescript-patch-e8a55c01a3-ac6b67d951.zip/node_modules/typescript/", "packageDependencies": [ - ["typescript", "patch:typescript@npm%3A3.9.5#~builtin::version=3.9.5&hash=ea7f47"] + ["typescript", "patch:typescript@npm%3A3.9.5#~builtin::version=3.9.5&hash=5e23b5"] ], "linkType": "HARD", }], - ["patch:typescript@npm%3A4.3.0-beta#~builtin::version=4.3.0-beta&hash=ea7f47", { - "packageLocation": "./.yarn/cache/typescript-patch-4079614479-ca7a161bc6.zip/node_modules/typescript/", + ["patch:typescript@npm%3A4.3.2#~builtin::version=4.3.2&hash=5e23b5", { + "packageLocation": "./.yarn/cache/typescript-patch-4ee61fd2fa-3d3dec06ba.zip/node_modules/typescript/", "packageDependencies": [ - ["typescript", "patch:typescript@npm%3A4.3.0-beta#~builtin::version=4.3.0-beta&hash=ea7f47"] + ["typescript", "patch:typescript@npm%3A4.3.2#~builtin::version=4.3.2&hash=5e23b5"] ], "linkType": "HARD", }] @@ -41162,7 +41162,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["@yarnpkg/pnpify", "virtual:c44c4b6360dc34d25da6d32e39622e7e40f36f37b99dc66b6ebbd615fdd49465f496bf10f81b6fa5f71b95443fda61174ad51d2799fc7ca433af9a9666cd0f37#workspace:packages/yarnpkg-pnpify"], ["ts-loader", "virtual:e04a2594c769771b96db34e7a92a8a3af1c98ae86dce662589a5c5d5209e16875506f8cb5f4c2230a2b2ae06335b14466352c4ed470d39edf9edb6c515984525#npm:7.0.5"], ["tslib", "npm:1.13.0"], - ["typescript", "patch:typescript@npm%3A4.3.0-beta#~builtin::version=4.3.0-beta&hash=ea7f47"], + ["typescript", "patch:typescript@npm%3A4.3.2#~builtin::version=4.3.2&hash=5e23b5"], ["vsce", "npm:1.85.1"], ["webpack", "virtual:4bb0e72ae00ec402a28e80560124ee13357b1a5221665b7175877ddc6b8b2b98eebe4584a111245801ecf7cecb9de577d076505c0dbcf9292aaff35440a2302f#npm:5.1.1"], ["webpack-cli", "virtual:4bb0e72ae00ec402a28e80560124ee13357b1a5221665b7175877ddc6b8b2b98eebe4584a111245801ecf7cecb9de577d076505c0dbcf9292aaff35440a2302f#npm:4.0.0-beta.8"] diff --git a/.yarn/cache/typescript-npm-4.3.0-beta-d5555c96df-c165f915ad.zip b/.yarn/cache/typescript-npm-4.3.0-beta-d5555c96df-c165f915ad.zip deleted file mode 100644 index 02efa592a7fa..000000000000 Binary files a/.yarn/cache/typescript-npm-4.3.0-beta-d5555c96df-c165f915ad.zip and /dev/null differ diff --git a/.yarn/cache/typescript-npm-4.3.2-d108b26f78-c2a86fa03c.zip b/.yarn/cache/typescript-npm-4.3.2-d108b26f78-c2a86fa03c.zip new file mode 100644 index 000000000000..aa820d056421 Binary files /dev/null and b/.yarn/cache/typescript-npm-4.3.2-d108b26f78-c2a86fa03c.zip differ diff --git a/.yarn/cache/typescript-patch-1bfd6f21e9-fb62f24bfd.zip b/.yarn/cache/typescript-patch-27393e5d9e-fb62f24bfd.zip similarity index 100% rename from .yarn/cache/typescript-patch-1bfd6f21e9-fb62f24bfd.zip rename to .yarn/cache/typescript-patch-27393e5d9e-fb62f24bfd.zip diff --git a/.yarn/cache/typescript-patch-4079614479-ca7a161bc6.zip b/.yarn/cache/typescript-patch-4079614479-ca7a161bc6.zip deleted file mode 100644 index 174f714ac9ba..000000000000 Binary files a/.yarn/cache/typescript-patch-4079614479-ca7a161bc6.zip and /dev/null differ diff --git a/.yarn/cache/typescript-patch-4ee61fd2fa-3d3dec06ba.zip b/.yarn/cache/typescript-patch-4ee61fd2fa-3d3dec06ba.zip new file mode 100644 index 000000000000..29061995f0a0 Binary files /dev/null and b/.yarn/cache/typescript-patch-4ee61fd2fa-3d3dec06ba.zip differ diff --git a/.yarn/cache/typescript-patch-c1e370d24c-ac6b67d951.zip b/.yarn/cache/typescript-patch-e8a55c01a3-ac6b67d951.zip similarity index 100% rename from .yarn/cache/typescript-patch-c1e370d24c-ac6b67d951.zip rename to .yarn/cache/typescript-patch-e8a55c01a3-ac6b67d951.zip diff --git a/.yarn/versions/e3086e76.yml b/.yarn/versions/e3086e76.yml new file mode 100644 index 000000000000..554296cf4517 --- /dev/null +++ b/.yarn/versions/e3086e76.yml @@ -0,0 +1,26 @@ +releases: + "@yarnpkg/cli": patch + "@yarnpkg/plugin-compat": minor + +declined: + - "@yarnpkg/plugin-constraints" + - "@yarnpkg/plugin-dlx" + - "@yarnpkg/plugin-essentials" + - "@yarnpkg/plugin-exec" + - "@yarnpkg/plugin-init" + - "@yarnpkg/plugin-interactive-tools" + - "@yarnpkg/plugin-node-modules" + - "@yarnpkg/plugin-npm-cli" + - "@yarnpkg/plugin-pack" + - "@yarnpkg/plugin-patch" + - "@yarnpkg/plugin-pnp" + - "@yarnpkg/plugin-stage" + - "@yarnpkg/plugin-typescript" + - "@yarnpkg/plugin-version" + - "@yarnpkg/plugin-workspace-tools" + - vscode-zipfs + - "@yarnpkg/builder" + - "@yarnpkg/core" + - "@yarnpkg/doctor" + - "@yarnpkg/pnp" + - "@yarnpkg/pnpify" diff --git a/package.json b/package.json index b3af60f4b699..d790f120dc09 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,7 @@ "jest-junit": "^10.0.0", "micromatch": "^4.0.2", "tslib": "^1.13.0", - "typescript": "beta" + "typescript": "^4.3.2" }, "resolutions": { "yoga-layout-prebuilt": "patch:yoga-layout-prebuilt@1.10.0#./.yarn/patches/yoga-layout-prebuilt.patch" diff --git a/packages/gatsby/package.json b/packages/gatsby/package.json index 661b14dde1a0..7faff958997d 100644 --- a/packages/gatsby/package.json +++ b/packages/gatsby/package.json @@ -78,7 +78,7 @@ "typedoc": "next", "typedoc-neo-theme": "^1.0.7", "typedoc-plugin-yarn": "portal:./typedoc-plugin-yarn", - "typescript": "beta", + "typescript": "^4.3.2", "unescape-html": "^1.1.0", "unfetch": "^4.1.0", "unified": "^7.1.0", diff --git a/packages/plugin-compat/extra/typescript/gen-typescript-patch.js b/packages/plugin-compat/extra/typescript/gen-typescript-patch.js index fc8d71afe9be..69e79cdcba7d 100644 --- a/packages/plugin-compat/extra/typescript/gen-typescript-patch.js +++ b/packages/plugin-compat/extra/typescript/gen-typescript-patch.js @@ -58,7 +58,12 @@ const SLICES = [{ from: `320a959`, to: `508e98b`, onto: `f9b35cd`, - range: `>=4.3`, + range: `>=4.3 <4.3.1-rc`, +}, { + from: `530aad19e4ac19d35cb6b200168c91ce86cb0050`, + to: `5d8917857cf32d06824f97320c878f08a532e2d0`, + onto: `28e3e6ff2f49f1dbf06d31809ec73dbe42f1aa63`, + range: `>=4.3.1-rc`, }]; async function fetch(url) { @@ -183,6 +188,7 @@ async function cloneRepository() { await execFile(`git`, [`fetch`, `origin`], TS_REPO_SPAWN); await execFile(`git`, [`fetch`, `upstream`], TS_REPO_SPAWN); + await execFile(`git`, [`fetch`, `upstream2`], TS_REPO_SPAWN); } async function resetGit(hash) { diff --git a/packages/plugin-compat/extra/typescript/patch-0e534e9202b290be0c54938a4711a8e2.diff b/packages/plugin-compat/extra/typescript/patch-0e534e9202b290be0c54938a4711a8e2.diff new file mode 100644 index 000000000000..535cb00027dc --- /dev/null +++ b/packages/plugin-compat/extra/typescript/patch-0e534e9202b290be0c54938a4711a8e2.diff @@ -0,0 +1,2872 @@ +diff --git a/lib/tsc.js b/lib/tsc.js +index 83f54758a..75f5bd1f3 100644 +semver exclusivity >=4.3.1-rc +--- a/lib/tsc.js ++++ b/lib/tsc.js +@@ -4692,6 +4692,9 @@ var ts; + : new Buffer(input, encoding); + } + function isFileSystemCaseSensitive() { ++ if (process.versions.pnp) { ++ return true; ++ } + if (platform === "win32" || platform === "win64") { + return false; + } +@@ -32586,21 +32589,52 @@ 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) { ++ var pnpapi = getPnpApi(currentDirectory); ++ if (!pnpapi) { ++ return []; ++ } ++ currentDirectory = ts.sys.resolvePath(currentDirectory); ++ var currentPackage = pnpapi.findPackageLocator(currentDirectory + "/"); ++ if (!currentPackage) { ++ return []; ++ } ++ var packageDependencies = pnpapi.getPackageInformation(currentPackage).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; ++ } ++ ts.getPnpTypeRoots = getPnpTypeRoots; ++ var typesPackagePrefix = "@types/"; ++ function getDefaultTypeRoots(currentDirectory, host) { ++ var nmTypes = getNodeModulesTypeRoots(currentDirectory, host); ++ var pnpTypes = getPnpTypeRoots(currentDirectory); ++ if (nmTypes.length > 0 || pnpTypes.length > 0) { ++ return __spreadArray(__spreadArray([], nmTypes), pnpTypes); ++ } ++ } + function resolveTypeReferenceDirective(typeReferenceDirectiveName, containingFile, options, host, redirectedReference, cache) { + var traceEnabled = isTraceEnabled(options, host); + if (redirectedReference) { +@@ -32707,7 +32741,9 @@ var ts; + } + var result_4; + if (!ts.isExternalModuleNameRelative(typeReferenceDirectiveName)) { +- var searchResult = loadModuleFromNearestNodeModulesDirectory(Extensions.DtsOnly, typeReferenceDirectiveName, initialLocationForSecondaryLookup, moduleResolutionState, undefined, undefined); ++ var searchResult = getPnpApi(initialLocationForSecondaryLookup) ++ ? tryLoadModuleUsingPnpResolution(Extensions.DtsOnly, typeReferenceDirectiveName, initialLocationForSecondaryLookup, moduleResolutionState) ++ : loadModuleFromNearestNodeModulesDirectory(Extensions.DtsOnly, typeReferenceDirectiveName, initialLocationForSecondaryLookup, moduleResolutionState, undefined, undefined); + result_4 = searchResult && searchResult.value; + } + else { +@@ -33146,9 +33182,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 = getPnpApi(containingDirectory) ++ ? 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); +@@ -33459,6 +33498,14 @@ var ts; + } + function loadModuleFromSpecificNodeModulesDirectory(extensions, moduleName, nodeModulesDirectory, nodeModulesDirectoryExists, state) { + var candidate = ts.normalizePath(ts.combinePaths(nodeModulesDirectory, moduleName)); ++ return loadModuleFromSpecificNodeModulesDirectoryImpl(extensions, moduleName, nodeModulesDirectory, nodeModulesDirectoryExists, state, candidate, undefined, undefined); ++ } ++ function loadModuleFromPnpResolution(extensions, packageDirectory, rest, state) { ++ var candidate = ts.normalizePath(ts.combinePaths(packageDirectory, rest)); ++ return loadModuleFromSpecificNodeModulesDirectoryImpl(extensions, undefined, undefined, true, state, candidate, rest, packageDirectory); ++ } ++ function loadModuleFromSpecificNodeModulesDirectoryImpl(extensions, moduleName, nodeModulesDirectory, nodeModulesDirectoryExists, state, candidate, rest, packageDirectory) { ++ var _a; + var packageInfo = getPackageJsonInfo(candidate, !nodeModulesDirectoryExists, state); + if (packageInfo) { + var fromFile = loadModuleFromFile(extensions, candidate, !nodeModulesDirectoryExists, state); +@@ -33473,9 +33520,12 @@ var ts; + loadNodeModuleFromDirectoryWorker(extensions, candidate, onlyRecordFailures, state, packageInfo && packageInfo.packageJsonContent, packageInfo && packageInfo.versionPaths); + return withPackageId(packageInfo, pathAndExtension); + }; +- var _a = parsePackageName(moduleName), packageName = _a.packageName, rest = _a.rest; ++ var packageName; ++ if (rest === undefined) ++ (_a = parsePackageName(moduleName), packageName = _a.packageName, rest = _a.rest); + if (rest !== "") { +- var packageDirectory = ts.combinePaths(nodeModulesDirectory, packageName); ++ if (packageDirectory === undefined) ++ packageDirectory = ts.combinePaths(nodeModulesDirectory, packageName); + packageInfo = getPackageJsonInfo(packageDirectory, !nodeModulesDirectoryExists, state); + if (packageInfo && packageInfo.versionPaths) { + if (state.traceEnabled) { +@@ -33612,6 +33662,47 @@ var ts; + function toSearchResult(value) { + return value !== undefined ? { value: value } : undefined; + } ++ function getPnpApi(path) { ++ var findPnpApi = require("module").findPnpApi; ++ if (findPnpApi === undefined) { ++ return undefined; ++ } ++ return findPnpApi(path + "/"); ++ } ++ function loadPnpPackageResolution(packageName, containingDirectory) { ++ try { ++ var resolution = getPnpApi(containingDirectory).resolveToUnqualified(packageName, containingDirectory + "/", { considerBuiltins: false }); ++ return ts.normalizeSlashes(resolution); ++ } ++ 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 ++ ? loadModuleFromPnpResolution(extensions, packageResolution, rest, state) ++ : undefined; ++ var resolved; ++ if (packageFullResolution) { ++ resolved = packageFullResolution; ++ } ++ else if (extensions === Extensions.TypeScript || extensions === Extensions.DtsOnly) { ++ var typePackageResolution = loadPnpTypePackageResolution(packageName, containingDirectory); ++ var typePackageFullResolution = typePackageResolution ++ ? loadModuleFromPnpResolution(Extensions.DtsOnly, typePackageResolution, rest, state) ++ : undefined; ++ if (typePackageFullResolution) { ++ resolved = typePackageFullResolution; ++ } ++ } ++ if (resolved) { ++ return toSearchResult(resolved); ++ } ++ } + })(ts || (ts = {})); + var ts; + (function (ts) { +@@ -89033,6 +89124,7 @@ var ts; + ConfigFileProgramReloadLevel[ConfigFileProgramReloadLevel["None"] = 0] = "None"; + ConfigFileProgramReloadLevel[ConfigFileProgramReloadLevel["Partial"] = 1] = "Partial"; + ConfigFileProgramReloadLevel[ConfigFileProgramReloadLevel["Full"] = 2] = "Full"; ++ ConfigFileProgramReloadLevel[ConfigFileProgramReloadLevel["Resolutions"] = 3] = "Resolutions"; + })(ConfigFileProgramReloadLevel = ts.ConfigFileProgramReloadLevel || (ts.ConfigFileProgramReloadLevel = {})); + function updateSharedExtendedConfigFileWatcher(projectPath, options, extendedConfigFilesMap, createExtendedConfigFileWatch, toPath) { + var _a; +@@ -94524,6 +94616,25 @@ var ts; + return undefined; + } + var parts = getNodeModulePathParts(path); ++ var packageName; ++ if (!parts && typeof process.versions.pnp !== "undefined") { ++ var pnpApi = require("pnpapi"); ++ var locator = pnpApi.findPackageLocator(path); ++ if (locator !== null) { ++ var sourceLocator = pnpApi.findPackageLocator(sourceDirectory + "/"); ++ if (locator === sourceLocator) { ++ return undefined; ++ } ++ var information = pnpApi.getPackageInformation(locator); ++ packageName = locator.name; ++ parts = { ++ topLevelNodeModulesIndex: undefined, ++ topLevelPackageNameIndex: undefined, ++ packageRootIndex: information.packageLocation.length - 1, ++ fileNameIndex: path.lastIndexOf("/"), ++ }; ++ } ++ } + if (!parts) { + return undefined; + } +@@ -94551,14 +94662,18 @@ var ts; + if (isRedirect && !isPackageRootPath) { + return undefined; + } +- var globalTypingsCacheLocation = host.getGlobalTypingsCacheLocation && host.getGlobalTypingsCacheLocation(); +- var pathToTopLevelNodeModules = getCanonicalFileName(moduleSpecifier.substring(0, parts.topLevelNodeModulesIndex)); +- if (!(ts.startsWith(sourceDirectory, pathToTopLevelNodeModules) || globalTypingsCacheLocation && ts.startsWith(getCanonicalFileName(globalTypingsCacheLocation), pathToTopLevelNodeModules))) { +- return undefined; ++ if (typeof process.versions.pnp === "undefined") { ++ var globalTypingsCacheLocation = host.getGlobalTypingsCacheLocation && host.getGlobalTypingsCacheLocation(); ++ var pathToTopLevelNodeModules = getCanonicalFileName(moduleSpecifier.substring(0, parts.topLevelNodeModulesIndex)); ++ if (!(ts.startsWith(sourceDirectory, pathToTopLevelNodeModules) || globalTypingsCacheLocation && ts.startsWith(getCanonicalFileName(globalTypingsCacheLocation), pathToTopLevelNodeModules))) { ++ return undefined; ++ } + } +- var nodeModulesDirectoryName = moduleSpecifier.substring(parts.topLevelPackageNameIndex + 1); +- var packageName = ts.getPackageNameFromTypesPackageName(nodeModulesDirectoryName); +- return ts.getEmitModuleResolutionKind(options) !== ts.ModuleResolutionKind.NodeJs && packageName === nodeModulesDirectoryName ? undefined : packageName; ++ var nodeModulesDirectoryName = typeof packageName !== "undefined" ++ ? packageName + moduleSpecifier.substring(parts.packageRootIndex) ++ : moduleSpecifier.substring(parts.topLevelPackageNameIndex + 1); ++ var packageNameFromPath = ts.getPackageNameFromTypesPackageName(nodeModulesDirectoryName); ++ return ts.getEmitModuleResolutionKind(options) !== ts.ModuleResolutionKind.NodeJs && packageNameFromPath === nodeModulesDirectoryName ? undefined : packageNameFromPath; + function tryDirectoryWithPackageJson(packageRootIndex) { + var packageRootPath = path.substring(0, packageRootIndex); + var packageJsonPath = ts.combinePaths(packageRootPath, "package.json"); +@@ -95280,6 +95395,10 @@ var ts; + if (configFileName) { + configFileWatcher = watchFile(configFileName, scheduleProgramReload, ts.PollingInterval.High, watchOptions, ts.WatchType.ConfigFile); + } ++ var pnpFileWatcher; ++ if (typeof process.versions.pnp !== "undefined") { ++ pnpFileWatcher = watchFile(require.resolve("pnpapi"), scheduleResolutionReload, ts.PollingInterval.High, watchOptions, ts.WatchType.ConfigFile); ++ } + var compilerHost = ts.createCompilerHostFromProgramHost(host, function () { return compilerOptions; }, directoryStructureHost); + ts.setGetSourceFileAsHashVersioned(compilerHost, host); + var getNewSourceFile = compilerHost.getSourceFile; +@@ -95351,6 +95470,10 @@ var ts; + configFileWatcher.close(); + configFileWatcher = undefined; + } ++ if (pnpFileWatcher) { ++ pnpFileWatcher.close(); ++ pnpFileWatcher = undefined; ++ } + extendedConfigCache === null || extendedConfigCache === void 0 ? void 0 : extendedConfigCache.clear(); + extendedConfigCache = undefined; + if (sharedExtendedConfigFileWatchers) { +@@ -95383,7 +95506,8 @@ var ts; + function getCurrentProgram() { + return builderProgram && builderProgram.getProgramOrUndefined(); + } +- function synchronizeProgram() { ++ function synchronizeProgram(forceAllFilesAsInvalidated) { ++ if (forceAllFilesAsInvalidated === void 0) { forceAllFilesAsInvalidated = false; } + writeLog("Synchronizing program"); + clearInvalidateResolutionsOfFailedLookupLocations(); + var program = getCurrentBuilderProgram(); +@@ -95393,7 +95517,7 @@ var ts; + resolutionCache.clear(); + } + } +- var hasInvalidatedResolution = resolutionCache.createHasInvalidatedResolution(userProvidedResolution); ++ var hasInvalidatedResolution = resolutionCache.createHasInvalidatedResolution(userProvidedResolution || forceAllFilesAsInvalidated); + if (ts.isProgramUptoDate(getCurrentProgram(), rootFileNames, compilerOptions, getSourceVersion, fileExists, hasInvalidatedResolution, hasChangedAutomaticTypeDirectiveNames, getParsedCommandLine, projectReferences)) { + if (hasChangedConfigFileParsingErrors) { + builderProgram = createProgram(undefined, undefined, compilerHost, builderProgram, configFileParsingDiagnostics, projectReferences); +@@ -95571,6 +95695,12 @@ var ts; + reloadLevel = ts.ConfigFileProgramReloadLevel.Full; + scheduleProgramUpdate(); + } ++ function scheduleResolutionReload() { ++ writeLog("Clearing resolutions"); ++ resolutionCache.clear(); ++ reloadLevel = ts.ConfigFileProgramReloadLevel.Resolutions; ++ scheduleProgramUpdate(); ++ } + function updateProgramWithWatchStatus() { + timerToUpdateProgram = undefined; + reportWatchDiagnostic(ts.Diagnostics.File_change_detected_Starting_incremental_compilation); +@@ -95586,6 +95716,10 @@ var ts; + ts.perfLogger.logStartUpdateProgram("FullConfigReload"); + reloadConfigFile(); + break; ++ case ts.ConfigFileProgramReloadLevel.Resolutions: ++ ts.perfLogger.logStartUpdateProgram("SynchronizeProgramWithResolutions"); ++ synchronizeProgram(true); ++ break; + default: + ts.perfLogger.logStartUpdateProgram("SynchronizeProgram"); + synchronizeProgram(); +diff --git a/lib/tsserver.js b/lib/tsserver.js +index 58028943d..ad0cf1001 100644 +semver exclusivity >=4.3.1-rc +--- a/lib/tsserver.js ++++ b/lib/tsserver.js +@@ -7338,6 +7338,11 @@ var ts; + : new Buffer(input, encoding); + } + function isFileSystemCaseSensitive() { ++ // The PnP runtime is always case-sensitive ++ // @ts-ignore ++ if (process.versions.pnp) { ++ return true; ++ } + // win32\win64 are case insensitive platforms + if (platform === "win32" || platform === "win64") { + return false; +@@ -40003,24 +40008,56 @@ 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) { ++ var pnpapi = getPnpApi(currentDirectory); ++ if (!pnpapi) { ++ return []; ++ } ++ // Some TS consumers pass relative paths that aren't normalized ++ currentDirectory = ts.sys.resolvePath(currentDirectory); ++ var currentPackage = pnpapi.findPackageLocator(currentDirectory + "/"); ++ if (!currentPackage) { ++ return []; ++ } ++ var packageDependencies = pnpapi.getPackageInformation(currentPackage).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; ++ } ++ ts.getPnpTypeRoots = getPnpTypeRoots; ++ var typesPackagePrefix = "@types/"; ++ function getDefaultTypeRoots(currentDirectory, host) { ++ var nmTypes = getNodeModulesTypeRoots(currentDirectory, host); ++ var pnpTypes = getPnpTypeRoots(currentDirectory); ++ if (nmTypes.length > 0 || pnpTypes.length > 0) { ++ return __spreadArray(__spreadArray([], 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 +@@ -40134,7 +40171,9 @@ var ts; + } + var result_4; + if (!ts.isExternalModuleNameRelative(typeReferenceDirectiveName)) { +- var searchResult = loadModuleFromNearestNodeModulesDirectory(Extensions.DtsOnly, typeReferenceDirectiveName, initialLocationForSecondaryLookup, moduleResolutionState, /*cache*/ undefined, /*redirectedReference*/ undefined); ++ var searchResult = getPnpApi(initialLocationForSecondaryLookup) ++ ? tryLoadModuleUsingPnpResolution(Extensions.DtsOnly, typeReferenceDirectiveName, initialLocationForSecondaryLookup, moduleResolutionState) ++ : loadModuleFromNearestNodeModulesDirectory(Extensions.DtsOnly, typeReferenceDirectiveName, initialLocationForSecondaryLookup, moduleResolutionState, /*cache*/ undefined, /*redirectedReference*/ undefined); + result_4 = searchResult && searchResult.value; + } + else { +@@ -40685,9 +40724,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 = getPnpApi(containingDirectory) ++ ? 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); +@@ -41032,6 +41074,14 @@ var ts; + } + function loadModuleFromSpecificNodeModulesDirectory(extensions, moduleName, nodeModulesDirectory, nodeModulesDirectoryExists, state) { + var candidate = ts.normalizePath(ts.combinePaths(nodeModulesDirectory, moduleName)); ++ return loadModuleFromSpecificNodeModulesDirectoryImpl(extensions, moduleName, nodeModulesDirectory, nodeModulesDirectoryExists, state, candidate, undefined, undefined); ++ } ++ function loadModuleFromPnpResolution(extensions, packageDirectory, rest, state) { ++ var candidate = ts.normalizePath(ts.combinePaths(packageDirectory, rest)); ++ return loadModuleFromSpecificNodeModulesDirectoryImpl(extensions, undefined, undefined, true, state, candidate, rest, packageDirectory); ++ } ++ function loadModuleFromSpecificNodeModulesDirectoryImpl(extensions, moduleName, nodeModulesDirectory, nodeModulesDirectoryExists, state, candidate, rest, packageDirectory) { ++ var _a; + // First look for a nested package.json, as in `node_modules/foo/bar/package.json`. + var packageInfo = getPackageJsonInfo(candidate, !nodeModulesDirectoryExists, state); + if (packageInfo) { +@@ -41047,9 +41097,12 @@ var ts; + loadNodeModuleFromDirectoryWorker(extensions, candidate, onlyRecordFailures, state, packageInfo && packageInfo.packageJsonContent, packageInfo && packageInfo.versionPaths); + return withPackageId(packageInfo, pathAndExtension); + }; +- var _a = parsePackageName(moduleName), packageName = _a.packageName, rest = _a.rest; ++ var packageName; ++ if (rest === undefined) ++ (_a = parsePackageName(moduleName), packageName = _a.packageName, rest = _a.rest); + if (rest !== "") { // If "rest" is empty, we just did this search above. +- var packageDirectory = ts.combinePaths(nodeModulesDirectory, packageName); ++ if (packageDirectory === undefined) ++ packageDirectory = ts.combinePaths(nodeModulesDirectory, packageName); + // Don't use a "types" or "main" from here because we're not loading the root, but a subdirectory -- just here for the packageId and path mappings. + packageInfo = getPackageJsonInfo(packageDirectory, !nodeModulesDirectoryExists, state); + if (packageInfo && packageInfo.versionPaths) { +@@ -41207,6 +41260,58 @@ 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 getPnpApi(path) { ++ var findPnpApi = require("module").findPnpApi; ++ if (findPnpApi === undefined) { ++ return undefined; ++ } ++ return findPnpApi(path + "/"); ++ } ++ function loadPnpPackageResolution(packageName, containingDirectory) { ++ try { ++ var resolution = getPnpApi(containingDirectory).resolveToUnqualified(packageName, containingDirectory + "/", { considerBuiltins: false }); ++ return ts.normalizeSlashes(resolution); ++ } ++ 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 ++ ? loadModuleFromPnpResolution(extensions, packageResolution, rest, state) ++ : undefined; ++ var resolved; ++ if (packageFullResolution) { ++ resolved = packageFullResolution; ++ } ++ else if (extensions === Extensions.TypeScript || extensions === Extensions.DtsOnly) { ++ var typePackageResolution = loadPnpTypePackageResolution(packageName, containingDirectory); ++ var typePackageFullResolution = typePackageResolution ++ ? loadModuleFromPnpResolution(Extensions.DtsOnly, typePackageResolution, rest, state) ++ : undefined; ++ if (typePackageFullResolution) { ++ resolved = typePackageFullResolution; ++ } ++ } ++ if (resolved) { ++ return toSearchResult(resolved); ++ } ++ } + })(ts || (ts = {})); + /* @internal */ + var ts; +@@ -108308,6 +108413,8 @@ var ts; + ConfigFileProgramReloadLevel[ConfigFileProgramReloadLevel["Partial"] = 1] = "Partial"; + /** Reload completely by re-reading contents of config file from disk and updating program */ + ConfigFileProgramReloadLevel[ConfigFileProgramReloadLevel["Full"] = 2] = "Full"; ++ /** Reload the resolutions */ ++ ConfigFileProgramReloadLevel[ConfigFileProgramReloadLevel["Resolutions"] = 3] = "Resolutions"; + })(ConfigFileProgramReloadLevel = ts.ConfigFileProgramReloadLevel || (ts.ConfigFileProgramReloadLevel = {})); + /** + * Updates the map of shared extended config file watches with a new set of extended config files from a base config file of the project +@@ -114695,6 +114802,29 @@ var ts; + return undefined; + } + var parts = getNodeModulePathParts(path); ++ var packageName; ++ if (!parts && typeof process.versions.pnp !== "undefined") { ++ var pnpApi = require("pnpapi"); ++ var locator = pnpApi.findPackageLocator(path); ++ // eslint-disable-next-line no-null/no-null ++ if (locator !== null) { ++ var sourceLocator = pnpApi.findPackageLocator(sourceDirectory + "/"); ++ // Don't use the package name when the imported file is inside ++ // the source directory (prefer a relative path instead) ++ if (locator === sourceLocator) { ++ return undefined; ++ } ++ var information = pnpApi.getPackageInformation(locator); ++ packageName = locator.name; ++ parts = { ++ topLevelNodeModulesIndex: undefined, ++ topLevelPackageNameIndex: undefined, ++ // The last character from packageLocation is the trailing "/", we want to point to it ++ packageRootIndex: information.packageLocation.length - 1, ++ fileNameIndex: path.lastIndexOf("/"), ++ }; ++ } ++ } + if (!parts) { + return undefined; + } +@@ -114725,18 +114855,24 @@ var ts; + if (isRedirect && !isPackageRootPath) { + return undefined; + } +- var globalTypingsCacheLocation = host.getGlobalTypingsCacheLocation && host.getGlobalTypingsCacheLocation(); +- // Get a path that's relative to node_modules or the importing file's path +- // if node_modules folder is in this folder or any of its parent folders, no need to keep it. +- var pathToTopLevelNodeModules = getCanonicalFileName(moduleSpecifier.substring(0, parts.topLevelNodeModulesIndex)); +- if (!(ts.startsWith(sourceDirectory, pathToTopLevelNodeModules) || globalTypingsCacheLocation && ts.startsWith(getCanonicalFileName(globalTypingsCacheLocation), pathToTopLevelNodeModules))) { +- return undefined; ++ // If PnP is enabled the node_modules entries we'll get will always be relevant even if they ++ // are located in a weird path apparently outside of the source directory ++ if (typeof process.versions.pnp === "undefined") { ++ var globalTypingsCacheLocation = host.getGlobalTypingsCacheLocation && host.getGlobalTypingsCacheLocation(); ++ // Get a path that's relative to node_modules or the importing file's path ++ // if node_modules folder is in this folder or any of its parent folders, no need to keep it. ++ var pathToTopLevelNodeModules = getCanonicalFileName(moduleSpecifier.substring(0, parts.topLevelNodeModulesIndex)); ++ if (!(ts.startsWith(sourceDirectory, pathToTopLevelNodeModules) || globalTypingsCacheLocation && ts.startsWith(getCanonicalFileName(globalTypingsCacheLocation), pathToTopLevelNodeModules))) { ++ return undefined; ++ } + } + // If the module was found in @types, get the actual Node package name +- var nodeModulesDirectoryName = moduleSpecifier.substring(parts.topLevelPackageNameIndex + 1); +- var packageName = ts.getPackageNameFromTypesPackageName(nodeModulesDirectoryName); ++ var nodeModulesDirectoryName = typeof packageName !== "undefined" ++ ? packageName + moduleSpecifier.substring(parts.packageRootIndex) ++ : moduleSpecifier.substring(parts.topLevelPackageNameIndex + 1); ++ var packageNameFromPath = ts.getPackageNameFromTypesPackageName(nodeModulesDirectoryName); + // For classic resolution, only allow importing from node_modules/@types, not other node_modules +- return ts.getEmitModuleResolutionKind(options) !== ts.ModuleResolutionKind.NodeJs && packageName === nodeModulesDirectoryName ? undefined : packageName; ++ return ts.getEmitModuleResolutionKind(options) !== ts.ModuleResolutionKind.NodeJs && packageNameFromPath === nodeModulesDirectoryName ? undefined : packageNameFromPath; + function tryDirectoryWithPackageJson(packageRootIndex) { + var packageRootPath = path.substring(0, packageRootIndex); + var packageJsonPath = ts.combinePaths(packageRootPath, "package.json"); +@@ -115524,6 +115660,10 @@ var ts; + if (configFileName) { + configFileWatcher = watchFile(configFileName, scheduleProgramReload, ts.PollingInterval.High, watchOptions, ts.WatchType.ConfigFile); + } ++ var pnpFileWatcher; ++ if (typeof process.versions.pnp !== "undefined") { ++ pnpFileWatcher = watchFile(require.resolve("pnpapi"), scheduleResolutionReload, ts.PollingInterval.High, watchOptions, ts.WatchType.ConfigFile); ++ } + var compilerHost = ts.createCompilerHostFromProgramHost(host, function () { return compilerOptions; }, directoryStructureHost); + ts.setGetSourceFileAsHashVersioned(compilerHost, host); + // Members for CompilerHost +@@ -115602,6 +115742,10 @@ var ts; + configFileWatcher.close(); + configFileWatcher = undefined; + } ++ if (pnpFileWatcher) { ++ pnpFileWatcher.close(); ++ pnpFileWatcher = undefined; ++ } + extendedConfigCache === null || extendedConfigCache === void 0 ? void 0 : extendedConfigCache.clear(); + extendedConfigCache = undefined; + if (sharedExtendedConfigFileWatchers) { +@@ -115634,7 +115778,8 @@ var ts; + function getCurrentProgram() { + return builderProgram && builderProgram.getProgramOrUndefined(); + } +- function synchronizeProgram() { ++ function synchronizeProgram(forceAllFilesAsInvalidated) { ++ if (forceAllFilesAsInvalidated === void 0) { forceAllFilesAsInvalidated = false; } + writeLog("Synchronizing program"); + clearInvalidateResolutionsOfFailedLookupLocations(); + var program = getCurrentBuilderProgram(); +@@ -115645,7 +115790,7 @@ var ts; + } + } + // All resolutions are invalid if user provided resolutions +- var hasInvalidatedResolution = resolutionCache.createHasInvalidatedResolution(userProvidedResolution); ++ var hasInvalidatedResolution = resolutionCache.createHasInvalidatedResolution(userProvidedResolution || forceAllFilesAsInvalidated); + if (ts.isProgramUptoDate(getCurrentProgram(), rootFileNames, compilerOptions, getSourceVersion, fileExists, hasInvalidatedResolution, hasChangedAutomaticTypeDirectiveNames, getParsedCommandLine, projectReferences)) { + if (hasChangedConfigFileParsingErrors) { + builderProgram = createProgram(/*rootNames*/ undefined, /*options*/ undefined, compilerHost, builderProgram, configFileParsingDiagnostics, projectReferences); +@@ -115845,6 +115990,12 @@ var ts; + reloadLevel = ts.ConfigFileProgramReloadLevel.Full; + scheduleProgramUpdate(); + } ++ function scheduleResolutionReload() { ++ writeLog("Clearing resolutions"); ++ resolutionCache.clear(); ++ reloadLevel = ts.ConfigFileProgramReloadLevel.Resolutions; ++ scheduleProgramUpdate(); ++ } + function updateProgramWithWatchStatus() { + timerToUpdateProgram = undefined; + reportWatchDiagnostic(ts.Diagnostics.File_change_detected_Starting_incremental_compilation); +@@ -115860,6 +116011,10 @@ var ts; + ts.perfLogger.logStartUpdateProgram("FullConfigReload"); + reloadConfigFile(); + break; ++ case ts.ConfigFileProgramReloadLevel.Resolutions: ++ ts.perfLogger.logStartUpdateProgram("SynchronizeProgramWithResolutions"); ++ synchronizeProgram(/*forceAllFilesAsInvalidated*/ true); ++ break; + default: + ts.perfLogger.logStartUpdateProgram("SynchronizeProgram"); + synchronizeProgram(); +@@ -121132,11 +121287,27 @@ var ts; + return hasImportablePath; + } + ts.isImportableFile = isImportableFile; ++ /** ++ * 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 getPnpApi(path) { ++ var findPnpApi = require("module").findPnpApi; ++ if (findPnpApi === undefined) { ++ return undefined; ++ } ++ return findPnpApi(path + "/"); ++ } + /** + * Don't include something from a `node_modules` that isn't actually reachable by a global import. + * A relative import to node_modules is usually a bad idea. + */ +- function isImportablePath(fromPath, toPath, getCanonicalFileName, globalCachePath) { ++ function isImportablePathNode(fromPath, toPath, getCanonicalFileName, globalCachePath) { + // If it's in a `node_modules` but is not reachable from here via a global import, don't bother. + var toNodeModules = ts.forEachAncestorDirectory(toPath, function (ancestor) { return ts.getBaseFileName(ancestor) === "node_modules" ? ancestor : undefined; }); + var toNodeModulesParent = toNodeModules && ts.getDirectoryPath(getCanonicalFileName(toNodeModules)); +@@ -121144,6 +121315,26 @@ var ts; + || ts.startsWith(getCanonicalFileName(fromPath), toNodeModulesParent) + || (!!globalCachePath && ts.startsWith(getCanonicalFileName(globalCachePath), toNodeModulesParent)); + } ++ function isImportablePathPnp(fromPath, toPath) { ++ var pnpApi = getPnpApi(fromPath); ++ var fromLocator = pnpApi.findPackageLocator(fromPath); ++ var toLocator = pnpApi.findPackageLocator(toPath); ++ // eslint-disable-next-line no-null/no-null ++ if (toLocator === null) { ++ return false; ++ } ++ var fromInfo = pnpApi.getPackageInformation(fromLocator); ++ var toReference = fromInfo.packageDependencies.get(toLocator.name); ++ return toReference === toLocator.reference; ++ } ++ function isImportablePath(fromPath, toPath, getCanonicalFileName, globalCachePath) { ++ if (getPnpApi(fromPath)) { ++ return isImportablePathPnp(fromPath, toPath); ++ } ++ else { ++ return isImportablePathNode(fromPath, toPath, getCanonicalFileName, globalCachePath); ++ } ++ } + // #endregion + })(ts || (ts = {})); + var ts; +@@ -122815,6 +123006,7 @@ var ts; + * This includes all files that are found in node_modules/moduleName/ with acceptable file extensions + */ + function getCompletionEntriesForNonRelativeModules(fragment, scriptPath, compilerOptions, host, typeChecker) { ++ var _a, _b; + var baseUrl = compilerOptions.baseUrl, paths = compilerOptions.paths; + var result = []; + var extensionOptions = getExtensionOptions(compilerOptions); +@@ -122827,8 +123019,8 @@ var ts; + } + } + var fragmentDirectory = getFragmentDirectory(fragment); +- for (var _i = 0, _a = getAmbientModuleCompletions(fragment, fragmentDirectory, typeChecker); _i < _a.length; _i++) { +- var ambientName = _a[_i]; ++ for (var _i = 0, _c = getAmbientModuleCompletions(fragment, fragmentDirectory, typeChecker); _i < _c.length; _i++) { ++ var ambientName = _c[_i]; + result.push(nameAndKind(ambientName, "external module name" /* externalModuleName */, /*extension*/ undefined)); + } + getCompletionEntriesFromTypings(host, compilerOptions, scriptPath, fragmentDirectory, extensionOptions, result); +@@ -122843,18 +123035,36 @@ var ts; + result.push(nameAndKind(moduleName, "external module name" /* externalModuleName */, /*extension*/ undefined)); + } + }; +- for (var _b = 0, _c = enumerateNodeModulesVisibleToScript(host, scriptPath); _b < _c.length; _b++) { +- var moduleName = _c[_b]; ++ for (var _d = 0, _e = enumerateNodeModulesVisibleToScript(host, scriptPath); _d < _e.length; _d++) { ++ var moduleName = _e[_d]; + _loop_3(moduleName); + } + } + if (!foundGlobal) { +- ts.forEachAncestorDirectory(scriptPath, function (ancestor) { +- var nodeModules = ts.combinePaths(ancestor, "node_modules"); +- if (ts.tryDirectoryExists(host, nodeModules)) { +- getCompletionEntriesForDirectoryFragment(fragment, nodeModules, extensionOptions, host, /*exclude*/ undefined, result); ++ var pnpapi = (_b = (_a = require("module")).findPnpApi) === null || _b === void 0 ? void 0 : _b.call(_a, scriptPath); ++ if (pnpapi) { ++ try { ++ // Splits a require request into its components, or return null if the request is a file path ++ var pathRegExp = /^(?![a-zA-Z]:[\\/]|\\\\|\.{0,2}(?:\/|$))((?:@[^/]+\/)?[^/]+)\/*(.*|)$/; ++ var dependencyNameMatch = fragment.match(pathRegExp); ++ if (dependencyNameMatch) { ++ var dependencyName = dependencyNameMatch[1], subPath = dependencyNameMatch[2]; ++ var unqualified = pnpapi.resolveToUnqualified(dependencyName, scriptPath, { considerBuiltins: false }); ++ if (unqualified) { ++ getCompletionEntriesForDirectoryFragment(subPath, ts.normalizePath(unqualified), extensionOptions, host, /*exclude*/ undefined, result); ++ } ++ } + } +- }); ++ catch (_f) { } ++ } ++ else { ++ ts.forEachAncestorDirectory(scriptPath, function (ancestor) { ++ var nodeModules = ts.combinePaths(ancestor, "node_modules"); ++ if (ts.tryDirectoryExists(host, nodeModules)) { ++ getCompletionEntriesForDirectoryFragment(fragment, nodeModules, extensionOptions, host, /*exclude*/ undefined, result); ++ } ++ }); ++ } + } + } + return result; +@@ -122955,6 +123165,7 @@ var ts; + return addReplacementSpans(toComplete, range.pos + prefix.length, names); + } + function getCompletionEntriesFromTypings(host, options, scriptPath, fragmentDirectory, extensionOptions, result) { ++ var _a, _b; + if (result === void 0) { result = []; } + // Check for typings specified in compiler options + var seen = new ts.Map(); +@@ -122963,11 +123174,19 @@ var ts; + var root = typeRoots_1[_i]; + getCompletionEntriesFromDirectories(root); + } +- // Also get all @types typings installed in visible node_modules directories +- for (var _a = 0, _b = ts.findPackageJsons(scriptPath, host); _a < _b.length; _a++) { +- var packageJson = _b[_a]; +- var typesDir = ts.combinePaths(ts.getDirectoryPath(packageJson), "node_modules/@types"); +- getCompletionEntriesFromDirectories(typesDir); ++ if ((_b = (_a = require("module")).findPnpApi) === null || _b === void 0 ? void 0 : _b.call(_a, scriptPath)) { ++ for (var _c = 0, _d = ts.getPnpTypeRoots(scriptPath); _c < _d.length; _c++) { ++ var root = _d[_c]; ++ getCompletionEntriesFromDirectories(root); ++ } ++ } ++ else { ++ // Also get all @types typings installed in visible node_modules directories ++ for (var _e = 0, _f = ts.findPackageJsons(scriptPath, host); _e < _f.length; _e++) { ++ var packageJson = _f[_e]; ++ var typesDir = ts.combinePaths(ts.getDirectoryPath(packageJson), "node_modules/@types"); ++ getCompletionEntriesFromDirectories(typesDir); ++ } + } + return result; + function getCompletionEntriesFromDirectories(directory) { +@@ -150455,9 +150674,9 @@ var ts; + if (isTopLevelDeclarationStatement(statement) && + !isExported(sourceFile, statement, useEs6Exports) && + forEachTopLevelDeclaration(statement, function (d) { return needExport.has(ts.Debug.checkDefined(d.symbol)); })) { +- var exports = addExport(statement, useEs6Exports); +- if (exports) +- return exports; ++ var exports_1 = addExport(statement, useEs6Exports); ++ if (exports_1) ++ return exports_1; + } + return statement; + }); +@@ -159155,6 +159374,37 @@ var ts; + return this.projectReferences; + }; + ConfiguredProject.prototype.updateReferences = function (refs) { ++ // @ts-ignore ++ if (process.versions.pnp) { ++ // With Plug'n'Play, dependencies that list peer dependencies ++ // are "virtualized": they are resolved to a unique (virtual) ++ // path that the underlying filesystem layer then resolve back ++ // to the original location. ++ // ++ // When a workspace depends on another workspace with peer ++ // dependencies, this other workspace will thus be resolved to ++ // a unique path that won't match what the initial project has ++ // listed in its `references` field, and TS thus won't leverage ++ // the reference at all. ++ // ++ // To avoid that, we compute here the virtualized paths for the ++ // user-provided references in our references by directly querying ++ // the PnP API. This way users don't have to know the virtual paths, ++ // but we still support them just fine even through references. ++ var pnpApi_1 = require("pnpapi"); ++ var basePath_1 = this.getCurrentDirectory(); ++ var getPnpPath_1 = function (path) { ++ try { ++ var targetLocator = pnpApi_1.findPackageLocator(path + "/"); ++ return pnpApi_1.resolveToUnqualified(targetLocator.name, basePath_1 + "/"); ++ } ++ catch (_a) { ++ // something went wrong with the resolution, try not to fail ++ return path; ++ } ++ }; ++ refs = refs === null || refs === void 0 ? void 0 : refs.map(function (r) { return (__assign(__assign({}, r), { path: getPnpPath_1(r.path) })); }); ++ } + this.projectReferences = refs; + this.potentialProjectReferences = undefined; + }; +@@ -159762,6 +160012,7 @@ var ts; + watchDirectory: ts.returnNoopFileWatcher, + } : + ts.getWatchFactory(this.host, watchLogLevel, log, getDetailWatchInfo); ++ this.pnpWatcher = this.watchPnpFile(); + } + ProjectService.prototype.toPath = function (fileName) { + return ts.toPath(fileName, this.currentDirectory, this.toCanonicalFileName); +@@ -161586,7 +161837,7 @@ var ts; + }; + ProjectService.prototype.setHostConfiguration = function (args) { + var _this = this; +- var _a; ++ var _a, _b; + if (args.file) { + var info = this.getScriptInfoForNormalizedPath(server.toNormalizedPath(args.file)); + if (info) { +@@ -161604,7 +161855,7 @@ var ts; + this.logger.info("Format host information updated"); + } + if (args.preferences) { +- var _b = this.hostConfiguration.preferences, lazyConfiguredProjectsFromExternalProject = _b.lazyConfiguredProjectsFromExternalProject, includePackageJsonAutoImports = _b.includePackageJsonAutoImports; ++ var _c = this.hostConfiguration.preferences, lazyConfiguredProjectsFromExternalProject = _c.lazyConfiguredProjectsFromExternalProject, includePackageJsonAutoImports = _c.includePackageJsonAutoImports; + this.hostConfiguration.preferences = __assign(__assign({}, this.hostConfiguration.preferences), args.preferences); + if (lazyConfiguredProjectsFromExternalProject && !this.hostConfiguration.preferences.lazyConfiguredProjectsFromExternalProject) { + // Load configured projects for external projects that are pending reload +@@ -161630,6 +161881,8 @@ var ts; + if (args.watchOptions) { + this.hostConfiguration.watchOptions = (_a = convertWatchOptions(args.watchOptions)) === null || _a === void 0 ? 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."); ++ (_b = this.pnpWatcher) === null || _b === void 0 ? void 0 : _b.close(); ++ this.watchPnpFile(); + } + } + }; +@@ -162607,6 +162860,25 @@ var ts; + }); + }; + /*@internal*/ ++ ProjectService.prototype.watchPnpFile = function () { ++ var _this = this; ++ if (typeof process.versions.pnp === "undefined") { ++ return; ++ } ++ var pnpFileName = require.resolve("pnpapi"); ++ return this.watchFactory.watchFile(pnpFileName, function () { ++ _this.forEachProject(function (project) { ++ for (var _i = 0, _a = project.getScriptInfos(); _i < _a.length; _i++) { ++ var info = _a[_i]; ++ project.resolutionCache.invalidateResolutionOfFile(info.path); ++ } ++ project.markAsDirty(); ++ updateProjectIfDirty(project); ++ }); ++ _this.delayEnsureProjectForOpenFiles(); ++ }, ts.PollingInterval.Low, this.hostConfiguration.watchOptions, ts.WatchType.ConfigFile); ++ }; ++ /*@internal*/ + ProjectService.prototype.watchPackageJsonFile = function (path) { + var _this = this; + var watchers = this.packageJsonFilesMap || (this.packageJsonFilesMap = new ts.Map()); +@@ -167357,6 +167629,9 @@ var ts; + } + try { + var args = [ts.combinePaths(__dirname, "watchGuard.js"), path]; ++ if (typeof process.versions.pnp !== "undefined") { ++ args.unshift('-r', require.resolve('pnpapi')); ++ } + if (logger.hasLevel(server.LogLevel.verbose)) { + logger.info("Starting " + process.execPath + " with args:" + server.stringifyIndented(args)); + } +@@ -167617,6 +167892,9 @@ var ts; + break; + } + } ++ if (typeof process.versions.pnp !== "undefined") { ++ execArgv.unshift('-r', require.resolve('pnpapi')); ++ } + this.installer = childProcess.fork(ts.combinePaths(__dirname, "typingsInstaller.js"), args, { execArgv: execArgv }); + 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 +semver exclusivity >=4.3.1-rc +--- a/lib/tsserverlibrary.d.ts ++++ b/lib/tsserverlibrary.d.ts +@@ -4710,6 +4710,7 @@ declare namespace ts { + } + declare namespace ts { + export function getEffectiveTypeRoots(options: CompilerOptions, host: GetEffectiveTypeRootsHost): string[] | undefined; ++ export function getPnpTypeRoots(currentDirectory: string): string[]; + /** + * @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..d798ba17f 100644 +semver exclusivity >=4.3.1-rc +--- a/lib/tsserverlibrary.js ++++ b/lib/tsserverlibrary.js +@@ -7532,6 +7532,11 @@ var ts; + : new Buffer(input, encoding); + } + function isFileSystemCaseSensitive() { ++ // The PnP runtime is always case-sensitive ++ // @ts-ignore ++ if (process.versions.pnp) { ++ return true; ++ } + // win32\win64 are case insensitive platforms + if (platform === "win32" || platform === "win64") { + return false; +@@ -40197,24 +40202,56 @@ 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) { ++ var pnpapi = getPnpApi(currentDirectory); ++ if (!pnpapi) { ++ return []; ++ } ++ // Some TS consumers pass relative paths that aren't normalized ++ currentDirectory = ts.sys.resolvePath(currentDirectory); ++ var currentPackage = pnpapi.findPackageLocator(currentDirectory + "/"); ++ if (!currentPackage) { ++ return []; ++ } ++ var packageDependencies = pnpapi.getPackageInformation(currentPackage).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; ++ } ++ ts.getPnpTypeRoots = getPnpTypeRoots; ++ var typesPackagePrefix = "@types/"; ++ function getDefaultTypeRoots(currentDirectory, host) { ++ var nmTypes = getNodeModulesTypeRoots(currentDirectory, host); ++ var pnpTypes = getPnpTypeRoots(currentDirectory); ++ if (nmTypes.length > 0 || pnpTypes.length > 0) { ++ return __spreadArray(__spreadArray([], 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 +@@ -40328,7 +40365,9 @@ var ts; + } + var result_4; + if (!ts.isExternalModuleNameRelative(typeReferenceDirectiveName)) { +- var searchResult = loadModuleFromNearestNodeModulesDirectory(Extensions.DtsOnly, typeReferenceDirectiveName, initialLocationForSecondaryLookup, moduleResolutionState, /*cache*/ undefined, /*redirectedReference*/ undefined); ++ var searchResult = getPnpApi(initialLocationForSecondaryLookup) ++ ? tryLoadModuleUsingPnpResolution(Extensions.DtsOnly, typeReferenceDirectiveName, initialLocationForSecondaryLookup, moduleResolutionState) ++ : loadModuleFromNearestNodeModulesDirectory(Extensions.DtsOnly, typeReferenceDirectiveName, initialLocationForSecondaryLookup, moduleResolutionState, /*cache*/ undefined, /*redirectedReference*/ undefined); + result_4 = searchResult && searchResult.value; + } + else { +@@ -40879,9 +40918,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 = getPnpApi(containingDirectory) ++ ? 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); +@@ -41226,6 +41268,14 @@ var ts; + } + function loadModuleFromSpecificNodeModulesDirectory(extensions, moduleName, nodeModulesDirectory, nodeModulesDirectoryExists, state) { + var candidate = ts.normalizePath(ts.combinePaths(nodeModulesDirectory, moduleName)); ++ return loadModuleFromSpecificNodeModulesDirectoryImpl(extensions, moduleName, nodeModulesDirectory, nodeModulesDirectoryExists, state, candidate, undefined, undefined); ++ } ++ function loadModuleFromPnpResolution(extensions, packageDirectory, rest, state) { ++ var candidate = ts.normalizePath(ts.combinePaths(packageDirectory, rest)); ++ return loadModuleFromSpecificNodeModulesDirectoryImpl(extensions, undefined, undefined, true, state, candidate, rest, packageDirectory); ++ } ++ function loadModuleFromSpecificNodeModulesDirectoryImpl(extensions, moduleName, nodeModulesDirectory, nodeModulesDirectoryExists, state, candidate, rest, packageDirectory) { ++ var _a; + // First look for a nested package.json, as in `node_modules/foo/bar/package.json`. + var packageInfo = getPackageJsonInfo(candidate, !nodeModulesDirectoryExists, state); + if (packageInfo) { +@@ -41241,9 +41291,12 @@ var ts; + loadNodeModuleFromDirectoryWorker(extensions, candidate, onlyRecordFailures, state, packageInfo && packageInfo.packageJsonContent, packageInfo && packageInfo.versionPaths); + return withPackageId(packageInfo, pathAndExtension); + }; +- var _a = parsePackageName(moduleName), packageName = _a.packageName, rest = _a.rest; ++ var packageName; ++ if (rest === undefined) ++ (_a = parsePackageName(moduleName), packageName = _a.packageName, rest = _a.rest); + if (rest !== "") { // If "rest" is empty, we just did this search above. +- var packageDirectory = ts.combinePaths(nodeModulesDirectory, packageName); ++ if (packageDirectory === undefined) ++ packageDirectory = ts.combinePaths(nodeModulesDirectory, packageName); + // Don't use a "types" or "main" from here because we're not loading the root, but a subdirectory -- just here for the packageId and path mappings. + packageInfo = getPackageJsonInfo(packageDirectory, !nodeModulesDirectoryExists, state); + if (packageInfo && packageInfo.versionPaths) { +@@ -41401,6 +41454,58 @@ 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 getPnpApi(path) { ++ var findPnpApi = require("module").findPnpApi; ++ if (findPnpApi === undefined) { ++ return undefined; ++ } ++ return findPnpApi(path + "/"); ++ } ++ function loadPnpPackageResolution(packageName, containingDirectory) { ++ try { ++ var resolution = getPnpApi(containingDirectory).resolveToUnqualified(packageName, containingDirectory + "/", { considerBuiltins: false }); ++ return ts.normalizeSlashes(resolution); ++ } ++ 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 ++ ? loadModuleFromPnpResolution(extensions, packageResolution, rest, state) ++ : undefined; ++ var resolved; ++ if (packageFullResolution) { ++ resolved = packageFullResolution; ++ } ++ else if (extensions === Extensions.TypeScript || extensions === Extensions.DtsOnly) { ++ var typePackageResolution = loadPnpTypePackageResolution(packageName, containingDirectory); ++ var typePackageFullResolution = typePackageResolution ++ ? loadModuleFromPnpResolution(Extensions.DtsOnly, typePackageResolution, rest, state) ++ : undefined; ++ if (typePackageFullResolution) { ++ resolved = typePackageFullResolution; ++ } ++ } ++ if (resolved) { ++ return toSearchResult(resolved); ++ } ++ } + })(ts || (ts = {})); + /* @internal */ + var ts; +@@ -108502,6 +108607,8 @@ var ts; + ConfigFileProgramReloadLevel[ConfigFileProgramReloadLevel["Partial"] = 1] = "Partial"; + /** Reload completely by re-reading contents of config file from disk and updating program */ + ConfigFileProgramReloadLevel[ConfigFileProgramReloadLevel["Full"] = 2] = "Full"; ++ /** Reload the resolutions */ ++ ConfigFileProgramReloadLevel[ConfigFileProgramReloadLevel["Resolutions"] = 3] = "Resolutions"; + })(ConfigFileProgramReloadLevel = ts.ConfigFileProgramReloadLevel || (ts.ConfigFileProgramReloadLevel = {})); + /** + * Updates the map of shared extended config file watches with a new set of extended config files from a base config file of the project +@@ -114889,6 +114996,29 @@ var ts; + return undefined; + } + var parts = getNodeModulePathParts(path); ++ var packageName; ++ if (!parts && typeof process.versions.pnp !== "undefined") { ++ var pnpApi = require("pnpapi"); ++ var locator = pnpApi.findPackageLocator(path); ++ // eslint-disable-next-line no-null/no-null ++ if (locator !== null) { ++ var sourceLocator = pnpApi.findPackageLocator(sourceDirectory + "/"); ++ // Don't use the package name when the imported file is inside ++ // the source directory (prefer a relative path instead) ++ if (locator === sourceLocator) { ++ return undefined; ++ } ++ var information = pnpApi.getPackageInformation(locator); ++ packageName = locator.name; ++ parts = { ++ topLevelNodeModulesIndex: undefined, ++ topLevelPackageNameIndex: undefined, ++ // The last character from packageLocation is the trailing "/", we want to point to it ++ packageRootIndex: information.packageLocation.length - 1, ++ fileNameIndex: path.lastIndexOf("/"), ++ }; ++ } ++ } + if (!parts) { + return undefined; + } +@@ -114919,18 +115049,24 @@ var ts; + if (isRedirect && !isPackageRootPath) { + return undefined; + } +- var globalTypingsCacheLocation = host.getGlobalTypingsCacheLocation && host.getGlobalTypingsCacheLocation(); +- // Get a path that's relative to node_modules or the importing file's path +- // if node_modules folder is in this folder or any of its parent folders, no need to keep it. +- var pathToTopLevelNodeModules = getCanonicalFileName(moduleSpecifier.substring(0, parts.topLevelNodeModulesIndex)); +- if (!(ts.startsWith(sourceDirectory, pathToTopLevelNodeModules) || globalTypingsCacheLocation && ts.startsWith(getCanonicalFileName(globalTypingsCacheLocation), pathToTopLevelNodeModules))) { +- return undefined; ++ // If PnP is enabled the node_modules entries we'll get will always be relevant even if they ++ // are located in a weird path apparently outside of the source directory ++ if (typeof process.versions.pnp === "undefined") { ++ var globalTypingsCacheLocation = host.getGlobalTypingsCacheLocation && host.getGlobalTypingsCacheLocation(); ++ // Get a path that's relative to node_modules or the importing file's path ++ // if node_modules folder is in this folder or any of its parent folders, no need to keep it. ++ var pathToTopLevelNodeModules = getCanonicalFileName(moduleSpecifier.substring(0, parts.topLevelNodeModulesIndex)); ++ if (!(ts.startsWith(sourceDirectory, pathToTopLevelNodeModules) || globalTypingsCacheLocation && ts.startsWith(getCanonicalFileName(globalTypingsCacheLocation), pathToTopLevelNodeModules))) { ++ return undefined; ++ } + } + // If the module was found in @types, get the actual Node package name +- var nodeModulesDirectoryName = moduleSpecifier.substring(parts.topLevelPackageNameIndex + 1); +- var packageName = ts.getPackageNameFromTypesPackageName(nodeModulesDirectoryName); ++ var nodeModulesDirectoryName = typeof packageName !== "undefined" ++ ? packageName + moduleSpecifier.substring(parts.packageRootIndex) ++ : moduleSpecifier.substring(parts.topLevelPackageNameIndex + 1); ++ var packageNameFromPath = ts.getPackageNameFromTypesPackageName(nodeModulesDirectoryName); + // For classic resolution, only allow importing from node_modules/@types, not other node_modules +- return ts.getEmitModuleResolutionKind(options) !== ts.ModuleResolutionKind.NodeJs && packageName === nodeModulesDirectoryName ? undefined : packageName; ++ return ts.getEmitModuleResolutionKind(options) !== ts.ModuleResolutionKind.NodeJs && packageNameFromPath === nodeModulesDirectoryName ? undefined : packageNameFromPath; + function tryDirectoryWithPackageJson(packageRootIndex) { + var packageRootPath = path.substring(0, packageRootIndex); + var packageJsonPath = ts.combinePaths(packageRootPath, "package.json"); +@@ -115718,6 +115854,10 @@ var ts; + if (configFileName) { + configFileWatcher = watchFile(configFileName, scheduleProgramReload, ts.PollingInterval.High, watchOptions, ts.WatchType.ConfigFile); + } ++ var pnpFileWatcher; ++ if (typeof process.versions.pnp !== "undefined") { ++ pnpFileWatcher = watchFile(require.resolve("pnpapi"), scheduleResolutionReload, ts.PollingInterval.High, watchOptions, ts.WatchType.ConfigFile); ++ } + var compilerHost = ts.createCompilerHostFromProgramHost(host, function () { return compilerOptions; }, directoryStructureHost); + ts.setGetSourceFileAsHashVersioned(compilerHost, host); + // Members for CompilerHost +@@ -115796,6 +115936,10 @@ var ts; + configFileWatcher.close(); + configFileWatcher = undefined; + } ++ if (pnpFileWatcher) { ++ pnpFileWatcher.close(); ++ pnpFileWatcher = undefined; ++ } + extendedConfigCache === null || extendedConfigCache === void 0 ? void 0 : extendedConfigCache.clear(); + extendedConfigCache = undefined; + if (sharedExtendedConfigFileWatchers) { +@@ -115828,7 +115972,8 @@ var ts; + function getCurrentProgram() { + return builderProgram && builderProgram.getProgramOrUndefined(); + } +- function synchronizeProgram() { ++ function synchronizeProgram(forceAllFilesAsInvalidated) { ++ if (forceAllFilesAsInvalidated === void 0) { forceAllFilesAsInvalidated = false; } + writeLog("Synchronizing program"); + clearInvalidateResolutionsOfFailedLookupLocations(); + var program = getCurrentBuilderProgram(); +@@ -115839,7 +115984,7 @@ var ts; + } + } + // All resolutions are invalid if user provided resolutions +- var hasInvalidatedResolution = resolutionCache.createHasInvalidatedResolution(userProvidedResolution); ++ var hasInvalidatedResolution = resolutionCache.createHasInvalidatedResolution(userProvidedResolution || forceAllFilesAsInvalidated); + if (ts.isProgramUptoDate(getCurrentProgram(), rootFileNames, compilerOptions, getSourceVersion, fileExists, hasInvalidatedResolution, hasChangedAutomaticTypeDirectiveNames, getParsedCommandLine, projectReferences)) { + if (hasChangedConfigFileParsingErrors) { + builderProgram = createProgram(/*rootNames*/ undefined, /*options*/ undefined, compilerHost, builderProgram, configFileParsingDiagnostics, projectReferences); +@@ -116039,6 +116184,12 @@ var ts; + reloadLevel = ts.ConfigFileProgramReloadLevel.Full; + scheduleProgramUpdate(); + } ++ function scheduleResolutionReload() { ++ writeLog("Clearing resolutions"); ++ resolutionCache.clear(); ++ reloadLevel = ts.ConfigFileProgramReloadLevel.Resolutions; ++ scheduleProgramUpdate(); ++ } + function updateProgramWithWatchStatus() { + timerToUpdateProgram = undefined; + reportWatchDiagnostic(ts.Diagnostics.File_change_detected_Starting_incremental_compilation); +@@ -116054,6 +116205,10 @@ var ts; + ts.perfLogger.logStartUpdateProgram("FullConfigReload"); + reloadConfigFile(); + break; ++ case ts.ConfigFileProgramReloadLevel.Resolutions: ++ ts.perfLogger.logStartUpdateProgram("SynchronizeProgramWithResolutions"); ++ synchronizeProgram(/*forceAllFilesAsInvalidated*/ true); ++ break; + default: + ts.perfLogger.logStartUpdateProgram("SynchronizeProgram"); + synchronizeProgram(); +@@ -121701,11 +121856,27 @@ var ts; + return hasImportablePath; + } + ts.isImportableFile = isImportableFile; ++ /** ++ * 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 getPnpApi(path) { ++ var findPnpApi = require("module").findPnpApi; ++ if (findPnpApi === undefined) { ++ return undefined; ++ } ++ return findPnpApi(path + "/"); ++ } + /** + * Don't include something from a `node_modules` that isn't actually reachable by a global import. + * A relative import to node_modules is usually a bad idea. + */ +- function isImportablePath(fromPath, toPath, getCanonicalFileName, globalCachePath) { ++ function isImportablePathNode(fromPath, toPath, getCanonicalFileName, globalCachePath) { + // If it's in a `node_modules` but is not reachable from here via a global import, don't bother. + var toNodeModules = ts.forEachAncestorDirectory(toPath, function (ancestor) { return ts.getBaseFileName(ancestor) === "node_modules" ? ancestor : undefined; }); + var toNodeModulesParent = toNodeModules && ts.getDirectoryPath(getCanonicalFileName(toNodeModules)); +@@ -121713,6 +121884,26 @@ var ts; + || ts.startsWith(getCanonicalFileName(fromPath), toNodeModulesParent) + || (!!globalCachePath && ts.startsWith(getCanonicalFileName(globalCachePath), toNodeModulesParent)); + } ++ function isImportablePathPnp(fromPath, toPath) { ++ var pnpApi = getPnpApi(fromPath); ++ var fromLocator = pnpApi.findPackageLocator(fromPath); ++ var toLocator = pnpApi.findPackageLocator(toPath); ++ // eslint-disable-next-line no-null/no-null ++ if (toLocator === null) { ++ return false; ++ } ++ var fromInfo = pnpApi.getPackageInformation(fromLocator); ++ var toReference = fromInfo.packageDependencies.get(toLocator.name); ++ return toReference === toLocator.reference; ++ } ++ function isImportablePath(fromPath, toPath, getCanonicalFileName, globalCachePath) { ++ if (getPnpApi(fromPath)) { ++ return isImportablePathPnp(fromPath, toPath); ++ } ++ else { ++ return isImportablePathNode(fromPath, toPath, getCanonicalFileName, globalCachePath); ++ } ++ } + // #endregion + })(ts || (ts = {})); + var ts; +@@ -123384,6 +123575,7 @@ var ts; + * This includes all files that are found in node_modules/moduleName/ with acceptable file extensions + */ + function getCompletionEntriesForNonRelativeModules(fragment, scriptPath, compilerOptions, host, typeChecker) { ++ var _a, _b; + var baseUrl = compilerOptions.baseUrl, paths = compilerOptions.paths; + var result = []; + var extensionOptions = getExtensionOptions(compilerOptions); +@@ -123396,8 +123588,8 @@ var ts; + } + } + var fragmentDirectory = getFragmentDirectory(fragment); +- for (var _i = 0, _a = getAmbientModuleCompletions(fragment, fragmentDirectory, typeChecker); _i < _a.length; _i++) { +- var ambientName = _a[_i]; ++ for (var _i = 0, _c = getAmbientModuleCompletions(fragment, fragmentDirectory, typeChecker); _i < _c.length; _i++) { ++ var ambientName = _c[_i]; + result.push(nameAndKind(ambientName, "external module name" /* externalModuleName */, /*extension*/ undefined)); + } + getCompletionEntriesFromTypings(host, compilerOptions, scriptPath, fragmentDirectory, extensionOptions, result); +@@ -123412,18 +123604,36 @@ var ts; + result.push(nameAndKind(moduleName, "external module name" /* externalModuleName */, /*extension*/ undefined)); + } + }; +- for (var _b = 0, _c = enumerateNodeModulesVisibleToScript(host, scriptPath); _b < _c.length; _b++) { +- var moduleName = _c[_b]; ++ for (var _d = 0, _e = enumerateNodeModulesVisibleToScript(host, scriptPath); _d < _e.length; _d++) { ++ var moduleName = _e[_d]; + _loop_3(moduleName); + } + } + if (!foundGlobal) { +- ts.forEachAncestorDirectory(scriptPath, function (ancestor) { +- var nodeModules = ts.combinePaths(ancestor, "node_modules"); +- if (ts.tryDirectoryExists(host, nodeModules)) { +- getCompletionEntriesForDirectoryFragment(fragment, nodeModules, extensionOptions, host, /*exclude*/ undefined, result); ++ var pnpapi = (_b = (_a = require("module")).findPnpApi) === null || _b === void 0 ? void 0 : _b.call(_a, scriptPath); ++ if (pnpapi) { ++ try { ++ // Splits a require request into its components, or return null if the request is a file path ++ var pathRegExp = /^(?![a-zA-Z]:[\\/]|\\\\|\.{0,2}(?:\/|$))((?:@[^/]+\/)?[^/]+)\/*(.*|)$/; ++ var dependencyNameMatch = fragment.match(pathRegExp); ++ if (dependencyNameMatch) { ++ var dependencyName = dependencyNameMatch[1], subPath = dependencyNameMatch[2]; ++ var unqualified = pnpapi.resolveToUnqualified(dependencyName, scriptPath, { considerBuiltins: false }); ++ if (unqualified) { ++ getCompletionEntriesForDirectoryFragment(subPath, ts.normalizePath(unqualified), extensionOptions, host, /*exclude*/ undefined, result); ++ } ++ } + } +- }); ++ catch (_f) { } ++ } ++ else { ++ ts.forEachAncestorDirectory(scriptPath, function (ancestor) { ++ var nodeModules = ts.combinePaths(ancestor, "node_modules"); ++ if (ts.tryDirectoryExists(host, nodeModules)) { ++ getCompletionEntriesForDirectoryFragment(fragment, nodeModules, extensionOptions, host, /*exclude*/ undefined, result); ++ } ++ }); ++ } + } + } + return result; +@@ -123524,6 +123734,7 @@ var ts; + return addReplacementSpans(toComplete, range.pos + prefix.length, names); + } + function getCompletionEntriesFromTypings(host, options, scriptPath, fragmentDirectory, extensionOptions, result) { ++ var _a, _b; + if (result === void 0) { result = []; } + // Check for typings specified in compiler options + var seen = new ts.Map(); +@@ -123532,11 +123743,19 @@ var ts; + var root = typeRoots_1[_i]; + getCompletionEntriesFromDirectories(root); + } +- // Also get all @types typings installed in visible node_modules directories +- for (var _a = 0, _b = ts.findPackageJsons(scriptPath, host); _a < _b.length; _a++) { +- var packageJson = _b[_a]; +- var typesDir = ts.combinePaths(ts.getDirectoryPath(packageJson), "node_modules/@types"); +- getCompletionEntriesFromDirectories(typesDir); ++ if ((_b = (_a = require("module")).findPnpApi) === null || _b === void 0 ? void 0 : _b.call(_a, scriptPath)) { ++ for (var _c = 0, _d = ts.getPnpTypeRoots(scriptPath); _c < _d.length; _c++) { ++ var root = _d[_c]; ++ getCompletionEntriesFromDirectories(root); ++ } ++ } ++ else { ++ // Also get all @types typings installed in visible node_modules directories ++ for (var _e = 0, _f = ts.findPackageJsons(scriptPath, host); _e < _f.length; _e++) { ++ var packageJson = _f[_e]; ++ var typesDir = ts.combinePaths(ts.getDirectoryPath(packageJson), "node_modules/@types"); ++ getCompletionEntriesFromDirectories(typesDir); ++ } + } + return result; + function getCompletionEntriesFromDirectories(directory) { +@@ -151024,9 +151243,9 @@ var ts; + if (isTopLevelDeclarationStatement(statement) && + !isExported(sourceFile, statement, useEs6Exports) && + forEachTopLevelDeclaration(statement, function (d) { return needExport.has(ts.Debug.checkDefined(d.symbol)); })) { +- var exports = addExport(statement, useEs6Exports); +- if (exports) +- return exports; ++ var exports_1 = addExport(statement, useEs6Exports); ++ if (exports_1) ++ return exports_1; + } + return statement; + }); +@@ -159349,6 +159568,37 @@ var ts; + return this.projectReferences; + }; + ConfiguredProject.prototype.updateReferences = function (refs) { ++ // @ts-ignore ++ if (process.versions.pnp) { ++ // With Plug'n'Play, dependencies that list peer dependencies ++ // are "virtualized": they are resolved to a unique (virtual) ++ // path that the underlying filesystem layer then resolve back ++ // to the original location. ++ // ++ // When a workspace depends on another workspace with peer ++ // dependencies, this other workspace will thus be resolved to ++ // a unique path that won't match what the initial project has ++ // listed in its `references` field, and TS thus won't leverage ++ // the reference at all. ++ // ++ // To avoid that, we compute here the virtualized paths for the ++ // user-provided references in our references by directly querying ++ // the PnP API. This way users don't have to know the virtual paths, ++ // but we still support them just fine even through references. ++ var pnpApi_1 = require("pnpapi"); ++ var basePath_1 = this.getCurrentDirectory(); ++ var getPnpPath_1 = function (path) { ++ try { ++ var targetLocator = pnpApi_1.findPackageLocator(path + "/"); ++ return pnpApi_1.resolveToUnqualified(targetLocator.name, basePath_1 + "/"); ++ } ++ catch (_a) { ++ // something went wrong with the resolution, try not to fail ++ return path; ++ } ++ }; ++ refs = refs === null || refs === void 0 ? void 0 : refs.map(function (r) { return (__assign(__assign({}, r), { path: getPnpPath_1(r.path) })); }); ++ } + this.projectReferences = refs; + this.potentialProjectReferences = undefined; + }; +@@ -159956,6 +160206,7 @@ var ts; + watchDirectory: ts.returnNoopFileWatcher, + } : + ts.getWatchFactory(this.host, watchLogLevel, log, getDetailWatchInfo); ++ this.pnpWatcher = this.watchPnpFile(); + } + ProjectService.prototype.toPath = function (fileName) { + return ts.toPath(fileName, this.currentDirectory, this.toCanonicalFileName); +@@ -161780,7 +162031,7 @@ var ts; + }; + ProjectService.prototype.setHostConfiguration = function (args) { + var _this = this; +- var _a; ++ var _a, _b; + if (args.file) { + var info = this.getScriptInfoForNormalizedPath(server.toNormalizedPath(args.file)); + if (info) { +@@ -161798,7 +162049,7 @@ var ts; + this.logger.info("Format host information updated"); + } + if (args.preferences) { +- var _b = this.hostConfiguration.preferences, lazyConfiguredProjectsFromExternalProject = _b.lazyConfiguredProjectsFromExternalProject, includePackageJsonAutoImports = _b.includePackageJsonAutoImports; ++ var _c = this.hostConfiguration.preferences, lazyConfiguredProjectsFromExternalProject = _c.lazyConfiguredProjectsFromExternalProject, includePackageJsonAutoImports = _c.includePackageJsonAutoImports; + this.hostConfiguration.preferences = __assign(__assign({}, this.hostConfiguration.preferences), args.preferences); + if (lazyConfiguredProjectsFromExternalProject && !this.hostConfiguration.preferences.lazyConfiguredProjectsFromExternalProject) { + // Load configured projects for external projects that are pending reload +@@ -161824,6 +162075,8 @@ var ts; + if (args.watchOptions) { + this.hostConfiguration.watchOptions = (_a = convertWatchOptions(args.watchOptions)) === null || _a === void 0 ? 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."); ++ (_b = this.pnpWatcher) === null || _b === void 0 ? void 0 : _b.close(); ++ this.watchPnpFile(); + } + } + }; +@@ -162801,6 +163054,25 @@ var ts; + }); + }; + /*@internal*/ ++ ProjectService.prototype.watchPnpFile = function () { ++ var _this = this; ++ if (typeof process.versions.pnp === "undefined") { ++ return; ++ } ++ var pnpFileName = require.resolve("pnpapi"); ++ return this.watchFactory.watchFile(pnpFileName, function () { ++ _this.forEachProject(function (project) { ++ for (var _i = 0, _a = project.getScriptInfos(); _i < _a.length; _i++) { ++ var info = _a[_i]; ++ project.resolutionCache.invalidateResolutionOfFile(info.path); ++ } ++ project.markAsDirty(); ++ updateProjectIfDirty(project); ++ }); ++ _this.delayEnsureProjectForOpenFiles(); ++ }, ts.PollingInterval.Low, this.hostConfiguration.watchOptions, ts.WatchType.ConfigFile); ++ }; ++ /*@internal*/ + ProjectService.prototype.watchPackageJsonFile = function (path) { + 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 +semver exclusivity >=4.3.1-rc +--- a/lib/typescript.d.ts ++++ b/lib/typescript.d.ts +@@ -4710,6 +4710,7 @@ declare namespace ts { + } + declare namespace ts { + export function getEffectiveTypeRoots(options: CompilerOptions, host: GetEffectiveTypeRootsHost): string[] | undefined; ++ export function getPnpTypeRoots(currentDirectory: string): string[]; + /** + * @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..891eff5c5 100644 +semver exclusivity >=4.3.1-rc +--- a/lib/typescript.js ++++ b/lib/typescript.js +@@ -7532,6 +7532,11 @@ var ts; + : new Buffer(input, encoding); + } + function isFileSystemCaseSensitive() { ++ // The PnP runtime is always case-sensitive ++ // @ts-ignore ++ if (process.versions.pnp) { ++ return true; ++ } + // win32\win64 are case insensitive platforms + if (platform === "win32" || platform === "win64") { + return false; +@@ -40197,24 +40202,56 @@ 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) { ++ var pnpapi = getPnpApi(currentDirectory); ++ if (!pnpapi) { ++ return []; ++ } ++ // Some TS consumers pass relative paths that aren't normalized ++ currentDirectory = ts.sys.resolvePath(currentDirectory); ++ var currentPackage = pnpapi.findPackageLocator(currentDirectory + "/"); ++ if (!currentPackage) { ++ return []; ++ } ++ var packageDependencies = pnpapi.getPackageInformation(currentPackage).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; ++ } ++ ts.getPnpTypeRoots = getPnpTypeRoots; ++ var typesPackagePrefix = "@types/"; ++ function getDefaultTypeRoots(currentDirectory, host) { ++ var nmTypes = getNodeModulesTypeRoots(currentDirectory, host); ++ var pnpTypes = getPnpTypeRoots(currentDirectory); ++ if (nmTypes.length > 0 || pnpTypes.length > 0) { ++ return __spreadArray(__spreadArray([], 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 +@@ -40328,7 +40365,9 @@ var ts; + } + var result_4; + if (!ts.isExternalModuleNameRelative(typeReferenceDirectiveName)) { +- var searchResult = loadModuleFromNearestNodeModulesDirectory(Extensions.DtsOnly, typeReferenceDirectiveName, initialLocationForSecondaryLookup, moduleResolutionState, /*cache*/ undefined, /*redirectedReference*/ undefined); ++ var searchResult = getPnpApi(initialLocationForSecondaryLookup) ++ ? tryLoadModuleUsingPnpResolution(Extensions.DtsOnly, typeReferenceDirectiveName, initialLocationForSecondaryLookup, moduleResolutionState) ++ : loadModuleFromNearestNodeModulesDirectory(Extensions.DtsOnly, typeReferenceDirectiveName, initialLocationForSecondaryLookup, moduleResolutionState, /*cache*/ undefined, /*redirectedReference*/ undefined); + result_4 = searchResult && searchResult.value; + } + else { +@@ -40879,9 +40918,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 = getPnpApi(containingDirectory) ++ ? 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); +@@ -41226,6 +41268,14 @@ var ts; + } + function loadModuleFromSpecificNodeModulesDirectory(extensions, moduleName, nodeModulesDirectory, nodeModulesDirectoryExists, state) { + var candidate = ts.normalizePath(ts.combinePaths(nodeModulesDirectory, moduleName)); ++ return loadModuleFromSpecificNodeModulesDirectoryImpl(extensions, moduleName, nodeModulesDirectory, nodeModulesDirectoryExists, state, candidate, undefined, undefined); ++ } ++ function loadModuleFromPnpResolution(extensions, packageDirectory, rest, state) { ++ var candidate = ts.normalizePath(ts.combinePaths(packageDirectory, rest)); ++ return loadModuleFromSpecificNodeModulesDirectoryImpl(extensions, undefined, undefined, true, state, candidate, rest, packageDirectory); ++ } ++ function loadModuleFromSpecificNodeModulesDirectoryImpl(extensions, moduleName, nodeModulesDirectory, nodeModulesDirectoryExists, state, candidate, rest, packageDirectory) { ++ var _a; + // First look for a nested package.json, as in `node_modules/foo/bar/package.json`. + var packageInfo = getPackageJsonInfo(candidate, !nodeModulesDirectoryExists, state); + if (packageInfo) { +@@ -41241,9 +41291,12 @@ var ts; + loadNodeModuleFromDirectoryWorker(extensions, candidate, onlyRecordFailures, state, packageInfo && packageInfo.packageJsonContent, packageInfo && packageInfo.versionPaths); + return withPackageId(packageInfo, pathAndExtension); + }; +- var _a = parsePackageName(moduleName), packageName = _a.packageName, rest = _a.rest; ++ var packageName; ++ if (rest === undefined) ++ (_a = parsePackageName(moduleName), packageName = _a.packageName, rest = _a.rest); + if (rest !== "") { // If "rest" is empty, we just did this search above. +- var packageDirectory = ts.combinePaths(nodeModulesDirectory, packageName); ++ if (packageDirectory === undefined) ++ packageDirectory = ts.combinePaths(nodeModulesDirectory, packageName); + // Don't use a "types" or "main" from here because we're not loading the root, but a subdirectory -- just here for the packageId and path mappings. + packageInfo = getPackageJsonInfo(packageDirectory, !nodeModulesDirectoryExists, state); + if (packageInfo && packageInfo.versionPaths) { +@@ -41401,6 +41454,58 @@ 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 getPnpApi(path) { ++ var findPnpApi = require("module").findPnpApi; ++ if (findPnpApi === undefined) { ++ return undefined; ++ } ++ return findPnpApi(path + "/"); ++ } ++ function loadPnpPackageResolution(packageName, containingDirectory) { ++ try { ++ var resolution = getPnpApi(containingDirectory).resolveToUnqualified(packageName, containingDirectory + "/", { considerBuiltins: false }); ++ return ts.normalizeSlashes(resolution); ++ } ++ 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 ++ ? loadModuleFromPnpResolution(extensions, packageResolution, rest, state) ++ : undefined; ++ var resolved; ++ if (packageFullResolution) { ++ resolved = packageFullResolution; ++ } ++ else if (extensions === Extensions.TypeScript || extensions === Extensions.DtsOnly) { ++ var typePackageResolution = loadPnpTypePackageResolution(packageName, containingDirectory); ++ var typePackageFullResolution = typePackageResolution ++ ? loadModuleFromPnpResolution(Extensions.DtsOnly, typePackageResolution, rest, state) ++ : undefined; ++ if (typePackageFullResolution) { ++ resolved = typePackageFullResolution; ++ } ++ } ++ if (resolved) { ++ return toSearchResult(resolved); ++ } ++ } + })(ts || (ts = {})); + /* @internal */ + var ts; +@@ -108502,6 +108607,8 @@ var ts; + ConfigFileProgramReloadLevel[ConfigFileProgramReloadLevel["Partial"] = 1] = "Partial"; + /** Reload completely by re-reading contents of config file from disk and updating program */ + ConfigFileProgramReloadLevel[ConfigFileProgramReloadLevel["Full"] = 2] = "Full"; ++ /** Reload the resolutions */ ++ ConfigFileProgramReloadLevel[ConfigFileProgramReloadLevel["Resolutions"] = 3] = "Resolutions"; + })(ConfigFileProgramReloadLevel = ts.ConfigFileProgramReloadLevel || (ts.ConfigFileProgramReloadLevel = {})); + /** + * Updates the map of shared extended config file watches with a new set of extended config files from a base config file of the project +@@ -114889,6 +114996,29 @@ var ts; + return undefined; + } + var parts = getNodeModulePathParts(path); ++ var packageName; ++ if (!parts && typeof process.versions.pnp !== "undefined") { ++ var pnpApi = require("pnpapi"); ++ var locator = pnpApi.findPackageLocator(path); ++ // eslint-disable-next-line no-null/no-null ++ if (locator !== null) { ++ var sourceLocator = pnpApi.findPackageLocator(sourceDirectory + "/"); ++ // Don't use the package name when the imported file is inside ++ // the source directory (prefer a relative path instead) ++ if (locator === sourceLocator) { ++ return undefined; ++ } ++ var information = pnpApi.getPackageInformation(locator); ++ packageName = locator.name; ++ parts = { ++ topLevelNodeModulesIndex: undefined, ++ topLevelPackageNameIndex: undefined, ++ // The last character from packageLocation is the trailing "/", we want to point to it ++ packageRootIndex: information.packageLocation.length - 1, ++ fileNameIndex: path.lastIndexOf("/"), ++ }; ++ } ++ } + if (!parts) { + return undefined; + } +@@ -114919,18 +115049,24 @@ var ts; + if (isRedirect && !isPackageRootPath) { + return undefined; + } +- var globalTypingsCacheLocation = host.getGlobalTypingsCacheLocation && host.getGlobalTypingsCacheLocation(); +- // Get a path that's relative to node_modules or the importing file's path +- // if node_modules folder is in this folder or any of its parent folders, no need to keep it. +- var pathToTopLevelNodeModules = getCanonicalFileName(moduleSpecifier.substring(0, parts.topLevelNodeModulesIndex)); +- if (!(ts.startsWith(sourceDirectory, pathToTopLevelNodeModules) || globalTypingsCacheLocation && ts.startsWith(getCanonicalFileName(globalTypingsCacheLocation), pathToTopLevelNodeModules))) { +- return undefined; ++ // If PnP is enabled the node_modules entries we'll get will always be relevant even if they ++ // are located in a weird path apparently outside of the source directory ++ if (typeof process.versions.pnp === "undefined") { ++ var globalTypingsCacheLocation = host.getGlobalTypingsCacheLocation && host.getGlobalTypingsCacheLocation(); ++ // Get a path that's relative to node_modules or the importing file's path ++ // if node_modules folder is in this folder or any of its parent folders, no need to keep it. ++ var pathToTopLevelNodeModules = getCanonicalFileName(moduleSpecifier.substring(0, parts.topLevelNodeModulesIndex)); ++ if (!(ts.startsWith(sourceDirectory, pathToTopLevelNodeModules) || globalTypingsCacheLocation && ts.startsWith(getCanonicalFileName(globalTypingsCacheLocation), pathToTopLevelNodeModules))) { ++ return undefined; ++ } + } + // If the module was found in @types, get the actual Node package name +- var nodeModulesDirectoryName = moduleSpecifier.substring(parts.topLevelPackageNameIndex + 1); +- var packageName = ts.getPackageNameFromTypesPackageName(nodeModulesDirectoryName); ++ var nodeModulesDirectoryName = typeof packageName !== "undefined" ++ ? packageName + moduleSpecifier.substring(parts.packageRootIndex) ++ : moduleSpecifier.substring(parts.topLevelPackageNameIndex + 1); ++ var packageNameFromPath = ts.getPackageNameFromTypesPackageName(nodeModulesDirectoryName); + // For classic resolution, only allow importing from node_modules/@types, not other node_modules +- return ts.getEmitModuleResolutionKind(options) !== ts.ModuleResolutionKind.NodeJs && packageName === nodeModulesDirectoryName ? undefined : packageName; ++ return ts.getEmitModuleResolutionKind(options) !== ts.ModuleResolutionKind.NodeJs && packageNameFromPath === nodeModulesDirectoryName ? undefined : packageNameFromPath; + function tryDirectoryWithPackageJson(packageRootIndex) { + var packageRootPath = path.substring(0, packageRootIndex); + var packageJsonPath = ts.combinePaths(packageRootPath, "package.json"); +@@ -115718,6 +115854,10 @@ var ts; + if (configFileName) { + configFileWatcher = watchFile(configFileName, scheduleProgramReload, ts.PollingInterval.High, watchOptions, ts.WatchType.ConfigFile); + } ++ var pnpFileWatcher; ++ if (typeof process.versions.pnp !== "undefined") { ++ pnpFileWatcher = watchFile(require.resolve("pnpapi"), scheduleResolutionReload, ts.PollingInterval.High, watchOptions, ts.WatchType.ConfigFile); ++ } + var compilerHost = ts.createCompilerHostFromProgramHost(host, function () { return compilerOptions; }, directoryStructureHost); + ts.setGetSourceFileAsHashVersioned(compilerHost, host); + // Members for CompilerHost +@@ -115796,6 +115936,10 @@ var ts; + configFileWatcher.close(); + configFileWatcher = undefined; + } ++ if (pnpFileWatcher) { ++ pnpFileWatcher.close(); ++ pnpFileWatcher = undefined; ++ } + extendedConfigCache === null || extendedConfigCache === void 0 ? void 0 : extendedConfigCache.clear(); + extendedConfigCache = undefined; + if (sharedExtendedConfigFileWatchers) { +@@ -115828,7 +115972,8 @@ var ts; + function getCurrentProgram() { + return builderProgram && builderProgram.getProgramOrUndefined(); + } +- function synchronizeProgram() { ++ function synchronizeProgram(forceAllFilesAsInvalidated) { ++ if (forceAllFilesAsInvalidated === void 0) { forceAllFilesAsInvalidated = false; } + writeLog("Synchronizing program"); + clearInvalidateResolutionsOfFailedLookupLocations(); + var program = getCurrentBuilderProgram(); +@@ -115839,7 +115984,7 @@ var ts; + } + } + // All resolutions are invalid if user provided resolutions +- var hasInvalidatedResolution = resolutionCache.createHasInvalidatedResolution(userProvidedResolution); ++ var hasInvalidatedResolution = resolutionCache.createHasInvalidatedResolution(userProvidedResolution || forceAllFilesAsInvalidated); + if (ts.isProgramUptoDate(getCurrentProgram(), rootFileNames, compilerOptions, getSourceVersion, fileExists, hasInvalidatedResolution, hasChangedAutomaticTypeDirectiveNames, getParsedCommandLine, projectReferences)) { + if (hasChangedConfigFileParsingErrors) { + builderProgram = createProgram(/*rootNames*/ undefined, /*options*/ undefined, compilerHost, builderProgram, configFileParsingDiagnostics, projectReferences); +@@ -116039,6 +116184,12 @@ var ts; + reloadLevel = ts.ConfigFileProgramReloadLevel.Full; + scheduleProgramUpdate(); + } ++ function scheduleResolutionReload() { ++ writeLog("Clearing resolutions"); ++ resolutionCache.clear(); ++ reloadLevel = ts.ConfigFileProgramReloadLevel.Resolutions; ++ scheduleProgramUpdate(); ++ } + function updateProgramWithWatchStatus() { + timerToUpdateProgram = undefined; + reportWatchDiagnostic(ts.Diagnostics.File_change_detected_Starting_incremental_compilation); +@@ -116054,6 +116205,10 @@ var ts; + ts.perfLogger.logStartUpdateProgram("FullConfigReload"); + reloadConfigFile(); + break; ++ case ts.ConfigFileProgramReloadLevel.Resolutions: ++ ts.perfLogger.logStartUpdateProgram("SynchronizeProgramWithResolutions"); ++ synchronizeProgram(/*forceAllFilesAsInvalidated*/ true); ++ break; + default: + ts.perfLogger.logStartUpdateProgram("SynchronizeProgram"); + synchronizeProgram(); +@@ -121701,11 +121856,27 @@ var ts; + return hasImportablePath; + } + ts.isImportableFile = isImportableFile; ++ /** ++ * 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 getPnpApi(path) { ++ var findPnpApi = require("module").findPnpApi; ++ if (findPnpApi === undefined) { ++ return undefined; ++ } ++ return findPnpApi(path + "/"); ++ } + /** + * Don't include something from a `node_modules` that isn't actually reachable by a global import. + * A relative import to node_modules is usually a bad idea. + */ +- function isImportablePath(fromPath, toPath, getCanonicalFileName, globalCachePath) { ++ function isImportablePathNode(fromPath, toPath, getCanonicalFileName, globalCachePath) { + // If it's in a `node_modules` but is not reachable from here via a global import, don't bother. + var toNodeModules = ts.forEachAncestorDirectory(toPath, function (ancestor) { return ts.getBaseFileName(ancestor) === "node_modules" ? ancestor : undefined; }); + var toNodeModulesParent = toNodeModules && ts.getDirectoryPath(getCanonicalFileName(toNodeModules)); +@@ -121713,6 +121884,26 @@ var ts; + || ts.startsWith(getCanonicalFileName(fromPath), toNodeModulesParent) + || (!!globalCachePath && ts.startsWith(getCanonicalFileName(globalCachePath), toNodeModulesParent)); + } ++ function isImportablePathPnp(fromPath, toPath) { ++ var pnpApi = getPnpApi(fromPath); ++ var fromLocator = pnpApi.findPackageLocator(fromPath); ++ var toLocator = pnpApi.findPackageLocator(toPath); ++ // eslint-disable-next-line no-null/no-null ++ if (toLocator === null) { ++ return false; ++ } ++ var fromInfo = pnpApi.getPackageInformation(fromLocator); ++ var toReference = fromInfo.packageDependencies.get(toLocator.name); ++ return toReference === toLocator.reference; ++ } ++ function isImportablePath(fromPath, toPath, getCanonicalFileName, globalCachePath) { ++ if (getPnpApi(fromPath)) { ++ return isImportablePathPnp(fromPath, toPath); ++ } ++ else { ++ return isImportablePathNode(fromPath, toPath, getCanonicalFileName, globalCachePath); ++ } ++ } + // #endregion + })(ts || (ts = {})); + var ts; +@@ -123384,6 +123575,7 @@ var ts; + * This includes all files that are found in node_modules/moduleName/ with acceptable file extensions + */ + function getCompletionEntriesForNonRelativeModules(fragment, scriptPath, compilerOptions, host, typeChecker) { ++ var _a, _b; + var baseUrl = compilerOptions.baseUrl, paths = compilerOptions.paths; + var result = []; + var extensionOptions = getExtensionOptions(compilerOptions); +@@ -123396,8 +123588,8 @@ var ts; + } + } + var fragmentDirectory = getFragmentDirectory(fragment); +- for (var _i = 0, _a = getAmbientModuleCompletions(fragment, fragmentDirectory, typeChecker); _i < _a.length; _i++) { +- var ambientName = _a[_i]; ++ for (var _i = 0, _c = getAmbientModuleCompletions(fragment, fragmentDirectory, typeChecker); _i < _c.length; _i++) { ++ var ambientName = _c[_i]; + result.push(nameAndKind(ambientName, "external module name" /* externalModuleName */, /*extension*/ undefined)); + } + getCompletionEntriesFromTypings(host, compilerOptions, scriptPath, fragmentDirectory, extensionOptions, result); +@@ -123412,18 +123604,36 @@ var ts; + result.push(nameAndKind(moduleName, "external module name" /* externalModuleName */, /*extension*/ undefined)); + } + }; +- for (var _b = 0, _c = enumerateNodeModulesVisibleToScript(host, scriptPath); _b < _c.length; _b++) { +- var moduleName = _c[_b]; ++ for (var _d = 0, _e = enumerateNodeModulesVisibleToScript(host, scriptPath); _d < _e.length; _d++) { ++ var moduleName = _e[_d]; + _loop_3(moduleName); + } + } + if (!foundGlobal) { +- ts.forEachAncestorDirectory(scriptPath, function (ancestor) { +- var nodeModules = ts.combinePaths(ancestor, "node_modules"); +- if (ts.tryDirectoryExists(host, nodeModules)) { +- getCompletionEntriesForDirectoryFragment(fragment, nodeModules, extensionOptions, host, /*exclude*/ undefined, result); ++ var pnpapi = (_b = (_a = require("module")).findPnpApi) === null || _b === void 0 ? void 0 : _b.call(_a, scriptPath); ++ if (pnpapi) { ++ try { ++ // Splits a require request into its components, or return null if the request is a file path ++ var pathRegExp = /^(?![a-zA-Z]:[\\/]|\\\\|\.{0,2}(?:\/|$))((?:@[^/]+\/)?[^/]+)\/*(.*|)$/; ++ var dependencyNameMatch = fragment.match(pathRegExp); ++ if (dependencyNameMatch) { ++ var dependencyName = dependencyNameMatch[1], subPath = dependencyNameMatch[2]; ++ var unqualified = pnpapi.resolveToUnqualified(dependencyName, scriptPath, { considerBuiltins: false }); ++ if (unqualified) { ++ getCompletionEntriesForDirectoryFragment(subPath, ts.normalizePath(unqualified), extensionOptions, host, /*exclude*/ undefined, result); ++ } ++ } + } +- }); ++ catch (_f) { } ++ } ++ else { ++ ts.forEachAncestorDirectory(scriptPath, function (ancestor) { ++ var nodeModules = ts.combinePaths(ancestor, "node_modules"); ++ if (ts.tryDirectoryExists(host, nodeModules)) { ++ getCompletionEntriesForDirectoryFragment(fragment, nodeModules, extensionOptions, host, /*exclude*/ undefined, result); ++ } ++ }); ++ } + } + } + return result; +@@ -123524,6 +123734,7 @@ var ts; + return addReplacementSpans(toComplete, range.pos + prefix.length, names); + } + function getCompletionEntriesFromTypings(host, options, scriptPath, fragmentDirectory, extensionOptions, result) { ++ var _a, _b; + if (result === void 0) { result = []; } + // Check for typings specified in compiler options + var seen = new ts.Map(); +@@ -123532,11 +123743,19 @@ var ts; + var root = typeRoots_1[_i]; + getCompletionEntriesFromDirectories(root); + } +- // Also get all @types typings installed in visible node_modules directories +- for (var _a = 0, _b = ts.findPackageJsons(scriptPath, host); _a < _b.length; _a++) { +- var packageJson = _b[_a]; +- var typesDir = ts.combinePaths(ts.getDirectoryPath(packageJson), "node_modules/@types"); +- getCompletionEntriesFromDirectories(typesDir); ++ if ((_b = (_a = require("module")).findPnpApi) === null || _b === void 0 ? void 0 : _b.call(_a, scriptPath)) { ++ for (var _c = 0, _d = ts.getPnpTypeRoots(scriptPath); _c < _d.length; _c++) { ++ var root = _d[_c]; ++ getCompletionEntriesFromDirectories(root); ++ } ++ } ++ else { ++ // Also get all @types typings installed in visible node_modules directories ++ for (var _e = 0, _f = ts.findPackageJsons(scriptPath, host); _e < _f.length; _e++) { ++ var packageJson = _f[_e]; ++ var typesDir = ts.combinePaths(ts.getDirectoryPath(packageJson), "node_modules/@types"); ++ getCompletionEntriesFromDirectories(typesDir); ++ } + } + return result; + function getCompletionEntriesFromDirectories(directory) { +@@ -151024,9 +151243,9 @@ var ts; + if (isTopLevelDeclarationStatement(statement) && + !isExported(sourceFile, statement, useEs6Exports) && + forEachTopLevelDeclaration(statement, function (d) { return needExport.has(ts.Debug.checkDefined(d.symbol)); })) { +- var exports = addExport(statement, useEs6Exports); +- if (exports) +- return exports; ++ var exports_1 = addExport(statement, useEs6Exports); ++ if (exports_1) ++ return exports_1; + } + return statement; + }); +diff --git a/lib/typescriptServices.d.ts b/lib/typescriptServices.d.ts +index 2d44d601a..6fe4cf63a 100644 +semver exclusivity >=4.3.1-rc +--- a/lib/typescriptServices.d.ts ++++ b/lib/typescriptServices.d.ts +@@ -4710,6 +4710,7 @@ declare namespace ts { + } + declare namespace ts { + export function getEffectiveTypeRoots(options: CompilerOptions, host: GetEffectiveTypeRootsHost): string[] | undefined; ++ export function getPnpTypeRoots(currentDirectory: string): string[]; + /** + * @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..2d49e271b 100644 +semver exclusivity >=4.3.1-rc +--- a/lib/typescriptServices.js ++++ b/lib/typescriptServices.js +@@ -7532,6 +7532,11 @@ var ts; + : new Buffer(input, encoding); + } + function isFileSystemCaseSensitive() { ++ // The PnP runtime is always case-sensitive ++ // @ts-ignore ++ if (process.versions.pnp) { ++ return true; ++ } + // win32\win64 are case insensitive platforms + if (platform === "win32" || platform === "win64") { + return false; +@@ -40197,24 +40202,56 @@ 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) { ++ var pnpapi = getPnpApi(currentDirectory); ++ if (!pnpapi) { ++ return []; ++ } ++ // Some TS consumers pass relative paths that aren't normalized ++ currentDirectory = ts.sys.resolvePath(currentDirectory); ++ var currentPackage = pnpapi.findPackageLocator(currentDirectory + "/"); ++ if (!currentPackage) { ++ return []; ++ } ++ var packageDependencies = pnpapi.getPackageInformation(currentPackage).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; ++ } ++ ts.getPnpTypeRoots = getPnpTypeRoots; ++ var typesPackagePrefix = "@types/"; ++ function getDefaultTypeRoots(currentDirectory, host) { ++ var nmTypes = getNodeModulesTypeRoots(currentDirectory, host); ++ var pnpTypes = getPnpTypeRoots(currentDirectory); ++ if (nmTypes.length > 0 || pnpTypes.length > 0) { ++ return __spreadArray(__spreadArray([], 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 +@@ -40328,7 +40365,9 @@ var ts; + } + var result_4; + if (!ts.isExternalModuleNameRelative(typeReferenceDirectiveName)) { +- var searchResult = loadModuleFromNearestNodeModulesDirectory(Extensions.DtsOnly, typeReferenceDirectiveName, initialLocationForSecondaryLookup, moduleResolutionState, /*cache*/ undefined, /*redirectedReference*/ undefined); ++ var searchResult = getPnpApi(initialLocationForSecondaryLookup) ++ ? tryLoadModuleUsingPnpResolution(Extensions.DtsOnly, typeReferenceDirectiveName, initialLocationForSecondaryLookup, moduleResolutionState) ++ : loadModuleFromNearestNodeModulesDirectory(Extensions.DtsOnly, typeReferenceDirectiveName, initialLocationForSecondaryLookup, moduleResolutionState, /*cache*/ undefined, /*redirectedReference*/ undefined); + result_4 = searchResult && searchResult.value; + } + else { +@@ -40879,9 +40918,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 = getPnpApi(containingDirectory) ++ ? 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); +@@ -41226,6 +41268,14 @@ var ts; + } + function loadModuleFromSpecificNodeModulesDirectory(extensions, moduleName, nodeModulesDirectory, nodeModulesDirectoryExists, state) { + var candidate = ts.normalizePath(ts.combinePaths(nodeModulesDirectory, moduleName)); ++ return loadModuleFromSpecificNodeModulesDirectoryImpl(extensions, moduleName, nodeModulesDirectory, nodeModulesDirectoryExists, state, candidate, undefined, undefined); ++ } ++ function loadModuleFromPnpResolution(extensions, packageDirectory, rest, state) { ++ var candidate = ts.normalizePath(ts.combinePaths(packageDirectory, rest)); ++ return loadModuleFromSpecificNodeModulesDirectoryImpl(extensions, undefined, undefined, true, state, candidate, rest, packageDirectory); ++ } ++ function loadModuleFromSpecificNodeModulesDirectoryImpl(extensions, moduleName, nodeModulesDirectory, nodeModulesDirectoryExists, state, candidate, rest, packageDirectory) { ++ var _a; + // First look for a nested package.json, as in `node_modules/foo/bar/package.json`. + var packageInfo = getPackageJsonInfo(candidate, !nodeModulesDirectoryExists, state); + if (packageInfo) { +@@ -41241,9 +41291,12 @@ var ts; + loadNodeModuleFromDirectoryWorker(extensions, candidate, onlyRecordFailures, state, packageInfo && packageInfo.packageJsonContent, packageInfo && packageInfo.versionPaths); + return withPackageId(packageInfo, pathAndExtension); + }; +- var _a = parsePackageName(moduleName), packageName = _a.packageName, rest = _a.rest; ++ var packageName; ++ if (rest === undefined) ++ (_a = parsePackageName(moduleName), packageName = _a.packageName, rest = _a.rest); + if (rest !== "") { // If "rest" is empty, we just did this search above. +- var packageDirectory = ts.combinePaths(nodeModulesDirectory, packageName); ++ if (packageDirectory === undefined) ++ packageDirectory = ts.combinePaths(nodeModulesDirectory, packageName); + // Don't use a "types" or "main" from here because we're not loading the root, but a subdirectory -- just here for the packageId and path mappings. + packageInfo = getPackageJsonInfo(packageDirectory, !nodeModulesDirectoryExists, state); + if (packageInfo && packageInfo.versionPaths) { +@@ -41401,6 +41454,58 @@ 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 getPnpApi(path) { ++ var findPnpApi = require("module").findPnpApi; ++ if (findPnpApi === undefined) { ++ return undefined; ++ } ++ return findPnpApi(path + "/"); ++ } ++ function loadPnpPackageResolution(packageName, containingDirectory) { ++ try { ++ var resolution = getPnpApi(containingDirectory).resolveToUnqualified(packageName, containingDirectory + "/", { considerBuiltins: false }); ++ return ts.normalizeSlashes(resolution); ++ } ++ 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 ++ ? loadModuleFromPnpResolution(extensions, packageResolution, rest, state) ++ : undefined; ++ var resolved; ++ if (packageFullResolution) { ++ resolved = packageFullResolution; ++ } ++ else if (extensions === Extensions.TypeScript || extensions === Extensions.DtsOnly) { ++ var typePackageResolution = loadPnpTypePackageResolution(packageName, containingDirectory); ++ var typePackageFullResolution = typePackageResolution ++ ? loadModuleFromPnpResolution(Extensions.DtsOnly, typePackageResolution, rest, state) ++ : undefined; ++ if (typePackageFullResolution) { ++ resolved = typePackageFullResolution; ++ } ++ } ++ if (resolved) { ++ return toSearchResult(resolved); ++ } ++ } + })(ts || (ts = {})); + /* @internal */ + var ts; +@@ -108502,6 +108607,8 @@ var ts; + ConfigFileProgramReloadLevel[ConfigFileProgramReloadLevel["Partial"] = 1] = "Partial"; + /** Reload completely by re-reading contents of config file from disk and updating program */ + ConfigFileProgramReloadLevel[ConfigFileProgramReloadLevel["Full"] = 2] = "Full"; ++ /** Reload the resolutions */ ++ ConfigFileProgramReloadLevel[ConfigFileProgramReloadLevel["Resolutions"] = 3] = "Resolutions"; + })(ConfigFileProgramReloadLevel = ts.ConfigFileProgramReloadLevel || (ts.ConfigFileProgramReloadLevel = {})); + /** + * Updates the map of shared extended config file watches with a new set of extended config files from a base config file of the project +@@ -114889,6 +114996,29 @@ var ts; + return undefined; + } + var parts = getNodeModulePathParts(path); ++ var packageName; ++ if (!parts && typeof process.versions.pnp !== "undefined") { ++ var pnpApi = require("pnpapi"); ++ var locator = pnpApi.findPackageLocator(path); ++ // eslint-disable-next-line no-null/no-null ++ if (locator !== null) { ++ var sourceLocator = pnpApi.findPackageLocator(sourceDirectory + "/"); ++ // Don't use the package name when the imported file is inside ++ // the source directory (prefer a relative path instead) ++ if (locator === sourceLocator) { ++ return undefined; ++ } ++ var information = pnpApi.getPackageInformation(locator); ++ packageName = locator.name; ++ parts = { ++ topLevelNodeModulesIndex: undefined, ++ topLevelPackageNameIndex: undefined, ++ // The last character from packageLocation is the trailing "/", we want to point to it ++ packageRootIndex: information.packageLocation.length - 1, ++ fileNameIndex: path.lastIndexOf("/"), ++ }; ++ } ++ } + if (!parts) { + return undefined; + } +@@ -114919,18 +115049,24 @@ var ts; + if (isRedirect && !isPackageRootPath) { + return undefined; + } +- var globalTypingsCacheLocation = host.getGlobalTypingsCacheLocation && host.getGlobalTypingsCacheLocation(); +- // Get a path that's relative to node_modules or the importing file's path +- // if node_modules folder is in this folder or any of its parent folders, no need to keep it. +- var pathToTopLevelNodeModules = getCanonicalFileName(moduleSpecifier.substring(0, parts.topLevelNodeModulesIndex)); +- if (!(ts.startsWith(sourceDirectory, pathToTopLevelNodeModules) || globalTypingsCacheLocation && ts.startsWith(getCanonicalFileName(globalTypingsCacheLocation), pathToTopLevelNodeModules))) { +- return undefined; ++ // If PnP is enabled the node_modules entries we'll get will always be relevant even if they ++ // are located in a weird path apparently outside of the source directory ++ if (typeof process.versions.pnp === "undefined") { ++ var globalTypingsCacheLocation = host.getGlobalTypingsCacheLocation && host.getGlobalTypingsCacheLocation(); ++ // Get a path that's relative to node_modules or the importing file's path ++ // if node_modules folder is in this folder or any of its parent folders, no need to keep it. ++ var pathToTopLevelNodeModules = getCanonicalFileName(moduleSpecifier.substring(0, parts.topLevelNodeModulesIndex)); ++ if (!(ts.startsWith(sourceDirectory, pathToTopLevelNodeModules) || globalTypingsCacheLocation && ts.startsWith(getCanonicalFileName(globalTypingsCacheLocation), pathToTopLevelNodeModules))) { ++ return undefined; ++ } + } + // If the module was found in @types, get the actual Node package name +- var nodeModulesDirectoryName = moduleSpecifier.substring(parts.topLevelPackageNameIndex + 1); +- var packageName = ts.getPackageNameFromTypesPackageName(nodeModulesDirectoryName); ++ var nodeModulesDirectoryName = typeof packageName !== "undefined" ++ ? packageName + moduleSpecifier.substring(parts.packageRootIndex) ++ : moduleSpecifier.substring(parts.topLevelPackageNameIndex + 1); ++ var packageNameFromPath = ts.getPackageNameFromTypesPackageName(nodeModulesDirectoryName); + // For classic resolution, only allow importing from node_modules/@types, not other node_modules +- return ts.getEmitModuleResolutionKind(options) !== ts.ModuleResolutionKind.NodeJs && packageName === nodeModulesDirectoryName ? undefined : packageName; ++ return ts.getEmitModuleResolutionKind(options) !== ts.ModuleResolutionKind.NodeJs && packageNameFromPath === nodeModulesDirectoryName ? undefined : packageNameFromPath; + function tryDirectoryWithPackageJson(packageRootIndex) { + var packageRootPath = path.substring(0, packageRootIndex); + var packageJsonPath = ts.combinePaths(packageRootPath, "package.json"); +@@ -115718,6 +115854,10 @@ var ts; + if (configFileName) { + configFileWatcher = watchFile(configFileName, scheduleProgramReload, ts.PollingInterval.High, watchOptions, ts.WatchType.ConfigFile); + } ++ var pnpFileWatcher; ++ if (typeof process.versions.pnp !== "undefined") { ++ pnpFileWatcher = watchFile(require.resolve("pnpapi"), scheduleResolutionReload, ts.PollingInterval.High, watchOptions, ts.WatchType.ConfigFile); ++ } + var compilerHost = ts.createCompilerHostFromProgramHost(host, function () { return compilerOptions; }, directoryStructureHost); + ts.setGetSourceFileAsHashVersioned(compilerHost, host); + // Members for CompilerHost +@@ -115796,6 +115936,10 @@ var ts; + configFileWatcher.close(); + configFileWatcher = undefined; + } ++ if (pnpFileWatcher) { ++ pnpFileWatcher.close(); ++ pnpFileWatcher = undefined; ++ } + extendedConfigCache === null || extendedConfigCache === void 0 ? void 0 : extendedConfigCache.clear(); + extendedConfigCache = undefined; + if (sharedExtendedConfigFileWatchers) { +@@ -115828,7 +115972,8 @@ var ts; + function getCurrentProgram() { + return builderProgram && builderProgram.getProgramOrUndefined(); + } +- function synchronizeProgram() { ++ function synchronizeProgram(forceAllFilesAsInvalidated) { ++ if (forceAllFilesAsInvalidated === void 0) { forceAllFilesAsInvalidated = false; } + writeLog("Synchronizing program"); + clearInvalidateResolutionsOfFailedLookupLocations(); + var program = getCurrentBuilderProgram(); +@@ -115839,7 +115984,7 @@ var ts; + } + } + // All resolutions are invalid if user provided resolutions +- var hasInvalidatedResolution = resolutionCache.createHasInvalidatedResolution(userProvidedResolution); ++ var hasInvalidatedResolution = resolutionCache.createHasInvalidatedResolution(userProvidedResolution || forceAllFilesAsInvalidated); + if (ts.isProgramUptoDate(getCurrentProgram(), rootFileNames, compilerOptions, getSourceVersion, fileExists, hasInvalidatedResolution, hasChangedAutomaticTypeDirectiveNames, getParsedCommandLine, projectReferences)) { + if (hasChangedConfigFileParsingErrors) { + builderProgram = createProgram(/*rootNames*/ undefined, /*options*/ undefined, compilerHost, builderProgram, configFileParsingDiagnostics, projectReferences); +@@ -116039,6 +116184,12 @@ var ts; + reloadLevel = ts.ConfigFileProgramReloadLevel.Full; + scheduleProgramUpdate(); + } ++ function scheduleResolutionReload() { ++ writeLog("Clearing resolutions"); ++ resolutionCache.clear(); ++ reloadLevel = ts.ConfigFileProgramReloadLevel.Resolutions; ++ scheduleProgramUpdate(); ++ } + function updateProgramWithWatchStatus() { + timerToUpdateProgram = undefined; + reportWatchDiagnostic(ts.Diagnostics.File_change_detected_Starting_incremental_compilation); +@@ -116054,6 +116205,10 @@ var ts; + ts.perfLogger.logStartUpdateProgram("FullConfigReload"); + reloadConfigFile(); + break; ++ case ts.ConfigFileProgramReloadLevel.Resolutions: ++ ts.perfLogger.logStartUpdateProgram("SynchronizeProgramWithResolutions"); ++ synchronizeProgram(/*forceAllFilesAsInvalidated*/ true); ++ break; + default: + ts.perfLogger.logStartUpdateProgram("SynchronizeProgram"); + synchronizeProgram(); +@@ -121701,11 +121856,27 @@ var ts; + return hasImportablePath; + } + ts.isImportableFile = isImportableFile; ++ /** ++ * 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 getPnpApi(path) { ++ var findPnpApi = require("module").findPnpApi; ++ if (findPnpApi === undefined) { ++ return undefined; ++ } ++ return findPnpApi(path + "/"); ++ } + /** + * Don't include something from a `node_modules` that isn't actually reachable by a global import. + * A relative import to node_modules is usually a bad idea. + */ +- function isImportablePath(fromPath, toPath, getCanonicalFileName, globalCachePath) { ++ function isImportablePathNode(fromPath, toPath, getCanonicalFileName, globalCachePath) { + // If it's in a `node_modules` but is not reachable from here via a global import, don't bother. + var toNodeModules = ts.forEachAncestorDirectory(toPath, function (ancestor) { return ts.getBaseFileName(ancestor) === "node_modules" ? ancestor : undefined; }); + var toNodeModulesParent = toNodeModules && ts.getDirectoryPath(getCanonicalFileName(toNodeModules)); +@@ -121713,6 +121884,26 @@ var ts; + || ts.startsWith(getCanonicalFileName(fromPath), toNodeModulesParent) + || (!!globalCachePath && ts.startsWith(getCanonicalFileName(globalCachePath), toNodeModulesParent)); + } ++ function isImportablePathPnp(fromPath, toPath) { ++ var pnpApi = getPnpApi(fromPath); ++ var fromLocator = pnpApi.findPackageLocator(fromPath); ++ var toLocator = pnpApi.findPackageLocator(toPath); ++ // eslint-disable-next-line no-null/no-null ++ if (toLocator === null) { ++ return false; ++ } ++ var fromInfo = pnpApi.getPackageInformation(fromLocator); ++ var toReference = fromInfo.packageDependencies.get(toLocator.name); ++ return toReference === toLocator.reference; ++ } ++ function isImportablePath(fromPath, toPath, getCanonicalFileName, globalCachePath) { ++ if (getPnpApi(fromPath)) { ++ return isImportablePathPnp(fromPath, toPath); ++ } ++ else { ++ return isImportablePathNode(fromPath, toPath, getCanonicalFileName, globalCachePath); ++ } ++ } + // #endregion + })(ts || (ts = {})); + var ts; +@@ -123384,6 +123575,7 @@ var ts; + * This includes all files that are found in node_modules/moduleName/ with acceptable file extensions + */ + function getCompletionEntriesForNonRelativeModules(fragment, scriptPath, compilerOptions, host, typeChecker) { ++ var _a, _b; + var baseUrl = compilerOptions.baseUrl, paths = compilerOptions.paths; + var result = []; + var extensionOptions = getExtensionOptions(compilerOptions); +@@ -123396,8 +123588,8 @@ var ts; + } + } + var fragmentDirectory = getFragmentDirectory(fragment); +- for (var _i = 0, _a = getAmbientModuleCompletions(fragment, fragmentDirectory, typeChecker); _i < _a.length; _i++) { +- var ambientName = _a[_i]; ++ for (var _i = 0, _c = getAmbientModuleCompletions(fragment, fragmentDirectory, typeChecker); _i < _c.length; _i++) { ++ var ambientName = _c[_i]; + result.push(nameAndKind(ambientName, "external module name" /* externalModuleName */, /*extension*/ undefined)); + } + getCompletionEntriesFromTypings(host, compilerOptions, scriptPath, fragmentDirectory, extensionOptions, result); +@@ -123412,18 +123604,36 @@ var ts; + result.push(nameAndKind(moduleName, "external module name" /* externalModuleName */, /*extension*/ undefined)); + } + }; +- for (var _b = 0, _c = enumerateNodeModulesVisibleToScript(host, scriptPath); _b < _c.length; _b++) { +- var moduleName = _c[_b]; ++ for (var _d = 0, _e = enumerateNodeModulesVisibleToScript(host, scriptPath); _d < _e.length; _d++) { ++ var moduleName = _e[_d]; + _loop_3(moduleName); + } + } + if (!foundGlobal) { +- ts.forEachAncestorDirectory(scriptPath, function (ancestor) { +- var nodeModules = ts.combinePaths(ancestor, "node_modules"); +- if (ts.tryDirectoryExists(host, nodeModules)) { +- getCompletionEntriesForDirectoryFragment(fragment, nodeModules, extensionOptions, host, /*exclude*/ undefined, result); ++ var pnpapi = (_b = (_a = require("module")).findPnpApi) === null || _b === void 0 ? void 0 : _b.call(_a, scriptPath); ++ if (pnpapi) { ++ try { ++ // Splits a require request into its components, or return null if the request is a file path ++ var pathRegExp = /^(?![a-zA-Z]:[\\/]|\\\\|\.{0,2}(?:\/|$))((?:@[^/]+\/)?[^/]+)\/*(.*|)$/; ++ var dependencyNameMatch = fragment.match(pathRegExp); ++ if (dependencyNameMatch) { ++ var dependencyName = dependencyNameMatch[1], subPath = dependencyNameMatch[2]; ++ var unqualified = pnpapi.resolveToUnqualified(dependencyName, scriptPath, { considerBuiltins: false }); ++ if (unqualified) { ++ getCompletionEntriesForDirectoryFragment(subPath, ts.normalizePath(unqualified), extensionOptions, host, /*exclude*/ undefined, result); ++ } ++ } + } +- }); ++ catch (_f) { } ++ } ++ else { ++ ts.forEachAncestorDirectory(scriptPath, function (ancestor) { ++ var nodeModules = ts.combinePaths(ancestor, "node_modules"); ++ if (ts.tryDirectoryExists(host, nodeModules)) { ++ getCompletionEntriesForDirectoryFragment(fragment, nodeModules, extensionOptions, host, /*exclude*/ undefined, result); ++ } ++ }); ++ } + } + } + return result; +@@ -123524,6 +123734,7 @@ var ts; + return addReplacementSpans(toComplete, range.pos + prefix.length, names); + } + function getCompletionEntriesFromTypings(host, options, scriptPath, fragmentDirectory, extensionOptions, result) { ++ var _a, _b; + if (result === void 0) { result = []; } + // Check for typings specified in compiler options + var seen = new ts.Map(); +@@ -123532,11 +123743,19 @@ var ts; + var root = typeRoots_1[_i]; + getCompletionEntriesFromDirectories(root); + } +- // Also get all @types typings installed in visible node_modules directories +- for (var _a = 0, _b = ts.findPackageJsons(scriptPath, host); _a < _b.length; _a++) { +- var packageJson = _b[_a]; +- var typesDir = ts.combinePaths(ts.getDirectoryPath(packageJson), "node_modules/@types"); +- getCompletionEntriesFromDirectories(typesDir); ++ if ((_b = (_a = require("module")).findPnpApi) === null || _b === void 0 ? void 0 : _b.call(_a, scriptPath)) { ++ for (var _c = 0, _d = ts.getPnpTypeRoots(scriptPath); _c < _d.length; _c++) { ++ var root = _d[_c]; ++ getCompletionEntriesFromDirectories(root); ++ } ++ } ++ else { ++ // Also get all @types typings installed in visible node_modules directories ++ for (var _e = 0, _f = ts.findPackageJsons(scriptPath, host); _e < _f.length; _e++) { ++ var packageJson = _f[_e]; ++ var typesDir = ts.combinePaths(ts.getDirectoryPath(packageJson), "node_modules/@types"); ++ getCompletionEntriesFromDirectories(typesDir); ++ } + } + return result; + function getCompletionEntriesFromDirectories(directory) { +@@ -151024,9 +151243,9 @@ var ts; + if (isTopLevelDeclarationStatement(statement) && + !isExported(sourceFile, statement, useEs6Exports) && + forEachTopLevelDeclaration(statement, function (d) { return needExport.has(ts.Debug.checkDefined(d.symbol)); })) { +- var exports = addExport(statement, useEs6Exports); +- if (exports) +- return exports; ++ var exports_1 = addExport(statement, useEs6Exports); ++ if (exports_1) ++ return exports_1; + } + return statement; + }); +diff --git a/lib/typingsInstaller.js b/lib/typingsInstaller.js +index 6810860b9..3b1d2e432 100644 +semver exclusivity >=4.3.1-rc +--- a/lib/typingsInstaller.js ++++ b/lib/typingsInstaller.js +@@ -7327,6 +7327,11 @@ var ts; + : new Buffer(input, encoding); + } + function isFileSystemCaseSensitive() { ++ // The PnP runtime is always case-sensitive ++ // @ts-ignore ++ if (process.versions.pnp) { ++ return true; ++ } + // win32\win64 are case insensitive platforms + if (platform === "win32" || platform === "win64") { + return false; +@@ -39992,24 +39997,56 @@ 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) { ++ var pnpapi = getPnpApi(currentDirectory); ++ if (!pnpapi) { ++ return []; ++ } ++ // Some TS consumers pass relative paths that aren't normalized ++ currentDirectory = ts.sys.resolvePath(currentDirectory); ++ var currentPackage = pnpapi.findPackageLocator(currentDirectory + "/"); ++ if (!currentPackage) { ++ return []; ++ } ++ var packageDependencies = pnpapi.getPackageInformation(currentPackage).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; ++ } ++ ts.getPnpTypeRoots = getPnpTypeRoots; ++ var typesPackagePrefix = "@types/"; ++ function getDefaultTypeRoots(currentDirectory, host) { ++ var nmTypes = getNodeModulesTypeRoots(currentDirectory, host); ++ var pnpTypes = getPnpTypeRoots(currentDirectory); ++ if (nmTypes.length > 0 || pnpTypes.length > 0) { ++ return __spreadArray(__spreadArray([], 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 +@@ -40123,7 +40160,9 @@ var ts; + } + var result_4; + if (!ts.isExternalModuleNameRelative(typeReferenceDirectiveName)) { +- var searchResult = loadModuleFromNearestNodeModulesDirectory(Extensions.DtsOnly, typeReferenceDirectiveName, initialLocationForSecondaryLookup, moduleResolutionState, /*cache*/ undefined, /*redirectedReference*/ undefined); ++ var searchResult = getPnpApi(initialLocationForSecondaryLookup) ++ ? tryLoadModuleUsingPnpResolution(Extensions.DtsOnly, typeReferenceDirectiveName, initialLocationForSecondaryLookup, moduleResolutionState) ++ : loadModuleFromNearestNodeModulesDirectory(Extensions.DtsOnly, typeReferenceDirectiveName, initialLocationForSecondaryLookup, moduleResolutionState, /*cache*/ undefined, /*redirectedReference*/ undefined); + result_4 = searchResult && searchResult.value; + } + else { +@@ -40674,9 +40713,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 = getPnpApi(containingDirectory) ++ ? 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); +@@ -41021,6 +41063,14 @@ var ts; + } + function loadModuleFromSpecificNodeModulesDirectory(extensions, moduleName, nodeModulesDirectory, nodeModulesDirectoryExists, state) { + var candidate = ts.normalizePath(ts.combinePaths(nodeModulesDirectory, moduleName)); ++ return loadModuleFromSpecificNodeModulesDirectoryImpl(extensions, moduleName, nodeModulesDirectory, nodeModulesDirectoryExists, state, candidate, undefined, undefined); ++ } ++ function loadModuleFromPnpResolution(extensions, packageDirectory, rest, state) { ++ var candidate = ts.normalizePath(ts.combinePaths(packageDirectory, rest)); ++ return loadModuleFromSpecificNodeModulesDirectoryImpl(extensions, undefined, undefined, true, state, candidate, rest, packageDirectory); ++ } ++ function loadModuleFromSpecificNodeModulesDirectoryImpl(extensions, moduleName, nodeModulesDirectory, nodeModulesDirectoryExists, state, candidate, rest, packageDirectory) { ++ var _a; + // First look for a nested package.json, as in `node_modules/foo/bar/package.json`. + var packageInfo = getPackageJsonInfo(candidate, !nodeModulesDirectoryExists, state); + if (packageInfo) { +@@ -41036,9 +41086,12 @@ var ts; + loadNodeModuleFromDirectoryWorker(extensions, candidate, onlyRecordFailures, state, packageInfo && packageInfo.packageJsonContent, packageInfo && packageInfo.versionPaths); + return withPackageId(packageInfo, pathAndExtension); + }; +- var _a = parsePackageName(moduleName), packageName = _a.packageName, rest = _a.rest; ++ var packageName; ++ if (rest === undefined) ++ (_a = parsePackageName(moduleName), packageName = _a.packageName, rest = _a.rest); + if (rest !== "") { // If "rest" is empty, we just did this search above. +- var packageDirectory = ts.combinePaths(nodeModulesDirectory, packageName); ++ if (packageDirectory === undefined) ++ packageDirectory = ts.combinePaths(nodeModulesDirectory, packageName); + // Don't use a "types" or "main" from here because we're not loading the root, but a subdirectory -- just here for the packageId and path mappings. + packageInfo = getPackageJsonInfo(packageDirectory, !nodeModulesDirectoryExists, state); + if (packageInfo && packageInfo.versionPaths) { +@@ -41196,6 +41249,58 @@ 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 getPnpApi(path) { ++ var findPnpApi = require("module").findPnpApi; ++ if (findPnpApi === undefined) { ++ return undefined; ++ } ++ return findPnpApi(path + "/"); ++ } ++ function loadPnpPackageResolution(packageName, containingDirectory) { ++ try { ++ var resolution = getPnpApi(containingDirectory).resolveToUnqualified(packageName, containingDirectory + "/", { considerBuiltins: false }); ++ return ts.normalizeSlashes(resolution); ++ } ++ 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 ++ ? loadModuleFromPnpResolution(extensions, packageResolution, rest, state) ++ : undefined; ++ var resolved; ++ if (packageFullResolution) { ++ resolved = packageFullResolution; ++ } ++ else if (extensions === Extensions.TypeScript || extensions === Extensions.DtsOnly) { ++ var typePackageResolution = loadPnpTypePackageResolution(packageName, containingDirectory); ++ var typePackageFullResolution = typePackageResolution ++ ? loadModuleFromPnpResolution(Extensions.DtsOnly, typePackageResolution, rest, state) ++ : undefined; ++ if (typePackageFullResolution) { ++ resolved = typePackageFullResolution; ++ } ++ } ++ if (resolved) { ++ return toSearchResult(resolved); ++ } ++ } + })(ts || (ts = {})); + /* @internal */ + var ts; +@@ -108297,6 +108402,8 @@ var ts; + ConfigFileProgramReloadLevel[ConfigFileProgramReloadLevel["Partial"] = 1] = "Partial"; + /** Reload completely by re-reading contents of config file from disk and updating program */ + ConfigFileProgramReloadLevel[ConfigFileProgramReloadLevel["Full"] = 2] = "Full"; ++ /** Reload the resolutions */ ++ ConfigFileProgramReloadLevel[ConfigFileProgramReloadLevel["Resolutions"] = 3] = "Resolutions"; + })(ConfigFileProgramReloadLevel = ts.ConfigFileProgramReloadLevel || (ts.ConfigFileProgramReloadLevel = {})); + /** + * Updates the map of shared extended config file watches with a new set of extended config files from a base config file of the project +@@ -114684,6 +114791,29 @@ var ts; + return undefined; + } + var parts = getNodeModulePathParts(path); ++ var packageName; ++ if (!parts && typeof process.versions.pnp !== "undefined") { ++ var pnpApi = require("pnpapi"); ++ var locator = pnpApi.findPackageLocator(path); ++ // eslint-disable-next-line no-null/no-null ++ if (locator !== null) { ++ var sourceLocator = pnpApi.findPackageLocator(sourceDirectory + "/"); ++ // Don't use the package name when the imported file is inside ++ // the source directory (prefer a relative path instead) ++ if (locator === sourceLocator) { ++ return undefined; ++ } ++ var information = pnpApi.getPackageInformation(locator); ++ packageName = locator.name; ++ parts = { ++ topLevelNodeModulesIndex: undefined, ++ topLevelPackageNameIndex: undefined, ++ // The last character from packageLocation is the trailing "/", we want to point to it ++ packageRootIndex: information.packageLocation.length - 1, ++ fileNameIndex: path.lastIndexOf("/"), ++ }; ++ } ++ } + if (!parts) { + return undefined; + } +@@ -114714,18 +114844,24 @@ var ts; + if (isRedirect && !isPackageRootPath) { + return undefined; + } +- var globalTypingsCacheLocation = host.getGlobalTypingsCacheLocation && host.getGlobalTypingsCacheLocation(); +- // Get a path that's relative to node_modules or the importing file's path +- // if node_modules folder is in this folder or any of its parent folders, no need to keep it. +- var pathToTopLevelNodeModules = getCanonicalFileName(moduleSpecifier.substring(0, parts.topLevelNodeModulesIndex)); +- if (!(ts.startsWith(sourceDirectory, pathToTopLevelNodeModules) || globalTypingsCacheLocation && ts.startsWith(getCanonicalFileName(globalTypingsCacheLocation), pathToTopLevelNodeModules))) { +- return undefined; ++ // If PnP is enabled the node_modules entries we'll get will always be relevant even if they ++ // are located in a weird path apparently outside of the source directory ++ if (typeof process.versions.pnp === "undefined") { ++ var globalTypingsCacheLocation = host.getGlobalTypingsCacheLocation && host.getGlobalTypingsCacheLocation(); ++ // Get a path that's relative to node_modules or the importing file's path ++ // if node_modules folder is in this folder or any of its parent folders, no need to keep it. ++ var pathToTopLevelNodeModules = getCanonicalFileName(moduleSpecifier.substring(0, parts.topLevelNodeModulesIndex)); ++ if (!(ts.startsWith(sourceDirectory, pathToTopLevelNodeModules) || globalTypingsCacheLocation && ts.startsWith(getCanonicalFileName(globalTypingsCacheLocation), pathToTopLevelNodeModules))) { ++ return undefined; ++ } + } + // If the module was found in @types, get the actual Node package name +- var nodeModulesDirectoryName = moduleSpecifier.substring(parts.topLevelPackageNameIndex + 1); +- var packageName = ts.getPackageNameFromTypesPackageName(nodeModulesDirectoryName); ++ var nodeModulesDirectoryName = typeof packageName !== "undefined" ++ ? packageName + moduleSpecifier.substring(parts.packageRootIndex) ++ : moduleSpecifier.substring(parts.topLevelPackageNameIndex + 1); ++ var packageNameFromPath = ts.getPackageNameFromTypesPackageName(nodeModulesDirectoryName); + // For classic resolution, only allow importing from node_modules/@types, not other node_modules +- return ts.getEmitModuleResolutionKind(options) !== ts.ModuleResolutionKind.NodeJs && packageName === nodeModulesDirectoryName ? undefined : packageName; ++ return ts.getEmitModuleResolutionKind(options) !== ts.ModuleResolutionKind.NodeJs && packageNameFromPath === nodeModulesDirectoryName ? undefined : packageNameFromPath; + function tryDirectoryWithPackageJson(packageRootIndex) { + var packageRootPath = path.substring(0, packageRootIndex); + var packageJsonPath = ts.combinePaths(packageRootPath, "package.json"); +@@ -115513,6 +115649,10 @@ var ts; + if (configFileName) { + configFileWatcher = watchFile(configFileName, scheduleProgramReload, ts.PollingInterval.High, watchOptions, ts.WatchType.ConfigFile); + } ++ var pnpFileWatcher; ++ if (typeof process.versions.pnp !== "undefined") { ++ pnpFileWatcher = watchFile(require.resolve("pnpapi"), scheduleResolutionReload, ts.PollingInterval.High, watchOptions, ts.WatchType.ConfigFile); ++ } + var compilerHost = ts.createCompilerHostFromProgramHost(host, function () { return compilerOptions; }, directoryStructureHost); + ts.setGetSourceFileAsHashVersioned(compilerHost, host); + // Members for CompilerHost +@@ -115591,6 +115731,10 @@ var ts; + configFileWatcher.close(); + configFileWatcher = undefined; + } ++ if (pnpFileWatcher) { ++ pnpFileWatcher.close(); ++ pnpFileWatcher = undefined; ++ } + extendedConfigCache === null || extendedConfigCache === void 0 ? void 0 : extendedConfigCache.clear(); + extendedConfigCache = undefined; + if (sharedExtendedConfigFileWatchers) { +@@ -115623,7 +115767,8 @@ var ts; + function getCurrentProgram() { + return builderProgram && builderProgram.getProgramOrUndefined(); + } +- function synchronizeProgram() { ++ function synchronizeProgram(forceAllFilesAsInvalidated) { ++ if (forceAllFilesAsInvalidated === void 0) { forceAllFilesAsInvalidated = false; } + writeLog("Synchronizing program"); + clearInvalidateResolutionsOfFailedLookupLocations(); + var program = getCurrentBuilderProgram(); +@@ -115634,7 +115779,7 @@ var ts; + } + } + // All resolutions are invalid if user provided resolutions +- var hasInvalidatedResolution = resolutionCache.createHasInvalidatedResolution(userProvidedResolution); ++ var hasInvalidatedResolution = resolutionCache.createHasInvalidatedResolution(userProvidedResolution || forceAllFilesAsInvalidated); + if (ts.isProgramUptoDate(getCurrentProgram(), rootFileNames, compilerOptions, getSourceVersion, fileExists, hasInvalidatedResolution, hasChangedAutomaticTypeDirectiveNames, getParsedCommandLine, projectReferences)) { + if (hasChangedConfigFileParsingErrors) { + builderProgram = createProgram(/*rootNames*/ undefined, /*options*/ undefined, compilerHost, builderProgram, configFileParsingDiagnostics, projectReferences); +@@ -115834,6 +115979,12 @@ var ts; + reloadLevel = ts.ConfigFileProgramReloadLevel.Full; + scheduleProgramUpdate(); + } ++ function scheduleResolutionReload() { ++ writeLog("Clearing resolutions"); ++ resolutionCache.clear(); ++ reloadLevel = ts.ConfigFileProgramReloadLevel.Resolutions; ++ scheduleProgramUpdate(); ++ } + function updateProgramWithWatchStatus() { + timerToUpdateProgram = undefined; + reportWatchDiagnostic(ts.Diagnostics.File_change_detected_Starting_incremental_compilation); +@@ -115849,6 +116000,10 @@ var ts; + ts.perfLogger.logStartUpdateProgram("FullConfigReload"); + reloadConfigFile(); + break; ++ case ts.ConfigFileProgramReloadLevel.Resolutions: ++ ts.perfLogger.logStartUpdateProgram("SynchronizeProgramWithResolutions"); ++ synchronizeProgram(/*forceAllFilesAsInvalidated*/ true); ++ break; + default: + ts.perfLogger.logStartUpdateProgram("SynchronizeProgram"); + synchronizeProgram(); diff --git a/packages/plugin-compat/extra/typescript/patch-98f5e425be004a406efe4231fdfb46c7.diff b/packages/plugin-compat/extra/typescript/patch-8620acf99aada088fa89332ce2fe8f64.diff similarity index 99% rename from packages/plugin-compat/extra/typescript/patch-98f5e425be004a406efe4231fdfb46c7.diff rename to packages/plugin-compat/extra/typescript/patch-8620acf99aada088fa89332ce2fe8f64.diff index d1b1652c85fb..431d33654780 100644 --- a/packages/plugin-compat/extra/typescript/patch-98f5e425be004a406efe4231fdfb46c7.diff +++ b/packages/plugin-compat/extra/typescript/patch-8620acf99aada088fa89332ce2fe8f64.diff @@ -1,6 +1,6 @@ diff --git a/lib/tsc.js b/lib/tsc.js index 8e68a1124..4fd64540e 100644 -semver exclusivity >=4.3 +semver exclusivity >=4.3 <4.3.1-rc --- a/lib/tsc.js +++ b/lib/tsc.js @@ -4692,6 +4692,9 @@ var ts; @@ -300,7 +300,7 @@ semver exclusivity >=4.3 synchronizeProgram(); diff --git a/lib/tsserver.js b/lib/tsserver.js index 0d581ad61..c1dbea5bc 100644 -semver exclusivity >=4.3 +semver exclusivity >=4.3 <4.3.1-rc --- a/lib/tsserver.js +++ b/lib/tsserver.js @@ -7326,6 +7326,11 @@ var ts; @@ -915,7 +915,7 @@ semver exclusivity >=4.3 // We have to schedule this event to the next tick diff --git a/lib/tsserverlibrary.d.ts b/lib/tsserverlibrary.d.ts index a2ff8fc1e..e32bcee85 100644 -semver exclusivity >=4.3 +semver exclusivity >=4.3 <4.3.1-rc --- a/lib/tsserverlibrary.d.ts +++ b/lib/tsserverlibrary.d.ts @@ -4709,6 +4709,7 @@ declare namespace ts { @@ -928,7 +928,7 @@ semver exclusivity >=4.3 * 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 e33bc9110..3d92b0d0c 100644 -semver exclusivity >=4.3 +semver exclusivity >=4.3 <4.3.1-rc --- a/lib/tsserverlibrary.js +++ b/lib/tsserverlibrary.js @@ -7520,6 +7520,11 @@ var ts; @@ -1523,7 +1523,7 @@ semver exclusivity >=4.3 var watchers = this.packageJsonFilesMap || (this.packageJsonFilesMap = new ts.Map()); diff --git a/lib/typescript.d.ts b/lib/typescript.d.ts index 0b2d291ee..050fb9cf1 100644 -semver exclusivity >=4.3 +semver exclusivity >=4.3 <4.3.1-rc --- a/lib/typescript.d.ts +++ b/lib/typescript.d.ts @@ -4709,6 +4709,7 @@ declare namespace ts { @@ -1536,7 +1536,7 @@ semver exclusivity >=4.3 * 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 07337021a..d65d71c25 100644 -semver exclusivity >=4.3 +semver exclusivity >=4.3 <4.3.1-rc --- a/lib/typescript.js +++ b/lib/typescript.js @@ -7520,6 +7520,11 @@ var ts; @@ -2032,7 +2032,7 @@ semver exclusivity >=4.3 }); diff --git a/lib/typescriptServices.d.ts b/lib/typescriptServices.d.ts index 56e1d342d..09de6de0e 100644 -semver exclusivity >=4.3 +semver exclusivity >=4.3 <4.3.1-rc --- a/lib/typescriptServices.d.ts +++ b/lib/typescriptServices.d.ts @@ -4709,6 +4709,7 @@ declare namespace ts { @@ -2045,7 +2045,7 @@ semver exclusivity >=4.3 * 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 f81ca89a1..1a0d25685 100644 -semver exclusivity >=4.3 +semver exclusivity >=4.3 <4.3.1-rc --- a/lib/typescriptServices.js +++ b/lib/typescriptServices.js @@ -7520,6 +7520,11 @@ var ts; @@ -2541,7 +2541,7 @@ semver exclusivity >=4.3 }); diff --git a/lib/typingsInstaller.js b/lib/typingsInstaller.js index ef8ee6dd2..ee3d9b719 100644 -semver exclusivity >=4.3 +semver exclusivity >=4.3 <4.3.1-rc --- a/lib/typingsInstaller.js +++ b/lib/typingsInstaller.js @@ -7315,6 +7315,11 @@ var ts; diff --git a/packages/plugin-compat/sources/patches/typescript.patch.ts b/packages/plugin-compat/sources/patches/typescript.patch.ts index 15dc7874c8da..8693727ab217 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(`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`, `base64`)).toString(); + patch = require(`zlib`).brotliDecompressSync(Buffer.from(`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`, `base64`)).toString(); return patch; } diff --git a/packages/plugin-constraints/package.json b/packages/plugin-constraints/package.json index 30b485aa08bd..1375e2062319 100644 --- a/packages/plugin-constraints/package.json +++ b/packages/plugin-constraints/package.json @@ -25,7 +25,7 @@ "@yarnpkg/builder": "workspace:*", "@yarnpkg/cli": "workspace:*", "@yarnpkg/core": "workspace:*", - "typescript": "beta" + "typescript": "^4.3.2" }, "scripts": { "build:plugin-constraints": "builder build plugin", diff --git a/packages/plugin-exec/package.json b/packages/plugin-exec/package.json index e18a806abee7..52d8212a0aa8 100644 --- a/packages/plugin-exec/package.json +++ b/packages/plugin-exec/package.json @@ -13,7 +13,7 @@ }, "devDependencies": { "@yarnpkg/core": "workspace:*", - "typescript": "beta" + "typescript": "^4.3.2" }, "scripts": { "build:plugin-exec": "builder build plugin", diff --git a/packages/plugin-interactive-tools/package.json b/packages/plugin-interactive-tools/package.json index 6617fda4d7bb..d7096d00103d 100644 --- a/packages/plugin-interactive-tools/package.json +++ b/packages/plugin-interactive-tools/package.json @@ -27,7 +27,7 @@ "@yarnpkg/cli": "workspace:*", "@yarnpkg/core": "workspace:*", "@yarnpkg/plugin-essentials": "workspace:*", - "typescript": "beta" + "typescript": "^4.3.2" }, "repository": { "type": "git", diff --git a/packages/plugin-stage/package.json b/packages/plugin-stage/package.json index a875a48c74ae..55e510a0e016 100644 --- a/packages/plugin-stage/package.json +++ b/packages/plugin-stage/package.json @@ -16,7 +16,7 @@ "@yarnpkg/builder": "workspace:*", "@yarnpkg/cli": "workspace:*", "@yarnpkg/core": "workspace:*", - "typescript": "beta" + "typescript": "^4.3.2" }, "scripts": { "build:plugin-stage": "builder build plugin", diff --git a/packages/plugin-typescript/package.json b/packages/plugin-typescript/package.json index b27094ddbdea..16d84ec6d295 100644 --- a/packages/plugin-typescript/package.json +++ b/packages/plugin-typescript/package.json @@ -21,7 +21,7 @@ "@yarnpkg/cli": "workspace:*", "@yarnpkg/core": "workspace:*", "@yarnpkg/plugin-essentials": "workspace:*", - "typescript": "beta" + "typescript": "^4.3.2" }, "scripts": { "build:plugin-typescript": "builder build plugin", diff --git a/packages/plugin-version/package.json b/packages/plugin-version/package.json index 62cbf79ae7a8..6c53385fbdbf 100644 --- a/packages/plugin-version/package.json +++ b/packages/plugin-version/package.json @@ -25,7 +25,7 @@ "@yarnpkg/cli": "workspace:*", "@yarnpkg/core": "workspace:*", "@yarnpkg/plugin-pack": "workspace:*", - "typescript": "beta" + "typescript": "^4.3.2" }, "scripts": { "build:plugin-version": "builder build plugin", diff --git a/packages/plugin-workspace-tools/package.json b/packages/plugin-workspace-tools/package.json index 841ba954725c..4872b9d79f40 100644 --- a/packages/plugin-workspace-tools/package.json +++ b/packages/plugin-workspace-tools/package.json @@ -20,7 +20,7 @@ "@yarnpkg/builder": "workspace:*", "@yarnpkg/cli": "workspace:*", "@yarnpkg/core": "workspace:*", - "typescript": "beta" + "typescript": "^4.3.2" }, "scripts": { "build:plugin-workspace-tools": "builder build plugin", diff --git a/packages/vscode-zipfs/package.json b/packages/vscode-zipfs/package.json index c9acdc0fb692..529ff5f7d211 100644 --- a/packages/vscode-zipfs/package.json +++ b/packages/vscode-zipfs/package.json @@ -75,7 +75,7 @@ "@yarnpkg/libzip": "workspace:*", "@yarnpkg/pnpify": "workspace:*", "ts-loader": "^7.0.5", - "typescript": "beta", + "typescript": "^4.3.2", "vsce": "^1.85.1", "webpack": "^5.1.1", "webpack-cli": "^4.0.0-beta.8" diff --git a/packages/yarnpkg-builder/package.json b/packages/yarnpkg-builder/package.json index e4f5aa928889..bdff0ba7c0de 100644 --- a/packages/yarnpkg-builder/package.json +++ b/packages/yarnpkg-builder/package.json @@ -31,7 +31,7 @@ "@types/terser-webpack-plugin": "^3.0.0", "@types/webpack-merge": "^4.1.5", "@yarnpkg/monorepo": "workspace:*", - "typescript": "beta" + "typescript": "^4.3.2" }, "peerDependencies": { "typescript": "*" diff --git a/packages/yarnpkg-cli/package.json b/packages/yarnpkg-cli/package.json index fb011ecba8ca..4dac86ae6ace 100644 --- a/packages/yarnpkg-cli/package.json +++ b/packages/yarnpkg-cli/package.json @@ -40,7 +40,7 @@ "@yarnpkg/monorepo": "workspace:*", "@yarnpkg/pnpify": "workspace:*", "micromatch": "^4.0.2", - "typescript": "beta" + "typescript": "^4.3.2" }, "peerDependencies": { "@yarnpkg/core": "^3.0.0-rc.2" diff --git a/packages/yarnpkg-doctor/package.json b/packages/yarnpkg-doctor/package.json index 7ac5a06b6ee3..2dcf39c20d3f 100644 --- a/packages/yarnpkg-doctor/package.json +++ b/packages/yarnpkg-doctor/package.json @@ -12,7 +12,7 @@ "micromatch": "^4.0.2", "p-limit": "^2.2.0", "tslib": "^1.13.0", - "typescript": "beta" + "typescript": "^4.3.2" }, "devDependencies": { "@types/micromatch": "^4.0.1", diff --git a/packages/yarnpkg-pnp/package.json b/packages/yarnpkg-pnp/package.json index ffb4f2c66be4..7ec6e7197341 100644 --- a/packages/yarnpkg-pnp/package.json +++ b/packages/yarnpkg-pnp/package.json @@ -13,7 +13,7 @@ "@yarnpkg/builder": "workspace:*", "@yarnpkg/libzip": "workspace:*", "@yarnpkg/monorepo": "workspace:*", - "typescript": "beta", + "typescript": "^4.3.2", "webpack": "^5.1.1", "webpack-cli": "^4.0.0-beta.8" }, diff --git a/packages/yarnpkg-pnpify/package.json b/packages/yarnpkg-pnpify/package.json index e69359925ea4..a3f94427ed52 100644 --- a/packages/yarnpkg-pnpify/package.json +++ b/packages/yarnpkg-pnpify/package.json @@ -22,7 +22,7 @@ "@yarnpkg/monorepo": "workspace:*", "@yarnpkg/pnp": "workspace:*", "eslint": "^6.8.0", - "typescript": "beta" + "typescript": "^4.3.2" }, "peerDependencies": { "eslint": "*", diff --git a/yarn.lock b/yarn.lock index ce332ded6d19..d47432f4244b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5489,7 +5489,7 @@ __metadata: terser-webpack-plugin: ^3.0.4 ts-loader: ^7.0.5 tslib: ^1.13.0 - typescript: beta + typescript: ^4.3.2 val-loader: ^2.1.1 webpack: ^5.1.1 webpack-merge: ^4.2.2 @@ -5537,7 +5537,7 @@ __metadata: semver: ^7.1.2 tslib: ^1.13.0 typanion: ^3.3.0 - typescript: beta + typescript: ^4.3.2 yup: ^0.32.9 peerDependencies: "@yarnpkg/core": ^3.0.0-rc.2 @@ -5614,7 +5614,7 @@ __metadata: micromatch: ^4.0.2 p-limit: ^2.2.0 tslib: ^1.13.0 - typescript: beta + typescript: ^4.3.2 bin: doctor: ./sources/boot-cli-dev.js languageName: unknown @@ -5747,7 +5747,7 @@ __metadata: typedoc: next typedoc-neo-theme: ^1.0.7 typedoc-plugin-yarn: "portal:./typedoc-plugin-yarn" - typescript: beta + typescript: ^4.3.2 unescape-html: ^1.1.0 unfetch: ^4.1.0 unified: ^7.1.0 @@ -5825,7 +5825,7 @@ __metadata: jest-junit: ^10.0.0 micromatch: ^4.0.2 tslib: ^1.13.0 - typescript: beta + typescript: ^4.3.2 dependenciesMeta: core-js: built: false @@ -5892,7 +5892,7 @@ __metadata: node-emoji: ^1.8.1 tau-prolog: ^0.2.66 tslib: ^1.13.0 - typescript: beta + typescript: ^4.3.2 peerDependencies: "@yarnpkg/cli": ^3.0.0-rc.2 "@yarnpkg/core": ^3.0.0-rc.2 @@ -5951,7 +5951,7 @@ __metadata: "@yarnpkg/core": "workspace:*" "@yarnpkg/fslib": "workspace:^2.5.0-rc.2" tslib: ^1.13.0 - typescript: beta + typescript: ^4.3.2 peerDependencies: "@yarnpkg/core": ^3.0.0-rc.2 languageName: unknown @@ -6048,7 +6048,7 @@ __metadata: react: ^16.13.1 semver: ^7.1.2 tslib: ^1.13.0 - typescript: beta + typescript: ^4.3.2 peerDependencies: "@yarnpkg/cli": ^3.0.0-rc.2 "@yarnpkg/core": ^3.0.0-rc.2 @@ -6202,7 +6202,7 @@ __metadata: "@yarnpkg/fslib": "workspace:^2.5.0-rc.2" clipanion: ^3.0.0-rc.10 tslib: ^1.13.0 - typescript: beta + typescript: ^4.3.2 peerDependencies: "@yarnpkg/cli": ^3.0.0-rc.2 "@yarnpkg/core": ^3.0.0-rc.2 @@ -6223,7 +6223,7 @@ __metadata: algoliasearch: ^4.2.0 semver: ^7.1.2 tslib: ^1.13.0 - typescript: beta + typescript: ^4.3.2 peerDependencies: "@yarnpkg/cli": ^3.0.0-rc.2 "@yarnpkg/core": ^3.0.0-rc.2 @@ -6249,7 +6249,7 @@ __metadata: react: ^16.13.1 semver: ^7.1.2 tslib: ^1.13.0 - typescript: beta + typescript: ^4.3.2 peerDependencies: "@yarnpkg/cli": ^3.0.0-rc.2 "@yarnpkg/core": ^3.0.0-rc.2 @@ -6271,7 +6271,7 @@ __metadata: p-limit: ^2.2.0 tslib: ^1.13.0 typanion: ^3.3.0 - typescript: beta + typescript: ^4.3.2 peerDependencies: "@yarnpkg/cli": ^3.0.0-rc.2 "@yarnpkg/core": ^3.0.0-rc.2 @@ -6289,7 +6289,7 @@ __metadata: "@yarnpkg/monorepo": "workspace:*" resolve.exports: ^1.0.2 tslib: ^1.13.0 - typescript: beta + typescript: ^4.3.2 webpack: ^5.1.1 webpack-cli: ^4.0.0-beta.8 languageName: unknown @@ -6312,7 +6312,7 @@ __metadata: eslint: ^6.8.0 lodash: ^4.17.15 tslib: ^1.13.0 - typescript: beta + typescript: ^4.3.2 peerDependencies: eslint: "*" typescript: "*" @@ -26350,19 +26350,19 @@ typescript@3.7.x: languageName: node linkType: hard -typescript@beta: - version: 4.3.0-beta - resolution: "typescript@npm:4.3.0-beta" +typescript@^4.3.2: + version: 4.3.2 + resolution: "typescript@npm:4.3.2" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: c165f915ad33919643fceeb71a70f5483fba468509bf4a04a7465f61dc14886dfc5f9bdf5ef3dd4dbf4d7204854abe1935e215d2c15080dd0bf6cba39e009908 + checksum: c2a86fa03ce03b255adc13ccd70a55173ca6539ae12114feca59f34a4e9bb69f14fb7cd5adc6c2416e568cff05c870b89d1366768ec55fce04fbdffb429a1cee languageName: node linkType: hard "typescript@patch:typescript@3.7.x#~builtin": version: 3.7.5 - resolution: "typescript@patch:typescript@npm%3A3.7.5#~builtin::version=3.7.5&hash=ea7f47" + resolution: "typescript@patch:typescript@npm%3A3.7.5#~builtin::version=3.7.5&hash=5e23b5" bin: tsc: bin/tsc tsserver: bin/tsserver @@ -26372,7 +26372,7 @@ typescript@beta: "typescript@patch:typescript@^3.8.3#~builtin, typescript@patch:typescript@^3.9.3#~builtin": version: 3.9.5 - resolution: "typescript@patch:typescript@npm%3A3.9.5#~builtin::version=3.9.5&hash=ea7f47" + resolution: "typescript@patch:typescript@npm%3A3.9.5#~builtin::version=3.9.5&hash=5e23b5" bin: tsc: bin/tsc tsserver: bin/tsserver @@ -26380,13 +26380,13 @@ typescript@beta: languageName: node linkType: hard -"typescript@patch:typescript@beta#~builtin": - version: 4.3.0-beta - resolution: "typescript@patch:typescript@npm%3A4.3.0-beta#~builtin::version=4.3.0-beta&hash=ea7f47" +"typescript@patch:typescript@^4.3.2#~builtin": + version: 4.3.2 + resolution: "typescript@patch:typescript@npm%3A4.3.2#~builtin::version=4.3.2&hash=5e23b5" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: ca7a161bc6a4ca9dac511265923c90e1071d85871fa95f6d31738eb959e51cda1fdc55ed70c9b941e015f03b95b55d8ce4402acb5bb51006bd63a10c2ea975f2 + checksum: 3d3dec06ba6e5b05caa292355712ed9db813fa1c2377630b1f24b42e5ee8957f0bcdd5efd1500c970a11a6f684897f5728f5542ac822932227159a0611499a5e languageName: node linkType: hard @@ -27327,7 +27327,7 @@ typescript@beta: "@yarnpkg/pnpify": "workspace:*" ts-loader: ^7.0.5 tslib: ^1.13.0 - typescript: beta + typescript: ^4.3.2 vsce: ^1.85.1 webpack: ^5.1.1 webpack-cli: ^4.0.0-beta.8