From c40508cf1cbe8e8a5f361a20ce6ab5220d6f106c Mon Sep 17 00:00:00 2001 From: Jason Ramsay Date: Fri, 9 Dec 2016 16:19:51 -0800 Subject: [PATCH] getSupportedExtensions optimization to reduce allocations --- src/compiler/core.ts | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/compiler/core.ts b/src/compiler/core.ts index f35bfd28f74..ceff1359579 100644 --- a/src/compiler/core.ts +++ b/src/compiler/core.ts @@ -1925,15 +1925,17 @@ namespace ts { const allSupportedExtensions = supportedTypeScriptExtensions.concat(supportedJavascriptExtensions); export function getSupportedExtensions(options?: CompilerOptions, extraFileExtensions?: FileExtensionInfo[]): string[] { - let typeScriptHostExtensions: string[] = []; - let allHostExtensions: string[] = []; - if (extraFileExtensions) { - allHostExtensions = ts.map(extraFileExtensions, item => item.extension); - typeScriptHostExtensions = ts.map(ts.filter(extraFileExtensions, item => item.scriptKind === ScriptKind.TS), item => item.extension); + const needAllExtensions = options && options.allowJs; + if (!extraFileExtensions || extraFileExtensions.length === 0) { + return needAllExtensions ? allSupportedExtensions : supportedTypeScriptExtensions; } - const allTypeScriptExtensions = concatenate(supportedTypeScriptExtensions, typeScriptHostExtensions); - const allExtensions = concatenate(allSupportedExtensions, allHostExtensions); - return options && options.allowJs ? allExtensions : allTypeScriptExtensions; + const extensions = (needAllExtensions ? allSupportedExtensions : supportedTypeScriptExtensions).slice(0); + for (const extInfo of extraFileExtensions) { + if (needAllExtensions || extInfo.scriptKind === ScriptKind.TS) { + extensions.push(extInfo.extension); + } + } + return extensions; } export function hasJavaScriptFileExtension(fileName: string) {