import _ from "lodash" import { Option, Some, None } from "ts-results-es"; import { z } from "zod"; export const uint8 = z.number().nonnegative().lt(Math.pow(2, 8)) export const uint16 = z.number().nonnegative().lt(Math.pow(2, 16)) export const uint32 = z.number().nonnegative().lt(Math.pow(2, 32)) export const int8 = z.number().lt(Math.pow(2, 7)).gte(-Math.pow(2, 8)) export const int16 = z.number().lt(Math.pow(2, 15)).gte(-Math.pow(2, 16)) export const int32 = z.number().lt(Math.pow(2, 31)).gte(-Math.pow(2, 32)) export function UNUSED(_: unknown): void { } export namespace fun { export function numberToBytes(num: number, bytesLength: number): Uint8Array { var array = new Uint8Array(bytesLength) for (let i = 0; i < bytesLength; i++) { array[i] = num & (0xFF << (i << 3)) } return array } export function randomFromArray(array: Array) { return array[_.random(0, array.length - 1, false)] } export function isStringArray(obj: any): obj is Array { return z.string().array().safeParse(obj).success } export function isNumberArray(obj: any): obj is Array { return z.number().array().safeParse(obj).success } export function sqlConditionFromArray( columnName: string, array: Array, type: "AND" | "OR" ): Option { let condition: string = "" const len = array.length if (len == 0) { return None } for (let i = 0; i < len; i++) { condition.concat(`${columnName}=${array[i]}`) if (i != len - 1) { condition.concat(` ${type} `) } } return new Some(condition) } export function sqlConditionFromString( columnName: string, str: string, type: "AND" | "OR", delimiter: string = " " ): Option { if (str.length == 0) { return None } const array = str.split(delimiter) return sqlConditionFromArray(columnName, array, type) } }