Procházet zdrojové kódy

@uppy/utils: refactor `truncateString` (#3080)

Antoine du Hamel před 3 roky
rodič
revize
65ffbed1a2

+ 8 - 10
packages/@uppy/utils/src/truncateString.js

@@ -6,20 +6,18 @@
  * @param {number} maxLength - maximum size of the resulting string
  * @returns {string}
  */
+const separator = '...'
 module.exports = function truncateString (string, maxLength) {
-  const separator = '...'
-
+  // Return the empty string if maxLength is zero
+  if (maxLength === 0) return ''
   // Return original string if it's already shorter than maxLength
-  if (string.length <= maxLength) {
-    return string
-  // Return truncated substring without '...' if string can't be meaningfully truncated
-  } if (maxLength <= separator.length) {
-    return string.substr(0, maxLength)
-  // Return truncated string divided in half by '...'
-  }
+  if (string.length <= maxLength) return string
+  // Return truncated substring appended of the ellipsis char if string can't be meaningfully truncated
+  if (maxLength <= separator.length + 1) return `${string.slice(0, maxLength - 1)}…`
+
   const charsToShow = maxLength - separator.length
   const frontChars = Math.ceil(charsToShow / 2)
   const backChars = Math.floor(charsToShow / 2)
 
-  return string.substr(0, frontChars) + separator + string.substr(string.length - backChars)
+  return string.slice(0, frontChars) + separator + string.slice(-backChars)
 }

+ 4 - 9
packages/@uppy/utils/src/truncateString.test.js

@@ -12,10 +12,10 @@ describe('truncateString', () => {
     expect(truncateString('abcdefghijkl', 7)).toEqual('ab...kl')
     expect(truncateString('abcdefghijkl', 6)).toEqual('ab...l')
     expect(truncateString('abcdefghijkl', 5)).toEqual('a...l')
-    expect(truncateString('abcdefghijkl', 4)).toEqual('a...')
-    expect(truncateString('abcdefghijkl', 3)).toEqual('abc')
-    expect(truncateString('abcdefghijkl', 2)).toEqual('ab')
-    expect(truncateString('abcdefghijkl', 1)).toEqual('a')
+    expect(truncateString('abcdefghijkl', 4)).toEqual('abc…')
+    expect(truncateString('abcdefghijkl', 3)).toEqual('ab')
+    expect(truncateString('abcdefghijkl', 2)).toEqual('a')
+    expect(truncateString('abcdefghijkl', 1)).toEqual('')
     expect(truncateString('abcdefghijkl', 0)).toEqual('')
   })
 
@@ -23,9 +23,4 @@ describe('truncateString', () => {
     expect(truncateString('hello world', 100)).toEqual('hello world')
     expect(truncateString('hello world', 11)).toEqual('hello world')
   })
-
-  it('should not truncate the string if it is too short to be meaningfully truncated', () => {
-    expect(truncateString('abc', 2)).toEqual('ab')
-    expect(truncateString('abc', 1)).toEqual('a')
-  })
 })