{"_id":"@abalmus/validator","_rev":"3-729000630e624a91317777ff7cbef311","name":"@abalmus/validator","dist-tags":{"latest":"1.4.0"},"versions":{"1.3.0":{"name":"@abalmus/validator","version":"1.3.0","description":"Core for Validator ","main":"lib/index.js","types":"lib/index.d.ts","scripts":{"prepublish":"npm run test && tsc","test":"NODE_ENV=development nyc ./node_modules/mocha/bin/mocha -r ts-node/register src/__tests__/**/*.test.ts"},"repository":{"type":"git","url":"git+https://github.com/abalmus/validator.git"},"keywords":["validator","async","validation","processor"],"author":{"name":"Andrei Balmus","email":"abalmush@gmail.com","url":"http://abalmus.com"},"license":"MIT","dependencies":{"lodash":"^4.17.4","typescript":"^2.6.2","whatwg-fetch":"^2.0.3","xregexp":"^3.2.0"},"devDependencies":{"@types/chai":"^4.0.10","@types/es6-promise":"0.0.33","@types/mocha":"^2.2.45","chai":"^4.1.2","isomorphic-fetch":"^2.2.1","mocha":"^4.1.0","nock":"^9.1.6","nyc":"^11.4.1","ts-node":"^4.1.0","typings":"^2.1.1"},"nyc":{"include":["src/**/*.ts"],"extension":[".ts",".tsx",".js"],"require":["ts-node/register"],"reporter":["text-summary","html"],"sourceMap":true,"instrument":true},"bugs":{"url":"https://github.com/abalmus/validator/issues"},"homepage":"https://github.com/abalmus/validator#readme","directories":{"lib":"lib"},"_id":"@abalmus/validator@1.3.0","_npmVersion":"5.6.0","_nodeVersion":"8.10.0","_npmUser":{"name":"abalmus","email":"abalmush@gmail.com"},"dist":{"integrity":"sha512-e4i10kWv0qCmFS6mhN5X8DU2ZdmdKQpA5lbp5lu2OCEFEcwJEVq3f21zu6bmKBZClN752EBAH96nHIcC9X5Cwg==","shasum":"af899411a27d4ae56ef9acc12ca9b67e9b3669b2","tarball":"https://registry.npmjs.org/@abalmus/validator/-/validator-1.3.0.tgz","fileCount":68,"unpackedSize":323881,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbFohQCRA9TVsSAnZWagAApLgP/jSkSsT/1BAxuYjAbPDi\nG+qfUyoR4TxCPnP4JF/LtAS3SKUpnzPyUjpvA3ACkDayHY8og5KtwFRg8Dlg\noEVvLC4mJ5YR5qnXUzG4kFGXYpn2Ygiz20QF6Rn28m4DHiNmtKn7AfO1Agms\nJXomrSWYD4xQNvZfx2swPMH+xR8SaUywADCoKCKU5NiizeicxvqyWw9mfwEh\n0l1QcTGLzEKrelX3zR8c83OBGU2LVhLwnRxHNjXxb6qRZGnKJ+/hTzDBSRhK\n7NFoYLYImkMDppfuoItV1iSViYreYtQsw7GJbRDtdrQjJB/jnU0QQmFXXqhj\nRSAO6ifvLEMuA/w0wWeWenDt5m4O5fa7V1JmUf8BmXb+AlsLU3eyI7yzZHZo\nTPelctlddDrpnejPogDeCRZ97Q2J4heYfozCtuAU0XVAhgWSYaXa32NGjSoM\ne2Xc8xb9ETLSqCkyFka/6gecoCfNJjFCz5gN9WdufLaD2Aq0prGD4eDFB7y2\nkQocc5BRU4lUv3AVDDX/l3VuGg9bk+oAu5c38Ks0yG6byA/wou2g/4ZwhZQo\nYGGIBcqc35FA78MV86uXia6UNA1EXNccUbZFkcihQ9zD4IDgu2B8mvmgNdQo\nQVjqb5H+QWkkp2H+igDU9vCr5FeLJHcz414EIy09mJK9KPVcEJrq0nRrlNpN\np1ED\r\n=dyC/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDimD4zlpuVrBYLH+P+xUalY5kPRvN+kDrVgtUXL7MDyAIhANL3vvMeQB7KDqNemdXJgyHuOUjuxWa8BrjmxONk+6lT"}]},"maintainers":[{"name":"abalmus","email":"abalmush@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/validator_1.3.0_1528203343749_0.8131487271410642"},"_hasShrinkwrap":false},"1.4.0":{"name":"@abalmus/validator","version":"1.4.0","description":"Core for Validator ","main":"lib/index.js","types":"lib/index.d.ts","scripts":{"prepublish":"npm run test && tsc","test":"NODE_ENV=development nyc ./node_modules/mocha/bin/mocha -r ts-node/register src/__tests__/**/*.test.ts"},"repository":{"type":"git","url":"git+https://github.com/abalmus/validator.git"},"keywords":["validator","async","validation","processor"],"author":{"name":"Andrei Balmus","email":"abalmush@gmail.com","url":"http://abalmus.com"},"license":"MIT","dependencies":{"lodash":"^4.17.4","typescript":"^2.6.2","whatwg-fetch":"^2.0.3","xregexp":"^3.2.0"},"devDependencies":{"@types/chai":"^4.0.10","@types/es6-promise":"0.0.33","@types/mocha":"^2.2.45","chai":"^4.1.2","isomorphic-fetch":"^2.2.1","mocha":"^4.1.0","nock":"^9.1.6","nyc":"^11.4.1","ts-node":"^4.1.0","typings":"^2.1.1"},"nyc":{"include":["src/**/*.ts"],"extension":[".ts",".tsx",".js"],"require":["ts-node/register"],"reporter":["text-summary","html"],"sourceMap":true,"instrument":true},"bugs":{"url":"https://github.com/abalmus/validator/issues"},"homepage":"https://github.com/abalmus/validator#readme","directories":{"lib":"lib"},"_id":"@abalmus/validator@1.4.0","_npmVersion":"5.6.0","_nodeVersion":"8.10.0","_npmUser":{"name":"abalmus","email":"abalmush@gmail.com"},"dist":{"integrity":"sha512-zKwqFUX11RIGh6qO0xcaIJDvtdNAASxMQ4BpI6zm3psq2ATrG9FvinPTQ/Lf3p3nSlYNj6ccekQKnK1V+eoz+Q==","shasum":"6d8ecd96faf115de3a639a48866a008a52700a13","tarball":"https://registry.npmjs.org/@abalmus/validator/-/validator-1.4.0.tgz","fileCount":68,"unpackedSize":323876,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbFotaCRA9TVsSAnZWagAAutQP/iRw9WtFT9F9ESU/oih0\nWuvYoysRVSiktId0uncKQLuhVCAYvBbv81hEQLGuLriXIXUHGGc8CYmwCBxm\npMqUObH7hfHclXSCU9gUZJjX4hljIzzxKU2QVnq0dQMAcAP44B1mfF+jGR1K\nvFBUuqgbjyhaZAj0KvXQvDC5F0QgKtIwM1k1vcu/2OJHYiW5g6faUNHVVhek\nZ+PcuNQkXCcaxHKG85G96l6JZC0zboVivYrpviAAd58bvz21nLbCBjkiJGC5\nA1RwYvURNerjzoLpGl6x0vI6wc+FifICjxU9dlUm+3fC/JZdEYyMz+qIp8cP\ne8BnvYfT/1SKfnPivJx8x+VDz6x5QzfibMZH9o4OwPEAJGwXFZp90Ac4aPpl\nacuKcgHjd2Eke+uvHMiZ826rcddWKk1jWmfFEbOFpzah4qhrQSgeE084Gj+W\nwwswoO5l+1VNXsHwi+1PQ8lPEf048MRKX5m3ZGXbcP2c0B986R+O5Ui7WHnR\nMi/jFjy48OI3idnHi98o8kDPTzFCGSiz4qGLO9SGozcmdsrIuw7dyTjtOzVj\nMcfrTr4FC/8Xz39dcI7lfcORW+BarLzFyJmaIZ9MHK4MD/upQy3rngU5wlo9\ndt9DcddR8vdgQamIyXelXohm4OpXS7I3tvQrYqE8UBz+bLsfDEKLt1Z7OVcs\nkOLi\r\n=K6Hj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHj21Y8PcA9Z+RdJtUPqYzxlbJc+LyNi9xdSZWxa7VhgAiEA98sr2JJYZV/UjpoJOlD8wi9Y+y/qnJFD4A7XEUDbtK0="}]},"maintainers":[{"name":"abalmus","email":"abalmush@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/validator_1.4.0_1528204121748_0.24245100762769356"},"_hasShrinkwrap":false}},"time":{"created":"2018-06-05T12:55:43.417Z","1.3.0":"2018-06-05T12:55:43.797Z","modified":"2022-04-04T10:56:49.399Z","1.4.0":"2018-06-05T13:08:41.975Z"},"maintainers":[{"email":"tk-npm@tacitknowledge.com","name":"tk-npm"},{"email":"abalmush@gmail.com","name":"abalmus"}],"description":"Core for Validator ","homepage":"https://github.com/abalmus/validator#readme","keywords":["validator","async","validation","processor"],"repository":{"type":"git","url":"git+https://github.com/abalmus/validator.git"},"author":{"name":"Andrei Balmus","email":"abalmush@gmail.com","url":"http://abalmus.com"},"bugs":{"url":"https://github.com/abalmus/validator/issues"},"license":"MIT","readme":"# Validation Processor\n\n## **Description**\n\n**ValidationProcessor** - low-level asynchronous validation engine. Designed for testing data, based on validation rules. Can be easily extended with custom validators. Compatible with any modern frameworks or VanillaJS.\n\n## Installation\n\n```javascript\n// NPM\nnpm install @abalmus/validator\n\n// YARN\nyarn add @abalmus/validator\n```\n\n# Usage\n\n### Validation processor initialization\n\n```javascript\nimport { ValidationProcessor } from '@abalmus/validator';\n\nconst constrains = {\n  rules: {\n    firstName: {\n      minlength: 10\n    }\n  },\n  messages: {\n    firstName: {\n      minlength: 'First name needs to be not less than 10 characters'\n    }\n  }\n};\n/*\n\t* ValidateProcessor constructor\n\t* params: ( constrains, [options] )\n\t* returns: instance of the validation processor\n\t*/\nconst validationProcessor = new ValidationProcessor(constrains);\n/*\n\t* validate\n\t* params: ( fieldName, value, [options] )\n\t* returns: undefined\n\t*/\nvalidationProcessor.validate('firstName', 'myname');\n```\n\n### Getting validation errors\nThe easiest way of getting errors from validation processor is using ErrorPopulator.\n\n```javascript\nimport { ErrorsPopulator } from '@abalmus/validator';\n/*\n\t* ErrorPopulator constructor\n\t* params: ( validationProcessorInstance, [options] )\n\t* returns: errors populator instance\n\t*/\nconst errors = new ErrorsPopulator(validationProcessor);\n\n/*\n\t* getByField emthod\n\t* params: ( fieldName, [options] )\n\t* returns: Promise\n\t*/\nerrors.getByField('firstName').then((errors) => console.log(errors));\n// [{minlength: \"First name needs to be not less than 10 characters\"}]\n```\n# Validators\n## Build in Validators\n\n```javascript\n    const constrains = {\n        rules: {\n            firstName: {\n                minLength: 4,\n                maxLength: 10,\n                required: true,\n                equal: 'John',\n                pattern: /^[a-zA-Z ]+$/\n            }\n        },\n        messages: {\n            firstName: {\n                minLength: 'Please insert minimum 4 characters',\n                maxLength: 'Please insert maximum 10 characters',\n                required: 'Please insert first name',\n                equal: 'Please insert correct name',\n                pattern: 'Only letters allowed'\n            }\n        }\n    }\n```\n### \"maxLength\" and \"minLength\"\n`minLength` and `maxLength` each of these validators convert any value to a string and checks length property.\n\n### \"equal\" validator\nSimple equality check, comparing value and type.\n\n### \"pattern\" validator\nJavaScript Regexp test method executes a search for a match between a regular expression provided in `pattern` property and a specified string.\n\n### \"async\" validator\nAsync validator created for server side validations. The example email address existence, when you make an ajax call to check if email exists or not.\n\n```javascript\n    const constrains = {\n        rules: {\n            email: {\n                async: {\n                    url: 'api/email/exist',\n                    // ...other fetch API options\n                }\n            }\n        },\n        messages: {\n            email: {\n                async: 'Email already exists.'\n            }\n        }\n    }\n```\n\nDefault server side response format:\n\n```javascript\n    {\n        status: 'ERROR', // ['SUCCESS', 'ERROR', 'INFO']\n        message: 'Server message goes here' // will be rendered below the field\n    }\n```\n\n## Custom Validators\nThe most important part of this library is a creation of custom validators. This is powerful mechanism of extending validation processor. To register validator lets call `validator.registerValidator` method.\n\n```javascript\n    import {\n        validator,\n        ValidationProcessor\n    } from '@abalmus/validator';\n\n    validator.registerValidator('moreOrEqual', (value, ruleValue) => {\n        return (Number(value) >= Number(ruleValue));\n    });\n```\n\nNow we can use `moreOrEqual` validator inside constrains.\n\n```javascript\n    const constrains = {\n        rules: {\n            age: {\n                moreOrEqual: 16\n            }\n        },\n        messages: {\n            age: {\n                moreOrEqual: 'You needs to be at least 16 years old'\n            }\n        }\n    }\n\n    const validationProcessor = new ValidationProcessor(constrains);\n\n    validationProcessor.validate('age', 18); // Valid!\n\n```\n\n## \"dependsOn\" rule wrapper\n\nOne more powerful and useful mechanism is `dependsOn` rules wrapper. This wrapper allows to apply validation rules depends on other values.\n\nThe example phone pattern for Germany is different than in the United States.\n\n```javascript\n    const constrains = {\n        rules: {\n            phoneNumber: {\n                dependsOn: {\n                    country: {\n                        US: {\n                            rules: {\n                                pattern: // US phone number regex\n                                minLength: 10\n                            }\n                        },\n                        DE: {\n                            rules: {\n                                pattern: // DE phone number regex\n                                minLength: 8\n                            }\n                        }\n                    }\n                }\n            }\n        }\n    };\n```\n\nAs you can see there are nested dependsOn wrapper and rules. The rules inside the country automatically applied based on country value.\n\n### How to use:\n\nOption 1: Passing `dependsOnValues` to ValidationProcessor config on initialization phase\n\n```javascript\n\nconst validationProcessor = new ValidationProcessor(constrains, {\n    dependsOnValues: {\n        country: 'US'\n    }\n});\n\nvalidationProcessor.validate('phoneNumber', '123456787') // not valid\n\n```\n\nOption 2: Passing `dependsOnValues` as a third parameter of the `validate` method\n\n```javascript\n\nconst validationProcessor = new ValidationProcessor(constrains);\n\nvalidationProcessor.validate('phoneNumber', '123456787', { country: 'US' }) // not valid\n\n```","readmeFilename":"README.md"}