UNPKG

astro

Version:

Astro is a modern site builder with web best practices, performance, and DX front-of-mind.

27 lines (26 loc) 636 B
class MultiLevelEncodingError extends Error { constructor() { super("Multi-level URL encoding is not allowed"); this.name = "MultiLevelEncodingError"; } } const ENCODING_REGEX = /%25[0-9a-fA-F]{2}/; function validateAndDecodePathname(pathname) { if (ENCODING_REGEX.test(pathname)) { throw new MultiLevelEncodingError(); } let decoded; try { decoded = decodeURI(pathname); } catch (_e) { throw new Error("Invalid URL encoding"); } if (ENCODING_REGEX.test(decoded)) { throw new MultiLevelEncodingError(); } return decoded; } export { MultiLevelEncodingError, validateAndDecodePathname };