"use strict"; const assureArray = require("assure-array"); const isPlainObj = require("is-plain-obj"); const defaultValue = require("default-value"); const flat = require("array.prototype.flat"); const matchSpecial = require("@validatem/match-special"); const isPlainObjectValidator = require("@validatem/is-plain-object"); const hasShape = require("@validatem/has-shape"); // FIXME: Write an example.js module.exports = function normalizeRules(rules, options) { let normalizeObjects = defaultValue(options.normalizeObjects, false); // TODO: Switch to `Array#flat` once it is available let flattened = flat(assureArray(rules)); let actualRules = flattened.filter((rule) => rule != null); if (normalizeObjects) { return actualRules.flatMap((rule) => { if (isPlainObj(rule) && !matchSpecial(rule)) { return [ isPlainObjectValidator, hasShape(rule) ]; } else { return rule; } }); } else { return actualRules; } };