From 33b3176ce45c2e1f76ec1a05d8e74ccb923a7b78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ma=C3=ABl=20Nison?= Date: Fri, 2 Apr 2021 15:14:47 +0200 Subject: [PATCH 1/3] Updates the patch for TS 4.3 --- .../extra/typescript/gen-typescript-patch.js | 7 +- ...tch-0c223a342b5f118730b2b4d53f205bf4.diff} | 18 +- ...atch-accbeaa05d467a9cc45045022af4affd.diff | 2852 +++++++++++++++++ .../sources/patches/typescript.patch.ts | 2 +- 4 files changed, 2868 insertions(+), 11 deletions(-) rename packages/plugin-compat/extra/typescript/{patch-f3e4e754bdfc2adc8981b496a507d17b.diff => patch-0c223a342b5f118730b2b4d53f205bf4.diff} (99%) create mode 100644 packages/plugin-compat/extra/typescript/patch-accbeaa05d467a9cc45045022af4affd.diff diff --git a/packages/plugin-compat/extra/typescript/gen-typescript-patch.js b/packages/plugin-compat/extra/typescript/gen-typescript-patch.js index ebba625d52a8..ebbec5dfd667 100644 --- a/packages/plugin-compat/extra/typescript/gen-typescript-patch.js +++ b/packages/plugin-compat/extra/typescript/gen-typescript-patch.js @@ -53,7 +53,12 @@ const SLICES = [{ from: `8e0e870`, to: `b8cb0762f776cae4fed710b9628a3df2e7b58fec`, onto: `bfc55b5`, - range: `>=4.2`, + range: `>=4.2 <4.3`, +}, { + from: `320a959`, + to: `320a959`, + onto: `f9b35cd`, + range: `>=4.3`, }]; async function fetch(url) { diff --git a/packages/plugin-compat/extra/typescript/patch-f3e4e754bdfc2adc8981b496a507d17b.diff b/packages/plugin-compat/extra/typescript/patch-0c223a342b5f118730b2b4d53f205bf4.diff similarity index 99% rename from packages/plugin-compat/extra/typescript/patch-f3e4e754bdfc2adc8981b496a507d17b.diff rename to packages/plugin-compat/extra/typescript/patch-0c223a342b5f118730b2b4d53f205bf4.diff index f78a03eaf6f7..5dfd674f9f4a 100644 --- a/packages/plugin-compat/extra/typescript/patch-f3e4e754bdfc2adc8981b496a507d17b.diff +++ b/packages/plugin-compat/extra/typescript/patch-0c223a342b5f118730b2b4d53f205bf4.diff @@ -1,6 +1,6 @@ diff --git a/lib/tsc.js b/lib/tsc.js index 7f46cc9d8..cdb2b5407 100644 -semver exclusivity >=4.2 +semver exclusivity >=4.2 <4.3 --- a/lib/tsc.js +++ b/lib/tsc.js @@ -4622,6 +4622,9 @@ var ts; @@ -300,7 +300,7 @@ semver exclusivity >=4.2 synchronizeProgram(); diff --git a/lib/tsserver.js b/lib/tsserver.js index a1d0a7a17..ea36199e7 100644 -semver exclusivity >=4.2 +semver exclusivity >=4.2 <4.3 --- a/lib/tsserver.js +++ b/lib/tsserver.js @@ -7249,6 +7249,11 @@ var ts; @@ -895,7 +895,7 @@ semver exclusivity >=4.2 var watchers = this.packageJsonFilesMap || (this.packageJsonFilesMap = new ts.Map()); diff --git a/lib/tsserverlibrary.d.ts b/lib/tsserverlibrary.d.ts index 70e326c4c..1fd3a2193 100644 -semver exclusivity >=4.2 +semver exclusivity >=4.2 <4.3 --- a/lib/tsserverlibrary.d.ts +++ b/lib/tsserverlibrary.d.ts @@ -4646,6 +4646,7 @@ declare namespace ts { @@ -908,7 +908,7 @@ semver exclusivity >=4.2 * This is possible in case if resolution is performed for directives specified via 'types' parameter. In this case initial path for secondary lookups diff --git a/lib/tsserverlibrary.js b/lib/tsserverlibrary.js index e8537e466..3a5db7fbb 100644 -semver exclusivity >=4.2 +semver exclusivity >=4.2 <4.3 --- a/lib/tsserverlibrary.js +++ b/lib/tsserverlibrary.js @@ -7443,6 +7443,11 @@ var ts; @@ -1503,7 +1503,7 @@ semver exclusivity >=4.2 var watchers = this.packageJsonFilesMap || (this.packageJsonFilesMap = new ts.Map()); diff --git a/lib/typescript.d.ts b/lib/typescript.d.ts index 5c9fcf765..e0cca011b 100644 -semver exclusivity >=4.2 +semver exclusivity >=4.2 <4.3 --- a/lib/typescript.d.ts +++ b/lib/typescript.d.ts @@ -4646,6 +4646,7 @@ declare namespace ts { @@ -1516,7 +1516,7 @@ semver exclusivity >=4.2 * This is possible in case if resolution is performed for directives specified via 'types' parameter. In this case initial path for secondary lookups diff --git a/lib/typescript.js b/lib/typescript.js index 8539f89fd..57ad1b5d9 100644 -semver exclusivity >=4.2 +semver exclusivity >=4.2 <4.3 --- a/lib/typescript.js +++ b/lib/typescript.js @@ -7443,6 +7443,11 @@ var ts; @@ -2012,7 +2012,7 @@ semver exclusivity >=4.2 }); diff --git a/lib/typescriptServices.d.ts b/lib/typescriptServices.d.ts index 3a51aada6..62093708e 100644 -semver exclusivity >=4.2 +semver exclusivity >=4.2 <4.3 --- a/lib/typescriptServices.d.ts +++ b/lib/typescriptServices.d.ts @@ -4646,6 +4646,7 @@ declare namespace ts { @@ -2025,7 +2025,7 @@ semver exclusivity >=4.2 * This is possible in case if resolution is performed for directives specified via 'types' parameter. In this case initial path for secondary lookups diff --git a/lib/typescriptServices.js b/lib/typescriptServices.js index 6b08bfe23..2db549ffc 100644 -semver exclusivity >=4.2 +semver exclusivity >=4.2 <4.3 --- a/lib/typescriptServices.js +++ b/lib/typescriptServices.js @@ -7443,6 +7443,11 @@ var ts; @@ -2521,7 +2521,7 @@ semver exclusivity >=4.2 }); diff --git a/lib/typingsInstaller.js b/lib/typingsInstaller.js index 9fa096358..02a860394 100644 -semver exclusivity >=4.2 +semver exclusivity >=4.2 <4.3 --- a/lib/typingsInstaller.js +++ b/lib/typingsInstaller.js @@ -7238,6 +7238,11 @@ var ts; diff --git a/packages/plugin-compat/extra/typescript/patch-accbeaa05d467a9cc45045022af4affd.diff b/packages/plugin-compat/extra/typescript/patch-accbeaa05d467a9cc45045022af4affd.diff new file mode 100644 index 000000000000..943247882a50 --- /dev/null +++ b/packages/plugin-compat/extra/typescript/patch-accbeaa05d467a9cc45045022af4affd.diff @@ -0,0 +1,2852 @@ +diff --git a/lib/tsc.js b/lib/tsc.js +index 8e68a1124..4fd64540e 100644 +semver exclusivity >=4.3 +--- 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; + } +@@ -32483,21 +32486,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) { + var traceEnabled = isTraceEnabled(options, host); + if (redirectedReference) { +@@ -32577,7 +32611,9 @@ var ts; + } + var result = void 0; + 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 = searchResult && searchResult.value; + } + else { +@@ -32950,9 +32986,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); +@@ -33240,6 +33279,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); +@@ -33254,9 +33301,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) { +@@ -33393,6 +33443,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) { +@@ -89054,6 +89145,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; +@@ -94516,6 +94608,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; + } +@@ -94543,14 +94654,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"); +@@ -95272,6 +95387,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; +@@ -95343,6 +95462,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) { +@@ -95375,7 +95498,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(); +@@ -95385,7 +95509,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); +@@ -95563,6 +95687,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); +@@ -95578,6 +95708,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 0d581ad61..75a8b6c7b 100644 +semver exclusivity >=4.3 +--- a/lib/tsserver.js ++++ b/lib/tsserver.js +@@ -7326,6 +7326,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; +@@ -39887,24 +39892,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 +@@ -39991,7 +40028,9 @@ var ts; + } + var result = void 0; + if (!ts.isExternalModuleNameRelative(typeReferenceDirectiveName)) { +- var searchResult = loadModuleFromNearestNodeModulesDirectory(Extensions.DtsOnly, typeReferenceDirectiveName, initialLocationForSecondaryLookup, moduleResolutionState, /*cache*/ undefined, /*redirectedReference*/ undefined); ++ var searchResult = getPnpApi(initialLocationForSecondaryLookup) ++ ? tryLoadModuleUsingPnpResolution(Extensions.DtsOnly, typeReferenceDirectiveName, initialLocationForSecondaryLookup, moduleResolutionState) ++ : loadModuleFromNearestNodeModulesDirectory(Extensions.DtsOnly, typeReferenceDirectiveName, initialLocationForSecondaryLookup, moduleResolutionState, /*cache*/ undefined, /*redirectedReference*/ undefined); + result = searchResult && searchResult.value; + } + else { +@@ -40475,9 +40514,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); +@@ -40798,6 +40840,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) { +@@ -40813,9 +40863,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) { +@@ -40973,6 +41026,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; +@@ -108352,6 +108457,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 +@@ -114705,6 +114812,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; + } +@@ -114735,18 +114865,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"); +@@ -115534,6 +115670,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 +@@ -115612,6 +115752,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) { +@@ -115644,7 +115788,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(); +@@ -115655,7 +115800,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); +@@ -115855,6 +116000,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); +@@ -115870,6 +116021,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(); +@@ -121117,11 +121272,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)); +@@ -121129,6 +121300,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; +@@ -122800,6 +122991,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); +@@ -122812,8 +123004,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); +@@ -122828,18 +123020,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; +@@ -122940,6 +123150,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(); +@@ -122948,11 +123159,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) { +@@ -150119,9 +150338,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; + }); +@@ -158822,6 +159041,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; + }; +@@ -159429,6 +159679,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); +@@ -161253,7 +161504,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) { +@@ -161271,7 +161522,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 +@@ -161297,6 +161548,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(); + } + } + }; +@@ -162274,6 +162527,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/tsserverlibrary.d.ts b/lib/tsserverlibrary.d.ts +index a2ff8fc1e..e32bcee85 100644 +semver exclusivity >=4.3 +--- a/lib/tsserverlibrary.d.ts ++++ b/lib/tsserverlibrary.d.ts +@@ -4709,6 +4709,7 @@ declare namespace ts { + } + declare namespace ts { + function getEffectiveTypeRoots(options: CompilerOptions, host: GetEffectiveTypeRootsHost): string[] | undefined; ++ 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 e33bc9110..3d92b0d0c 100644 +semver exclusivity >=4.3 +--- a/lib/tsserverlibrary.js ++++ b/lib/tsserverlibrary.js +@@ -7520,6 +7520,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; +@@ -40081,24 +40086,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 +@@ -40185,7 +40222,9 @@ var ts; + } + var result = void 0; + if (!ts.isExternalModuleNameRelative(typeReferenceDirectiveName)) { +- var searchResult = loadModuleFromNearestNodeModulesDirectory(Extensions.DtsOnly, typeReferenceDirectiveName, initialLocationForSecondaryLookup, moduleResolutionState, /*cache*/ undefined, /*redirectedReference*/ undefined); ++ var searchResult = getPnpApi(initialLocationForSecondaryLookup) ++ ? tryLoadModuleUsingPnpResolution(Extensions.DtsOnly, typeReferenceDirectiveName, initialLocationForSecondaryLookup, moduleResolutionState) ++ : loadModuleFromNearestNodeModulesDirectory(Extensions.DtsOnly, typeReferenceDirectiveName, initialLocationForSecondaryLookup, moduleResolutionState, /*cache*/ undefined, /*redirectedReference*/ undefined); + result = searchResult && searchResult.value; + } + else { +@@ -40669,9 +40708,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); +@@ -40992,6 +41034,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) { +@@ -41007,9 +41057,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) { +@@ -41167,6 +41220,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; +@@ -108546,6 +108651,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 +@@ -114899,6 +115006,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; + } +@@ -114929,18 +115059,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"); +@@ -115728,6 +115864,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 +@@ -115806,6 +115946,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) { +@@ -115838,7 +115982,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(); +@@ -115849,7 +115994,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); +@@ -116049,6 +116194,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); +@@ -116064,6 +116215,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(); +@@ -121686,11 +121841,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)); +@@ -121698,6 +121869,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; +@@ -123369,6 +123560,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); +@@ -123381,8 +123573,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); +@@ -123397,18 +123589,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; +@@ -123509,6 +123719,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(); +@@ -123517,11 +123728,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) { +@@ -150688,9 +150907,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; + }); +@@ -159016,6 +159235,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; + }; +@@ -159623,6 +159873,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); +@@ -161447,7 +161698,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) { +@@ -161465,7 +161716,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 +@@ -161491,6 +161742,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(); + } + } + }; +@@ -162468,6 +162721,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 0b2d291ee..050fb9cf1 100644 +semver exclusivity >=4.3 +--- a/lib/typescript.d.ts ++++ b/lib/typescript.d.ts +@@ -4709,6 +4709,7 @@ declare namespace ts { + } + declare namespace ts { + function getEffectiveTypeRoots(options: CompilerOptions, host: GetEffectiveTypeRootsHost): string[] | undefined; ++ 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 07337021a..d65d71c25 100644 +semver exclusivity >=4.3 +--- a/lib/typescript.js ++++ b/lib/typescript.js +@@ -7520,6 +7520,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; +@@ -40081,24 +40086,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 +@@ -40185,7 +40222,9 @@ var ts; + } + var result = void 0; + if (!ts.isExternalModuleNameRelative(typeReferenceDirectiveName)) { +- var searchResult = loadModuleFromNearestNodeModulesDirectory(Extensions.DtsOnly, typeReferenceDirectiveName, initialLocationForSecondaryLookup, moduleResolutionState, /*cache*/ undefined, /*redirectedReference*/ undefined); ++ var searchResult = getPnpApi(initialLocationForSecondaryLookup) ++ ? tryLoadModuleUsingPnpResolution(Extensions.DtsOnly, typeReferenceDirectiveName, initialLocationForSecondaryLookup, moduleResolutionState) ++ : loadModuleFromNearestNodeModulesDirectory(Extensions.DtsOnly, typeReferenceDirectiveName, initialLocationForSecondaryLookup, moduleResolutionState, /*cache*/ undefined, /*redirectedReference*/ undefined); + result = searchResult && searchResult.value; + } + else { +@@ -40669,9 +40708,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); +@@ -40992,6 +41034,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) { +@@ -41007,9 +41057,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) { +@@ -41167,6 +41220,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; +@@ -108546,6 +108651,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 +@@ -114899,6 +115006,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; + } +@@ -114929,18 +115059,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"); +@@ -115728,6 +115864,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 +@@ -115806,6 +115946,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) { +@@ -115838,7 +115982,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(); +@@ -115849,7 +115994,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); +@@ -116049,6 +116194,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); +@@ -116064,6 +116215,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(); +@@ -121686,11 +121841,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)); +@@ -121698,6 +121869,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; +@@ -123369,6 +123560,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); +@@ -123381,8 +123573,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); +@@ -123397,18 +123589,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; +@@ -123509,6 +123719,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(); +@@ -123517,11 +123728,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) { +@@ -150688,9 +150907,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 56e1d342d..09de6de0e 100644 +semver exclusivity >=4.3 +--- a/lib/typescriptServices.d.ts ++++ b/lib/typescriptServices.d.ts +@@ -4709,6 +4709,7 @@ declare namespace ts { + } + declare namespace ts { + function getEffectiveTypeRoots(options: CompilerOptions, host: GetEffectiveTypeRootsHost): string[] | undefined; ++ 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 f81ca89a1..1a0d25685 100644 +semver exclusivity >=4.3 +--- a/lib/typescriptServices.js ++++ b/lib/typescriptServices.js +@@ -7520,6 +7520,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; +@@ -40081,24 +40086,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 +@@ -40185,7 +40222,9 @@ var ts; + } + var result = void 0; + if (!ts.isExternalModuleNameRelative(typeReferenceDirectiveName)) { +- var searchResult = loadModuleFromNearestNodeModulesDirectory(Extensions.DtsOnly, typeReferenceDirectiveName, initialLocationForSecondaryLookup, moduleResolutionState, /*cache*/ undefined, /*redirectedReference*/ undefined); ++ var searchResult = getPnpApi(initialLocationForSecondaryLookup) ++ ? tryLoadModuleUsingPnpResolution(Extensions.DtsOnly, typeReferenceDirectiveName, initialLocationForSecondaryLookup, moduleResolutionState) ++ : loadModuleFromNearestNodeModulesDirectory(Extensions.DtsOnly, typeReferenceDirectiveName, initialLocationForSecondaryLookup, moduleResolutionState, /*cache*/ undefined, /*redirectedReference*/ undefined); + result = searchResult && searchResult.value; + } + else { +@@ -40669,9 +40708,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); +@@ -40992,6 +41034,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) { +@@ -41007,9 +41057,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) { +@@ -41167,6 +41220,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; +@@ -108546,6 +108651,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 +@@ -114899,6 +115006,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; + } +@@ -114929,18 +115059,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"); +@@ -115728,6 +115864,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 +@@ -115806,6 +115946,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) { +@@ -115838,7 +115982,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(); +@@ -115849,7 +115994,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); +@@ -116049,6 +116194,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); +@@ -116064,6 +116215,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(); +@@ -121686,11 +121841,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)); +@@ -121698,6 +121869,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; +@@ -123369,6 +123560,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); +@@ -123381,8 +123573,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); +@@ -123397,18 +123589,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; +@@ -123509,6 +123719,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(); +@@ -123517,11 +123728,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) { +@@ -150688,9 +150907,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 ef8ee6dd2..ee3d9b719 100644 +semver exclusivity >=4.3 +--- a/lib/typingsInstaller.js ++++ b/lib/typingsInstaller.js +@@ -7315,6 +7315,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; +@@ -39876,24 +39881,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 +@@ -39980,7 +40017,9 @@ var ts; + } + var result = void 0; + if (!ts.isExternalModuleNameRelative(typeReferenceDirectiveName)) { +- var searchResult = loadModuleFromNearestNodeModulesDirectory(Extensions.DtsOnly, typeReferenceDirectiveName, initialLocationForSecondaryLookup, moduleResolutionState, /*cache*/ undefined, /*redirectedReference*/ undefined); ++ var searchResult = getPnpApi(initialLocationForSecondaryLookup) ++ ? tryLoadModuleUsingPnpResolution(Extensions.DtsOnly, typeReferenceDirectiveName, initialLocationForSecondaryLookup, moduleResolutionState) ++ : loadModuleFromNearestNodeModulesDirectory(Extensions.DtsOnly, typeReferenceDirectiveName, initialLocationForSecondaryLookup, moduleResolutionState, /*cache*/ undefined, /*redirectedReference*/ undefined); + result = searchResult && searchResult.value; + } + else { +@@ -40464,9 +40503,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); +@@ -40787,6 +40829,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) { +@@ -40802,9 +40852,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) { +@@ -40962,6 +41015,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; +@@ -108341,6 +108446,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 +@@ -114694,6 +114801,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; + } +@@ -114724,18 +114854,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"); +@@ -115523,6 +115659,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 +@@ -115601,6 +115741,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) { +@@ -115633,7 +115777,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(); +@@ -115644,7 +115789,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); +@@ -115844,6 +115989,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); +@@ -115859,6 +116010,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/sources/patches/typescript.patch.ts b/packages/plugin-compat/sources/patches/typescript.patch.ts index 31187e25ff03..2cf5887bada0 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(`W2YAG0VuB6Jfv9upUeR2uLndyx9bNCIH54F0/huVNqCHAtuYFtZ/RUYLKNCA4GdulMx47I4/AbpElM9ecj6t9a3ma4O+EdGAchVgtw4f0bR0Ychza4hztqqX8Vk1EovK5DBF0FwBafHL1Ne7LqcnOWVXXoIunWn8rdKtQgUghQwFcbCQPfQkFup0Wi9AUu2zgrDMrBeUyFObv5a21/vWxrVuW0ttuEiMXAGG7IkzMQ3SM6PQHHtefY16VE2ET3K55HJM2ZXRwp9xg+/nRGXrxkzVYHpCV5aJ2zjoQZYH+YuIU5Rs21/VyzYYzDZe04vfv69Wpt1cZ0w0QchxJtzMyKTKV4e4r+pVDxxXJEieAcheY11VvXofIABy2kpDynmfREpSBaF8FoNt1vlQ1mQuk4Ig0ZSutP25AJ32bUv7/vndkN7paF30nv+iCzZVZu5s7R4ojJURq1TSwSpEFWDT0V+Kuj1YvQwny7ArBSR9SBeiMoGaYzvEMpStfM3HWPW//dfsddRkoIhKhl2fsRjLTHrN9U3fqLC8AsKKeOBAmK2F4ae+OFO4SzcpRYUQX93fAW+GfjFnGtu1pBaTMa3251KmiRBk2GL//KOftC3qxWMyqHzLqqxrbf4tqK/OBOsfCPTznj7/e8KvV3hky/PnQaOdueSHevvdJzQ9+GMMecTGn3/hWT98zUdRFBi+gYm1Fstvsd+jPsRoA/XYsdt4zxbi4/Vc1fp1mk4G36Eu0zlrQYHuUPP6xhRoGoAtnckJh5x45blHFJXmp4iv75CRT8wPXTnaxNKeFYYEBPzbnk6Rg1+g7UZZlxtANenOa64rhgBVsCKiCeufTh2ig8pfadd7jOiqqDLbtJcBvcLI1B62JOWyYR3Xuflqwn8r7ROLrYefXvT7PrdfWxXBlgAbT3TJ/4cC/Ztfh1d6ReViv0E0Dzxw1/OviT4JvoH/OwRBBsx5RoYi1FOdvLqubT9bo1myHhNxMru4NbEnEOnHJ02ZlG1wObDvt9fMBPDPBgo5TJbHv4pNH3hbUoVw9Zc96yG5uHi9sis/uGCuu5rQURcLhWBHl142hwCDeWz8Pr4PyyEAA/EN1kMgZ6mNVCtbnWbA0VLw5uK6V9N9VD9gVAFlEyHN+Ic6svfR+bgOXiHDE/SuTxOVPXA2NvPHU6Q4SFcIG67aMrBv2YpHeuDO63EFSErw2TRBhmWu5r11vYlA8g3L57s2yhKSY9JqL/4sn782N20t3SZny1W7y4FuJky2vSmcgfnowjzg2vUljmPS0Bb4kvhkAA5LmzQRxFOux/o6aL0xxizd+f6E3frURGApInMxXxWJrg8kOgVKZfZAhZcwWGJuD1CfO5taZDSYNdzZXRWo3oKT/n3K5tiKRcmDer+Mp8nysZSKBVhVRjSl6tkbWWwdbqCVmxNQOymUPw3kVfZL6amvMFcFzAzOvjgXFipyhoVvWVqgj+88fPfEk7DVCyXi4oSSWZQjSoGds4wtQKQclQiHqMk6ot8WGX1zZ4+ACultag2gYAHt1asM9d/5WuG+XMaJ72gFVBtr82a0ZqaC5PV1maBa6sREIFDW2I/SsFyuixdIZu6/8giEbsIAlXm0NzjNK98qCUddecjh0V9PnzkckSzL56T8ghOCPj50/rf3g7TKVTr66RydRQzQo8JzlcFyi2B59X8Nd2APZSqktgut88pTRyPgUY9+1FzGU7EXrreRhQLP3JeOy6Y+KaE2mlPl03Wywy3xXRei8IHUZXIHpJarLTnsUpbz23GZo1AXd5rDWs22Z1l8HNrqr7Cxy0qU6zYvJHftMudtNudXxMSGdSTlGFAxNvF5t36zmQ4zZ37OZb/mnHWp+W6J+MnLenXhlLabk5b8A9kvFiiLuZjyITg8HoT6lFufapsOYATdR+ySqteKZd74ktQMDHWN4xY0CqEkz7LH9DXm2PDpWKN7Q6XL6PXaVtcgsVv4uHN36ZYPPwkyoASvLKa2fkr+I/dTCBRcZEHBJvVelV88kafYL/GUgyPyyx2Z1/nTnUh7TmidJkJYlzVm25vI33svnDyuwCpZZLUip5sEgO+q8LEr592I7Ax9iGIXoiz2FYGxvW534edcZvyNNNDqLDbrdMZSeozPDWIk2rKcaX3aNwLjDvdxv7ZfjeAdLlkePSnIlbhT+8CdEHVt6dkLXsxO63APCuu9O7/SAsLsuOghgY8Sd5C6zmKi+c8gmc23SBQuXG7pLe3QIneqRDe+FoB410FIS9G7DdGQq9IkjAUqFpS3W2NMfBlAgDaiFomP2GHfzq6GSdF242BJ5Qm7oatf6+RDJxIMWPhVCgdUXnvlks1DZsq5vWXAcgjd5T0BIEH3Zgqkn25SgdAB/rbAIoCCkWkNAhY9Q25FUC3XuszkJPcVCUyR81fIfI4oe8SAqeeMQqgLHCLfzXJJnFOELQRJmDXK7BGbub5uBugzwECFg1/iyizleoaTylQ3vV7Y2hcqiVRR7kTIO4hYQonvECRSkEe6Cum5Yu9NT+z95Z59aa5Gb7pn/hbNgntsH4qYvLfkDPCxbacN3uMgPEtt05iW18Dgxv4SYKKfsLy5eOmWCWKrKIswNtf3CHmoAQ4zk0OQTRAmb5DryejN5HxMRvxE6+UlxHZcRBsmW9SnDE//Bxpm320MrlojeXlv3h1ugyjvm02L4OWgbPAJAnZetr6PVzru9SuQSLQPMRcZMbaL3BntIh/W0FJs2+qVzZdrATMTT+tsGcN2czPtif8o1bT/qdgQddS0jGswbxDTy75O7j+TyFZVR9G0VtK3YfQf0pWnSszh8k1UVqArQPVkhVKeEwlesrZ4zW+WWCoE9gSyjz3dwN2d3b9QzxMx4exMmESON4/ORHH/KCEDst40ydSnzPnChFKi9eep5oR1ja3Jo4zzHnWt+6fsxzx51J32/uf8DB8JgnN30X7cu2zyuXnbq95sNfg9iiYpCpVd7e5gWiSeiz76BZvYuWLdoTB8EHz4M2MRll3iYYVt2GsmfybDe1GpbfyNjl9QWDIojnDx2KoGbKKB5NfAF/Jb0fper4m/50nTzpKI47/ZOuz2iko2DnXcIuwG6JQXU2ryEuBlJXP7PiK0iP49Fdtfm/jnycf35GUgCiGnGaz13dfAUcQzh7LFZsT+liND7rpf5LRvS2KrrqJUSZda8C2vB8578j8SDDRwd5KbaYtBL80R37Wm8afp5uR8f/SDOifmw4zZrIE3GzC//vzznIB4bBvVxSZP9g+2ErmM4WT2PxSq7PcUuPwa2Rnk8YdIsyn08YIQYwdgM+b2A9ioGYRJuABAKPoV6UhY2JW2o7Tvip4a2kU1AgBbsSStmmWgTZld3W3ATMq7ZzdDN96YB2M/irZumy237mdjZTBJxAUAJqIBqrBatLbaTovWm/QIAPDELqFZO7xs97cxMxlAPXoBmw68MBX+lB1GJ7jZHiYQrADAzlv/fv/5/zB69j2Y2/a1kTNppg8tZGysfYnrj2kdgv1pP4Td6iWwk3ABABvDd1lhp9EgpR1BvxMVUY0AQOxsCMfkVZHcidXx9946fGNq6exl0YJ6F7WrAhkAAJuDQP53rv99d/58DN0YtejiZ8sETbWK7FNc0FA1uX6YgfSQkq9kbzuEzS/4Gp7uF6StrV0VvAUA2GpFmZgYsjGSKumEhENO468QuS5FdncH5D3/WCYAYE1B8kLAH65eeARe7XcrlT1c2CpmUEy0BQCKnH+hYXH++dqHakw5T1GXAEBLlOS8yKcnCO2/2m6H1oMFiUHtqgBbAGB1MtxYFZ5Fs0Pt1YmpheaNagQASi+GaEwCvkDel3rBFonQWL3s3RLkVQCsbuY7NOMp3oWmva/ljaD/JuiR9Whxrma+gEG2AEDj2GATGh7Ot799qqwszndwIwBgR0MyJunomIm/SnfCyNil5VOyfEGMppDaVYEMAIAj6YQaGw1kP1vF07M1MmO1fYGWjbHPQW7Th6l+pXfnYknuD1b0dH+JXO7aVcFbAICCZT6NjfZmg6fA09YO0Fhp16FfLxWRmQBAJBc00czfUttXJriRdcveTqcxKCfhAgBlDLczwp5Ct5aWUPupXy8l4hIAONdH+7x617TEv1zoL/b6ZS/+g9okXACgFt0tWkLCUbdICbVb/ZqUiE0AwJKWsOk675JXS01Kd3/q3f9AsAJgrTNf11P5TWi6A3ON5j6j699ez6WxXio2FowLALSYfZ6U4Q7nM+RuzmdUIwBguk6FiuocaqWklLwgsWM9HpcEhkNLpxLMRunLaFn/gEVTj3wio2/K9ntRYXsSRtkOB0lKpoEBU9KRB8KTrdg1EVa8WGjFGWwkfvXG3p8KnWDJhquBI79+c/iR+JA+I9Wf9tV68j71eqHvU666KBmfxT9T4Jh6YmQs+45tfXUOvgO1mc8xrvJ2EH8wjQNwfvAqP06hQ/+6dN5pa7a4vH0Vse7ujvm4zD6xRoJU0h+Rq+1YSC2mJujHeN2WuvFK/vsgb8ZwAeHhwfO6b9a8vBc5p7szkjBpLzyqozO9qvdtyPJJ/ijEL3668jjN8YwCZAYDby/LK/rBajfBYYEiQIXq2vptY9RvCMMVI22ZcYdTs92dbNXaEjMfkzm8Tpn3pvSymlTH6Fw4J+yrbCd1tt+b9WUPUIqG4tSuWK+YSArk3JtARCut6Oq0hB4EZRm6H/piQKG44+6uO+k584UwgQjRe33iiocmYLgPwSaIdQCrqki3blPEv6z3qi5dCs9g9GS6Y903LY6TPWLpZkoIHT7nPHV4vovd20zCDrn8NW+4w9sQlm6ce3ZglE4jSmnrpllvxYMkakaGmFIZkvP0I7Q1zDZKPRaYU3zZ5rifPyWMA74cpiCQuRm/Z1gWoRVW8MgFO5R1W9MKroksrUOUcHPmEOQn51Vf7tHUvRBVtMt4DaHjZ7B81o9WP3x6HvXdaJI6n4Q0/FmnSuXj+yVxd/nzyesao4lDA6/N4heIB8DVoD1q6iTwRNIf6fzRFnn545NvlCY+F7WSjwjVRinZwMex0I5OYrRPYk79ZhmDA4F3GNXHeAKn4+Xb6BT51tOF7VDkPQ1JLbJlJq9nCRNezWR5/4kkYv90qbU55stFF+0ab+CcR938+Bt2KIQ7TfbXHppBtaiwcfUz6WbGhHYfE9tw6eE4mjc/3DoEAD7sM5i263w/tC56phqX7x24tPG6l7Yw2YomafqrVVjsY0zbPu5fWphs9NdeQ+K4XdjbeVYYIaGOT7Z+y1dH/963JACLJtOWqpzNpI6t2RFgpo/YtDF5viUhOiTnZ2XWdI7xpnEKUposF7EKeBKx9CAxXYWtg9KZLbOxIbMphcEjOQdMa3RT7vIXMoe2GFWPdWCqA2cqVLO1mJBdPS6WkcEsWL3IQu32EW8Lc1us3T/irflbqa5EpnzkUUag0co6lHqcwSoWze3C4str78U326GcGGv9AcJnfttbGLQkZssGJpZMXA+GoN+jDIoL590G3+p2kc5O/JJdGe/0UMlZ8B4Bkgi7ujvnIPGZ6mQRABItB8xwWQBi/6ZMEE6F8nEMyJDGhaWYJY5M/l0c8Wm+pmaPtKxJDfwwwzWsm/ao3pMU3FEmPVaSUU5ndOrjRxKSw6fauPSW7k4ycuYjvdEXHCgTYLVLLNw6imUnsQkndu+GqC6r8THZNeEUnMLlnr9ZmHLpZ+fGYk8uTF5yG9vfvxLXeFEMVxa0wiZnZQnJbAZ9mJg2uKahUl3mDOK1S0a17H5404deEoqnEXcNa3EKeNaGvmbXW6MSvEU45808s38XRrlLIzc6W3Hd66JSk08VbOtKfQf0sDT1AoQRK3FbRcDFLWUBhwoO7Pk8VE2t4SLUasZ+muaUaYufN0uUuKV0+LOet6MRJiv841jGX1DEfVOuWaDMlaw/dv0NVuX4mnPnY27Bsotc9MR+2yInjOq2fikAjFS+pDxqO4XB1GYtWmKyPmO3mdAiGXrMxupsA0/wfUqm5EULa0pTnpGsMwZw5fhMIDMAoDNpaMLCp8NQu3QaoQkASE2R5Q6aESdww2XkOadvT1xKJjlN6oVzIhtVh1qPCZ4seaHDms2UK5K1ApgkMwMAII6kSAodh1D7Tiaf0wRNAGB1rp1l+RXadKxAH9NWbJ8XcBf3VMSbRN2qzuQM80NX8uIlEFMB2KzGs0SEq06e4rt2WvLixN6cplwrWWsBdiIzAODDldRyfmFtlXaWDhM0AYCU2kKWC2jreAAJXnPLsj5rf9/z61UB+8MLxFSuj/H/mgNr2LAIESEOVYlmAMCNiGWkE+yKO7M4VyPVdhLEO03MZ4Y8KVbEw2P5P7ATjz/g0+uGMSGCjBV+yc3EZgcTC63GclUYTH5PmUOrJckBtpnVLH8sO6piULG80F4nxwcZV4tQzKKFq8koUvOx4FZzxKK5I+3sFablGDpSKaIajn6JRYgpS/fYKXmvaI/OgEReLuDJydFHBhYSuxhVY6hFX/S6Y48igs64XH+3akIKOi+p9cttHgtuhomokHDcmgrHhupxzwW25RrIbG2glJkcve8qx+CD8Pro7s0l3n36FgOWkjA314/MW6Pm4wff9nOfCdZSeRheckbRy5ONst+u96qNV8PMLNXrKeks3thJQpBLc1mWvVXbisb1Kir40oHoNMAecdes3TjX4SG8Jrvj/ldCaeV49+oMCUfTjS450u70bi4OcpiOIwH3SDa1Ttm3btoLCJHoymGPdvg7Ot6GfL3B8AWXsRtz2+x3Yf7ijG1jAJ2LgLAlunUqpl8TmwZxGlYXrQiF907qgTF2HflIcRPix6AzIoQNhDhF40Q0uCndBsfTyd+W4JGv1zIzkeuG3ay/UlgdxEUGOXT3c/F5cu8IeLVtumxpwJM2CCKTqfSA9+lepn4j5+HkB+7+rmuHzoXqHYU17H9RzACA7yhbyghn2ejFc8m5yI6q4bVponj8s0wAALWzt61dvOIPmP+Lu4uX4AV/X8CKRmyQfaxe92k+hzGn9BjeXBnPkYiddfjwqUaBu2pAMOgTBW8B8VEh9szJ1vJLvLLpsbg9bnDDk4fmfKhfutAW4Wh8G9oFqvzHgGyfG+73r5bXo3S9ShqUJrl7YbHZh8QtV3ZjBDH0vne7PZt73esn4HAJFQQU/t+9FXWPdUnPBfxcQObQHxnF7VJOMRuqCH8vDhAKqG2lv4qxpreR0u1nL02V2LnQtpbUBbLI0SJ6u0v2aHi9l85KTy3A0UpcJJTIOhplnXyj2Dkg9LdO1cGFTctciQtPFd8uFTSgtrhK1bixs1z4ypldOiv/lWI+jzgQNX28n2coMD9z5dZa6n9yJ6ivOL9dkfqtw5odD8dVg3uZqJmwVVRclo8rqfD1R39w6flj1ZcALUV4qn41kvWq3Qiwm8wMAOyiaUPCCpTSVlRDtb2NJiRpAgAyIJt3v0VAbmWUAGC7mDErZ/I8QO/kNKUaHrPLRwZMzYMtvQfXv1bS3VpE9wZWOQBtRHCcSk1yzN+KnVx6HDL+G28zwjuDpxyANiT4zhsuGepPzttb+njedhJt+xEeu0ZsNixW5zMCIr0iMwCACMhsSBipomihWWp7E81I0AQAmqx1Nu7+julRskkAQMNrNqvJPcrvsany0trM67OG/2tBeo3YbFiAOI9akX1FmQEA1kRpj4agSDJuYX5momuOmsIuaKLptsjN34pPYiroL/S1N4bP4XBb+COUjEbBDUZILcLWvlSCbX7O+qygDbDd/eqvQK1faNQCmM6gAJhe7tTmsYvwBTjtxnmpg1H4vL4pTu6oJUtdM4V9AaKGXylbN6yKGSL+objFSG4EGXIMyn5JNxbIBED2DESSE1MlfAAvOvA1vGae6v+jHU2Zmg6m5U8UuHLt7pGs+8T5wfnw+fXeNOaCVD3DqfbAYFxXFH5TQYcJQN8tP4K6vKhzrv8Bgjra1QZeO78udND184/5l/tRN4Rjj2uJl477i/rjOZ/iZ17YtRmudFhMct+Ovo+8S13bMEbqX3ruI2sSj7bvKjn3VfL1DhBFrEcoHZaFPl8gYyWSDh0lIE62YTQDm5ZjTF+Awc0miVPrLw9vmPT97jAFAHytTmZyX9wnpck6hFE6fe1feVibXNOO9Eq1jCs9yIZHfc/pw9weuMod4RlhQ73F+FrGfuZuzWc8sIQhtMpg8nAaQn+mDUaxXyxsi3Eg7/aS/tepFLKhBUFCOphk6IMamq91PjXDxBg+12rFtTrGabED3pFb3eI00jDFHW4cTTkd6MHTTGdF5voHmfdsncM4aycAR2fHVC0G0cSJL1Y6jFSWHFmZ65wqxfazLsWVOGylACHsXr5eJhcpnkPwqTBw0LH2TU3X8trBquRm7baz3razMmiQ4xcm6KO2QyckZt+rKXbH6ELG3D0PbTAjQQTchk9KIXs4Y8Fc/OfWbTpwAdjwp7RXL3eyFdGa8rSf3hV7pjjBDtl63W9U7/Va63mETbKZbrtQUS0QnRgLvrAghxVz/QSPUxIQw73DFSnBa7ei6WyGRliXsolHlOF6PevgtgWkRCq0JeBtF7g5VDJBJpGWuw8oA63MGXfVsz+GLOXFVal+PjE13pteEXDaj+ajyb9zreKQd54zTa+jmfoECYp6Ei/yR8derMWO8mCpW0ITmoAxaV78dsi7I2RAaRlsCzLIZbFgul7Ely0RjDN+d6rODp1PfJ+mMs4nCvjhIZa0HVW0qYLiZgpvzEo37zb2lzJVr81fU1hNTjCtGCo44wYpA0SJPCe8Mon8p40BPWOgwnOG6mKgss946XgmFx37VcZmibZ9+8nlaJu8GccQV8Cjo59nzVW7jklEHFaWA6LOIe4jK37nWw189WJ+O/G5DszYrJoZ4ItlxRwf1oea0ymuJLxY9KMrYMjcdnqD+fwalDoI0/6SqYpdptFlx4Nn121g9JfY6FxQuW9hNK9vsbvy+976mJe9RfkzxV/3WZ7XlXDF4sO7DE7tFWnHqKezzXqqQ9l+RAma/TaGKdBPEW0eUpyQf84bMGCjC43RfelF8z4zkaeh+byvmJi/FcWDbxKPvdfCHr7K+CBEk6eGvfcHc/hC5EknzZODxXvA3bv08r0HKn4Pq7lyHnR3SlX3rdsMj7RgfwUxAwADGkmgISj+X+N8FWdzdMihFmpnpWp0SlgkZQIA7LtDXJYyHxTgr2kunbr4le9ZYCUArlXQWrwTXKBXX8YNRULiPiDqMBDPMRVP0uU84euFruNvPaFAdbmtjrioaQrArDqm8jd9xZRmrsLPROODdwKjPiDDBatVnDAMEUoyRVdggJJkFn60xvufRa0ruqr5e3L6grYAELfsss3NJW6R+KAruGvsPY9gFGegEUSmLmHsRSQrTrDtOTDZzpkRt70FFmk8jNpE46zECoHNaVh3TLxb2umvBjF8c70Zf0JQnARGSxy+nx6c35OHwXqof7+u5ahqn8Qtf4m8ZkueJoE+7K42V5p8DxuT5nHUQgkjKWaGpLD2g/EGmOL0zHcfTSYuDm73ffaYgknu1DIGoki067EB/2AUX/pvwOQtmuaHXW5Rxe20Zxb0edKiNm3yUpc3Dy31Vwj29g0cdp/lX3or9ZF453XdRPcn4z8v2aM8PbrZ888i9dinFP4+iab5zaJXqwHtGmgJ8/lCC4J1D9zg8pDmkbJ2c6LNx1HnbAAfxpWTdaMr0oNXwYmJSqxLSFmbVKOcafkif6xfofyPZLjR2GRot8nq2gvdaNYZ7yQZRsMFZ3Np94CcCnyY2Wb9+Xm9rFt0dMVhbitXPGlF+vFNjjifNFXO73yqNcRjf+1H9TBU5zViFhk2rTe/acvU6U7YbEtX84z2KcLKZvvrGk2GpwSmsaFc3pi/wCqUwgMHvOKEcIOtgmkWcyuaZ8hM05Yx9ctOwhmu4Zn9ZKRCt9TtM2C3b7sURg4IIFoU+XG25DTjx/feuWCqP+sUVEzP0IKBPhHyPJy6IbYxa1NAFHpWsuEd17S1REGG5kYeTxssbkbLhkjv6P38ibaxGQpOk4lhZcxeQV9+2Mnpw0dO10pC97Wegx39K/4rr9IfX91cRfvhLGCqkHuYCZuZM+m6TFc6o6FZHQsstMDZPat0lk3sA1WNe8mTmpJbIhzA73dhXmEtIcGjumO/OMtx8YVUF8vAW6MUNmbgjdHAcvL9lJJdzQVPCPkpXt+Au2Nsyh4CqofjESqI880N7UiubfM2Oxn0ldsKuXIJ//JRH4iP9LSBtqZ56PXDLhunrxhf8ZtUqw2qZJsSm8/uj1uXm9FtlPA5Jhw0X00gR9KPRk19tdCdsmUpga8DfE0svkWzNo2rINZF8NaHNmLnFV6VkXrD/Zix39OHmhojfnElLgsa27xReE/iCuVZ4KQRMFhx+S6xa08y7zBgkIvkxDSZIL0c5sSMCHZDA+t25J/zVrr2EHGxKje9uYdKT3aCmyM+K2xVpeWYk7AiNbBjKBEncdlaYNp1uy5hes55XJZZnuL5PjhvNfFnWS/nRgRpmYAQm8CNl80enhAwNBWenK0umq1l9L5qV8SYuNmtaXHIcA1dR2lRxA8hQMAmxP6ri8P4raRhuGPfi/Va/nUuoYCxFfMYtxa+ulRmdBv5Krk9P2Eyf1xxmcTPc373frZMD/xZ3ye04W+tWDF+KCtJH6PFTLo7/Y53xjlRpNlT543B12TC6cizEBKIl05R0YWBMTTvSC6GX+WMBcc/Xk4jvkkGjMHY0Qkdw13sX1ZqFrmmV2o1aJQmJM5kLO898fdz1TiWTiryvYCX6XCX6MAK4PFlSXbxUsuDF2SQEywwreRQSGxYbsA740dBkit+K7A3shXwszOD9julwCf1SP9H6nkdwfCl1IOy9CT4mvhqPIIZAIgmnD4a44k93hTyWfT6YCBR2Yka27MwLkrMBACCfEamwAszNjkDncrRu1tmrnelfgAgWCCpLNQawO2kfNoGLpgWywVcbuZPN0ATKsHdcDYp0HvyO7VrCJOaLMmGwayaSUpsCai71Ow8QBxTi1WArM5m7xnIcfqtBhDcvKIF4BH4NrKWVwfTerDqsI+gn4fuDTSQAFru74/ymHhGWr8Xg1dms+rkb7u/552BCxJAE4l8w5ZKovWzO9w90K9MdndGjz1WT0eqpksdBsMqqqKYAYAWwW4a4WBq4jq0UNkHJ48ce3FKz/BxgiYAgGFGF9XmBnAbp3fFdFdiPwCAArCVKB2gKfsowEQaawEs9c8G4BQDL9oi9VYEr6gck21O6w+xOpfIL+x4qRdi5sgbOhch9eWE0UOakWYAwIrQII3wpzXRblEU9m1NTG8osfmxT1EOc3DBheZF5RjF4rcrR8Ak8dEjFscscD6I0njiuN04480hFguiPRen4258i7lLiz6h7v71fXiWJ7AHwUWLTUk8eGTu3mX1o3Rc+xRrcIcOsysFVW+JzBM1sTk2UxxTl3mAZooci1R4d9yW4r5mKGOCZkpzlsgQGHFvSsTrl5qgkrSz7k7mK0BP+8v8bOzavXOuzZjVRQo7j2MPGwtiBgAS1RLhtmmEhFeUqrIIs6NsF02EOYuVMwGARc4fASb3t1gDbvfejzM2DjyDtbH/6NhnPyOLv6z8uvoxDseja6sL+7qCKtqN2XB8rO4usBgAiNXxgLdRsrUr6ZfVqtmn0vbhP99V3VaVes12SliU4tGPx8PaMd4AsOJn9uE/3zVYq2YI4JFxGNiS3oG115292B3Fa2Cy5MoA7+JiktZHx00157dv9VvZTrHA2PUPFTAHjDUL2bAKDFX94A2fwNyZSUV0F/wjdEyKt/zls+okL0i7/0q96LNGazYsrCQt9l6h8+eT13uc1utJ9855FuyfUBWfSlYmMQMA3aJzVzpx5nD4/BWidBhyz6E2nMo5M5UATQAgJ4swdqdgA3H7foB058qtxMxWr1wQAGiaq7oao0DNZmaRBZxauQdoAWdKEmO1gINW/SAtICdKwUoLSFKW7zmjSs6khkB15ShpxN6d2jI1GxDo7dQiENC6bHaWQIfpd66AbuUVpQiPOB2Tc7co57dKz5i/viz1wk0AggTQfn9/ROuYlAxvfCWro3pcfvmk1Is3AQ0SQEOJnE/WIYj4iHy6uIdPqpPJc4TAf9ni4s38sWTlAaqjmAGAKjNcilYbDqZ7cbkYap/8LLfQzkmaAMAcgFZtWAApVk7N2okSDQKAFmCsRC0BVbIPA+iVxtuAkfonAIaKgRqASO8beEXumLR7+nSMV76nqOSVeQXtuKyRIxqgg1WOQrNDJyczEl2FxPcumVMHoO9XJBIx2ISKgufSJfEWdRkvol3zIp7wV3WKeh56ZevrWSDJ2R3LeT827iQnDHYXHt6dwYHuyBAQjC6GAiK/MEfAJhVjOw+X+A5X3a74ru/ggrhpjjCTtzrCnKNoZinA49X5KgPdkuYexSxHhSkq8UZfjB+WJwDX48woqcTN4lOWWJNGbOyMtWlMvX+rzrdDr+a+KDIcXCBjuqaCtf/KHCGFLljyyazj14+A8Aukz2V9oUvYSEEXiYiCukP6ePSNP048mVG5l0Nlz0FKZPHqRR1RPyZMkjx7K5HlRiC0DNZxmhoZ07nPtPpJE6yeNUoK+12PXIa/WlvFuAtEsPHxm/wGLDU5J59oKrRRoBiS1gOE5PRLpuUCGEN3xBdhDi3J8Sidtg5lIg5PkKedO+2nzlz+gjq6tuC0VQNWNY87Iuww8OZF3WlRO4hPOu8fTn3qjEYIEcdLWzBjkVgi36Z71q9DNB18t3IXxC5rhHxbCGKWV+kXuBI36iVoFdfb89CZrEyC7zYhFYnkbCv7x79tTQexx0SZexKco+81p9LI/pkXItu9woSZxXM3ZtnA8FcZCuKGkx1JZKHYniX7qoPP0amdiN5dkyt8L1d1FI5hdqdgrh+C7fLu2bHRt//eELxzazAqn+NstBzet6PE8r0Of2aaGEqlLpSzvFajIUHqxcXqsZePciJZpN5sHc3+CN2BgO4L6sPzFGVrkEJYihb38SY+dFjhzZ5Pn/fPdQCAdE6g2eibOe6mw6JeHFECmy0cZoiRd0iz66/pUOIJ59nBd4y6KjPoTu60fYlBt/3dwb1oF8RsNDqkw3M1TYzbMsprhjrWPkNzSpFgEoDmjsUEVBMyeyAt0Sq/ydrJ1/jHL7s8lKtDcAo9m4JOhiC8bEVlgIY8IoZrHTsWUXf5qRFifFxG8cqQGGnIujRK1xA7PGTOjOW/ipLAqMd3QvAaPgsuMyjhFIST4+1B+SSE72FIAunjCNaavUO2x0cF5DNyH5D7x5WZXSlK5dyn66JkYdPwrWZH4d/Sx5kpvjKNswZ4B0zZPINRCA91RwS9QU/quLh2I0Bew9d2oxQ3GnfNCjYTIDNI3wWXAJhiyL6iuTQQDlX9bCRutWSADx0GpnwaaOxsP7K5coQ+VC+0nCGTJLZE071vdaDYFYQbqBjmjKaGXU7de5odZ1VpsxClrHuSuGZu5EsA/yS+RH5I3dQQCQ9zswQzdV7Yj5hqgGvh5I9dBK1R0qLdsTQ+m97bL3KPtqrHh5XUi/WwG/Ci1cLGrjJhy1dvn34mYoKFkn9rBEUUL5VAWtftyhXdh4SpeVs+vB9mD/r5XV/Xs1XFlhHEpq3LahzhWe8Pa+NejmzMEHH4Y0mMq7gRHtUW/cZbNzxXKBBMeDdmw0CfNFHub9K+TdNqc1/Jc2IYeahbLWwMV5npq6IhgVXzBI+BjP+FXkJ9D3CRZRBNjy3Bo3bv2C1zbSgs1ANBNIxNcOXfzRdtfmOFBIsYxTql7rXctxc2N06cXSXQhDQQrQhFMXlvjUmRJNptXgJiPOfoU8v2f1e8kJKo8BNVUv829UBZemYqpeXO0pnStL1UR4JyLq9f5xJtZCGZB5o3ZRpJrK3Eo3fjvraBGPE3hLpsCJL6Q+RNPZkkpoUa1tb2NGIS6kX1dhWcTFxZC232BSKsWUfONWn8yFi6JDFstemVxJWEf1iF21WH68KdQ5Q7ANWyCIyIRnV0e3/QwrxAwElQIDfextw/4BmaBklD7bwIFT7sikW1LArkEbdPZWePDKC81Yzqylhw3MrlFzXWdzs90QDtOl52iHp8t/qi91GvnaRvC/y9VmfLu38P2uXl0kvwv9Wp2W+OYuj2NHhDjmQyF20MsLtXJXOJgytf0MK0FT4ue0T3XeL1lZbisnTneB06lo7H8II/Dq5v7AY7zLkf/bW/2hejO9PVNGUkCWh9LZdE0qBQG7VFhS5vOSukvItw0+QaoFRcPZROfNFheYzF68hkjcyBvA/1Ho/WjrwmE9/bylP0YkAMueIUlDI/xf+J2m3LnXAkrPxrpt9dvHl4ndD5GklbgFvgadI7ApAU1nS6R91Eed/uwUxxCfZy7ShIXQwOxYCofzBZIUmmTZeyW0GN1NH39WIQCwHN8uCZG6wlCSGao98val76u8bRF3+v4tP7xfF04vm/02tl8uuW/1XgP+2WJ97bAyb1i+yPF57vnjj4+z8nBvykTb8098Ev1Mfw+Z+F80+o/KiV2YIxSvtRNEaNxxpTSWgxs4ZJOyuQ1nf73P4SZHNlbSJzfQ11vip5J2b775dDVwvs3d+Rzljf+j36V2uiJqigeWP3Q/g+XapLYqVfKE8lkos3PlvNLNfkOj2XwoPHc5Sc6GTbWnALuHK7s0VcwS03/pXcnV04V3T1pi22aszBo71pL6fm2MBmO9nkWZ49EeXrgpzDNEnAeUkvV2IAMmNCTIevHVBU8Z0zBTSJA+x+6JWSrIkI0u3qIkZNpouQnaXlnXGUw6ZqRK6GZAkRZ3VZJauA4FA5tpdVFkiB+IYy+3gaMMRM34qJqHp8l6UoP0TUhwd2WTFzPUfrYtMxs9GV7m2ToLWIokc2uq0EhE5JcFRzN9EjgRtRDKOFbIXdJ7Tc4YSWu/jjMuAKTKrsMrvVr4T1QjxpyS+TO/s7H89/gwjSMTnuY4tAtciQV/JUYx8jgSRDmz3bQt4wiVA0bm6ZohAnuKMQOhdHGTTOu4Q7R5cVuhPXXQrL4jUP1k28TsZThjDeGJ1DdREjeTkcClhYF1Sl9XdJ+5Vd0VJalmcnE4i7pGO5nwzi6Limuxi/ixr/iltPrV9hWrLsrh1onfHkME7I/8mCu5mf8fDYG2HKM7YaBzVf66AKtqfG/tbWQOjyuetT1ZNw2v4PP+62brLsZQ2XNoSCrbvk9pv6MuRAuLr5P8+a2ohQeDNoYU8N2JwELk32s//hDKMHUp/ajWPCpSF+mYujU7VhZfH3EjP1x/pkzjlVNE4xLxGlaLFndl434cpLrb2T5PVmI6VBRjyBxrL8tavRZ+F3nblCMRzbMjZPehkiJ/hcpKpyGo/sTp9m05/LXl2WlJ5hsr5crPtybdDOGeqfX2PW/Y4ey5ubsiznhevRdPYPagqIfkROhZKbR7qqe8/7Z35K/6ZaNSnhbFc/f2Ryqwt8BX8jMRE2aQOHQ67FGzABlO2N/ZD38cefRDO8fZoeE/Z1lDwAwxxhD34HZi8AILuk0lwvY0BIJJ8XmIvf1Ed4jULNb2nbN8EnpJdMNPqnVEEYqIopJu4mAzbfBP4zhZYK6iPknaCxnnEKsOAWw00lmYHyiEJHQ2JanQbenCoItNb3ABdpt9LYkLii4Vo72zEOmWAxEoDrkuzziqztVxE/MmzC32bItbD1+WOjOwtge4YUksHdQSxJ+fyJeY7SsvOC2N/WQWmZDRvL+h3wIwmqTXzHXZTu1AZCX9K2lHOtMofsmMCoJsFG8fWYAC66+jpun4CU2jIuQALGPIKFjYmtRwRHTvoZRY0ydjVayDiYCXtEMwog4ucT0cETXEaeNoP7prpbvuBYQdHg8cDQ5kgrw+h7OdpwjtZ94AzFcg8joIeFyVeV4lw6n2xYFAo00rPcOdpvH9lzSBIK40jVtUS1pWc5zSa+VhMBy9k8RHoJ2E+KrolkDeYbiPMsLlsbdZL9gGyUEqZXcwbcio7oKwOOvzWAdLyq9QEa17BC5tHFsLIcAP9pNjTRi+UnJn9bs9VAq1wdoptD9Nn714S7IFfA7hcWcftX2q1ftwjd1V8H5yIhClbMHNUygh/QZjQLBzmCXdsM+Vz6sruYM43PyVLjdFb5/GhaZ/6rPC7Zus4o027IHe+lYqgWoX/9JQHuzsSIQz8YcN171D0cPQ9jtwdsNL+tXi3vDV2zFP35FGq/+05HiQL234Dqfl9KAym+CWZvqQ3fM5hy1frzb6NyCIZFzodcof6kwZdJz+vK4zuchEEfpL/GHEWx4Q5lYsSb08mN3XsUaD8tzM1DxfG2Xw6bDXjbL6d3WashimYl+L/m93l8CFzHJtK8T857eUJejUfB8xO0ZeIE/j5VpfkjU3ZVr/SfibxRJuUqCc7M/lg3AJBBDYLIwETSQbnAIc41riHtbjO731+hyWqIitgKn+tYvS3Vpw5Yl69BA91KBHT83rZ8ulBVKoErQUoGW3hGDlmugCn86D8AMAUAFWZ+DgW0krqlAvSdLA7y1XDrOFH5C8WTOFuAJhjVk56gxQgjvEHKGx/wsNmxpDFu+0/bAYCpKqNH+K1vqmH0uFmkxttRXpqpm3wZpMGZqRQg7Ozw8d9rhCqquLVcuhWvjAIAoAX0KI2LBaSYzrgXyJtstgHg1mUbvAHynNtjFnas4d3jH3LfxI59PNFxfabbcwvdCdiDwXHf4w4CHu8rGPAQj1RnIl2Q1+Odyos/gyUTXLOcKUhpAxjcUNfpHvdO5/Pnj7PrY5JT8JOTWn2dClz37fzBd57vcf6ErpA5JjsdqQX+e0tceforeXmvPc1zuqCnDaCrZM6nKSnEJYSwV3mYj2sh9D7XM8sDuToApabYWFQ3ALBBAjB6OK7rHzovxbmG6sZ3+oH00l+hiQRNRWyFoYmEosRJRBpdUiJ6j5MHlk8XIqsSbOXQ6GALpcshsxeo3I/+AwB9c0BeMj+aBa6YurkI3ENa7DGu7JkI/UXDmULBBGbbXPk1TPbvCQ==`, `base64`)).toString(); + patch = require(`zlib`).brotliDecompressSync(Buffer.from(`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`, `base64`)).toString(); return patch; } From 0a8af99136b404dec6e818398caccdc7db4322f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ma=C3=ABl=20Nison?= Date: Fri, 2 Apr 2021 15:15:27 +0200 Subject: [PATCH 2/3] Versions --- .yarn/versions/47ca867b.yml | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 .yarn/versions/47ca867b.yml diff --git a/.yarn/versions/47ca867b.yml b/.yarn/versions/47ca867b.yml new file mode 100644 index 000000000000..871c19814360 --- /dev/null +++ b/.yarn/versions/47ca867b.yml @@ -0,0 +1,22 @@ +releases: + "@yarnpkg/cli": patch + "@yarnpkg/plugin-compat": patch + +declined: + - "@yarnpkg/plugin-constraints" + - "@yarnpkg/plugin-dlx" + - "@yarnpkg/plugin-essentials" + - "@yarnpkg/plugin-init" + - "@yarnpkg/plugin-interactive-tools" + - "@yarnpkg/plugin-node-modules" + - "@yarnpkg/plugin-npm-cli" + - "@yarnpkg/plugin-pack" + - "@yarnpkg/plugin-patch" + - "@yarnpkg/plugin-pnp" + - "@yarnpkg/plugin-stage" + - "@yarnpkg/plugin-typescript" + - "@yarnpkg/plugin-version" + - "@yarnpkg/plugin-workspace-tools" + - "@yarnpkg/builder" + - "@yarnpkg/core" + - "@yarnpkg/doctor" From b81868311639992ea2938bc0019a8803caef6358 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ma=C3=ABl=20Nison?= Date: Fri, 2 Apr 2021 15:21:24 +0200 Subject: [PATCH 3/3] Updates the cache --- .pnp.cjs | 144 +++++++++--------- ...ypescript-patch-20f6ea6d48-c1dd9e722d.zip} | Bin ...ypescript-patch-2509be8a56-fb62f24bfd.zip} | Bin ...ypescript-patch-cb13705fa0-ac6b67d951.zip} | Bin yarn.lock | 6 +- 5 files changed, 75 insertions(+), 75 deletions(-) rename .yarn/cache/{typescript-patch-92e93de2b8-c1dd9e722d.zip => typescript-patch-20f6ea6d48-c1dd9e722d.zip} (100%) rename .yarn/cache/{typescript-patch-4b1488a0b8-fb62f24bfd.zip => typescript-patch-2509be8a56-fb62f24bfd.zip} (100%) rename .yarn/cache/{typescript-patch-7f1362f2ef-ac6b67d951.zip => typescript-patch-cb13705fa0-ac6b67d951.zip} (100%) diff --git a/.pnp.cjs b/.pnp.cjs index 9aec9bb0a38e..610c4e63c1c5 100755 --- a/.pnp.cjs +++ b/.pnp.cjs @@ -279,7 +279,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.2.3#~builtin::version=4.2.3&hash=199744"] + ["typescript", "patch:typescript@npm%3A4.2.3#~builtin::version=4.2.3&hash=34ad7d"] ], "linkType": "SOFT", }] @@ -9485,7 +9485,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["regexpp", "npm:3.0.0"], ["semver", "npm:7.3.2"], ["tsutils", "virtual:2ae55ed8ee0df5c5f27d6073707b1f25bcdc980314bc3c8d57c3fe2245d235c8c4745392a5af57ae4d8682511e779924129eed1a2b77951c3643749e1e53479e#npm:3.17.1"], - ["typescript", "patch:typescript@npm%3A4.2.3#~builtin::version=4.2.3&hash=199744"] + ["typescript", "patch:typescript@npm%3A4.2.3#~builtin::version=4.2.3&hash=34ad7d"] ], "packagePeers": [ "@types/eslint", @@ -9509,7 +9509,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=199744"] + ["typescript", "patch:typescript@npm%3A3.9.5#~builtin::version=3.9.5&hash=34ad7d"] ], "packagePeers": [ "@types/eslint", @@ -9641,7 +9641,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["@typescript-eslint/typescript-estree", "virtual:db0c4d5e7f962d786779f2179e1d016630eed273b73d036b975476ce85b8fa2d3feb840ab85453b2710a8bf98d3c8cb369c3d8554d73e4a8d1525b6b21702f32#npm:4.11.1"], ["debug", "virtual:ebe93d6532e43d78779479b0dabfe2d284fd2cc037fde073604e57fc384c1044e905ed82c7d081310a0af68c672c6a0a67f8fdbca758f0bd26d9fc4456fbf1af#npm:4.1.1"], ["eslint", "npm:6.8.0"], - ["typescript", "patch:typescript@npm%3A4.2.3#~builtin::version=4.2.3&hash=199744"] + ["typescript", "patch:typescript@npm%3A4.2.3#~builtin::version=4.2.3&hash=34ad7d"] ], "packagePeers": [ "@types/eslint", @@ -9661,7 +9661,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=199744"] + ["typescript", "patch:typescript@npm%3A3.9.5#~builtin::version=3.9.5&hash=34ad7d"] ], "packagePeers": [ "@types/eslint", @@ -9740,7 +9740,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=199744"] + ["typescript", "patch:typescript@npm%3A3.9.5#~builtin::version=3.9.5&hash=34ad7d"] ], "packagePeers": [ "@types/typescript", @@ -9799,7 +9799,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["lodash", "npm:4.17.15"], ["semver", "npm:7.3.2"], ["tsutils", "virtual:2ae55ed8ee0df5c5f27d6073707b1f25bcdc980314bc3c8d57c3fe2245d235c8c4745392a5af57ae4d8682511e779924129eed1a2b77951c3643749e1e53479e#npm:3.17.1"], - ["typescript", "patch:typescript@npm%3A4.2.3#~builtin::version=4.2.3&hash=199744"] + ["typescript", "patch:typescript@npm%3A4.2.3#~builtin::version=4.2.3&hash=34ad7d"] ], "packagePeers": [ "typescript" @@ -10178,7 +10178,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.2.3#~builtin::version=4.2.3&hash=199744"], + ["typescript", "patch:typescript@npm%3A4.2.3#~builtin::version=4.2.3&hash=34ad7d"], ["val-loader", "virtual:e04a2594c769771b96db34e7a92a8a3af1c98ae86dce662589a5c5d5209e16875506f8cb5f4c2230a2b2ae06335b14466352c4ed470d39edf9edb6c515984525#npm:2.1.1"], ["webpack", "virtual:e04a2594c769771b96db34e7a92a8a3af1c98ae86dce662589a5c5d5209e16875506f8cb5f4c2230a2b2ae06335b14466352c4ed470d39edf9edb6c515984525#npm:5.1.1"], ["webpack-merge", "npm:4.2.2"] @@ -10216,7 +10216,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.2.3#~builtin::version=4.2.3&hash=199744"], + ["typescript", "patch:typescript@npm%3A4.2.3#~builtin::version=4.2.3&hash=34ad7d"], ["val-loader", "virtual:e04a2594c769771b96db34e7a92a8a3af1c98ae86dce662589a5c5d5209e16875506f8cb5f4c2230a2b2ae06335b14466352c4ed470d39edf9edb6c515984525#npm:2.1.1"], ["webpack", "virtual:e04a2594c769771b96db34e7a92a8a3af1c98ae86dce662589a5c5d5209e16875506f8cb5f4c2230a2b2ae06335b14466352c4ed470d39edf9edb6c515984525#npm:5.1.1"], ["webpack-merge", "npm:4.2.2"] @@ -10254,7 +10254,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.2.3#~builtin::version=4.2.3&hash=199744"], + ["typescript", "patch:typescript@npm%3A4.2.3#~builtin::version=4.2.3&hash=34ad7d"], ["val-loader", "virtual:e04a2594c769771b96db34e7a92a8a3af1c98ae86dce662589a5c5d5209e16875506f8cb5f4c2230a2b2ae06335b14466352c4ed470d39edf9edb6c515984525#npm:2.1.1"], ["webpack", "virtual:e04a2594c769771b96db34e7a92a8a3af1c98ae86dce662589a5c5d5209e16875506f8cb5f4c2230a2b2ae06335b14466352c4ed470d39edf9edb6c515984525#npm:5.1.1"], ["webpack-merge", "npm:4.2.2"] @@ -10291,7 +10291,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.2.3#~builtin::version=4.2.3&hash=199744"], + ["typescript", "patch:typescript@npm%3A4.2.3#~builtin::version=4.2.3&hash=34ad7d"], ["val-loader", "virtual:e04a2594c769771b96db34e7a92a8a3af1c98ae86dce662589a5c5d5209e16875506f8cb5f4c2230a2b2ae06335b14466352c4ed470d39edf9edb6c515984525#npm:2.1.1"], ["webpack", "virtual:e04a2594c769771b96db34e7a92a8a3af1c98ae86dce662589a5c5d5209e16875506f8cb5f4c2230a2b2ae06335b14466352c4ed470d39edf9edb6c515984525#npm:5.1.1"], ["webpack-merge", "npm:4.2.2"] @@ -10338,7 +10338,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.2.3#~builtin::version=4.2.3&hash=199744"] + ["typescript", "patch:typescript@npm%3A4.2.3#~builtin::version=4.2.3&hash=34ad7d"] ], "packagePeers": [ "@types/yarnpkg__core", @@ -10384,7 +10384,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.2.3#~builtin::version=4.2.3&hash=199744"] + ["typescript", "patch:typescript@npm%3A4.2.3#~builtin::version=4.2.3&hash=34ad7d"] ], "packagePeers": [ "@types/yarnpkg__core", @@ -10430,7 +10430,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.2.3#~builtin::version=4.2.3&hash=199744"] + ["typescript", "patch:typescript@npm%3A4.2.3#~builtin::version=4.2.3&hash=34ad7d"] ], "packagePeers": [ "@types/yarnpkg__core", @@ -10476,7 +10476,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.2.3#~builtin::version=4.2.3&hash=199744"] + ["typescript", "patch:typescript@npm%3A4.2.3#~builtin::version=4.2.3&hash=34ad7d"] ], "packagePeers": [ "@types/yarnpkg__core", @@ -10522,7 +10522,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.2.3#~builtin::version=4.2.3&hash=199744"] + ["typescript", "patch:typescript@npm%3A4.2.3#~builtin::version=4.2.3&hash=34ad7d"] ], "packagePeers": [ "@types/yarnpkg__core", @@ -10568,7 +10568,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.2.3#~builtin::version=4.2.3&hash=199744"] + ["typescript", "patch:typescript@npm%3A4.2.3#~builtin::version=4.2.3&hash=34ad7d"] ], "packagePeers": [ "@types/yarnpkg__core", @@ -10614,7 +10614,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.2.3#~builtin::version=4.2.3&hash=199744"] + ["typescript", "patch:typescript@npm%3A4.2.3#~builtin::version=4.2.3&hash=34ad7d"] ], "packagePeers": [ "@types/yarnpkg__core", @@ -10660,7 +10660,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.2.3#~builtin::version=4.2.3&hash=199744"] + ["typescript", "patch:typescript@npm%3A4.2.3#~builtin::version=4.2.3&hash=34ad7d"] ], "packagePeers": [ "@types/yarnpkg__core", @@ -10706,7 +10706,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.2.3#~builtin::version=4.2.3&hash=199744"] + ["typescript", "patch:typescript@npm%3A4.2.3#~builtin::version=4.2.3&hash=34ad7d"] ], "packagePeers": [ "@types/yarnpkg__core", @@ -10752,7 +10752,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.2.3#~builtin::version=4.2.3&hash=199744"] + ["typescript", "patch:typescript@npm%3A4.2.3#~builtin::version=4.2.3&hash=34ad7d"] ], "packagePeers": [ "@types/yarnpkg__core", @@ -10798,7 +10798,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.2.3#~builtin::version=4.2.3&hash=199744"] + ["typescript", "patch:typescript@npm%3A4.2.3#~builtin::version=4.2.3&hash=34ad7d"] ], "packagePeers": [ "@types/yarnpkg__core", @@ -10844,7 +10844,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.2.3#~builtin::version=4.2.3&hash=199744"] + ["typescript", "patch:typescript@npm%3A4.2.3#~builtin::version=4.2.3&hash=34ad7d"] ], "packagePeers": [ "@types/yarnpkg__core", @@ -10889,7 +10889,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.2.3#~builtin::version=4.2.3&hash=199744"] + ["typescript", "patch:typescript@npm%3A4.2.3#~builtin::version=4.2.3&hash=34ad7d"] ], "linkType": "SOFT", }] @@ -10961,7 +10961,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.2.3#~builtin::version=4.2.3&hash=199744"] + ["typescript", "patch:typescript@npm%3A4.2.3#~builtin::version=4.2.3&hash=34ad7d"] ], "linkType": "SOFT", }] @@ -11014,7 +11014,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["eslint", "npm:6.8.0"], ["eslint-plugin-arca", "npm:0.10.0"], ["eslint-plugin-react", "virtual:e470d99b1e4fdf4c5db5d090ff5472cdeba0404b7ffd31cd2efab3493dd184c67bc45f60c2ef1c040e2c41afe38c6280bffc5df2fbe3aefaa2b6eacf685ab07c#npm:7.20.0"], - ["typescript", "patch:typescript@npm%3A4.2.3#~builtin::version=4.2.3&hash=199744"] + ["typescript", "patch:typescript@npm%3A4.2.3#~builtin::version=4.2.3&hash=34ad7d"] ], "packagePeers": [ "@types/eslint-plugin-arca", @@ -11140,7 +11140,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.2.3#~builtin::version=4.2.3&hash=199744"], + ["typescript", "patch:typescript@npm%3A4.2.3#~builtin::version=4.2.3&hash=34ad7d"], ["unescape-html", "npm:1.1.0"], ["unfetch", "npm:4.1.0"], ["unified", "npm:7.1.0"], @@ -11247,7 +11247,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.2.3#~builtin::version=4.2.3&hash=199744"] + ["typescript", "patch:typescript@npm%3A4.2.3#~builtin::version=4.2.3&hash=34ad7d"] ], "linkType": "SOFT", }] @@ -11610,7 +11610,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.2.3#~builtin::version=4.2.3&hash=199744"] + ["typescript", "patch:typescript@npm%3A4.2.3#~builtin::version=4.2.3&hash=34ad7d"] ], "linkType": "SOFT", }] @@ -12368,7 +12368,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.2.3#~builtin::version=4.2.3&hash=199744"] + ["typescript", "patch:typescript@npm%3A4.2.3#~builtin::version=4.2.3&hash=34ad7d"] ], "linkType": "SOFT", }] @@ -12815,7 +12815,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.2.3#~builtin::version=4.2.3&hash=199744"] + ["typescript", "patch:typescript@npm%3A4.2.3#~builtin::version=4.2.3&hash=34ad7d"] ], "linkType": "SOFT", }] @@ -15100,7 +15100,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.2.3#~builtin::version=4.2.3&hash=199744"] + ["typescript", "patch:typescript@npm%3A4.2.3#~builtin::version=4.2.3&hash=34ad7d"] ], "packagePeers": [ "@types/yarnpkg__cli", @@ -15122,7 +15122,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.2.3#~builtin::version=4.2.3&hash=199744"] + ["typescript", "patch:typescript@npm%3A4.2.3#~builtin::version=4.2.3&hash=34ad7d"] ], "packagePeers": [ "@types/yarnpkg__cli", @@ -15144,7 +15144,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.2.3#~builtin::version=4.2.3&hash=199744"] + ["typescript", "patch:typescript@npm%3A4.2.3#~builtin::version=4.2.3&hash=34ad7d"] ], "packagePeers": [ "@types/yarnpkg__cli", @@ -15166,7 +15166,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.2.3#~builtin::version=4.2.3&hash=199744"] + ["typescript", "patch:typescript@npm%3A4.2.3#~builtin::version=4.2.3&hash=34ad7d"] ], "packagePeers": [ "@types/yarnpkg__cli", @@ -15188,7 +15188,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.2.3#~builtin::version=4.2.3&hash=199744"] + ["typescript", "patch:typescript@npm%3A4.2.3#~builtin::version=4.2.3&hash=34ad7d"] ], "packagePeers": [ "@types/yarnpkg__cli", @@ -15210,7 +15210,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.2.3#~builtin::version=4.2.3&hash=199744"] + ["typescript", "patch:typescript@npm%3A4.2.3#~builtin::version=4.2.3&hash=34ad7d"] ], "packagePeers": [ "@types/yarnpkg__cli", @@ -15232,7 +15232,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.2.3#~builtin::version=4.2.3&hash=199744"] + ["typescript", "patch:typescript@npm%3A4.2.3#~builtin::version=4.2.3&hash=34ad7d"] ], "packagePeers": [ "@types/yarnpkg__cli", @@ -15254,7 +15254,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.2.3#~builtin::version=4.2.3&hash=199744"] + ["typescript", "patch:typescript@npm%3A4.2.3#~builtin::version=4.2.3&hash=34ad7d"] ], "packagePeers": [ "@types/yarnpkg__cli", @@ -15276,7 +15276,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.2.3#~builtin::version=4.2.3&hash=199744"] + ["typescript", "patch:typescript@npm%3A4.2.3#~builtin::version=4.2.3&hash=34ad7d"] ], "packagePeers": [ "@types/yarnpkg__cli", @@ -15298,7 +15298,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.2.3#~builtin::version=4.2.3&hash=199744"] + ["typescript", "patch:typescript@npm%3A4.2.3#~builtin::version=4.2.3&hash=34ad7d"] ], "packagePeers": [ "@types/yarnpkg__cli", @@ -15320,7 +15320,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.2.3#~builtin::version=4.2.3&hash=199744"] + ["typescript", "patch:typescript@npm%3A4.2.3#~builtin::version=4.2.3&hash=34ad7d"] ], "packagePeers": [ "@types/yarnpkg__cli", @@ -15342,7 +15342,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.2.3#~builtin::version=4.2.3&hash=199744"] + ["typescript", "patch:typescript@npm%3A4.2.3#~builtin::version=4.2.3&hash=34ad7d"] ], "packagePeers": [ "@types/yarnpkg__cli", @@ -15364,7 +15364,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.2.3#~builtin::version=4.2.3&hash=199744"] + ["typescript", "patch:typescript@npm%3A4.2.3#~builtin::version=4.2.3&hash=34ad7d"] ], "packagePeers": [ "@types/yarnpkg__cli", @@ -15384,7 +15384,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.2.3#~builtin::version=4.2.3&hash=199744"] + ["typescript", "patch:typescript@npm%3A4.2.3#~builtin::version=4.2.3&hash=34ad7d"] ], "linkType": "SOFT", }] @@ -15404,7 +15404,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.2.3#~builtin::version=4.2.3&hash=199744"] + ["typescript", "patch:typescript@npm%3A4.2.3#~builtin::version=4.2.3&hash=34ad7d"] ], "linkType": "SOFT", }] @@ -15428,7 +15428,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.2.3#~builtin::version=4.2.3&hash=199744"] + ["typescript", "patch:typescript@npm%3A4.2.3#~builtin::version=4.2.3&hash=34ad7d"] ], "linkType": "SOFT", }] @@ -15448,7 +15448,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.2.3#~builtin::version=4.2.3&hash=199744"] + ["typescript", "patch:typescript@npm%3A4.2.3#~builtin::version=4.2.3&hash=34ad7d"] ], "linkType": "SOFT", }] @@ -15465,7 +15465,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.2.3#~builtin::version=4.2.3&hash=199744"], + ["typescript", "patch:typescript@npm%3A4.2.3#~builtin::version=4.2.3&hash=34ad7d"], ["webpack", "virtual:16110bda3ce959c103b1979c5d750ceb8ac9cfbd2049c118b6278e46e65aa65fd17e71e04a0ce5f75b7ca3203efd8e9c9b03c948a76c7f4bca807539915b5cfc#npm:5.1.1"], ["webpack-cli", "virtual:16110bda3ce959c103b1979c5d750ceb8ac9cfbd2049c118b6278e46e65aa65fd17e71e04a0ce5f75b7ca3203efd8e9c9b03c948a76c7f4bca807539915b5cfc#npm:4.0.0-beta.8"] ], @@ -15492,7 +15492,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.2.3#~builtin::version=4.2.3&hash=199744"] + ["typescript", "patch:typescript@npm%3A4.2.3#~builtin::version=4.2.3&hash=34ad7d"] ], "packagePeers": [ "@types/eslint", @@ -15520,7 +15520,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.2.3#~builtin::version=4.2.3&hash=199744"] + ["typescript", "patch:typescript@npm%3A4.2.3#~builtin::version=4.2.3&hash=34ad7d"] ], "packagePeers": [ "@types/eslint", @@ -15546,7 +15546,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.2.3#~builtin::version=4.2.3&hash=199744"] + ["typescript", "patch:typescript@npm%3A4.2.3#~builtin::version=4.2.3&hash=34ad7d"] ], "linkType": "SOFT", }] @@ -23183,7 +23183,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.2.3#~builtin::version=4.2.3&hash=199744"], + ["typescript", "patch:typescript@npm%3A4.2.3#~builtin::version=4.2.3&hash=34ad7d"], ["vue-template-compiler", null], ["webpack", "virtual:e04a2594c769771b96db34e7a92a8a3af1c98ae86dce662589a5c5d5209e16875506f8cb5f4c2230a2b2ae06335b14466352c4ed470d39edf9edb6c515984525#npm:5.1.1"] ], @@ -23843,7 +23843,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=199744"], + ["typescript", "patch:typescript@npm%3A3.9.5#~builtin::version=3.9.5&hash=34ad7d"], ["urql", "virtual:e721af34745e2aded5d4d499d50f62b576dd2080eb1f2bb52977c4bfa58f87cba61c1a822a17998b163819d9d9ffb45f4e1cfaad85154aa3bbe0834010be88eb#npm:1.9.8"], ["yup", "npm:0.29.1"] ], @@ -30889,7 +30889,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=199744"] + ["typescript", "patch:typescript@npm%3A3.9.5#~builtin::version=3.9.5&hash=34ad7d"] ], "packagePeers": [ "@types/react-dom", @@ -39671,7 +39671,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.2.3#~builtin::version=4.2.3&hash=199744"] + ["typescript", "patch:typescript@npm%3A4.2.3#~builtin::version=4.2.3&hash=34ad7d"] ], "packagePeers": [ "@types/typescript", @@ -39759,7 +39759,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["tsutils", "virtual:2ae55ed8ee0df5c5f27d6073707b1f25bcdc980314bc3c8d57c3fe2245d235c8c4745392a5af57ae4d8682511e779924129eed1a2b77951c3643749e1e53479e#npm:3.17.1"], ["@types/typescript", null], ["tslib", "npm:1.13.0"], - ["typescript", "patch:typescript@npm%3A4.2.3#~builtin::version=4.2.3&hash=199744"] + ["typescript", "patch:typescript@npm%3A4.2.3#~builtin::version=4.2.3&hash=34ad7d"] ], "packagePeers": [ "@types/typescript", @@ -39773,7 +39773,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=199744"] + ["typescript", "patch:typescript@npm%3A3.9.5#~builtin::version=3.9.5&hash=34ad7d"] ], "packagePeers": [ "@types/typescript", @@ -39997,7 +39997,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.2.3#~builtin::version=4.2.3&hash=199744"] + ["typescript", "patch:typescript@npm%3A4.2.3#~builtin::version=4.2.3&hash=34ad7d"] ], "packagePeers": [ "@strictsoftware/typedoc-plugin-monorepo", @@ -40026,7 +40026,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=199744"] + ["typescript", "patch:typescript@npm%3A3.9.5#~builtin::version=3.9.5&hash=34ad7d"] ], "packagePeers": [ "@strictsoftware/typedoc-plugin-monorepo", @@ -40054,7 +40054,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=199744"] + ["typescript", "patch:typescript@npm%3A3.7.5#~builtin::version=3.7.5&hash=34ad7d"] ], "packagePeers": [ "@strictsoftware/typedoc-plugin-monorepo", @@ -40104,30 +40104,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=199744"] + ["typescript", "patch:typescript@npm%3A3.9.5#~builtin::version=3.9.5&hash=34ad7d"] ], "linkType": "SOFT", }] ]], ["typescript", [ - ["patch:typescript@npm%3A3.7.5#~builtin::version=3.7.5&hash=199744", { - "packageLocation": "./.yarn/cache/typescript-patch-4b1488a0b8-fb62f24bfd.zip/node_modules/typescript/", + ["patch:typescript@npm%3A3.7.5#~builtin::version=3.7.5&hash=34ad7d", { + "packageLocation": "./.yarn/cache/typescript-patch-2509be8a56-fb62f24bfd.zip/node_modules/typescript/", "packageDependencies": [ - ["typescript", "patch:typescript@npm%3A3.7.5#~builtin::version=3.7.5&hash=199744"] + ["typescript", "patch:typescript@npm%3A3.7.5#~builtin::version=3.7.5&hash=34ad7d"] ], "linkType": "HARD", }], - ["patch:typescript@npm%3A3.9.5#~builtin::version=3.9.5&hash=199744", { - "packageLocation": "./.yarn/cache/typescript-patch-7f1362f2ef-ac6b67d951.zip/node_modules/typescript/", + ["patch:typescript@npm%3A3.9.5#~builtin::version=3.9.5&hash=34ad7d", { + "packageLocation": "./.yarn/cache/typescript-patch-cb13705fa0-ac6b67d951.zip/node_modules/typescript/", "packageDependencies": [ - ["typescript", "patch:typescript@npm%3A3.9.5#~builtin::version=3.9.5&hash=199744"] + ["typescript", "patch:typescript@npm%3A3.9.5#~builtin::version=3.9.5&hash=34ad7d"] ], "linkType": "HARD", }], - ["patch:typescript@npm%3A4.2.3#~builtin::version=4.2.3&hash=199744", { - "packageLocation": "./.yarn/cache/typescript-patch-92e93de2b8-c1dd9e722d.zip/node_modules/typescript/", + ["patch:typescript@npm%3A4.2.3#~builtin::version=4.2.3&hash=34ad7d", { + "packageLocation": "./.yarn/cache/typescript-patch-20f6ea6d48-c1dd9e722d.zip/node_modules/typescript/", "packageDependencies": [ - ["typescript", "patch:typescript@npm%3A4.2.3#~builtin::version=4.2.3&hash=199744"] + ["typescript", "patch:typescript@npm%3A4.2.3#~builtin::version=4.2.3&hash=34ad7d"] ], "linkType": "HARD", }] @@ -41272,7 +41272,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.2.3#~builtin::version=4.2.3&hash=199744"], + ["typescript", "patch:typescript@npm%3A4.2.3#~builtin::version=4.2.3&hash=34ad7d"], ["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-92e93de2b8-c1dd9e722d.zip b/.yarn/cache/typescript-patch-20f6ea6d48-c1dd9e722d.zip similarity index 100% rename from .yarn/cache/typescript-patch-92e93de2b8-c1dd9e722d.zip rename to .yarn/cache/typescript-patch-20f6ea6d48-c1dd9e722d.zip diff --git a/.yarn/cache/typescript-patch-4b1488a0b8-fb62f24bfd.zip b/.yarn/cache/typescript-patch-2509be8a56-fb62f24bfd.zip similarity index 100% rename from .yarn/cache/typescript-patch-4b1488a0b8-fb62f24bfd.zip rename to .yarn/cache/typescript-patch-2509be8a56-fb62f24bfd.zip diff --git a/.yarn/cache/typescript-patch-7f1362f2ef-ac6b67d951.zip b/.yarn/cache/typescript-patch-cb13705fa0-ac6b67d951.zip similarity index 100% rename from .yarn/cache/typescript-patch-7f1362f2ef-ac6b67d951.zip rename to .yarn/cache/typescript-patch-cb13705fa0-ac6b67d951.zip diff --git a/yarn.lock b/yarn.lock index a317eff4cac0..2b88f181fb57 100644 --- a/yarn.lock +++ b/yarn.lock @@ -26626,7 +26626,7 @@ typescript@^4.2.2: "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=199744" + resolution: "typescript@patch:typescript@npm%3A3.7.5#~builtin::version=3.7.5&hash=34ad7d" bin: tsc: bin/tsc tsserver: bin/tsserver @@ -26636,7 +26636,7 @@ typescript@^4.2.2: "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=199744" + resolution: "typescript@patch:typescript@npm%3A3.9.5#~builtin::version=3.9.5&hash=34ad7d" bin: tsc: bin/tsc tsserver: bin/tsserver @@ -26646,7 +26646,7 @@ typescript@^4.2.2: "typescript@patch:typescript@^4.2.2#~builtin": version: 4.2.3 - resolution: "typescript@patch:typescript@npm%3A4.2.3#~builtin::version=4.2.3&hash=199744" + resolution: "typescript@patch:typescript@npm%3A4.2.3#~builtin::version=4.2.3&hash=34ad7d" bin: tsc: bin/tsc tsserver: bin/tsserver