123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 |
-
-
- 'use strict'
-
-
-
- var url = require('url')
- var parse = url.parse
- var Url = url.Url
-
-
-
- module.exports = parseurl
- module.exports.original = originalurl
-
-
-
- function parseurl (req) {
- var url = req.url
-
- if (url === undefined) {
-
- return undefined
- }
-
- var parsed = req._parsedUrl
-
- if (fresh(url, parsed)) {
-
- return parsed
- }
-
-
- parsed = fastparse(url)
- parsed._raw = url
-
- return (req._parsedUrl = parsed)
- };
-
-
-
- function originalurl (req) {
- var url = req.originalUrl
-
- if (typeof url !== 'string') {
-
- return parseurl(req)
- }
-
- var parsed = req._parsedOriginalUrl
-
- if (fresh(url, parsed)) {
-
- return parsed
- }
-
-
- parsed = fastparse(url)
- parsed._raw = url
-
- return (req._parsedOriginalUrl = parsed)
- };
-
-
-
- function fastparse (str) {
- if (typeof str !== 'string' || str.charCodeAt(0) !== 0x2f ) {
- return parse(str)
- }
-
- var pathname = str
- var query = null
- var search = null
-
-
-
-
- for (var i = 1; i < str.length; i++) {
- switch (str.charCodeAt(i)) {
- case 0x3f:
- if (search === null) {
- pathname = str.substring(0, i)
- query = str.substring(i + 1)
- search = str.substring(i)
- }
- break
- case 0x09:
- case 0x0a:
- case 0x0c:
- case 0x0d:
- case 0x20:
- case 0x23:
- case 0xa0:
- case 0xfeff:
- return parse(str)
- }
- }
-
- var url = Url !== undefined
- ? new Url()
- : {}
-
- url.path = str
- url.href = str
- url.pathname = pathname
-
- if (search !== null) {
- url.query = query
- url.search = search
- }
-
- return url
- }
-
-
-
- function fresh (url, parsedUrl) {
- return typeof parsedUrl === 'object' &&
- parsedUrl !== null &&
- (Url === undefined || parsedUrl instanceof Url) &&
- parsedUrl._raw === url
- }
|