diff --git a/.pnp.cjs b/.pnp.cjs index e9b7c1f087d5..3c9442183c90 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.0-beta#~builtin::version=4.3.0-beta&hash=d9c0c4"] ], "linkType": "SOFT", }] @@ -9634,7 +9634,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.0-beta#~builtin::version=4.3.0-beta&hash=d9c0c4"] ], "packagePeers": [ "@types/eslint", @@ -9684,7 +9684,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=d9c0c4"] ], "packagePeers": [ "@types/eslint", @@ -9835,7 +9835,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["@typescript-eslint/typescript-estree", "virtual:afe155ec2f209914c9c5f8d2834bb420298a95f14e8b5381b5f4d510e40e286dab5bffe7ae67cdc28514ab80eaded9418e0f1fced15dbd23aa9a67187b4e58b3#npm:4.11.1"], ["debug", "virtual:ebe93d6532e43d78779479b0dabfe2d284fd2cc037fde073604e57fc384c1044e905ed82c7d081310a0af68c672c6a0a67f8fdbca758f0bd26d9fc4456fbf1af#npm:4.1.1"], ["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.0-beta#~builtin::version=4.3.0-beta&hash=d9c0c4"] ], "packagePeers": [ "@types/eslint", @@ -9874,7 +9874,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=d9c0c4"] ], "packagePeers": [ "@types/eslint", @@ -9972,7 +9972,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["lodash", "npm:4.17.15"], ["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=d9c0c4"] ], "packagePeers": [ "@types/typescript", @@ -9992,7 +9992,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["lodash", "npm:4.17.15"], ["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.0-beta#~builtin::version=4.3.0-beta&hash=d9c0c4"] ], "packagePeers": [ "typescript" @@ -10391,7 +10391,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.0-beta#~builtin::version=4.3.0-beta&hash=d9c0c4"], ["val-loader", "virtual:e04a2594c769771b96db34e7a92a8a3af1c98ae86dce662589a5c5d5209e16875506f8cb5f4c2230a2b2ae06335b14466352c4ed470d39edf9edb6c515984525#npm:2.1.1"], ["webpack", "virtual:e04a2594c769771b96db34e7a92a8a3af1c98ae86dce662589a5c5d5209e16875506f8cb5f4c2230a2b2ae06335b14466352c4ed470d39edf9edb6c515984525#npm:5.1.1"], ["webpack-merge", "npm:4.2.2"] @@ -10429,7 +10429,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.0-beta#~builtin::version=4.3.0-beta&hash=d9c0c4"], ["val-loader", "virtual:e04a2594c769771b96db34e7a92a8a3af1c98ae86dce662589a5c5d5209e16875506f8cb5f4c2230a2b2ae06335b14466352c4ed470d39edf9edb6c515984525#npm:2.1.1"], ["webpack", "virtual:e04a2594c769771b96db34e7a92a8a3af1c98ae86dce662589a5c5d5209e16875506f8cb5f4c2230a2b2ae06335b14466352c4ed470d39edf9edb6c515984525#npm:5.1.1"], ["webpack-merge", "npm:4.2.2"] @@ -10467,7 +10467,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.0-beta#~builtin::version=4.3.0-beta&hash=d9c0c4"], ["val-loader", "virtual:e04a2594c769771b96db34e7a92a8a3af1c98ae86dce662589a5c5d5209e16875506f8cb5f4c2230a2b2ae06335b14466352c4ed470d39edf9edb6c515984525#npm:2.1.1"], ["webpack", "virtual:e04a2594c769771b96db34e7a92a8a3af1c98ae86dce662589a5c5d5209e16875506f8cb5f4c2230a2b2ae06335b14466352c4ed470d39edf9edb6c515984525#npm:5.1.1"], ["webpack-merge", "npm:4.2.2"] @@ -10504,7 +10504,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.0-beta#~builtin::version=4.3.0-beta&hash=d9c0c4"], ["val-loader", "virtual:e04a2594c769771b96db34e7a92a8a3af1c98ae86dce662589a5c5d5209e16875506f8cb5f4c2230a2b2ae06335b14466352c4ed470d39edf9edb6c515984525#npm:2.1.1"], ["webpack", "virtual:e04a2594c769771b96db34e7a92a8a3af1c98ae86dce662589a5c5d5209e16875506f8cb5f4c2230a2b2ae06335b14466352c4ed470d39edf9edb6c515984525#npm:5.1.1"], ["webpack-merge", "npm:4.2.2"] @@ -10551,7 +10551,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.0-beta#~builtin::version=4.3.0-beta&hash=d9c0c4"], ["yup", "npm:0.32.9"] ], "packagePeers": [ @@ -10598,7 +10598,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.0-beta#~builtin::version=4.3.0-beta&hash=d9c0c4"], ["yup", "npm:0.32.9"] ], "packagePeers": [ @@ -10645,7 +10645,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.0-beta#~builtin::version=4.3.0-beta&hash=d9c0c4"], ["yup", "npm:0.32.9"] ], "packagePeers": [ @@ -10692,7 +10692,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.0-beta#~builtin::version=4.3.0-beta&hash=d9c0c4"], ["yup", "npm:0.32.9"] ], "packagePeers": [ @@ -10739,7 +10739,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.0-beta#~builtin::version=4.3.0-beta&hash=d9c0c4"], ["yup", "npm:0.32.9"] ], "packagePeers": [ @@ -10786,7 +10786,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.0-beta#~builtin::version=4.3.0-beta&hash=d9c0c4"], ["yup", "npm:0.32.9"] ], "packagePeers": [ @@ -10833,7 +10833,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.0-beta#~builtin::version=4.3.0-beta&hash=d9c0c4"], ["yup", "npm:0.32.9"] ], "packagePeers": [ @@ -10880,7 +10880,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.0-beta#~builtin::version=4.3.0-beta&hash=d9c0c4"], ["yup", "npm:0.32.9"] ], "packagePeers": [ @@ -10927,7 +10927,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.0-beta#~builtin::version=4.3.0-beta&hash=d9c0c4"], ["yup", "npm:0.32.9"] ], "packagePeers": [ @@ -10974,7 +10974,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.0-beta#~builtin::version=4.3.0-beta&hash=d9c0c4"], ["yup", "npm:0.32.9"] ], "packagePeers": [ @@ -11021,7 +11021,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.0-beta#~builtin::version=4.3.0-beta&hash=d9c0c4"], ["yup", "npm:0.32.9"] ], "packagePeers": [ @@ -11068,7 +11068,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.0-beta#~builtin::version=4.3.0-beta&hash=d9c0c4"], ["yup", "npm:0.32.9"] ], "packagePeers": [ @@ -11114,7 +11114,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.0-beta#~builtin::version=4.3.0-beta&hash=d9c0c4"], ["yup", "npm:0.32.9"] ], "linkType": "SOFT", @@ -11196,7 +11196,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.0-beta#~builtin::version=4.3.0-beta&hash=d9c0c4"] ], "linkType": "SOFT", }] @@ -11246,7 +11246,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.0-beta#~builtin::version=4.3.0-beta&hash=d9c0c4"] ], "packagePeers": [ "@types/eslint", @@ -11369,7 +11369,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.0-beta#~builtin::version=4.3.0-beta&hash=d9c0c4"], ["unescape-html", "npm:1.1.0"], ["unfetch", "npm:4.1.0"], ["unified", "npm:7.1.0"], @@ -11472,7 +11472,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.0-beta#~builtin::version=4.3.0-beta&hash=d9c0c4"] ], "linkType": "SOFT", }] @@ -11835,7 +11835,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.0-beta#~builtin::version=4.3.0-beta&hash=d9c0c4"] ], "linkType": "SOFT", }] @@ -12593,7 +12593,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.0-beta#~builtin::version=4.3.0-beta&hash=d9c0c4"] ], "linkType": "SOFT", }] @@ -13042,7 +13042,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.0-beta#~builtin::version=4.3.0-beta&hash=d9c0c4"] ], "linkType": "SOFT", }] @@ -15327,7 +15327,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.0-beta#~builtin::version=4.3.0-beta&hash=d9c0c4"] ], "packagePeers": [ "@types/yarnpkg__cli", @@ -15349,7 +15349,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.0-beta#~builtin::version=4.3.0-beta&hash=d9c0c4"] ], "packagePeers": [ "@types/yarnpkg__cli", @@ -15371,7 +15371,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.0-beta#~builtin::version=4.3.0-beta&hash=d9c0c4"] ], "packagePeers": [ "@types/yarnpkg__cli", @@ -15393,7 +15393,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.0-beta#~builtin::version=4.3.0-beta&hash=d9c0c4"] ], "packagePeers": [ "@types/yarnpkg__cli", @@ -15415,7 +15415,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.0-beta#~builtin::version=4.3.0-beta&hash=d9c0c4"] ], "packagePeers": [ "@types/yarnpkg__cli", @@ -15437,7 +15437,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.0-beta#~builtin::version=4.3.0-beta&hash=d9c0c4"] ], "packagePeers": [ "@types/yarnpkg__cli", @@ -15459,7 +15459,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.0-beta#~builtin::version=4.3.0-beta&hash=d9c0c4"] ], "packagePeers": [ "@types/yarnpkg__cli", @@ -15481,7 +15481,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.0-beta#~builtin::version=4.3.0-beta&hash=d9c0c4"] ], "packagePeers": [ "@types/yarnpkg__cli", @@ -15503,7 +15503,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.0-beta#~builtin::version=4.3.0-beta&hash=d9c0c4"] ], "packagePeers": [ "@types/yarnpkg__cli", @@ -15525,7 +15525,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.0-beta#~builtin::version=4.3.0-beta&hash=d9c0c4"] ], "packagePeers": [ "@types/yarnpkg__cli", @@ -15547,7 +15547,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.0-beta#~builtin::version=4.3.0-beta&hash=d9c0c4"] ], "packagePeers": [ "@types/yarnpkg__cli", @@ -15569,7 +15569,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.0-beta#~builtin::version=4.3.0-beta&hash=d9c0c4"] ], "packagePeers": [ "@types/yarnpkg__cli", @@ -15591,7 +15591,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.0-beta#~builtin::version=4.3.0-beta&hash=d9c0c4"] ], "packagePeers": [ "@types/yarnpkg__cli", @@ -15611,7 +15611,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.0-beta#~builtin::version=4.3.0-beta&hash=d9c0c4"] ], "linkType": "SOFT", }] @@ -15631,7 +15631,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.0-beta#~builtin::version=4.3.0-beta&hash=d9c0c4"] ], "linkType": "SOFT", }] @@ -15655,7 +15655,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.0-beta#~builtin::version=4.3.0-beta&hash=d9c0c4"] ], "linkType": "SOFT", }] @@ -15675,7 +15675,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.0-beta#~builtin::version=4.3.0-beta&hash=d9c0c4"] ], "linkType": "SOFT", }] @@ -15692,7 +15692,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.0-beta#~builtin::version=4.3.0-beta&hash=d9c0c4"], ["webpack", "virtual:16110bda3ce959c103b1979c5d750ceb8ac9cfbd2049c118b6278e46e65aa65fd17e71e04a0ce5f75b7ca3203efd8e9c9b03c948a76c7f4bca807539915b5cfc#npm:5.1.1"], ["webpack-cli", "virtual:16110bda3ce959c103b1979c5d750ceb8ac9cfbd2049c118b6278e46e65aa65fd17e71e04a0ce5f75b7ca3203efd8e9c9b03c948a76c7f4bca807539915b5cfc#npm:4.0.0-beta.8"] ], @@ -15719,7 +15719,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["eslint", "npm:6.8.0"], ["lodash", "npm:4.17.15"], ["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.0-beta#~builtin::version=4.3.0-beta&hash=d9c0c4"] ], "packagePeers": [ "@types/eslint", @@ -15747,7 +15747,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["eslint", "npm:6.8.0"], ["lodash", "npm:4.17.15"], ["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.0-beta#~builtin::version=4.3.0-beta&hash=d9c0c4"] ], "packagePeers": [ "@types/eslint", @@ -15773,7 +15773,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["eslint", "npm:6.8.0"], ["lodash", "npm:4.17.15"], ["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.0-beta#~builtin::version=4.3.0-beta&hash=d9c0c4"] ], "linkType": "SOFT", }] @@ -23463,7 +23463,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["schema-utils", "npm:1.0.0"], ["semver", "npm:5.6.0"], ["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.0-beta#~builtin::version=4.3.0-beta&hash=d9c0c4"], ["vue-template-compiler", null], ["webpack", "virtual:e04a2594c769771b96db34e7a92a8a3af1c98ae86dce662589a5c5d5209e16875506f8cb5f4c2230a2b2ae06335b14466352c4ed470d39edf9edb6c515984525#npm:5.1.1"] ], @@ -24122,7 +24122,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=d9c0c4"], ["urql", "virtual:e721af34745e2aded5d4d499d50f62b576dd2080eb1f2bb52977c4bfa58f87cba61c1a822a17998b163819d9d9ffb45f4e1cfaad85154aa3bbe0834010be88eb#npm:1.9.8"], ["yup", "npm:0.29.1"] ], @@ -31222,7 +31222,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=d9c0c4"] ], "packagePeers": [ "@types/react-dom", @@ -40097,7 +40097,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["loader-utils", "npm:1.2.3"], ["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.0-beta#~builtin::version=4.3.0-beta&hash=d9c0c4"] ], "packagePeers": [ "@types/typescript", @@ -40171,7 +40171,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=d9c0c4"] ], "packagePeers": [ "@types/typescript", @@ -40185,7 +40185,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.0-beta#~builtin::version=4.3.0-beta&hash=d9c0c4"] ], "packagePeers": [ "@types/typescript", @@ -40423,7 +40423,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.0-beta#~builtin::version=4.3.0-beta&hash=d9c0c4"] ], "packagePeers": [ "@strictsoftware/typedoc-plugin-monorepo", @@ -40452,7 +40452,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=d9c0c4"] ], "packagePeers": [ "@strictsoftware/typedoc-plugin-monorepo", @@ -40480,7 +40480,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=d9c0c4"] ], "packagePeers": [ "@strictsoftware/typedoc-plugin-monorepo", @@ -40530,30 +40530,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=d9c0c4"] ], "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=d9c0c4", { + "packageLocation": "./.yarn/cache/typescript-patch-fdf0f6ff76-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=d9c0c4"] ], "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=d9c0c4", { + "packageLocation": "./.yarn/cache/typescript-patch-b2a1116db1-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=d9c0c4"] ], "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.0-beta#~builtin::version=4.3.0-beta&hash=d9c0c4", { + "packageLocation": "./.yarn/cache/typescript-patch-1e7d4bcd20-ca7a161bc6.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.0-beta#~builtin::version=4.3.0-beta&hash=d9c0c4"] ], "linkType": "HARD", }] @@ -41698,7 +41698,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.0-beta#~builtin::version=4.3.0-beta&hash=d9c0c4"], ["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-patch-4079614479-ca7a161bc6.zip b/.yarn/cache/typescript-patch-1e7d4bcd20-ca7a161bc6.zip similarity index 100% rename from .yarn/cache/typescript-patch-4079614479-ca7a161bc6.zip rename to .yarn/cache/typescript-patch-1e7d4bcd20-ca7a161bc6.zip diff --git a/.yarn/cache/typescript-patch-c1e370d24c-ac6b67d951.zip b/.yarn/cache/typescript-patch-b2a1116db1-ac6b67d951.zip similarity index 100% rename from .yarn/cache/typescript-patch-c1e370d24c-ac6b67d951.zip rename to .yarn/cache/typescript-patch-b2a1116db1-ac6b67d951.zip diff --git a/.yarn/cache/typescript-patch-1bfd6f21e9-fb62f24bfd.zip b/.yarn/cache/typescript-patch-fdf0f6ff76-fb62f24bfd.zip similarity index 100% rename from .yarn/cache/typescript-patch-1bfd6f21e9-fb62f24bfd.zip rename to .yarn/cache/typescript-patch-fdf0f6ff76-fb62f24bfd.zip diff --git a/packages/plugin-compat/extra/typescript/gen-typescript-patch.js b/packages/plugin-compat/extra/typescript/gen-typescript-patch.js index fc8d71afe9be..eceefc334f0f 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: `1d8f9ece48a6e7d28a3bce5fb716c46aaa37fb09`, + to: `a93e1afb01b6c73e6c991b00fec3a9cfdf0e1939`, + onto: `1d850c0927107d0f0f1efdfc3c160436ed010c92`, + 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-5f1057286f1b5d2d56a8b1ffa5967709.diff b/packages/plugin-compat/extra/typescript/patch-5f1057286f1b5d2d56a8b1ffa5967709.diff new file mode 100644 index 000000000000..0bf81aa16b91 --- /dev/null +++ b/packages/plugin-compat/extra/typescript/patch-5f1057286f1b5d2d56a8b1ffa5967709.diff @@ -0,0 +1,2872 @@ +diff --git a/lib/tsc.js b/lib/tsc.js +index 75c24b0b4..39b43a039 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; + } +@@ -32593,21 +32596,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) { +@@ -32714,7 +32748,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 { +@@ -33153,9 +33189,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); +@@ -33466,6 +33505,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); +@@ -33480,9 +33527,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) { +@@ -33619,6 +33669,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) { +@@ -89029,6 +89120,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; +@@ -94520,6 +94612,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; + } +@@ -94547,14 +94658,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"); +@@ -95276,6 +95391,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; +@@ -95347,6 +95466,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) { +@@ -95379,7 +95502,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(); +@@ -95389,7 +95513,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); +@@ -95567,6 +95691,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); +@@ -95582,6 +95712,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 6f6ef4676..ef9fd6c64 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; +@@ -40010,24 +40015,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 +@@ -40141,7 +40178,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 { +@@ -40692,9 +40731,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); +@@ -41039,6 +41081,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) { +@@ -41054,9 +41104,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) { +@@ -41214,6 +41267,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; +@@ -108301,6 +108406,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 +@@ -114688,6 +114795,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; + } +@@ -114718,18 +114848,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"); +@@ -115517,6 +115653,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 +@@ -115595,6 +115735,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) { +@@ -115627,7 +115771,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(); +@@ -115638,7 +115783,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); +@@ -115838,6 +115983,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); +@@ -115853,6 +116004,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(); +@@ -121125,11 +121280,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)); +@@ -121137,6 +121308,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; +@@ -122808,6 +122999,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); +@@ -122820,8 +123012,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); +@@ -122836,18 +123028,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; +@@ -122948,6 +123158,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(); +@@ -122956,11 +123167,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) { +@@ -150422,9 +150641,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; + }); +@@ -159122,6 +159341,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; + }; +@@ -159729,6 +159979,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); +@@ -161553,7 +161804,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) { +@@ -161571,7 +161822,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 +@@ -161597,6 +161848,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(); + } + } + }; +@@ -162574,6 +162827,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()); +@@ -167324,6 +167596,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)); + } +@@ -167584,6 +167859,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 b2faf0283..fd4a57c6b 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; +@@ -40204,24 +40209,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 +@@ -40335,7 +40372,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 { +@@ -40886,9 +40925,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); +@@ -41233,6 +41275,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) { +@@ -41248,9 +41298,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) { +@@ -41408,6 +41461,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; +@@ -108495,6 +108600,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 +@@ -114882,6 +114989,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; + } +@@ -114912,18 +115042,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"); +@@ -115711,6 +115847,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 +@@ -115789,6 +115929,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) { +@@ -115821,7 +115965,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(); +@@ -115832,7 +115977,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); +@@ -116032,6 +116177,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); +@@ -116047,6 +116198,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(); +@@ -121694,11 +121849,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)); +@@ -121706,6 +121877,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; +@@ -123377,6 +123568,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); +@@ -123389,8 +123581,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); +@@ -123405,18 +123597,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; +@@ -123517,6 +123727,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(); +@@ -123525,11 +123736,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) { +@@ -150991,9 +151210,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; + }); +@@ -159316,6 +159535,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; + }; +@@ -159923,6 +160173,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); +@@ -161747,7 +161998,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) { +@@ -161765,7 +162016,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 +@@ -161791,6 +162042,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(); + } + } + }; +@@ -162768,6 +163021,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 20c40019f..b587ba352 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; +@@ -40204,24 +40209,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 +@@ -40335,7 +40372,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 { +@@ -40886,9 +40925,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); +@@ -41233,6 +41275,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) { +@@ -41248,9 +41298,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) { +@@ -41408,6 +41461,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; +@@ -108495,6 +108600,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 +@@ -114882,6 +114989,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; + } +@@ -114912,18 +115042,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"); +@@ -115711,6 +115847,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 +@@ -115789,6 +115929,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) { +@@ -115821,7 +115965,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(); +@@ -115832,7 +115977,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); +@@ -116032,6 +116177,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); +@@ -116047,6 +116198,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(); +@@ -121694,11 +121849,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)); +@@ -121706,6 +121877,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; +@@ -123377,6 +123568,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); +@@ -123389,8 +123581,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); +@@ -123405,18 +123597,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; +@@ -123517,6 +123727,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(); +@@ -123525,11 +123736,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) { +@@ -150991,9 +151210,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 7e83654b1..f738c534c 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; +@@ -40204,24 +40209,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 +@@ -40335,7 +40372,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 { +@@ -40886,9 +40925,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); +@@ -41233,6 +41275,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) { +@@ -41248,9 +41298,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) { +@@ -41408,6 +41461,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; +@@ -108495,6 +108600,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 +@@ -114882,6 +114989,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; + } +@@ -114912,18 +115042,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"); +@@ -115711,6 +115847,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 +@@ -115789,6 +115929,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) { +@@ -115821,7 +115965,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(); +@@ -115832,7 +115977,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); +@@ -116032,6 +116177,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); +@@ -116047,6 +116198,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(); +@@ -121694,11 +121849,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)); +@@ -121706,6 +121877,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; +@@ -123377,6 +123568,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); +@@ -123389,8 +123581,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); +@@ -123405,18 +123597,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; +@@ -123517,6 +123727,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(); +@@ -123525,11 +123736,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) { +@@ -150991,9 +151210,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 672b085bb..32e5c80f0 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; +@@ -39999,24 +40004,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 +@@ -40130,7 +40167,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 { +@@ -40681,9 +40720,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); +@@ -41028,6 +41070,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) { +@@ -41043,9 +41093,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) { +@@ -41203,6 +41256,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; +@@ -108290,6 +108395,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 +@@ -114677,6 +114784,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; + } +@@ -114707,18 +114837,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"); +@@ -115506,6 +115642,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 +@@ -115584,6 +115724,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) { +@@ -115616,7 +115760,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(); +@@ -115627,7 +115772,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); +@@ -115827,6 +115972,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); +@@ -115842,6 +115993,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..a8d48dc1183c 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(`my9MECMR6s2qZAbIfzZR5HYoOKJrsBXKbRdxO3jvT7pvA+rlgJMxuA1SayLVC1gWEMF3T5S0Hjv1K0CHiIV7PzWWR37LiHcFtui0DXF33ywyYSXCgliAcRkYGyOtHxEVK3r1xHf9MfKdnboUXikzbsJcioMPmCsgLVamZn99Xu082B2CDlG8xE2RTpEKACn4IJA1A61LrjsLdbpnmS5AUp1zkJYR6F9QYNdbo83Uvd4Vy50TxJjLyDgN7rBzjoq5C2mQnhmFmuy/5s+ol1OIZjPtfBuU5UI4shgHfD8nKltXaqoG0xO6skzcxkEPujzIX0TyJejODayqMJnbU0CRLKz+/P59tTLtxnrXu+TKmyDj6WkjF24mnypfHeK+qlc9cBw1QfLYMdZWvVfvAwRATltp2HLeJ5GSVEEon8UgCc7plnMm0lEQJPo/VctW5ik0nKGfgM89a4b7zqCun20KS6W7kIva74m7M0NJcM4d1ylWrpgwcMhlKlqX14kq6pZcAIIDIDjMAM0AdBDplNojHvdjO0AzlOZ8on8tY1o/7K3xPTEJIQtEbX1Mh9q5/5tWkkIGZKCI5DC4y2y4gns3RCsJTzObQsHe/fszFc9f5elpHQiwJFyTMa3251LYEcK00v7px5iv2tSmK9kq4xgC4ony0fdTP+k6VLPnZFAZsyhzLe3PgnpvTrD+hEA/78Xzv+f8erlHNjy+HzeaEVP1oV7feMGmBz+NIW+x+edfelbDV38UWYbhM5hYa7H8ELsdqgP1DsTHXluue6ZQHndyVevLaWnyz4eUZXvnXlDgO7p5fWYKNA/Aakd2IiErrzy0iaOy+SnK6ws0yCqWR1852sXSphWGZATy26jOkRu/QPuNsikXgGbS9beyzhgCuoJlEfVZepp1jrar+c679teIr4orw827AegNRuT2Sod0Llup09Kazwn+y2meRGw+/CYxPXXM9mtzItuSYUNEi+i/INDf0XV+ZVJczk4LRMuAgOcfv/R1WPAZ/D8gGNI1xmZEKMI99VuekqntNDwVs5geU3CyuKQ1pScQ6TPNmjwrG5Cy264vt91mwD87KOQ8WRn/JDZtlG3RCpHqj3vVl+Tk4rWLqdLZhXA9X1+6msRCOVjXqafNwSFgKTF+QtLG+RiAmfgM6zFQsrCNVH3Ud1oAt5aCdxfXupifRvUVRhlQ1hDSgj+pAyc+OZ+WwStkEEEv+m6iMgFnM3Z5v0ZKgnCGsJGqITN73wYeKcCD1+MMkOTg89AEWSmaatnLNzYJSD5j+bq7W2QByQGtb9d+la/fNzet31rWs9HUdpddXc3ob5IpkoHl6MQ84Nz1BYlj1tAe+EL4ZACuFNb1RBCikoR1dNba2xKzfOefB+yWUlOAuYKMbr6oEJMUSHEKlELzQM5LBCwIdwpQx/y22iJXnabhuZ4vw/U6Vv2Xlbd75hbFBrV/hqdK/5jTYgFWZIgGVBOTEcPWlU00rDkBtbNc9qkrb7Ff0KeOwpxjMEOM+WIrLFxkg4UPqS3Q6xcebjzxLOz1QoW4uEPJHMoRpyDOMcYWIOJHpcARanIf0c+LjL77YZuACuuttjpQcIB262xgpy98vPCU93FCHa2AamBr3pDGwuRI7izLBu2lTkIEBsUe+14e5v26kEAxc+cNIQi6CQO6zGN7g9O8yq2KcNSZh1w5+OvdZ3YXJMfyUZWvOsL3x0ef/7XNyFvlqj764T46Sxigr4rMFWYr6YLlKf1lZQsmKHIhbLtQf18RtTMy7iX0F81FOWUnkXpbWHB45mfhdtmUqxJao1kr301GJVwPX/QVqFdol7EO0JbLLCRskcn54bjsQahPg+awVLvvWQ4fV9qHv4ONDW1EOd92leRWW+dcbrs8ipJYaB+xlEtAlVjf18P6DTd8GLrws5X9lHPtI21+QSQ0pUyvdk5hvzmh5u8wv6hQZq2YohAS7s9CueaWa23VGfSgu2QXXD0qVnj9NakhBOqI4y1oFEJRzzxh+hxzLHi5rdHtsdFl9e1cN9dA2S18/HBj4RJvfhJiQMlePkytPxToo/QDCBRSxEDBqnq7shfvULeYj3HTqJb45ZnMW/v0HNLECa/DTATrssZsbQvZS3ua5G1zjEiV1YacSRUAvsPh264cDyOyPraxiJMQpdqXBcbjdbsFn+dy23xAB+o7h81azzhK98m5QQylzceZltKODRjXeUjHtf1kBO9wSX30SkbWiTtsH7gekq4tPXtuqtlhHe52cRNyR0+8QDDbK35I5r3M7cZus+hr/hgkw83FU4RjZy1TtR2qcodGdEO1AMSLzkKoRW+0TINVpVm45mhYUGTXjx7JpQMBthG1SNKIE+Lb3LYwKd4u7M2oPGA3fE23OqWhEwu6huVVnAMar1N+ydqQoSx3qg6Yz2GyvicAJOuphRz60wpdIHSGPy+wBKAQZFqDgKqnK60EqvlWl6Gscp+QQI0cvUKWlog8IQZMuWRkcp2REPmoVkr8kiJiIUjcopEXD9/C5W0zQB8BOhoc0h5XFsm3M1yZDLVNzxf29oVGIuXKEympO4i4hBy/QySRInmkrzA977fzpuf2/nYvPzbnvW96aP4jIQvdY4dQxuTxuw6oHus7reV6wfDUWqMxnttgcGt9CVSiH2h5c/DSKk+IzcEWYdD1baI81AgXspNjkCSILW8o1yuTt7PzSzLST7RdriN20ipaMLlEfajw9H+gYTb9ytJVJ8m6vBfvD7VB6PvGokXY5UA3+ARBmpfU98uVjvf6HkhEGkPKRUWMjaJ0RqMoh7ViKbitdtm9X4swM/m05nZh2FZWTLvvP0s16H9WbAVVWFrGH6i8QYpedvTp/jOxalV1Fk2HSuEtGH2FdMW5kuJwsRGVWXQEqO5ZodhzItFL1Ra3/WaONSOw+1B97OkW6u6s/gU7T6QIZzNx5CRivnn1IiruryUcAPPMaepTdvxjQO6k9W9T7SDrKtuSO5nOmzr6/ib7qQ5Td95XXuo3+BjIzj0PR+Opddmgc/PA69YsJXg+ivopCxVV7Z5hOpw8l/DoGWxi5Yp5B2P4EPhKMZIKywZxZ4Vt3CdN/qSC9xKkLuNvwvgOmSWD0hYu3beqrrHZQNJr4AP5peDw7tSkB3nWtLIkjvHvtQzDRmFk44qOm4TVABP2YsoHaQnwupKlfYJ47RD8QMz210X84+zjP2gZSICI04xW/3U0cqh4xliWjJ2ws63IEPtuFXnaB5LYLquwKmnSQt/yduC6J/8pwUBD7vYzmdb/oJM5xvdk3eynqXFybh99u+6UNB9GjMUaONmg8uvfft4pCeKeJaq9Jp+c3tlK5tJHJ7P+obDK6YEj+eQy+2WQxw/R4lHo4wUR4Ufgc8yzR/CpZhxV4QIAEZwriZAXtqCB0T4DJwWhqBEAGJGntIYlA32WeaK/TzCz8u69m6EPb+CNMY+iH7bPLU8f5tPKGKnEBQAQINIU3gZqm+0yUE/VIwCgg2+h2Sx62R/u08xsgPatF/DowA+mwt/lxzEP3eyPkwpWANDOo59/fv/vzuj5bTDPHOpTzqzZPrSQ8bD2Ja4/ZXoM/nX2GP4V21W4AIAN13d1YaeBuEY7A+duRShqBAAi85lwzF4Vyd1qMP67tw7f2Blx9V1ZR3qGQ18qAwAgl0Yg/39u+defnf9/Md2Y9Mqbn70WCKp3kx2lAYG2ttdDAViP3eQrudjO5eQFzvAEd2SnZuhL3wIAZBpRFk+YbEx2K3Zil/ecJlkhxHXZZHd3QDznP5cJAHhRYHkh6IdrEZ7In/Y7UjlEJylmXKq0BQBK2L/c8GL/Eu2mGgt7W3QJALQwJTkv8iwEsf2p7XpoQ3BkFQ59KbYAAJ0ME5vCGCA7116NmHLIU9QIAJSEYaIxC/gD8vxoEWyYLJv0cnguzasAoJvVmma8w59my25r+SHozwS9ZUNy4zTzgdJsAYDKsfEkNwzsO9n+UFlx+05vBABkLpOMWTo6ZvFz1p0wMnbJ287ydiImKGboS2UAACSSPqDGbpP1z97CxzBlmbHZPgTKlNjnwG7Tw1QvWdy5WJL7ANET/Epc7qEvfQsAkJjl8TR221MPRhEf846Bxkb7HpzrEaEwEwCIsEtCFvhctX1lgpvhlsN9OI1xuQoXACjDdbsmbBQc74iaaz9xrkcouAQATh5Ee169a7riFxf6D5tfDuMf11ThAgA1cNwrak444ngl5NotzrWEgk0AwMJawqYrfldeLTUp3fxpeP+pYAUA66xWHlB5JTTdF+ca4Z4j8HfYj6WxU1vSl44LANSYvbfGcAf7yrkb+ypqBACMwDFDoWIwh1qp3bR8InlPPC8J+flcG8Ems3RkMetfQDT1R7wQ6Jsu8XsRAHsSE8R2cpKk59DAkFDS8RXhaXLD7kSGzRQW2sw/mMzEn65v/KHQ+b5cAldDzvz6y+FX0hP6zNTpP/upnr9Pul5J7zN708Us8FlsKTCa5sKzi2Xf0PZXX0Z/iqtqnkPc5a2JhMfPpjEB59fOxi9T7NS/JudWo9lif/suYm1fqP5lmTFMkSAb6XeItB0ztcVsCfo63t5zXXml8D3LGxgusPDw2hnvszWjR8g5rS1IwoRfeLVODnpVT2xI81H+yOcv3lqspzkpUIAMMY43Fv0VvWG3m/hhHUWEMptry8fGKB8II7kYafuMZxybcXeyVCsnZpyTOYJOjfeilGU12RyjW+FYsQ/beuyM35v5eXRQuobsT1uMXjFZUqBfT/2AEi23o6vZJXQ3aJGh74NeDF6o0vFC8zn7YfNh8QNKiPbbA1e8oADjfQFsIbG2YWQT6dK1ZPwN0av+ZjKFhxjvCbpjrXccxwGPWJpNCbHD84jHv3i+q62boeQ7lstve8c9CYawNHPu2YFZOohSSqObZr4BJYkakl0MtQzVefAZWj/MGKWpIjAih7Jh8n70OGESzufj5HRkZON/ClgWrh1WCMiuHcuy0bSceyJz+xAl3tw4OMtT4l6LezTYq1FGs/YWCB3fgvWzfLr6yaPzKLer49jjSQif/6ZDknx8uSTuL388eS0DmjgweC0W6kjKgSQF7U4jJ0EgAv1I8xe1yI2PiGdKk5ALWcklodQoOQx8HOhfxajNZI785lkMJgKvQPXxyxN5OF77NuzvkOeYF3J/ReSZXZKK7Fkm5VmChdd3mLvr/ldk7imCQdaWXi7as1O8oeRMnbCf8Rq2OtlvPzKDtqIC4+pn0gXGhPZ/TKzBiTqOxuGH6y/BgbTbZzCdbY5V66JtNuPyd7tOBq+7voPJKJqkn9+qzIKPMY193D+2MNnSr91G4qRb2Vt/VYCQUOcno9/y1uAH8a4CQDSZRqpyhEkdo9kRzgze+qbB5HlfQnAQF2YFa7oEeNO4BilKlj0sAZ5kLCmJ6RywDkpHtsxgQ2YohSEgcWAtYFijG6zLL8j6Sm+BfGxfFZvQDRWq4clNyKEex2uQwYxZu8hYHfYRz2NzGa/DP+K5+kuurUTmXHqMEehqYRtKOU5nE4uWdhHxmTX2y5vHoZwM1vpthC97254NaEksFgeYWBjiehgI+m0yUOycN1p8czsunZOkPbsavNMrSm4E7xEgKbDLunkKEm+hTRYZoNCyy/w7HwAxvcEIIqlw3o8BBqlXWLImcdXkB+FImucn1Zigy5rVwI9huIZ10ymut1mDm2pIj+VilNOZPvX+WxIS86e2cWlLuisNMuGjfqNX7SkNYHVKVG4THcuuxBaS2KMbormshGIa14QDcA77vfRuYfLezy6Nak90JtfdYKZXMnTEAzdc6GhFTM5qOCfDDegLiWpVairy6rKkE6+tGZWK+4WbNk6iKKkecUdYS1LAs2Poa3i9NyrBm4Vz3swD0zs2nbs0ctNny9/3OtupKc0V7OtKfTj6YWnuORgjo8RtDgFn95QFHCo7GM/nrmZqDRe5Vgt2ZF7Cp42/bZYiSXpp91u5bHsLTFb4+7H03lH4qcm3LJBxpdEfO/+OUeV426nzKW/BsoFStHn8tnnuMGpy65cMQE/jS7BRaxLGoTZr0ZKQdQx2a4Qql2mgxwxGGXgH31MyLZ9a5KY0bUCzAtfDRMZnUpkBAMdDQ5MXPsfMta/jFmgCACva6HIHZJYJHLgvnRv65paelDQ0bQ+Kg2w0GOp9m/CdLZ90pNpMu6JZK2CkmhkAoBgLRVLuOOTaZzD5xq3QBABmn6OzLr8CoUsF+uh4S/s84LuypxLhBHVrMJMzzG+6lk8vqZgKQLGa0IIIN5g8xd/aacunE784TbtGs9aA7UpmAMDHRKjlksL6Gu0qx6zQBABSoqEuX4LG5QC7qBpblgdZ+/uefz4QsA9eIHfystC/OqIKsjsOkTCOSJVmAMBBojLthLrmnTk+F0lmuwTR3W7NVyA+sqrusTwf2K1Of9QR9sCYcEFnK1akW26GbnawMDNqLIeDYOp7ightl6AHus0s7vLHdkeVZRXzkjY72z9Iv13ExKya+2Iyita8L7jFPWKRaM84e7nNcgATWilDVZz8EkLwWUv/x07JY8F4dDo0StUC7p/tfaRDktCi146uEX3RcccmWQVdcbl8snZCDjrL1O6VHB4LHoYJr5JYubUpEhSqcc8F1HIEPDwNUMpQK316rexBCMLx0QuzavXCzg+xZE3i7s310nw0an754NNWHjKBLFWAkcrOyAZ5Uij7+aJXbYIa7sxSzQ9ZZ/7BThIDJc2c12Vz5bGiSQYVBf3SwdABYI/4X7N24VThIbykuuPWV0pp66Sm4goJO3MdrdnR6+kL7A1qmPYiA3dHDrVOPrSuOghwGTGph93b4S/ocB3yZYHhVeexhbkNE3ZBfFZgw3pA84wRtoauv+Vzr74tjzgNI6kFXHj76HJg9NxFLhUnMXwPXEaUsExIommcqIZ1So/B8WAKt4U9Sru1CCbjJnk3G65kogO/yjAO7ZxNU/Gl/F5n8N2GVdnSnsggKMECU+kBz7sXmfoXOQ9BDxzcOjsQ17GqJVFBflXEDADYkkxtTTgjoRcfJedNdlZhrE2PpdO/ywQAWIMxoy4d+8PzuLt0CRzqzcEuxhqxQOpYvdZpvsTAnKIxvHEynqssKOvwhefaOtxSJwSDDoXgPhAH+aSZk/Xb13k1VmNx2yxwwyv3zempfmm3ZeGofB/aLsX/0SXlc8N6/2rHehTVq6ST0iSrFxbnvcvd/GQ3ViF+tO/d7s9mrXv9FTiGQwULCv/vngveY/tR7oP8MoaDQ18amZnksNnQRPjb4QShgNlWprsYm3sLMWo/O5ni2NltpSW1S7IcjWOzW7M7o+mdnHFPjcHRSuwROLJ2Bq9TOivWD/H61qkUXNhI5kpqeJj4do7RgGRxFaZxY39l9+Mzm5zxf4U1n6oXachCv6AHxqLyh5straW3f4xOEHzi/JMd6XTpsJbDmUrgXh4LiOyiyrJ81WUVvv7kB6+eH6u+BKgpIlSdK2jWq3oj8Ew1MwAwA9rJCe9EKY1YTc32NmhZpQkArMGZpvspgXPrUQKA6aJrVcPkGYAHDU2pRsXo8rEBKLyxZfHg+mUl3bVFBDe1ygGoI0LhUGqyY/6r2MmrR0jxZ7zOiPBMn3IA6pBQO264bKifnLd39fF+20k09UeE7OGqZXe8Op4RwPRaZgCAWUCZnDCjosghr9neApkVmgBAi3vOlN3f0cFWmwQAMqpGs5rdo7yObc9eeif4+RzqX51IH65adscg9lmzkrciMwDAeqydEz2mCBl3bP7MYxdOFIN9qceWm2vMn4ofIWrSX0Tx+Dkcs/BH2R4lo1FxgxFSi7C1L9RgG13DrwIaANvdt34HavxCs8ZAdQYFwPDynCbPHYcvwGk3zrUWZuHzeFOU3FRNam2zhG0BT3W/UrGuWxQThP9DUYvh3Agy5BiU/YJsrJABgOwZiCT75kL4AF607bt7ybw0/Y92NGCuOoiWP1HhKql3m3jdd5idHIdml/NBq3el5hmJZg8MxnVZ5jdUdOgD9N1KR1D7iwbn+q8gqKLZbOD22SU1QNdXXI0/3gdvcsceR4mT4/Gi/uWcT/4zr+xajSR3mE1yP43JGHnnhrahh74/eR4ja2KP1u6YnPsk+fIKEEWsRygdFpm+NEPGQiQduipAnGzDbAY2rYQyHQYGN5skDr2/HGqYxU5/mAIAvlYHNXks7oPQoB3CKJ2+Tu88rE2uaUOmarX0Kj3Iinttz+nD2B+4Kh1hh7Ch3nh8zWA/47DmMx5YQhHKMujfX4bQn/0Gs9guFrbFOJBPjpL+p6nkvKEFQUI6qGT8By00b3c+NsPEGD5P1oprdYzTYtu8I7Mmq9NIxxTPuHJQ5XSgBU+zvRaR6l/jug/V0eUn7QDg6GyYotXAmzhJs5UJQspzjiwsaZwiwfazLMUVKGy2AiHsblzOxUWK5xB8KgwUdOD+rMqlEukgVTKzNttZrzundCqUsAt76NQk9sSG4fdqqt0xupAxdY9CG8wIEAG34EUoeI/EXBAX/7l0LQcuABv+5K7Vy/V0JrSmPO23N8WmCQ6wQzZfx43q3am1nibYJBvqtgvllQLWibHgCyuyWzC3T0hRSgBiuIdcEBO8NSu6zmZohE36bKARpbjOZ+1ed4CUSJW2BLztHDeHSvaQfvTLjXs+A6lMGc/fD/0Ka31eTBXa5xNR473qjIDTfuSOpvwuqRWHvKOcSLqDFuoFEhT1Il7ld46+yMX20mBuWEIDmoCx11z7fszDETIgtw42GBnkIlswWC/iyxILxhm/O9Vgh47Gtg9LGecTBfzwEEvagSpaVEZxM4U3ZrmbdxvbS6mqc/NPymeTE0wruirOJIOULvKJ6BKpOon8p40BU8pARMoYaoiB8jbjteM9mGXMJ1kTNdq2rCjlaNiymYQiSQaPjn6eJbt27eOIOKzMB0TNfdxHVvTOtxr44tX8aWJzHZixWiUOkGbLsiU+LA8tp0NcSXixmI6ugCFza/IO9fnVyXUQpv0FVRW5DKLLjgfLzrdLQr+udc4VlTstjOZ1Wuyu/LLXPuV5bFH+TNHXy6bO68hcMfvwiNHSXRD3ViO9btZSTSr2I58g57cxTMb/lKeNQoID8s+lJkzY6EJl/l6bVm8zE3kaPx/1DRHztyx78FnivvFS2MKHjQ9CNHFp7+0Bgx+LejJI8++3jM8X3yW53/z6zcutx81cK55eE1akVcNbtxkdeiH/SmMGACYytCF6TPH/GpeoOHvDQ40ouXY1qibnAleVCQCId8q6V7/aVQ/4a1Bqp45/43tmWAmAaxW0Fq+LC/Tqi7ihSEjcB0QdBuI5hupJup4nbD3WbfytJRSoLjf+DLGn6QrAZB1T/ZuOYkozN+FnT+ODdwKjPiDDBasVHDAMEUKij85igJJkEp72ZP+z6E3/sZv5p/j0Me0BwK/Zvs3NJS6R+KAruGucel5FUJyBRhAZhoSxPZIVB9j27Ias5x63vwVEGgvoTTQestW/AmxOu/XAxFtuZ7w6xNg3N5rxvyT4NMHoiWPfzwjO316HQT7Uf30dnb/u/kks/zXJ67ZknQT6sJs+VyLdv46YP87TuIcSeOm06s+/Lez9AG28fPrMdx9VJi62F2PxmIJJ7tAzBqJI9OuxgPHBCJ78d2ByH6ZgyD2qJAftmRl9XjSuXZtc36+bh3r6EwR7+wYKe9nqj71d/gi0cwcpcDwZ/3ZJjus0TXH+ViROcgrh7zsqij5byjob0OZAS5jPF1oQpLtN2StcGdIoXNduRPT5uNo7K8CHceWg3eoF8cGr4MQsBdIlpKwNolHPNH+RP+avUP9HCtxoblC01RR1bYZuNOuMd5IMo+GCs7l09YCcCnwYGov+0mW9LFtktNhgyV6ueNFsTMc3MeJ8xyYdX3gztz2P7bUV1cOKOueIWWTYtNb8rIn0eiVsNqSp2aHTPsLChsu+RpPiIYFpdMjXN+YvkAql8EABNx3hr7BVMDgx96J5hswyrRn7ft5IOMM07NjvpFjsh9SZJsBW7LsUSnYJIFoU5XG25jTjx/fmTcXUtNMpqJgeohUD054Q3XDgyrONWosMotCjkAXvqKahNQoiNDfyfNpgcTVSFlh6R1/Pn+gbm6HgNKjoFsbk5bTlRaeni0dPR6Wu+1LLQY/ODf+V5+iPT26WWPqFDYOoXOZhIqzGZcK+TBcaoyKn9gUWmuFsnTc6iyp2gKrG7ehJLYk9EXaRXO/CnGEtIcFUJuajF43zr6S6WgbeKvVhowbeGA0s+z8uyelVXfCEkJ/i9QW4O8am7BVA+XA8QhVxPruh25JpG2abnQz6yg2FXLmEf/loD8RHelpHX9M8tTthl43TZwvv+E1o1QZRsk2JxWf7x+WLSe82SvjsYw6qbyYQI+lpsfnJUmbKlrkE3gf4klh8iSY3jZsglkXw1oY2YucMr8JIveJxzNjq6kNJi5F0dSWuC+rbvJH7msQVn2eGk2ZAYUXlG1ivTbHbYcIkF8mJ/aSP5HKY41PCOQwNLDvB/5y30t5D+Nmq2PXmJio50QjJEvFhYasq9QaXhBahgx3jE34vzmsLTLtu1DVMzzlv12Xmp9jdu6edJP7My+XSCKdfBiDEJnDjZbVXjvAYmgpLDlcTDU919D5pF4SYuNqtaXHIcISOUZoVSYcQ8MAq2P7LisP4JdEwPKHftXqp5HUkIYCxFfMA1298cqlo0G3kk+T2/ITF/PF+B1X6fsXvzreWyam+l49IffhbLWYLP+SFhI/VeXe6O/yOd8Y5UaTZw+CNwdakwunIihACiJcOUNaFgTE0XpFcDL/KEQuOv74sW4wRC8Jg7OiEjJUhxZfZJbJcgyuxGjRKAxJnMpb3nvj7e3gcSwcR8V7Ay3RlEDqwAqToMse7pFLL3Ske5IQJWJYzKDg2rDegnRWEj4Ik7O8L7I1sBVzPDJrvlAKdBH/9yDZoROLqjlO7stSnryVvBcwAQPTo9ImeTcx1Uyhh0eqDy8RkF9fYHudetjITAAjzjCzARTWbnAGnGvTuhu71rOsHAMIBpK1DjQlMx/LtNDCULV4XMJra3x4AiybB3elsCuA5/Z06LoSktkuqaaiqsE1JvQvsnTU7A+DJWswGUHU9e86AYPu9TYCapqIhUTHxbWwtrw6mLWDVYR9BOw/BTTWQAGruX47lMfE1af1eDD4ymwOXXu3+u/BMXZAAqkhUO22pLFq/d4d7AfqVycyM6HHIOulo1fRSh6H0lkhFzABAS2i36Plg6fE64kx28PbI8Tnepkf4uEITACDo7sW0OYBvyvSu6HRV9gMALLDaiNoDt3SfFoxo4x2wyvyzwTzDwAMaWu/NompWjtk2l/eDOJhL5B/seKtPAkfSQVzHIevLibIhMQrNAICRsCnR85/WY7tXMNin9YieCKX5sR/VepqDN1xk3awck3j1h5UTkTnx6DEXx3LhEhBL40lhuXGZNp9gc0H02YvT8278anOXKW1Cve3br8PLfYJ8E1xMKUoSwj/M2/ZG/Vk6Hv4Qa3VPHebTKW598lB70mJujr2UYNF0HqmXksBZ4Rn4OKV5ZBhjS73U4nioEZjxc6kVH19mwpasnXV3Mj8D+27/Lr8Luwb3yDXJWL1IYfs8NaQvjRkACKol4U2LnhMeSaqKy7Nz2S56jHLc+kwAYJjn7ycH93ezhppuvZ8GNg2N1SrsHx3b7JerJVm2/LqWcR6Oo2utC5/vCmvRbjwdwb+oc6QWAwBzdbzidZSMupJ2WflSf6qdNvz7XdXNF63XqqdEblKK/XM2vIdMG5g2/Kw2/Ptd4PClRkBDmcLwlPYOHT52PscZ7HwNbJecNaEzvJKk8eW4aWh/+mb/UTYoFZQzvqugBSjH2simt6Dcqjtv+haqAbYVyV2on6FjVrzXXz4bTPKCtPvT6lPH4Y5ld2wlazH3EzpfTx7PCb2Pk+AeGUP5EatKb2v5qGIGALol5y47cdbp8CUrJOko555eG+7kKewkRRMAyGQR5Qw2bLiath9A7ka52aU71esLAoBF82xXEwYUJplFHKBG75FyAJQm5sgB2KYfVw6EGAWzciBJl8/Z3UrD5ELAdjUoLZbPDWpKawYK8LS1CBfwXj07I8CR/c4V4N6mopRQMU/H7Nwtyvk3oGfi05etPjmkIEgA9fcvx2wds5Lhza/kYHTfLi8+afXpIaVBAqgoUfFtHYKJR+Tp4gU6qU4mjxGC+vd+BYlO6exq6QBVVzEDAKplhsu5U2MGj/wsLxeN9kI+y0fReeSPqzQBABxYNm1U4N1SuW3uIVtpEAD0gmEjagSu0n0EuEcbT4Ox5t8SDBkG22BGex9QNXPHrN3Td8f4YHqKSl65hRNhe6FHFoDDFzqbmwXz3GskAs2L71vxqq7AbYkkHhxHxZjn/iXxI8qy30TMGmPEX/mrBy5Y1Deh73z87cL6/N3OcOUfu3erJyyeFyH248GBYMqIIbhdPBFg+YU3lCZEyOx8zcQfc9WztuFNHNwVN72huuMNDtVnsOTLBXhSBb+KaLekuiGb7ygzRiXekB3JBH8E5nacGSWVJPP55CXWSiNedsbaVKbfP1en6zHqucOaLAguwJiOlLMIYJEtpKgLlrw/U/z4cAg/RnTO04XuYyNZKkIRGX276Ljzjd+veDKjfFOHip6DbJbFixd1WP0Y0U/ybK6grGQEQstgHacpljFVgKalJ42wNKtUKex3vWkKPr9hVWhDEWx8/CRvwKYm5+RFTZkTFSiGpGmAkJz+ljl9AQykO/yzMJuW4HgMpbVD6QvXKMjTTh35qUWXX1Und0I4bfmAVfHjdghPDDylou40q72STyZ+XUwd1UVCWEUcLCzBbT6JOeXbdM/yZYhWB/dW7ozYTkLgz1goZmaFfkFS4kq9BK3jcnvuqs7KIPhGG1KRSM7aRv77h72dKAAykWehBOeY9prDJsnp6hci2z2rz06ScjdmXsc1sLIkiJtPdiSRRcW2qux3PlunnIi9uzFX7Hu5taNUGGbXgpl/E7Z7vKfb6PN/IXiRNdgrV3T21FTXFdNpstwTBpqJQEpl4P7RUfHZBKFtxij28ukdi2aJ564jNkpoh4D2rvowoCgbi89j6RTnPt3f+tBRzXH2O6bP82/rAADp3DKFyf75hLtxruzFPcrsZk8chomx+nnNRkp/3a5+yXk6fsWoaK1Be75ofp1BZ185/hK5mcyewh7/eBhXY8V4Y7B5ZPzOsfazKdzmbxIgIVO4099MYLV4/9kDaYn2Vpn6KeQHNRxjvhT67VWI6RT7UIr7qyEsvWR6Vio7qPAjk2GeLJO6G1HNRIyZy168WCSvTfO369J4XWOyw0hml4SMIu/AbKceJndYXmOfBauZqUT4G8LJqZvHJ8F8DzAF0tdHsNbsHfI+LjHwZ2QPzf3rKzuGciEpp/6NOrN8bNi3OtQL/3P6KCKWuQzXH2ADxlx3G0bBPFQjwN+gVR0X1+YAeUDadnspljS2jAVrBAACL7fCCQBdDMm9zYWxDhXVS+INlgwYogNY5cO47OwupGPhFNqtZiQHRknCHNG93+BAqVEIMz6G+U1OLc8ceE+HRkHW5k9CcKMUSpNrDkf7EmBAyb5EpkglZUWa7or5kwTdrCH2+801wnXA8ke2Q+PNLXJH1dhPv/KzdPT8enx6JfViLbgOtxbyTjNfl3Gv32v79g+ZTPBRyia3rqWI8UtxkI67XXmm+5g8tbqbw1tk9qrX9PpxY6o2W7BcXm0BC3REMZ67NbiHLZs0RBr9WRPzinBEsTWbfvBUR3HFDQJE10kbhvu0yaY3+XNkzt/cH8oGLigPZLWmg9Ero/KGBObMC3gMRCQwdJ3ZKEbAjCyDbXrsFjxqH4+tMteGQkU9EEQD2oSk/C9nJX3O+hQmLGI86xQa2nLH3uLcOHF2juATUpedTyiKyaeXmIgk0b7zAiTjOUcv57j/iyJMaqLCN1RJ/XuJQFnadiyl5Q7TicK4zVTHhHIub5ephIwsJPNAS40ZRBJrKzE9g/vUlnDt3xDVRUOQ1B9S3sCjUWJaKGtteZsjhlDX1OtFaGTiylpos88owpq1p9ZJ/cfI0iKJYatN+yQuVPhF5brDu2Oh5vzcAaioRWBEtFontwsILcxVDKpDgdx4wCJQXzDqBtEp27kGJT7NikW1LAowFNqnvLNHBlBea8alZkxZcuPys4RNu502E0C7jhtO4PDFykPOUE5OotsY/y2lbH4f8E67PFPbERK4OjX71VEM4p6678iRTOaijQF293A6kjq4/K0tTFvhg7pJ6n6eP16h5meE5/pj6EA46N0zfj24fTCM7eOc+97XrU2tMrpZXUxTRhIH6Uu5JBKBfGerLS+0cyVgJuVdhBvEdwOl7OIhVwVGF8p9u3kdmayR2ZH3odzj0eSISzLxva08WS+GFANXHIJS5r/4P167bbkTroqbfjZU9hlvhlRzdD4ibSiECzxNiiNwKwlEp97rJvI7eHdmigsAmGtdQfpimCgGbP2D0QpTMi06yW4FPVKT39ezQSwENPOX0VxnUUkI2xz9eFH92tlWT1L8fhXH9/R0PvPy3/k0e/H99v5z6D9tF2c+Gl1D6TvZna687J7Z/fuLE13fSNPpmUf3LunoPxYwOP+Az4VmR7RgjNd+lBqN8biNKSe0mFnFSjsrUK3Xfm1+8Qa2sDaeqT6FWl+VvH2LnfjLQaw5dvGfkM5Y3/Ld+hcTUSsoQ7ye+yHcD+Yyk1jpx8pTyeTiLZysZJIjuYzmsvHgwehVjne0PW9wY7hwqxnPBdxMvV/I1eymC7py0xZb1ePg0eZSe6fm2MBiOtnkLe45EeXTgpxDN0lAfEk3KjFQmTFgp8PbRxRlpOdMAU3iALsVes8kqyKC9HS6iFHF6SKwszR/4orKYVM1PPdFsoCNs1qskzmAcagY24s6G2XCxvBMPlUIhpjp/SoEcvgi74IeRNRDniErZq7n2D6KTfvMRhe/t0GClmKLHlnpNtshdEiCo+K7CY0EeEQxoBayRXfv03K7E1qeJy31whCY1NwtNqpfCeuFeFJNZuhzpXZJ/htEkA7oQfHNAt0iQ17OU/U+WgIhQ8N4tpm8YRSh6IW5RRW5OMHthNC5OEqncT7PPdcnWaEn4ro1N8PPcEVu4g7pT+nCeD10DsWbGMm33aGAsXVBRaR/Xtiq6IpqYUZ8bniucpd0IHaCQewc1/Q8vXdRvV9w04jCBWZeWXbXDrTMeKekvGX+TxbeAX/whbLXw5Snh8UOwnOVzwVsT639LSyG0P65O1XVO/J2+p/8vJvqZN59DTc5hIytm7i9Ba/4Oi3NLbieXjlZf09cB+LGnhq6OQlwmuwInn6FukZ3pD41qkeHSxf7Zd4cncoOK7M/ji3UH+rzKUdU0TjFPKcopRZbx/P6ZK5cb+2dJHfalZQuN+IBPpbF3y2NQwtxDNCj5xdmW0bpSTcgcoKPRrrKp/HwPvV5Mv0z79VFSfFSoKyPl/bR89GgnTOUv3yKtY9+Ro/lKZmyLDXENV2O/Eo1JeTgqRSlZB7pooY+n64DKv1GRWtSwtlGf/7Gwp2O9738DWIibNIAIoc8mVaIAijrGzsh7yPgz9GnT+xlvE/YO0g8AM0cYQ9+225PASW7pORcNzAgTJLPM4xkntRjvUbh57ew7puAlFGAdUx46SSZgK+YfOIuMrDzTYBAk2suJx0hbx9d9RkHABVuMfBUkgkojygo6hLTUhrIcyoj0MkYoS7SRkVYl7hCcE3ORohDBoCMBAi7JPu8Imv7ScSPDJuQuBlyLSx9FTa6OYO4Z0gh6d4fiiUpr5jZh0nmvRfs/jYPSsus2Fjm7wEiSdBt4DuexOtODWD1JW1LOdcqc8j2CYyyEiwU49AHhHT1adxGgJnaIkJAAto8goX1ia2vDY6c9LMatJWxpdFCRsRM2COa0QApfjQWHTzB5RrUZhDgVGvNFxwLKLqMPDDIOdLaMHTPRxvOsX30EBry5R5GQA8zk6/Km3PZfLJuUSjQSC/5ZtL+dMmeA0kojCPl1xLd5l7yaTb+pZoImM/mIdJLwL6fqRYlqzLfgJ9ncd7aqOr2A8ZRCuheLXHprWgyXRl6/H21g7FCpAMIV7FGRkmzYWHZBX5qVjTRN/MvGP157VojLXJ1iG4E0Xrvb/MbI9PAxqlFXPshu/Vr5aG78jvinCdEwZoZoZpHkATakGZmJ0ewGPJ58/oZ4jcbX6Pj1O19fm/a4vxfabjm2fU3FXR/JLuzVOyyzdEfJvHyu9+MmX7Xrxa48v6ie3cXz7v7Zbd3N222/oJ6djqE7KpplP7VNNl+O+teoin7H4GW51Lakf30ITx0oz3y+U0smfbrXz2Pyl2wguT2k7ZV/+CDvuOyqj7RJfbPX+ZD59OTjopbWAafBXg2TG6XNx9J42mC7/HE40Hi7M+6/VB2KtmMqKfM6PLvQoBhfpOAW+EXvFYUK3uPz11bfGCGisknWuBww+pKGtOPkbQY84eevsiLQb0JJElvAyGR8wjCG0IiZGhrN0l2lJ4FPTemk7HsEigBQ8XrUvYuCFW6yTFbs9el/BZOVDkrjfLtPC5qtgN0+1yspb+xGVCuM6zEwDC+iRheivGx+he5Q/4lx5M7PTRwQjA4pNZFDcxNv0LIqFg1d9ghEYBzObPed8YneWgEfBoZ4vy254mAI7WiiGGtXGRrCekDTKCanQJ6sANUmxqLR/LH++3Hu03z92m/dfr/3JNsobOm451vGk0NPnf2cObnliajbU6n/Bmujsf28olO7fE9+USnjuYMzSEjXtQCTvv6UcCNSgtXE0XSQv6SvCpQR8/vzc3vx9/shP4+3Rfy88Uvuypr31PLwQR5qdRbr0rQAPPnugGAgHUqVy4RTcfNNkh8rntNbXezUgWSFXqq5opQWuHzWNXTWh3VR7hEgy67jQju9Qru5nRhq0wCV+BTVls4s4EsV0CKf/YfAECRwEa1n2MB3li3VADf6eIwf4sjONH4i6RIXC9gC8pq2BP2EmGEAy1vfMBx6mNJ4970v20HAFBVxsnyH32opnHilhu13E5rL6jbfhmmoQHKAkSddqHkvW60myruHXpT8XoUAIC9gLE2Ll5AKzvjHkCHerZJYOrqDZ4AOjfkWMXc4Xb6Me4jv56MMizTcX2ms8AL3QnYZ4Qz+VefYxb3EwWnPqQiv1GsC/Pz+M11ED+DJRMP8blNU9oATnMocJDtflL3kV+PN4LMcgo+OamPkqJC130n/y7zx9kumdAossIs57Fa4K9b4utHn5KX3/VXgeCmPW0AjSYrvm+uMJcQy7lFBjyuxai1WPWh9myDehWEpFDSV9QNAMzsAbgNZXW9u8aMz3W3LrvbnTdmskKPCVuE0gpTj4lWKJPI6natEdFz8TG4OV1gxiSYCgvqagu710BmD7C5P/sPAPThAF1qP4sBZmXdXALmaIsNMxEOjNxfdB1sFCA0j3HlR5jun1NVxE9ZX/UHEXrx+42+l+T7FH82//o/6Zyf7iUTCS500pd6BwDoYqwpsPtHzoSAKGPQ53AJNWYQxiVGr5PzeBm36ZJZCwAAUAKltH6ai99qW873RNO7/UFbB9WIf14HANCOIANjM2l4hgzFPyFHC4CURGpRiIuYGp/wTJMrU1puas+jqTTbO4lHq2ULUsIQi4zGfTnE8+dsOI8/LbmEu7AZFnsqDwrUYd6U0b//7SAqaQkRtCPVjYhnlJldaJoEe7xFPpsZn/3SJ67/T2RKJx1RfVRQWRjxfkbxejRObUp1JSLB84LqEGtXiQXuvK4bALiAw6T/6VlVODyVPPZONXdwumSFnsq5f1mhOhXHqms2SdwSJ2Ytogsb6Ykb06XHQZ3gNPf8h5WWyjXbx3QNejLnz/0DALod6AxV+5l10CTobMNijqd2N7nBqfTnbPgOmTbQjKa/yhZqgMrfIt4JJ9G5mVrBVl39bj/bcy7tyRaMLMMS8RjdvWUMerphzDz8X1z5YT8ysoff9OuN++/rw2e6qIF66kfnbr6OT9v4n3dame7uhtTV3Sk10i1rF0qXN7mOK9O13Sdet3ZXbk/lRLuRV9OsWrru7K5YV3bPv1kIrQu7gbuvG3rXdUPstq7iP6wXuLu6c3dV1//PG+Zi31667umq7ZquXJ4l/jY1eNIcw+qK7qyyCfP/lcP/Nn3e+ri+6n/Uv3/OfhM9UCPB598oUVzVnS6SjldHH7jGP4uBVeJZ4HAbECwURVMAADkGorrbY0/hAdGd/0+91S5+Zqo7GYn4Z5Up8qB3wJ9FAQBSamiE3L1lHfrbGL5xVx1T8vPbcP+fMLEB+9uI37gfk0FnfwHrX+QsBub8W1DqQm8eGGHUTalxvTHimYVN3Pk17vVZplfvupyJkfq8mx66IrsTEz5AfnVg17X/BL1goB/7wUNv6gwqW509P1dfVdfSl9INAKxdHqLqs3UqbGfj43KJatfeqbyHN01WSFTJ9gp1EaquapLoGtzuXTsIADQA3MgouL2yZa60oEsD2VTRVbD2HwCYGugYt/EztzofKbhaqxktcDxdnAvIKczJ0k9CpLW3pdQKOqK3taoJoIfu3jbPnRrYXNPDbaDk5m6Xs0WPvK6Njcl9Ml7XDgDMhR6nYvnc4T6n3XBnHLB3dZWU6aV616MAAOAAC9q4MwHJdmZzgHbq2e4FlK43WAC015BjNOHltZSFoqHo7y4STP0q+vCMZlSGtjRRcP4+KmTBSBf6WahR+Ri+6WyV1CW3NCVfAzhXn+UJHSkr+sXhh89zDfJZnZ1W3TCTR5pMaNlXoew5vtPjwec6PjAkOyYV6uNHmuKvAbT8qzY5o+z+fFdn6Hrs8kQZprVT9fEZddhjWdmTiQjsrewGAK5BVxldP41GEqOLVpldbf5EEheic14YEb6KHqJCqcQAtMhF9OZV7gZ1sdok0tLdqIysmg5U/Q8AjMCg+TMBV+tNNZjMih21UZiVpR8fEde2VCeY3F1BTwqeZCd9RAjVX19LGXnTe0G9s+e8Hj/AibuyN4onxV0AwHgeUM7VuMyWErj1eoN15tennv06fuo1YQ/1Hfupe4WEhYTa3ZbBqYFQV1adgwmFjN3SN+puZz0AALAbEGK0oECoUogGBy7cAQCOvc0p5RJbKuw7xpwXQSm70cNTH6TsJcvumwpnJHTPeYJclY8FdMjk+0NAWT3de+o9+7240dYXVvBG27x4dY3WUFW19KV0AwCOVK3nmqFdyUwMP44Ov56feo2CzI73ht2Ehb0upszimvaoSaJLAFrJiJ3I+A3q55h0UPmiAt2VkDnLs4br9BX+AwCS67RzP6Q7Gb3JoQPHxZdid67Di+mNuHZ4SYLrNfPQfWYndUQR/UB1vmMyN1pCd0WHvgXiOLh496q0KmBUbqwVOtw8BEylAgA8uJhPoTN7u93KgYC6yqrppItSAABy4GwuHExWcxxMXvs4mLzDcTC37RxAqIYwWWBOtZGbwCpmPqp5zh7eWcc1tzxxG213vfS6zgd7aRWvMKXn/wDx3IWmlC26PKDjAG5eir11OXI32iYyVW79czlAaV03AIAKiLQLNPq7lig5HSn3brO7bESVkxa6IE1huM9skUMXuiYJ5HBVt3YQANA2oEyuaFeK8kh3sIEsFyCNP/sPAEwJgLsNl9NqLwwq+GI1gwCHzoqzl6vg4IisPkZa6RZRJ9j2mjDkeluyPukcEcbuRs1zpwCubXo4G0radpezV1ZV+ZIb3U9u7OTuqSYPEdOoAABxO+ODQgdzux3l3KQ3VhpdHLAoBQAY9mLntpoDZzVh36Y2in2bDij2XY7Egi3Xh5MiZ58W9Gdow0jbaILh9H1UZG+UJXg/qM7v7Evcr2SB+tiNpt9rAKfqszyJG2Vp3vso9DMY/e3rU37CD9toEqJhX4XRG2VtnXf0wrM/43sL6x1+6kbT+TWAhn8V33flGcMLfF519oyvtMMPliVro21Yr8KI02UMIiq7AYASiGU4r0HXJj0KhLvFwpcdLa4tlklU5FAxGfGUpdbN6QJSJhFzbxvjsF1GdqJTrv4HAGhwrfkjgE96EwL3ZsS7X6gVMJzR24grhhMGO1Mqri1olIlRRA==`, `base64`)).toString(); return patch; } diff --git a/yarn.lock b/yarn.lock index 61f009e94750..f1e455f9a1ff 100644 --- a/yarn.lock +++ b/yarn.lock @@ -26904,7 +26904,7 @@ typescript@beta: "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=d9c0c4" bin: tsc: bin/tsc tsserver: bin/tsserver @@ -26914,7 +26914,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=d9c0c4" bin: tsc: bin/tsc tsserver: bin/tsserver @@ -26924,7 +26924,7 @@ typescript@beta: "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" + resolution: "typescript@patch:typescript@npm%3A4.3.0-beta#~builtin::version=4.3.0-beta&hash=d9c0c4" bin: tsc: bin/tsc tsserver: bin/tsserver