mirror of
https://github.com/clusterio/clusterio.git
synced 2026-11-13 07:04:53 +09:00
67 lines
1.7 KiB
TypeScript
67 lines
1.7 KiB
TypeScript
import path from "path";
|
|
|
|
/** Combine multiple validators into a single one. */
|
|
export function all<V, C> (
|
|
...validators: ((value: V, config: C) => void)[]
|
|
) {
|
|
return function (value: V, config: C) {
|
|
for (const validator of validators) {
|
|
validator(value, config);
|
|
}
|
|
};
|
|
}
|
|
|
|
/** Skip validation of optional fields when null */
|
|
export function optional<V, C> (
|
|
validator: (value: V, config: C) => void
|
|
) {
|
|
return function (value: V | null, config: C) {
|
|
if (value === null) { return; }
|
|
validator(value, config);
|
|
};
|
|
}
|
|
|
|
/** Value must be greater than the minimum value */
|
|
export function greaterThan(min: number) {
|
|
return function (value: number) {
|
|
if (value <= min) {
|
|
throw new Error(`Value must be greater than ${min}`);
|
|
}
|
|
};
|
|
}
|
|
|
|
/** Value must be greater than 0 */
|
|
export const greaterThanZero = greaterThan(0);
|
|
|
|
/** Value must be greater than or equal to the minimum value */
|
|
export function greaterThanEqual(min: number) {
|
|
return function (value: number) {
|
|
if (value < min) {
|
|
throw new Error(`Value must be greater than ${min}`);
|
|
}
|
|
};
|
|
}
|
|
|
|
/** Value must be greater than or equal to 0 */
|
|
export const greaterThanEqualZero = greaterThanEqual(0);
|
|
|
|
/** Value must be an integer value */
|
|
export function integer(value: number) {
|
|
if (!Number.isInteger(value)) {
|
|
throw new Error("Value must be an integer");
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Value must be a valid file path, it does not need to exist
|
|
* On posix this will only error for non string values, which isn't very useful
|
|
* However, this could be expanded in the future to check system OS
|
|
*/
|
|
export function filePath(value: string) {
|
|
try {
|
|
path.resolve(value);
|
|
} catch (err: any) {
|
|
throw new Error(`Value must be a valid path: ${err.message}`);
|
|
}
|
|
}
|