@@ -93,6 +93,17 @@ namespace ts {
9393 return undefined ;
9494 }
9595
96+ /** Works like Array.prototype.find. */
97+ export function find < T > ( array : T [ ] , predicate : ( element : T , index : number ) => boolean ) : T | undefined {
98+ for ( let i = 0 , len = array . length ; i < len ; i ++ ) {
99+ const value = array [ i ] ;
100+ if ( predicate ( value , i ) ) {
101+ return value ;
102+ }
103+ }
104+ return undefined ;
105+ }
106+
96107 export function contains < T > ( array : T [ ] , value : T ) : boolean {
97108 if ( array ) {
98109 for ( const v of array ) {
@@ -941,7 +952,7 @@ namespace ts {
941952 * [^./] # matches everything up to the first . character (excluding directory seperators)
942953 * (\\.(?!min\\.js$))? # matches . characters but not if they are part of the .min.js file extension
943954 */
944- const singleAsteriskRegexFragmentFiles = "([^./]|(\\.(?!min\\.js$))?)*" ;
955+ const singleAsteriskRegexFragmentFiles = "([^./]|(\\.(?!min\\.js$))?)*" ;
945956 const singleAsteriskRegexFragmentOther = "[^/]*" ;
946957
947958 export function getRegularExpressionForWildcard ( specs : string [ ] , basePath : string , usage : "files" | "directories" | "exclude" ) {
@@ -1271,8 +1282,12 @@ namespace ts {
12711282 return path ;
12721283 }
12731284
1274- export function tryRemoveExtension ( path : string , extension : string ) : string {
1275- return fileExtensionIs ( path , extension ) ? path . substring ( 0 , path . length - extension . length ) : undefined ;
1285+ export function tryRemoveExtension ( path : string , extension : string ) : string | undefined {
1286+ return fileExtensionIs ( path , extension ) ? removeExtension ( path , extension ) : undefined ;
1287+ }
1288+
1289+ export function removeExtension ( path : string , extension : string ) : string {
1290+ return path . substring ( 0 , path . length - extension . length ) ;
12761291 }
12771292
12781293 export function isJsxOrTsxExtension ( ext : string ) : boolean {
0 commit comments