Double Agent Validator Angular 2 Library
Homepage Repository npm Download
npm install double-agent-validator@1.0.70
Este projeto tem por objetivo permitir a execução de validações de forma isomórfica, ou seja: o mesmo código utilizado para validar os dados no servidor é utilizado para validar os dados no frontend.
Para tanto levou-se ### em conta a capacidade de executar javascript no servidor Java utilizando o Nashorn (uma script engine Javascript) disponível no Java 8, que tem uma vantagem considerável em relação à script engine anterior (Rhino) que lenta.
Adicione o jitpack como repositório maven, no seu arquivo pom.xml:
<repositories>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
...
Adicione a dependência double-agent-validator no pom.xml, como a seguir:
<dependency>
<groupId>com.gitlab.serpro</groupId>
<artifactId>double-agent-validator</artifactId>
<version>0.0.11</version>
</dependency>
mvn install
./start-vertx-server.sh
./start-angular2.sh
Dado o seguinte arquivo presente na pasta src/main/resources
var DoubleAgent;
(function (DoubleAgent) {
var JsonSchemaValidator;
(function (JsonSchemaValidator) {
JsonSchemaValidator.schemas = [
{
id: 'pessoa-v1',
type: 'object',
required: ['name', 'age'],
properties:
{
name: {
type: "string"
},
age: {
type: "number"
}
}
}
];
})(JsonSchemaValidator = DoubleAgent.JsonSchemaValidator || (DoubleAgent.JsonSchemaValidator = {}));
})(DoubleAgent || (DoubleAgent = {}));
//# sourceMappingURL=validators.js.map
Podemos utilizar a classe JsonSchemaValidator da seguinte forma:
JsonSchemaValidator jsonSchemaValidator = new JsonSchemaValidator();
InputStreamReader is = new InputStreamReader(this.getClass().getResourceAsStream("js/pessoa.js"));
jsonSchemaValidator.loadSchemaData(is, "DoubleAgent.JsonSchemaValidator");
ValidationResult result = jsonSchemaValidator.validate("pessoa-v1", "{name: 'John', age: 1}");
No exemplo Vertx é possivel obter o script para uso no frontend através da requisição ao endereço: http://localhost:8080/json-schema-validation
Esse script retornado necessita que tanto o ajv como o lodash ja tenham sido incluidos em sua pagina.
Para utiliza o DoubleAgentValidator em sua pagina e possivel atraves dos seguinte objeto:
var result = DoubleAgent.JsonSchemaValidator.validate('pessoa-v1', {});
/*
// result terá o seguinte valor
result = [
{
"keyword": "required",
"dataPath": "",
"schemaPath": "pessoa-v1/required",
"params": {
"missingProperty": "name"
},
"message": "should have required property 'name'"
},
{
"keyword": "required",
"dataPath": "",
"schemaPath": "pessoa-v1/required",
"params": {
"missingProperty": "age"
},
"message": "should have required property 'age'"
}
];
*/
Opcionamente, você pode servir junto com o script de validação dos seus json schemas as dependências ajv
e lodash
.
A classe JsonSchemaValidator
fornece o método getScriptFileWithDependencies()
que possibilita retornar a String com os códigos javascript das bibliotecas lodash (4.16.4)
e ajv (4.8.2)
.
Sendo assim, opcionalmente você pode servir seu script de validação dos seus schemas JSON juntamente com os scripts dessas duas dependências.
A aplicação de exemplo em vertx disponibiliza a chamada ao endpoint REST com um parâmetro ?with-dependencies=true
que demonstra justamente esta possibilidade.
Dessa forma, podemos adicionar em uma página html uma tag script apontando para http://localhost:8080/json-schema-validation?with-dependencies=true
e dessa forma, após a carga (load
) da página o objeto DoubleAgent.JsonSchemaValidator com o método validate
estará disponível permitindo a execução das validações, como no exemplo acima;
Existe um pacote npm chamado double-agent-validator
que permite a integração com uma aplicação Angular 2.
Para mais instruções acesse o README.md do projeto npm ou veja um exemplo de uso.