UNPKG

@toreda/strong-types

Version:

Better TypeScript code in fewer lines.

1 lines 2.65 kB
{"version":3,"sources":["../src/is/ipv6/addr.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH;;;;GAIG;AACH,oBAAY,UAAU,CAAC,OAAO,IAAI,MAAM,OAAO,CAAC;AAEhD,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAkCnD;AAED,eAAO,MAAM,cAAc,YAAa,MAAM,KAAG,OAWhD,CAAC","file":"addr.d.ts","sourcesContent":["/**\n *\tMIT License\n *\n *\tCopyright (c) 2019 - 2021 Toreda, Inc.\n *\n *\tPermission is hereby granted, free of charge, to any person obtaining a copy\n *\tof this software and associated documentation files (the \"Software\"), to deal\n *\tin the Software without restriction, including without limitation the rights\n *\tto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n *\tcopies of the Software, and to permit persons to whom the Software is\n *\tfurnished to do so, subject to the following conditions:\n\n * \tThe above copyright notice and this permission notice shall be included in all\n * \tcopies or substantial portions of the Software.\n *\n * \tTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n *\tIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n *\tFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * \tAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n *\tLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n *\tOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * \tSOFTWARE.\n *\n */\n\n/**\n * Type signature for isIpv6Addr validators used in rule chains.\n *\n * @category Validators\n */\nexport type IsIpv6Addr<CallerT> = () => CallerT;\n\nexport function isIpv6Addr(current: string): boolean {\n\tif (typeof current != 'string') {\n\t\treturn false;\n\t}\n\n\tconst trimmed = current.trim();\n\n\tif (!trimmed) {\n\t\treturn false;\n\t}\n\n\tconst sections = trimmed.split(':');\n\tconst doubleColonSegment = trimmed.split('::');\n\tconst doubleColon = '::';\n\n\tif (!sections.length) {\n\t\treturn false;\n\t}\n\n\tif (sections.length > 8) {\n\t\treturn false;\n\t}\n\n\tconst validatedSegment = sections.every(isValidSegment);\n\n\tif (sections.length === 8 && !validatedSegment && current.includes(doubleColon)) {\n\t\treturn false;\n\t}\n\n\tif (sections.length <= 7 && !validatedSegment && doubleColonSegment.length >= 3) {\n\t\treturn false;\n\t}\n\n\treturn true;\n}\n\nexport const isValidSegment = (segment: string): boolean => {\n\tif (typeof segment !== 'string') {\n\t\treturn false;\n\t}\n\n\tconst hex = parseInt(segment, 16);\n\n\tif (isNaN(hex)) {\n\t\treturn false;\n\t}\n\treturn hex >= 0x0 && hex <= 0xffff;\n};\n"]}