'use strict' ; export function startsWith ( haystack , needle ) { if ( haystack . length < needle . length ) { return false ; } for ( let i = 0 ; i < needle . length ; i ++ ) { if ( haystack [ i ] !== needle [ i ] ) { return false ; } } return true ; } /**
 * Determines if haystack ends with needle.
 */ export function endsWith ( haystack , needle ) { let diff = haystack . length - needle . length ; if ( diff > 0 ) { return haystack . lastIndexOf ( needle ) === diff ; } else if ( diff === 0 ) { return haystack === needle ; } else { return false ; } } param first param second export function difference ( first , second , maxLenDelta = 4 ) { let lengthDifference = Math . abs ( first . length - second . length ) ; if ( lengthDifference > maxLenDelta ) { return 0 ; } let LCS = [ ] ; let zeroArray = [ ] ; let i , j ; for ( i = 0 ; i < second . length + 1 ; ++ i ) { zeroArray . push ( 0 ) ; } for ( i = 0 ; i < first . length + 1 ; ++ i ) { LCS . push ( zeroArray ) ; } for ( i = 1 ; i < first . length + 1 ; ++ i ) { for ( j = 1 ; j < second . length + 1 ; ++ j ) { if ( first [ i - 1 ] === second [ j - 1 ] ) { LCS [ i ] [ j ] = LCS [ i - 1 ] [ j - 1 ] + 1 ; } else { LCS [ i ] [ j ] = Math . max ( LCS [ i - 1 ] [ j ] , LCS [ i ] [ j - 1 ] ) ; } } } return LCS [ first . length ] [ second . length ] - Math . sqrt ( lengthDifference ) ; } /**
 * Limit of string length.
 */ export function getLimitedString ( str , ellipsis = true ) { if ( ! str ) { return '' ; } if ( str . length < 140 ) { return str ; } return str . slice ( 0 , 140 ) + ( ellipsis ? '\u2026' : '' ) ; } /**
 * Limit of string length.
 */ export function trim ( str , regexp ) { const m = regexp . exec ( str ) ; if ( m && m [ 0 ] . length ) { return str . substr ( 0 , str . length - m [ 0 ] . length ) ; } return str ; }