@sjsf-lab/shadcn-extras-theme
Version:
The shadcn-svelte-extras based theme for svelte-jsonschema-form
81 lines (80 loc) • 2.23 kB
JavaScript
/*
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);
}