Skip to content

Expose pipe rest parameter argument type #852

@ruiaraujo012

Description

@ruiaraujo012

Discussed in #851

Originally posted by ruiaraujo012 September 26, 2024
I have an array of password validations that came from the BE when the app starts, the array is something like this:

[
    {
        "id": 0,
        "mensagem": "Deve conter pelo menos 8 caracteres",
        "descricao": "8 caracteres",
        "valor": "/^.{8,}$/",
        "estado": {
            "id": 2,
            "codigo": null,
            "label": "Ativo"
        }
    },
    {
        "id": 1,
        "mensagem": "Deve conter pelo menos 1 letra minúscula",
        "descricao": "1 minúscula",
        "valor": "/(?=.*[a-z])/",
        "estado": {
            "id": 2,
            "codigo": null,
            "label": "Ativo"
        }
    },
    {
        "id": 2,
        "mensagem": "Deve conter pelo menos 1 letra maiúscula",
        "descricao": "1 maiúscula",
        "valor": "/(?=.*[A-Z])/",
        "estado": {
            "id": 2,
            "codigo": null,
            "label": "Ativo"
        }
    },
    {
        "id": 3,
        "mensagem": "Deve conter pelo menos 1 número",
        "descricao": "1 número",
        "valor": "/(?=.*\\d)/",
        "estado": {
            "id": 2,
            "codigo": null,
            "label": "Ativo"
        }
    },
    {
        "id": 4,
        "mensagem": "Deve conter pelo menos 1 caracter especial (@$!%*?&)",
        "descricao": "1 caracter especial",
        "valor": "/(?=.*[@$!%*?&])/",
        "estado": {
            "id": 2,
            "codigo": null,
            "label": "Ativo"
        }
    }
]

It would be nice if I could iterate over it and return one validation for each, like:

export const PasswordSchema = v.pipe(
  v.string('required.password'),
  v.nonEmpty('required.password'),
  ...usePasswordRulesStore
    .getState()
    .rules.filter((rule) => rule.valor)
    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
    .map((rule) => v.regex(new RegExp(rule.valor!.replaceAll('/', '')), rule.mensagem)),
);

is that possible?

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions