123456789101112131415161718192021222324252627282930313233343536373839404142 |
- const qs = require('querystring');
- /**
- * @typedef ParsedURL
- * @type {import('.').ParsedURL}
- */
- /**
- * @typedef Request
- * @property {string} url
- * @property {ParsedURL} _parsedUrl
- */
- /**
- * @param {Request} req
- * @returns {ParsedURL|void}
- */
- function parse(req) {
- let raw = req.url;
- if (raw == null) return;
- let prev = req._parsedUrl;
- if (prev && prev.raw === raw) return prev;
- let pathname=raw, search='', query;
- if (raw.length > 1) {
- let idx = raw.indexOf('?', 1);
- if (idx !== -1) {
- search = raw.substring(idx);
- pathname = raw.substring(0, idx);
- if (search.length > 1) {
- query = qs.parse(search.substring(1));
- }
- }
- }
- return req._parsedUrl = { pathname, search, query, raw };
- }
- exports.parse = parse;
|