validlyjs
Version:
ValidlyJS is a lightweight, type-safe validation library inspired by Laravel's validation syntax
58 lines • 1.98 kB
JavaScript
import { parseStringRules } from "./StringParser.js";
import { parseFluentRules } from "./FluentParser.js";
export function parseArrayRules(ruleDefinitions) {
const rules = [];
for (const definition of ruleDefinitions) {
if (typeof definition === "string") {
const [ruleName, ...params] = definition.split(":");
rules.push({
name: ruleName,
params: params,
custom: ruleName === "custom",
});
}
else if (Array.isArray(definition)) {
if (definition.length === 0)
continue;
const [name, ...params] = definition;
rules.push({
name: name.toString(),
params: params.map((p) => p.toString()),
});
}
else if (typeof definition === "object" && "build" in definition) {
rules.push(...parseFluentRules(definition));
}
else if (isRule(definition)) {
rules.push(definition);
}
else {
throw new Error(`Invalid rule definition: ${JSON.stringify(definition)}`);
}
}
return rules;
}
export function parseNestedArrayRules(ruleDefinitions) {
if (typeof ruleDefinitions === "string") {
return parseStringRules(ruleDefinitions);
}
if (Array.isArray(ruleDefinitions)) {
return parseArrayRules(ruleDefinitions);
}
if (typeof ruleDefinitions === "object" && "build" in ruleDefinitions) {
return parseFluentRules(ruleDefinitions);
}
if (isRule(ruleDefinitions)) {
return [ruleDefinitions];
}
throw new Error(`Invalid rule definition format: ${typeof ruleDefinitions}`);
}
function isRule(obj) {
return (typeof obj === "object" &&
obj !== null &&
"name" in obj &&
"params" in obj &&
typeof obj.name === "string" &&
Array.isArray(obj.params));
}
//# sourceMappingURL=ArrayParser.js.map