## ISSUE (BUG) - Fixes #5396 ## Description - When given a string like **https://300**, it interprets 300 as the hostname, which it then converts to an IP address, what i did was to check if the entire string (ignoring the protocol ) is number then don't submit it all within zod and it makes sense to do that cause. - The range for valid 32-bit unsigned integers is 0 to 4294967295 (which corresponds to 0.0.0.0 to 255.255.255.255) so other than this numbers by default URL objects throws invalid. https://github.com/user-attachments/assets/1da92aeb-d50c-43a3-87ea-78a059d3fa84
24 lines
468 B
TypeScript
24 lines
468 B
TypeScript
import { z } from 'zod';
|
|
|
|
export const absoluteUrlSchema = z
|
|
.string()
|
|
.url()
|
|
.or(
|
|
z
|
|
.string()
|
|
.transform((value) => {
|
|
try {
|
|
const url = `https://${value}`.trim();
|
|
return isNaN(Number(value.trim())) &&
|
|
new URL(url) &&
|
|
/\.[a-z]{2,}$/.test(url)
|
|
? url
|
|
: '';
|
|
} catch {
|
|
return '';
|
|
}
|
|
})
|
|
.pipe(z.string().url()),
|
|
)
|
|
.or(z.literal(''));
|