truncateToNLines

truncateToNLines

  • (n: number) => (aString: string) => string
  1. Truncate a string to n lines, appending an ellipses if more lines exist.

    Note: both \n and \r\n are supported

    const truncateTo3Lines = truncateToNLines(3)
    
    const lf = '\n'
    const crlf = '\r\n'
    
    const notTruncated = truncateTo3Lines(` a${crlf} b${lf} c`)
    console.log(notTruncated)
    // is
    //  a
    //  b
    //  c
    
    const isTruncated = truncateTo3Lines(` a${crlf} b${lf} c${crlf} d`)
    console.log('\n', isTruncated)
    // is
    //  a
    //  b
    //  c
    // ...
    const truncateTo3Lines = truncateToNLines(3)
    
    const lf = '\n'
    const crlf = '\r\n'
    
    const notTruncated = truncateTo3Lines(` a${crlf} b${lf} c`)
    console.log(notTruncated)
    // is
    //  a
    //  b
    //  c
    
    const isTruncated = truncateTo3Lines(` a${crlf} b${lf} c${crlf} d`)
    console.log('\n', isTruncated)
    // is
    //  a
    //  b
    //  c
    // ...
    
    const truncateTo3Lines = truncateToNLines(3)
    
    const lf = '\n'
    const crlf = '\r\n'
    
    const notTruncated = truncateTo3Lines(
      ` a${crlf} b${lf} c`
    )
    console.log(notTruncated)
    // is
    //  a
    //  b
    //  c
    
    const isTruncated = truncateTo3Lines(
      ` a${crlf} b${lf} c${crlf} d`
    )
    console.log('\n', isTruncated)
    // is
    //  a
    //  b
    //  c
    // ...
    const truncateTo3Lines = truncateToNLines(3)
    
    const lf = '\n'
    const crlf = '\r\n'
    
    const notTruncated = truncateTo3Lines(
      ` a${crlf} b${lf} c`
    )
    console.log(notTruncated)
    // is
    //  a
    //  b
    //  c
    
    const isTruncated = truncateTo3Lines(
      ` a${crlf} b${lf} c${crlf} d`
    )
    console.log('\n', isTruncated)
    // is
    //  a
    //  b
    //  c
    // ...
    
  2. Sometimes we want to limit the number of lines while indicating there's more. Below, we notice our car API is logging unnecessarily long stack traces. Let's truncate them to 5 lines.

    const longStackTrace = `Error: unable to connect to database
      at connectToDb (file:///app/db/connect.mjs:25:9)
      at queryDatabase (file:///app/db/query.mjs:21:3)
      at getCarsByModel (file:///app/api/cars.mjs:15:10)
      at Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5)
      at next (/app/node_modules/express/lib/router/route.js:131:13)
      at Route.dispatch (/app/node_modules/express/lib/router/route.js:112:3)
      at Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5)
      at /app/node_modules/express/lib/router/index.js:277:22`
    
    const truncateTo5Lines = truncateToNLines(5)
    
    const trace = truncateTo5Lines(longStackTrace)
    console.log(trace)
    // is
    // Error: unable to connect to database
    //   at connectToDb (file:///app/db/connect.mjs:25:9)
    //   at queryDatabase (file:///app/db/query.mjs:21:3)
    //   at getCarsByModel (file:///app/api/cars.mjs:15:10)
    //   at Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5)
    // ...
    const longStackTrace = `Error: unable to connect to database
      at connectToDb (file:///app/db/connect.mjs:25:9)
      at queryDatabase (file:///app/db/query.mjs:21:3)
      at getCarsByModel (file:///app/api/cars.mjs:15:10)
      at Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5)
      at next (/app/node_modules/express/lib/router/route.js:131:13)
      at Route.dispatch (/app/node_modules/express/lib/router/route.js:112:3)
      at Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5)
      at /app/node_modules/express/lib/router/index.js:277:22`
    
    const truncateTo5Lines = truncateToNLines(5)
    
    const trace = truncateTo5Lines(longStackTrace)
    console.log(trace)
    // is
    // Error: unable to connect to database
    //   at connectToDb (file:///app/db/connect.mjs:25:9)
    //   at queryDatabase (file:///app/db/query.mjs:21:3)
    //   at getCarsByModel (file:///app/api/cars.mjs:15:10)
    //   at Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5)
    // ...
    
    const longStackTrace = `Error: unable to connect to database
      at connectToDb (file:///app/db/connect.mjs:25:9)
      at queryDatabase (file:///app/db/query.mjs:21:3)
      at getCarsByModel (file:///app/api/cars.mjs:15:10)
      at Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5)
      at next (/app/node_modules/express/lib/router/route.js:131:13)
      at Route.dispatch (/app/node_modules/express/lib/router/route.js:112:3)
      at Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5)
      at /app/node_modules/express/lib/router/index.js:277:22`
    
    const truncateTo5Lines = truncateToNLines(5)
    
    const trace = truncateTo5Lines(longStackTrace)
    console.log(trace)
    // is
    // Error: unable to connect to database
    //   at connectToDb (file:///app/db/connect.mjs:25:9)
    //   at queryDatabase (file:///app/db/query.mjs:21:3)
    //   at getCarsByModel (file:///app/api/cars.mjs:15:10)
    //   at Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5)
    // ...
    const longStackTrace = `Error: unable to connect to database
      at connectToDb (file:///app/db/connect.mjs:25:9)
      at queryDatabase (file:///app/db/query.mjs:21:3)
      at getCarsByModel (file:///app/api/cars.mjs:15:10)
      at Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5)
      at next (/app/node_modules/express/lib/router/route.js:131:13)
      at Route.dispatch (/app/node_modules/express/lib/router/route.js:112:3)
      at Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5)
      at /app/node_modules/express/lib/router/index.js:277:22`
    
    const truncateTo5Lines = truncateToNLines(5)
    
    const trace = truncateTo5Lines(longStackTrace)
    console.log(trace)
    // is
    // Error: unable to connect to database
    //   at connectToDb (file:///app/db/connect.mjs:25:9)
    //   at queryDatabase (file:///app/db/query.mjs:21:3)
    //   at getCarsByModel (file:///app/api/cars.mjs:15:10)
    //   at Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5)
    // ...