| |
| |
| |
| |
| |
| |
| |
| '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 |
| } |
|
|