CoolFace
Apppublic

opusdev/vector-similarity-api

sourceHugging Faceupdated 5mo agoView on Hugging Face
1likes
index.js159 linesDownload Raw Back to parseurl
1/*!2 * parseurl3 * Copyright(c) 2014 Jonathan Ong4 * Copyright(c) 2014-2017 Douglas Christopher Wilson5 * MIT Licensed6 */7 8'use strict'9 10/**11 * Module dependencies.12 * @private13 */14 15var url = require('url')16var parse = url.parse17var Url = url.Url18 19/**20 * Module exports.21 * @public22 */23 24module.exports = parseurl25module.exports.original = originalurl26 27/**28 * Parse the `req` url with memoization.29 *30 * @param {ServerRequest} req31 * @return {Object}32 * @public33 */34 35function parseurl (req) {36  var url = req.url37 38  if (url === undefined) {39    // URL is undefined40    return undefined41  }42 43  var parsed = req._parsedUrl44 45  if (fresh(url, parsed)) {46    // Return cached URL parse47    return parsed48  }49 50  // Parse the URL51  parsed = fastparse(url)52  parsed._raw = url53 54  return (req._parsedUrl = parsed)55};56 57/**58 * Parse the `req` original url with fallback and memoization.59 *60 * @param {ServerRequest} req61 * @return {Object}62 * @public63 */64 65function originalurl (req) {66  var url = req.originalUrl67 68  if (typeof url !== 'string') {69    // Fallback70    return parseurl(req)71  }72 73  var parsed = req._parsedOriginalUrl74 75  if (fresh(url, parsed)) {76    // Return cached URL parse77    return parsed78  }79 80  // Parse the URL81  parsed = fastparse(url)82  parsed._raw = url83 84  return (req._parsedOriginalUrl = parsed)85};86 87/**88 * Parse the `str` url with fast-path short-cut.89 *90 * @param {string} str91 * @return {Object}92 * @private93 */94 95function fastparse (str) {96  if (typeof str !== 'string' || str.charCodeAt(0) !== 0x2f /* / */) {97    return parse(str)98  }99 100  var pathname = str101  var query = null102  var search = null103 104  // This takes the regexp from https://github.com/joyent/node/pull/7878105  // Which is /^(\/[^?#\s]*)(\?[^#\s]*)?$/106  // And unrolls it into a for loop107  for (var i = 1; i < str.length; i++) {108    switch (str.charCodeAt(i)) {109      case 0x3f: /* ?  */110        if (search === null) {111          pathname = str.substring(0, i)112          query = str.substring(i + 1)113          search = str.substring(i)114        }115        break116      case 0x09: /* \t */117      case 0x0a: /* \n */118      case 0x0c: /* \f */119      case 0x0d: /* \r */120      case 0x20: /*    */121      case 0x23: /* #  */122      case 0xa0:123      case 0xfeff:124        return parse(str)125    }126  }127 128  var url = Url !== undefined129    ? new Url()130    : {}131 132  url.path = str133  url.href = str134  url.pathname = pathname135 136  if (search !== null) {137    url.query = query138    url.search = search139  }140 141  return url142}143 144/**145 * Determine if parsed is still fresh for url.146 *147 * @param {string} url148 * @param {object} parsedUrl149 * @return {boolean}150 * @private151 */152 153function fresh (url, parsedUrl) {154  return typeof parsedUrl === 'object' &&155    parsedUrl !== null &&156    (Url === undefined || parsedUrl instanceof Url) &&157    parsedUrl._raw === url158}159