validators.ts 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. import z from "zod";
  2. export function isValidCIDR(cidr: string): boolean {
  3. return z.string().cidr().safeParse(cidr).success;
  4. }
  5. export function isValidIP(ip: string): boolean {
  6. return z.string().ip().safeParse(ip).success;
  7. }
  8. export function isValidUrlGlobPattern(pattern: string): boolean {
  9. // Remove leading slash if present
  10. pattern = pattern.startsWith("/") ? pattern.slice(1) : pattern;
  11. // Empty string is not valid
  12. if (!pattern) {
  13. return false;
  14. }
  15. // Split path into segments
  16. const segments = pattern.split("/");
  17. // Check each segment
  18. for (let i = 0; i < segments.length; i++) {
  19. const segment = segments[i];
  20. // Empty segments are not allowed (double slashes)
  21. if (!segment && i !== segments.length - 1) {
  22. return false;
  23. }
  24. // If segment contains *, it must be exactly *
  25. if (segment.includes("*") && segment !== "*") {
  26. return false;
  27. }
  28. // Check for invalid characters
  29. if (!/^[a-zA-Z0-9_*-]*$/.test(segment)) {
  30. return false;
  31. }
  32. }
  33. return true;
  34. }