{"version":3,"file":"is-url.mjs","names":[],"sources":["../../../src/validators/is-url/is-url.ts"],"sourcesContent":["import type { SyncReactNode } from '../types';\n\ninterface IsUrlOptions {\n  protocols?: string[];\n  allowLocalhost?: boolean;\n}\n\nexport function isUrl(error?: SyncReactNode): (value: unknown) => SyncReactNode;\nexport function isUrl(\n  options: IsUrlOptions,\n  error?: SyncReactNode\n): (value: unknown) => SyncReactNode;\nexport function isUrl(optionsOrError?: IsUrlOptions | SyncReactNode, error?: SyncReactNode) {\n  let _options: IsUrlOptions = {};\n  let _error: SyncReactNode;\n\n  if (\n    optionsOrError !== null &&\n    optionsOrError !== undefined &&\n    typeof optionsOrError === 'object' &&\n    !Array.isArray(optionsOrError) &&\n    ('protocols' in optionsOrError || 'allowLocalhost' in optionsOrError)\n  ) {\n    _options = optionsOrError as IsUrlOptions;\n    _error = error || true;\n  } else {\n    _error = (optionsOrError as SyncReactNode) || true;\n  }\n\n  const protocols = _options.protocols ?? ['http', 'https'];\n  const allowLocalhost = _options.allowLocalhost ?? false;\n\n  return (value: unknown): SyncReactNode => {\n    if (typeof value !== 'string') {\n      return _error;\n    }\n\n    try {\n      const url = new URL(value);\n      const protocol = url.protocol.replace(':', '');\n\n      if (!protocols.includes(protocol)) {\n        return _error;\n      }\n\n      if (!allowLocalhost && url.hostname === 'localhost') {\n        return _error;\n      }\n\n      return null;\n    } catch {\n      return _error;\n    }\n  };\n}\n"],"mappings":";;AAYA,SAAgB,MAAM,gBAA+C,OAAuB;CAC1F,IAAI,WAAyB,CAAC;CAC9B,IAAI;CAEJ,IACE,mBAAmB,QACnB,mBAAmB,KAAA,KACnB,OAAO,mBAAmB,YAC1B,CAAC,MAAM,QAAQ,cAAc,MAC5B,eAAe,kBAAkB,oBAAoB,iBACtD;EACA,WAAW;EACX,SAAS,SAAS;CACpB,OACE,SAAU,kBAAoC;CAGhD,MAAM,YAAY,SAAS,aAAa,CAAC,QAAQ,OAAO;CACxD,MAAM,iBAAiB,SAAS,kBAAkB;CAElD,QAAQ,UAAkC;EACxC,IAAI,OAAO,UAAU,UACnB,OAAO;EAGT,IAAI;GACF,MAAM,MAAM,IAAI,IAAI,KAAK;GACzB,MAAM,WAAW,IAAI,SAAS,QAAQ,KAAK,EAAE;GAE7C,IAAI,CAAC,UAAU,SAAS,QAAQ,GAC9B,OAAO;GAGT,IAAI,CAAC,kBAAkB,IAAI,aAAa,aACtC,OAAO;GAGT,OAAO;EACT,QAAQ;GACN,OAAO;EACT;CACF;AACF"}