UNPKG

tezx

Version:

TezX is a modern, ultra-lightweight, and high-performance JavaScript framework built specifically for Bun. It provides a minimal yet powerful API, seamless environment management, and a high-concurrency HTTP engine for building fast, scalable web applicat

104 lines (103 loc) 2.86 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getPathname = void 0; exports.queryParser = queryParser; exports.url2query = url2query; exports.sanitizePathSplitBasePath = sanitizePathSplitBasePath; exports.sanitizePathSplit = sanitizePathSplit; let getPathname = (url) => { const len = url.length; if (len === 0) return "/"; const start = url.indexOf("/", url.charCodeAt(9) === 58 ? 13 : 8); if (start === -1) return "/"; let end = url.indexOf("?", start); if (end === -1) end = url.indexOf("#", start); if (end === -1) end = len; return start === end ? "/" : url.slice(start, end); }; exports.getPathname = getPathname; function queryParser(qs) { if (!qs?.length) return {}; if (qs[0] === "?") qs = qs.slice(1); const query = {}; for (const part of qs.split("&")) { if (!part) continue; const [k, v = ""] = part.split("="); if (query[k] !== undefined) { if (Array.isArray(query[k])) query[k].push(v); else query[k] = [query[k], v]; } else query[k] = v; } return query; } function url2query(url) { const hashIndex = url.indexOf("#"); if (hashIndex !== -1) { url = url.slice(0, hashIndex); } const queryIndex = url.indexOf("?"); if (queryIndex === -1) return {}; const qs = url.slice(queryIndex + 1); return queryParser(qs); } function sanitizePathSplitBasePath(basePath, path, out) { const combined = `${basePath}/${path}`; const parts = out ?? []; let segStart = 0; let i = 0; const len = combined.length; while (i < len) { const code = combined.charCodeAt(i); if (code === 47 || code === 92) { if (segStart < i) { const seg = combined.slice(segStart, i); if (seg !== "..") parts.push(seg); } segStart = i + 1; } i++; } if (segStart < len) { const seg = combined.slice(segStart, len); if (seg !== "..") parts.push(seg); } return parts; } function sanitizePathSplit(path, out) { const parts = out ?? []; let segStart = 0; let i = 0; const len = path.length; while (i < len) { const code = path.charCodeAt(i); if (code === 47 || code === 92) { if (segStart < i) { const seg = path.slice(segStart, i); if (seg !== "..") parts.push(seg); } segStart = i + 1; } i++; } if (segStart < len) { const seg = path.slice(segStart, len); if (seg !== "..") parts.push(seg); } return parts; }