{"id":15013064,"url":"https://github.com/daiangm/joker-validator","last_synced_at":"2025-07-04T04:38:09.436Z","repository":{"id":47225174,"uuid":"395758948","full_name":"daiangm/Joker-Validator","owner":"daiangm","description":"Validador de dados JSON para NodeJS","archived":false,"fork":false,"pushed_at":"2022-04-11T22:44:13.000Z","size":157,"stargazers_count":3,"open_issues_count":0,"forks_count":2,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-21T19:02:10.633Z","etag":null,"topics":["customized","data","data-validation","javascript","json","json-schema","nodejs","schema","validador","validation","validator"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/daiangm.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-08-13T18:43:22.000Z","updated_at":"2022-10-16T20:44:11.000Z","dependencies_parsed_at":"2022-08-29T21:52:22.347Z","dependency_job_id":null,"html_url":"https://github.com/daiangm/Joker-Validator","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/daiangm%2FJoker-Validator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/daiangm%2FJoker-Validator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/daiangm%2FJoker-Validator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/daiangm%2FJoker-Validator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/daiangm","download_url":"https://codeload.github.com/daiangm/Joker-Validator/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248514411,"owners_count":21116961,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["customized","data","data-validation","javascript","json","json-schema","nodejs","schema","validador","validation","validator"],"created_at":"2024-09-24T19:43:41.184Z","updated_at":"2025-04-12T04:21:10.813Z","avatar_url":"https://github.com/daiangm.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ca href=\"#\"\u003e\u003cimg src=\"https://i.imgur.com/CvV9wA4.jpeg\" style=\"width: 100%; height: auto\" title=\"JSON Validator\" alt=\"Logo de Joker Validator\"/\u003e\u003c/a\u003e\n\n## Validador de dados JSON para Node.js\n\n### O \u003cb\u003ejoker-validator\u003c/b\u003e analisa os dados JSON enviados conforme regras personalizadas indicadas como parâmetros na função, retorna o resultado da validação e, caso os dados estejam inválidos, retorna também uma mensagem de erro padrão ou personalizada.\n\n## Instalação\n\n```sh\nnpm install joker-validator\n```\n\n## Parâmetros da Função:\n\nEste método funciona através de 3 argumentos: ***data***, ***rules*** e ***allowedFields***.\n\n### Índice:\n\u003c!--ts--\u003e\n   1. [data](#data)\n   2. [rules](#rules)\n      * [dataType](#dataType)\n      * [len](#length)\n      * [range](#range)\n      * [list](#list)\n      * [equals](#equals)\n      * [required](#required)\n      * [regex](#regex)\n      * [custom](#custom)\n      * [message](#message)\n   3. [allowedFields](#allowedFields)\n\u003c!--te--\u003e\n\n[Exemplo](#exemplo)\n\n### data \n\u003ca href=\"#data\"\u003e\u003cimg id=\"data\" src=\"https://img.shields.io/static/v1?label=Object\u0026message=Obrigat%C3%B3rio\u0026color=darkred\u0026style=flat\u0026labelColor=6513BF\" /\u003e\u003c/a\u003e \u003c/br\u003e\nJSON baseado em chaves e valores como ``` { \"library\": \"json-validator\" } ```. \u003c/br\u003e\nEste pode ser os dados enviados através de uma requisição HTTP (REST). \u003c/br\u003e\nVerificar \u003ca href=\"#exemplo\"\u003e\u003ci\u003econst dataExample\u003c/i\u003e\u003c/a\u003e no exemplo abaixo.\n\n### rules\n\u003ca href=\"#rules\"\u003e\u003cimg id=\"rules\" src=\"https://img.shields.io/static/v1?label=Object\u0026message=Obrigat%C3%B3rio\u0026color=darkred\u0026style=flat\u0026labelColor=6513BF\" /\u003e\u003c/a\u003e \u003c/br\u003e\nObjeto Javascript que contêm as regras para validação dos valores enviados em \u003ci\u003edata\u003c/i\u003e. \u003c/br\u003e\n\n**Propriedades aceitáveis**:\n\n\u003ca href=\"#dataType\"\u003e\u003cimg id=\"dataType\" src=\"https://img.shields.io/static/v1?label=dataType\u0026message=String\u0026color=9cf\u0026style=social\" /\u003e\u003c/a\u003e \u003c/br\u003e\nEsta propriedade serve para comparar se o tipo de dado enviado em \u003ci\u003e\u003cb\u003edata\u003c/b\u003e\u003c/i\u003e (conforme a chave indicada) corresponde ao valor setado aqui. \u003c/br\u003e\nValores aceitáveis: \u003ci\u003estring\u003c/i\u003e, \u003ci\u003enumber\u003c/i\u003e, \u003ci\u003eboolean\u003c/i\u003e, \u003ci\u003edate\u003c/i\u003e (UTC), \u003ci\u003eobject\u003c/i\u003e e \u003ci\u003earray\u003c/i\u003e \u003c/br\u003e\nEx: ```library: {dataType: \"string\"}``` \u003c/br\u003e\n\u003c/br\u003e\n\n\u003ca href=\"#length\"\u003e\u003cimg id=\"length\" src=\"https://img.shields.io/static/v1?label=len\u0026message=Object\u0026color=9cf\u0026style=social\" /\u003e\u003c/a\u003e \u003c/br\u003e\nDefine a quantidade mínima e máxima de caracteres de uma \u003ci\u003eString\u003c/i\u003e ou itens de um \u003ci\u003eArray\u003c/i\u003e. Você deve utilizar as propriedades \u003ci\u003e\u003cb\u003emin\u003c/b\u003e\u003c/i\u003e e/ou \u003ci\u003e\u003cb\u003emax\u003c/b\u003e\u003c/i\u003e. \u003c/br\u003e\nEx: ``library: {len: { min: 4, max: 14 }}`` \u003c/br\u003e\n\u003c/br\u003e\n\n\u003ca href=\"#range\"\u003e\u003cimg id=\"range\" src=\"https://img.shields.io/static/v1?label=range\u0026message=Object\u0026color=9cf\u0026style=social\" /\u003e\u003c/a\u003e \u003c/br\u003e\nDefine um intervalo númerico ou de data (_date_) aceitável para o valor enviado em \u003ci\u003e\u003cb\u003edata\u003c/b\u003e\u003c/i\u003e na chave indicada. Você deve utilizar as propriedades \u003ci\u003e\u003cb\u003emin\u003c/b\u003e\u003c/i\u003e e/ou \u003ci\u003e\u003cb\u003emax\u003c/b\u003e\u003c/i\u003e. \u003c/br\u003e\nEx: ``date: {range: { min: \"1921-01-01\", max: \"1999-01-01\"}}``\u003c/br\u003e\n###### --\u003e Neste exemplo, queremos determinar que o valor de \u003ci\u003edate\u003c/i\u003e em ***data*** só é aceitável em um intervalo entre 18 e 100 anos em relação à 01/01/2021\n\n\u003ca href=\"#list\"\u003e\u003cimg id=\"list\" src=\"https://img.shields.io/static/v1?label=list\u0026message=Array\u0026color=9cf\u0026style=social\" /\u003e\u003c/a\u003e \u003c/br\u003e\nArray de _Strings_ e/ou Números aceitáveis para o valor de uma determinada chave em \u003ci\u003e\u003cb\u003edata\u003c/b\u003e\u003c/i\u003e. \u003c/br\u003e\nEx: ``uf: {list: [\"AC\", \"AL\", \"AM\", \"AP\", \"BA\", \"CE\", \"DF\", \"ES\", \"GO\", \"MA\", \"MT\", \"MS\", \"MG\", \"PA\", \"PB\", \"PR\", \"PE\", \"PI\", \"RJ\", \"RN\", \"RO\", \"RS\", \"RR\", \"SC\", \"SE\", \"SP\", \"TO\"]}``\u003c/br\u003e\n\u003c/br\u003e\n\n\u003ca href=\"#equals\"\u003e\u003cimg id=\"equals\" src=\"https://img.shields.io/static/v1?label=equals\u0026message=String\u0026color=9cf\u0026style=social\" /\u003e\u003c/a\u003e \u003c/br\u003e\nExige que o valor de um determinado campo em ***data*** seja igual à outro campo também enviado em ***data***. Normalmente utilizado para confirmar um campo de senha ou e-mail.\u003c/br\u003e\nEx: ``check_pass: {equals: \"password\"}``\u003c/br\u003e\n\u003c/br\u003e\n\n\u003ca href=\"#required\"\u003e\u003cimg id=\"required\" src=\"https://img.shields.io/static/v1?label=required\u0026message=Boolean\u0026color=9cf\u0026style=social\" /\u003e\u003c/a\u003e \u003c/br\u003e\nDetermina se o valor do campo em ***data*** é de preenchimento obrigatório.\u003c/br\u003e\nEx: ``library: {required: true}``\u003c/br\u003e\n\u003c/br\u003e\n\n\u003ca href=\"#regex\"\u003e\u003cimg id=\"regex\" src=\"https://img.shields.io/static/v1?label=regex\u0026message=RegExp\u0026color=9cf\u0026style=social\" /\u003e\u003c/a\u003e \u003c/br\u003e\nCompara se o valor do campo em ***data*** se enquadra na \u003ca href=\"https://regexr.com/\" target=\"_blank\"\u003eExpressão Regular em Javascript\u003c/a\u003e. definida na propriedade.\u003c/br\u003e\nEx: ``cep: {regex: /^[0-9]{8}|([0-9]{5}|[0-9]{2}.[0-9]{3})-[0-9]{3}$/i}``\u003c/br\u003e\n\u003c/br\u003e\n\n\u003ca href=\"#custom\"\u003e\u003cimg id=\"custom\" src=\"https://img.shields.io/static/v1?label=custom\u0026message=String\u0026color=9cf\u0026style=social\" /\u003e\u003c/a\u003e \u003c/br\u003e\nCompara o valor do campo em ***data*** conforme configuração de validação no Objeto ***customValidation*** em \u003ca href=\"https://github.com/daiangm/json-validator-BR/blob/main/custom.validation.js\" target=\"_blank\"\u003e\u003ci\u003ecustom.validation.js\u003c/i\u003e\u003c/a\u003e. \u003c/br\u003e\nEx: ``email: {custom: \"email\"}``\u003c/br\u003e\n##### Em ***customValidation***, você pode adicionar um conjunto de regras de validação e atribuir o nome que desejar.\n##### Por padrão, ***customValidation*** possui validação de número de celular (formato brasileiro), e-mail, CEP, URL e formato de senha.\n\u003c/br\u003e\n\n\u003ca href=\"#message\"\u003e\u003cimg id=\"message\" src=\"https://img.shields.io/static/v1?label=message\u0026message=Object\u0026color=9cf\u0026style=social\" /\u003e\u003c/a\u003e \u003c/br\u003e\nPersonaliza a mensagem de erro no retorno da função conforme a regra definida. \u003c/br\u003e\nNa _String_ da mensagem, utilize {value} para imprimir o valor do campo em ***data***, {field} para o nome do campo/chave em ***data*** e {\u003ci\u003eNomeDaRegra\u003c/i\u003e} para o valor da regra (Ex: {list}) \u003c/br\u003e\nPara valores das regras utilize: {dataType}, {minLength}, {maxLength}, {minRange}, {maxRange}, {list}, {required}, {regex} e {custom}. \u003c/br\u003e\nEx: ``library: {dataType: \"number\", message: {dataType: \"'{value}' do campo '{field}' não corresponde ao tipo de dado '{dataType}'\"} }``\u003c/br\u003e\nRetorno do exemplo acima: \u003c/br\u003e\n``{validate: false, message: \"'json-validator' do campo 'library' não corresponde ao tipo de dado 'number'\"}``\n\u003c/br\u003e\n\nVerificar \u003ca href=\"#exemplo\"\u003e\u003ci\u003econst rules\u003c/i\u003e\u003c/a\u003e no exemplo abaixo.\n\n### allowedFields\n\u003ca href=\"#allowedFields\"\u003e\u003cimg id=\"allowedFields\" src=\"https://img.shields.io/static/v1?label=Array\u0026message=Opcional\u0026color=424242\u0026style=flat\u0026labelColor=6513BF\" /\u003e\u003c/a\u003e \u003c/br\u003e\nArray que contêm os nomes dos campos aceitáveis em ***data***. Este parâmetro serve para limitar quais campos serão aceitos e não permite que tenha outros campos em ***data***, ou seja, caso tenha algum campo com nome diferente dos que estão listados em \u003ci\u003eallowedFields\u003c/i\u003e, a função retornará ``{validate: false}``\u003c/br\u003e\nVerificar \u003ca href=\"#exemplo\"\u003e\u003ci\u003econst allowedFields\u003c/i\u003e\u003c/a\u003e no exemplo abaixo.\n\n## Exemplo\n\n```javascript\nconst validate = require('joker-validator');\n\nconst dataExample = {\n    \"username\": \"daiangm\",\n    \"email\": \"daiangm@github.com\",\n    \"password\": \"Pa$$w0rd\",\n    \"check_pass\": \"Pa$$w0rd\",\n    \"phone\": \"(62)99999-9999\",\n    \"cpf\": \"000.000.000-00\",\n    \"birthdate\": \"12/12/1990\",\n    \"uf\": \"GO\",\n}\n\nconst rules = {\n    username: {\n        dataType: \"string\",\n        len: { min: 3, max: 16 },\n        required: true,\n        message: {len: \"O valor de {field} deve ter entre {len[min]} e {len[max]} caracteres\"}\n    },\n    email: {\n        custom: \"email\",\n        required: true,\n        message: { custom: \"'{value}' não é um endereço de {field} válido\" }\n    },\n    password: {\n        dataType: \"string\",\n        custom: \"Pa$$w0rd\",\n        len: { min: 8, max: 16 },\n        required: true,\n        message: {required: \"É obrigatório o preenchimento do campo '{field}'\"}\n    },\n    check_pass:{\n        equals: \"password\",\n        required: true\n    },\n    phone: {\n        custom: \"phone\",\n        required: true\n    },\n    cpf: {\n        regex: /^[0-9]{3}.[0-9]{3}.[0-9]{3}-[0-9]{2}$/i\n    },\n    birthdate: {\n        dataType: \"date\",\n        range: { min: \"1900-01-01\", max: \"2003-01-01\"}\n    },\n    uf: {\n        list: [\"GO\", \"MT\", \"MS\"],\n        message: { list: \"O valor do campo '{field}' precisa ser preenchido com um dos valores da lista: {list}\" }\n    }\n}\n\nconst allowedFields = [\"username\", \"email\", \"password\", \"check_pass\", \"phone\", \"cpf\", \"birthdate\", \"uf\"]\n\nconst result = validate(dataExample, rules, allowedFields);\n\nconsole.log(result);\n\nif(!result.validate){\n    return false;\n}\n\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdaiangm%2Fjoker-validator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdaiangm%2Fjoker-validator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdaiangm%2Fjoker-validator/lists"}