Add new option "libReplacement" (#60829)

This commit is contained in:
Jake Bailey
2025-01-23 17:34:52 -08:00
committed by GitHub
parent c5058f0066
commit 220706eb03
49 changed files with 1230 additions and 71 deletions

View File

@@ -865,6 +865,14 @@ const commandOptionsWithoutBuild: CommandLineOption[] = [
affectsBuildInfo: true,
affectsSemanticDiagnostics: true,
},
{
name: "libReplacement",
type: "boolean",
affectsProgramStructure: true,
category: Diagnostics.Language_and_Environment,
description: Diagnostics.Enable_lib_replacement,
defaultValueDescription: true,
},
// Strict Type Checks
{

View File

@@ -6502,6 +6502,10 @@
"category": "Error",
"code": 6807
},
"Enable lib replacement.": {
"category": "Message",
"code": 6808
},
"one of:": {
"category": "Message",

View File

@@ -3937,6 +3937,17 @@ export function createProgram(_rootNamesOrOptions: readonly string[] | CreatePro
const existing = resolvedLibProcessing?.get(libFileName);
if (existing) return existing;
if (options.libReplacement === false) {
const result: LibResolution = {
resolution: {
resolvedModule: undefined,
},
actual: combinePaths(defaultLibraryPath, libFileName),
};
(resolvedLibProcessing ??= new Map()).set(libFileName, result);
return result;
}
if (structureIsReused !== StructureIsReused.Not && oldProgram && !hasInvalidatedLibResolutions(libFileName)) {
const oldResolution = oldProgram.resolvedLibReferences?.get(libFileName);
if (oldResolution) {

View File

@@ -7411,6 +7411,7 @@ export interface CompilerOptions {
/** @deprecated */
keyofStringsOnly?: boolean;
lib?: string[];
libReplacement?: boolean;
/** @internal */ listEmittedFiles?: boolean;
/** @internal */ listFiles?: boolean;
/** @internal */ explainFiles?: boolean;

View File

@@ -21,23 +21,23 @@ function getSysForLibResolution(libRedirection?: boolean, forTsserver?: boolean)
/// <reference lib="es5"/>
`,
"/home/src/workspace/projects/project1/tsconfig.json": jsonToReadableText({
compilerOptions: { composite: true, typeRoots: ["./typeroot1"], lib: ["es5", "dom"], traceResolution: true },
compilerOptions: { composite: true, typeRoots: ["./typeroot1"], lib: ["es5", "dom"], traceResolution: true, libReplacement: libRedirection },
}),
"/home/src/workspace/projects/project1/typeroot1/sometype/index.d.ts": `export type TheNum = "type1";`,
"/home/src/workspace/projects/project2/utils.d.ts": `export const y = 10;`,
"/home/src/workspace/projects/project2/index.ts": `export const y = 10`,
"/home/src/workspace/projects/project2/tsconfig.json": jsonToReadableText({
compilerOptions: { composite: true, lib: ["es5", "dom"], traceResolution: true },
compilerOptions: { composite: true, lib: ["es5", "dom"], traceResolution: true, libReplacement: libRedirection },
}),
"/home/src/workspace/projects/project3/utils.d.ts": `export const y = 10;`,
"/home/src/workspace/projects/project3/index.ts": `export const z = 10`,
"/home/src/workspace/projects/project3/tsconfig.json": jsonToReadableText({
compilerOptions: { composite: true, lib: ["es5", "dom"], traceResolution: true },
compilerOptions: { composite: true, lib: ["es5", "dom"], traceResolution: true, libReplacement: libRedirection },
}),
"/home/src/workspace/projects/project4/utils.d.ts": `export const y = 10;`,
"/home/src/workspace/projects/project4/index.ts": `export const z = 10`,
"/home/src/workspace/projects/project4/tsconfig.json": jsonToReadableText({
compilerOptions: { composite: true, lib: ["esnext", "dom", "webworker"], traceResolution: true },
compilerOptions: { composite: true, lib: ["esnext", "dom", "webworker"], traceResolution: true, libReplacement: libRedirection },
}),
[getTypeScriptLibTestLocation("dom")]: "interface DOMInterface { }",
[getTypeScriptLibTestLocation("webworker")]: "interface WebWorkerInterface { }",
@@ -71,6 +71,7 @@ function getLibResolutionEditOptions(
typeRoots: ["./typeroot1", "./typeroot2"],
lib: ["es5", "dom"],
traceResolution: true,
libReplacement: true,
},
}),
),
@@ -90,6 +91,7 @@ function getLibResolutionEditOptions(
typeRoots: ["./typeroot1"],
lib: ["es5", "dom"],
traceResolution: true,
libReplacement: true,
},
}),
);
@@ -235,6 +237,7 @@ export function getSysForLibResolutionUnknown(): TestServerHost {
compilerOptions: {
composite: true,
traceResolution: true,
libReplacement: true,
},
}),
[getTypeScriptLibTestLocation("webworker")]: "interface WebWorkerInterface { }",