Skip to content

Commit f2a1a42

Browse files
authored
Merge pull request #27035 from Microsoft/fixTypesVersionTests
Sanitize module resolution logs for typesVersions entries
2 parents 31374d2 + 5d79704 commit f2a1a42

File tree

3 files changed

+25
-1
lines changed

3 files changed

+25
-1
lines changed

src/compiler/utilities.ts

+9
Original file line numberDiff line numberDiff line change
@@ -7671,6 +7671,15 @@ namespace ts {
76717671
// It may be inefficient (we could just match (/[-[\]{}()*+?.,\\^$|#\s]/g), but this is future
76727672
// proof.
76737673
const reservedCharacterPattern = /[^\w\s\/]/g;
7674+
7675+
export function regExpEscape(text: string) {
7676+
return text.replace(reservedCharacterPattern, escapeRegExpCharacter);
7677+
}
7678+
7679+
function escapeRegExpCharacter(match: string) {
7680+
return "\\" + match;
7681+
}
7682+
76747683
const wildcardCharCodes = [CharacterCodes.asterisk, CharacterCodes.question];
76757684

76767685
export function hasExtension(fileName: string): boolean {

src/harness/utils.ts

+15
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,21 @@ namespace utils {
77
return text !== undefined ? text.replace(testPathPrefixRegExp, (_, scheme) => scheme || (retainTrailingDirectorySeparator ? "/" : "")) : undefined!; // TODO: GH#18217
88
}
99

10+
function createDiagnosticMessageReplacer<R extends (messageArgs: string[], ...args: string[]) => string[]>(diagnosticMessage: ts.DiagnosticMessage, replacer: R) {
11+
const messageParts = diagnosticMessage.message.split(/{\d+}/g);
12+
const regExp = new RegExp(`^(?:${messageParts.map(ts.regExpEscape).join("(.*?)")})$`);
13+
type Args<R> = R extends (messageArgs: string[], ...args: infer A) => string[] ? A : [];
14+
return (text: string, ...args: Args<R>) => text.replace(regExp, (_, ...fixedArgs) => ts.formatStringFromArgs(diagnosticMessage.message, replacer(fixedArgs, ...args)));
15+
}
16+
17+
const replaceTypesVersionsMessage = createDiagnosticMessageReplacer(
18+
ts.Diagnostics.package_json_has_a_typesVersions_entry_0_that_matches_compiler_version_1_looking_for_a_pattern_to_match_module_name_2,
19+
([entry, , moduleName], compilerVersion) => [entry, compilerVersion, moduleName]);
20+
21+
export function sanitizeTraceResolutionLogEntry(text: string) {
22+
return text && removeTestPathPrefixes(replaceTypesVersionsMessage(text, "3.1.0-dev"));
23+
}
24+
1025
/**
1126
* Removes leading indentation from a template literal string.
1227
*/

src/testRunner/compilerRunner.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,7 @@ class CompilerTest {
208208
public verifyModuleResolution() {
209209
if (this.options.traceResolution) {
210210
Harness.Baseline.runBaseline(this.justName.replace(/\.tsx?$/, ".trace.json"),
211-
utils.removeTestPathPrefixes(JSON.stringify(this.result.traces, undefined, 4)));
211+
JSON.stringify(this.result.traces.map(utils.sanitizeTraceResolutionLogEntry), undefined, 4));
212212
}
213213
}
214214

0 commit comments

Comments
 (0)