mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-06-01 14:25:16 -05:00
Add new option "libReplacement" (#60829)
This commit is contained in:
@@ -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
|
||||
{
|
||||
|
||||
@@ -6502,6 +6502,10 @@
|
||||
"category": "Error",
|
||||
"code": 6807
|
||||
},
|
||||
"Enable lib replacement.": {
|
||||
"category": "Message",
|
||||
"code": 6808
|
||||
},
|
||||
|
||||
"one of:": {
|
||||
"category": "Message",
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -7411,6 +7411,7 @@ export interface CompilerOptions {
|
||||
/** @deprecated */
|
||||
keyofStringsOnly?: boolean;
|
||||
lib?: string[];
|
||||
libReplacement?: boolean;
|
||||
/** @internal */ listEmittedFiles?: boolean;
|
||||
/** @internal */ listFiles?: boolean;
|
||||
/** @internal */ explainFiles?: boolean;
|
||||
|
||||
@@ -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 { }",
|
||||
|
||||
Reference in New Issue
Block a user