docs: function sortRoutes(r1, r2) {
      var a = r1.route;
      var b = r2.route;
  
      // Normalize the verbs
      var verb1 = a.verb.toLowerCase();
      var verb2 = b.verb.toLowerCase();
  
      if (verb1 === 'del') {
          verb1 = 'delete';
      }
      if (verb2 === 'del') {
          verb2 = 'delete';
      }
      // First sort by verb
      if (verb1 > verb2) {
          return -1;
      } else if (verb1 < verb2) {
          return 1;
      }
  
      // Sort by path part by part using the / delimiter
      // For example '/:id' will become ['', ':id'], '/findOne' will become
      // ['', 'findOne']
      var p1 = a.path.split('/');
      var p2 = b.path.split('/');
      var len = Math.min(p1.length, p2.length);
  
      // Loop through the parts and decide which path should come first
      for (var i = 0; i < len; i++) {
          // Empty part has lower weight
          if (p1[i] === '' && p2[i] !== '') {
              return 1;
          } else if (p1[i] !== '' && p2[i] === '') {
              return -1;
          }
          // Wildcard has lower weight
          if (p1[i][0] === ':' && p2[i][0] !== ':') {
              return 1;
          } else if (p1[i][0] !== ':' && p2[i][0] === ':') {
              return -1;
          }
          // Now the regular string comparision
          if (p1[i] > p2[i]) {
              return 1;
          } else if (p1[i] < p2[i]) {
              return -1;
          }
      }
      // Both paths have the common parts. The longer one should come before the
      // shorter one
      return p2.length - p1.length;
  }