{"version":3,"sources":["../../src/values/Url.ts"],"sourcesContent":["import validateUrl from 'validator/lib/isURL';\nimport { asString, isEmpty, Value } from '@thisisagile/easy';\n\nexport interface UrlOptions {\n  /**\n   * @default ['http','https','ftp']\n   */\n  protocols?: string[];\n  /**\n   * @default true\n   */\n  require_tld?: boolean;\n  /**\n   * @default false\n   */\n  require_protocol?: boolean;\n  /**\n   * @default true\n   */\n  require_host?: boolean;\n  /**\n   * if set as true isURL will check if port is present in the URL\n   * @default false\n   */\n  require_port?: boolean;\n  /**\n   * @default true\n   */\n  require_valid_protocol?: boolean;\n  /**\n   * @default false\n   */\n  allow_underscores?: boolean;\n  /**\n   * @default false\n   */\n  host_whitelist?: Array<string | RegExp>;\n  /**\n   * @default false\n   */\n  host_blacklist?: Array<string | RegExp>;\n  /**\n   * @default false\n   */\n  allow_trailing_dot?: boolean;\n  /**\n   * @default false\n   */\n  allow_protocol_relative_urls?: boolean;\n  /**\n   * @default false\n   */\n  disallow_auth?: boolean;\n}\n\nexport class Url extends Value {\n  constructor(\n    value: unknown,\n    readonly options?: UrlOptions\n  ) {\n    super(asString(value));\n  }\n\n  get isValid(): boolean {\n    return isUrl(this.value, this.options);\n  }\n}\n\nexport const url = (url: unknown, options?: UrlOptions): Url => new Url(url, options);\n\nexport const isUrl = (url?: unknown, options?: UrlOptions): boolean => {\n  return !isEmpty(url) && validateUrl(asString(url), options);\n};\n"],"mappings":";;;AAAA,OAAO,iBAAiB;AACxB,SAAS,UAAU,SAAS,aAAa;AAsDlC,IAAM,MAAN,cAAkB,MAAM;AAAA,EAC7B,YACE,OACS,SACT;AACA,UAAM,SAAS,KAAK,CAAC;AAFZ;AAAA,EAGX;AAAA,EAEA,IAAI,UAAmB;AACrB,WAAO,MAAM,KAAK,OAAO,KAAK,OAAO;AAAA,EACvC;AACF;AAEO,IAAM,MAAM,CAACA,MAAc,YAA8B,IAAI,IAAIA,MAAK,OAAO;AAE7E,IAAM,QAAQ,CAACA,MAAe,YAAkC;AACrE,SAAO,CAAC,QAAQA,IAAG,KAAK,YAAY,SAASA,IAAG,GAAG,OAAO;AAC5D;","names":["url"]}