UNPKG

@sjsf-lab/shadcn-extras-theme

Version:

The shadcn-svelte-extras based theme for svelte-jsonschema-form

81 lines (80 loc) 2.23 kB
/* Installed from @ieedan/std */ import { isNumber } from './is-number.js'; import { Err, Ok } from './result.js'; /** Parses the ip address from a string in the format of `0.0.0.0` or `0 0 0 0` or `0_0_0_0` into an array of octets * * @param address * @returns * * ## Usage * * ```ts * parse("192.168.100.10").unwrap(); // [192, 168, 100, 10] * ``` */ export function parse(address) { let newAddress = address.trim(); newAddress = newAddress.replaceAll(' ', '.'); newAddress = newAddress.replaceAll('_', '.'); const octets = newAddress.split('.'); if (octets.length !== 4) return Err({ message: `'${address}' is invalid as it doesn't contain 4 octets.` }); const final = [0, 0, 0, 0]; for (let i = 0; i < octets.length; i++) { const octet = octets[i]; if (!isNumber(octet)) return Err({ octet: i + 1, message: `'${octet}' is not a number.` }); const num = Number.parseInt(octet); if (num < 0 || num > 255) return Err({ octet: i + 1, message: `'${octet}' is out of range.` }); final[i] = num; } return Ok(final); } /** Validates the provided address * * @param address * @returns * * ## Usage * * ```ts * validate("192.168.100.10"); // true * validate([192, 168, 100, 10]); // true * * validate("192.168.100.256"); // false * validate([192, 168, 100, 256]); // false * ``` */ export function validate(address) { if (typeof address === 'string') return parse(address).isOk(); for (let i = 0; i < address.length; i++) { const octet = address[i]; if (octet < 0 || octet > 255) return false; } return true; } /** Formats the provided address to a string with the provided separator * * @param address * @param separator @default "." * @returns * * ## Usage * * ```ts * formatToString([192, 168, 100, 10]); // "192.168.100.10" * ``` */ export function formatToString(address, separator = '.') { if (Array.isArray(address)) return Ok(address.join(separator)); const parsed = parse(address); if (parsed.isErr()) return Err(parsed.unwrapErr().message); return formatToString(parsed.unwrap(), separator); }