{"id":13431875,"url":"https://github.com/imbrn/v8n","last_synced_at":"2026-10-19T00:48:36.880Z","repository":{"id":37768518,"uuid":"138644245","full_name":"imbrn/v8n","owner":"imbrn","description":"☑️ JavaScript fluent validation library","archived":false,"fork":false,"pushed_at":"2025-01-01T14:55:40.000Z","size":1285,"stargazers_count":4142,"open_issues_count":0,"forks_count":104,"subscribers_count":49,"default_branch":"master","last_synced_at":"2026-10-17T13:45:33.594Z","etag":null,"topics":["javascript","library","validation"],"latest_commit_sha":null,"homepage":"https://imbrn.github.io/v8n","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/imbrn.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":".github/CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":null,"patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":"https://www.buymeacoffee.com/imbrn"}},"created_at":"2018-06-25T20:06:33.000Z","updated_at":"2026-10-15T17:59:53.000Z","dependencies_parsed_at":"2025-03-19T01:30:49.979Z","dependency_job_id":null,"html_url":"https://github.com/imbrn/v8n","commit_stats":{"total_commits":262,"total_committers":14,"mean_commits":"18.714285714285715","dds":"0.23282442748091603","last_synced_commit":"1ac471790accaabfbea7c289d7f0d2abe8214fe1"},"previous_names":[],"tags_count":19,"template":false,"template_full_name":null,"purl":"pkg:github/imbrn/v8n","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imbrn%2Fv8n","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imbrn%2Fv8n/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imbrn%2Fv8n/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imbrn%2Fv8n/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/imbrn","download_url":"https://codeload.github.com/imbrn/v8n/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imbrn%2Fv8n/sbom","scorecard":{"id":485139,"data":{"date":"2025-08-11","repo":{"name":"github.com/imbrn/v8n","commit":"701ebbe7ec75e426ad94fbc3574144ab159bf06d"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.7,"checks":[{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Security-Policy","score":10,"reason":"security policy file detected","details":["Info: security policy file detected: SECURITY.md:1","Info: Found linked content: SECURITY.md:1","Info: Found disclosure, vulnerability, and/or timelines in security policy: SECURITY.md:1","Info: Found text in security policy: SECURITY.md:1"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Code-Review","score":6,"reason":"Found 12/20 approved changesets -- score normalized to 6","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/npm-publish.yml:1","Warn: no topLevel permission defined: .github/workflows/push.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/npm-publish.yml:13: update your workflow using https://app.stepsecurity.io/secureworkflow/imbrn/v8n/npm-publish.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/npm-publish.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/imbrn/v8n/npm-publish.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/npm-publish.yml:26: update your workflow using https://app.stepsecurity.io/secureworkflow/imbrn/v8n/npm-publish.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/npm-publish.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/imbrn/v8n/npm-publish.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/npm-publish.yml:41: update your workflow using https://app.stepsecurity.io/secureworkflow/imbrn/v8n/npm-publish.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/npm-publish.yml:50: update your workflow using https://app.stepsecurity.io/secureworkflow/imbrn/v8n/npm-publish.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/npm-publish.yml:54: update your workflow using https://app.stepsecurity.io/secureworkflow/imbrn/v8n/npm-publish.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/push.yml:22: update your workflow using https://app.stepsecurity.io/secureworkflow/imbrn/v8n/push.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/push.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/imbrn/v8n/push.yml/master?enable=pin","Info:   0 out of   7 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   2 third-party GitHubAction dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact v1.5.1 not signed: https://api.github.com/repos/imbrn/v8n/releases/71034094","Warn: release artifact v1.5.0 not signed: https://api.github.com/repos/imbrn/v8n/releases/70736543","Warn: release artifact v1.5.1 does not have provenance: https://api.github.com/repos/imbrn/v8n/releases/71034094","Warn: release artifact v1.5.0 does not have provenance: https://api.github.com/repos/imbrn/v8n/releases/70736543"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 25 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":0,"reason":"111 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-968p-4wvh-cqc8","Warn: Project is vulnerable to: GHSA-67hx-6x53-jw92","Warn: Project is vulnerable to: GHSA-6chw-6frg-f759","Warn: Project is vulnerable to: GHSA-whgm-jr23-g3j9","Warn: Project is vulnerable to: GHSA-93q8-gq69-wqmw","Warn: Project is vulnerable to: GHSA-fwr7-v2mv-hh25","Warn: Project is vulnerable to: GHSA-qwcr-r2fm-qrc7","Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw","Warn: Project is vulnerable to: GHSA-grv7-fg5c-xmjg","Warn: Project is vulnerable to: GHSA-x9w5-v3q2-3rhw","Warn: Project is vulnerable to: GHSA-w8qv-6jwh-64r5","Warn: Project is vulnerable to: GHSA-257v-vj4p-3w2h","Warn: Project is vulnerable to: GHSA-pxg6-pf52-xh8x","Warn: Project is vulnerable to: GHSA-3xgq-45jj-v275","Warn: Project is vulnerable to: GHSA-p28h-cc7q-c4fg","Warn: Project is vulnerable to: GHSA-gxpj-cx7g-858c","Warn: Project is vulnerable to: GHSA-w573-4hg7-7wgq","Warn: Project is vulnerable to: GHSA-3wcq-x3mq-6r9p","Warn: Project is vulnerable to: GHSA-vh7m-p724-62c2","Warn: Project is vulnerable to: GHSA-r9p9-mrjm-926w","Warn: Project is vulnerable to: GHSA-434g-2637-qmqr","Warn: Project is vulnerable to: GHSA-49q7-c7j4-3p7m","Warn: Project is vulnerable to: GHSA-977x-g7h5-7qgw","Warn: Project is vulnerable to: GHSA-f7q4-pwc6-w24p","Warn: Project is vulnerable to: GHSA-fc9h-whq2-v747","Warn: Project is vulnerable to: GHSA-vjh7-7g9h-fjfh","Warn: Project is vulnerable to: GHSA-6h5x-7c5m-7cr7","Warn: Project is vulnerable to: GHSA-rv95-896h-c2vc","Warn: Project is vulnerable to: GHSA-qw6h-vgh9-j6wx","Warn: Project is vulnerable to: GHSA-74fj-2j2h-c42q","Warn: Project is vulnerable to: GHSA-pw2r-vq6v-hr8c","Warn: Project is vulnerable to: GHSA-jchw-25xp-jwwc","Warn: Project is vulnerable to: GHSA-cxjh-pqwp-8mfp","Warn: Project is vulnerable to: GHSA-fjxv-7rqg-78g4","Warn: Project is vulnerable to: GHSA-ww39-953v-wcq6","Warn: Project is vulnerable to: GHSA-pfrx-2q88-qq97","Warn: Project is vulnerable to: GHSA-43f8-2h32-f4cj","Warn: Project is vulnerable to: GHSA-pfq8-rq6v-vf5m","Warn: Project is vulnerable to: GHSA-rc47-6667-2j5j","Warn: Project is vulnerable to: GHSA-c7qv-q95q-8v27","Warn: Project is vulnerable to: GHSA-qqgx-2p2h-9c37","Warn: Project is vulnerable to: GHSA-78xj-cgh5-2h22","Warn: Project is vulnerable to: GHSA-2p57-rm9w-gvfp","Warn: Project is vulnerable to: GHSA-7r28-3m3f-r2pr","Warn: Project is vulnerable to: GHSA-r8j5-h5cx-65gg","Warn: Project is vulnerable to: GHSA-896r-f27r-55mw","Warn: Project is vulnerable to: GHSA-9c47-m6qq-7p4h","Warn: Project is vulnerable to: GHSA-6c8f-qphg-qjgp","Warn: Project is vulnerable to: GHSA-76p3-8jx3-jpfq","Warn: Project is vulnerable to: GHSA-3rfm-jhwj-7488","Warn: Project is vulnerable to: GHSA-hhq3-ff78-jv3g","Warn: Project is vulnerable to: GHSA-29mw-wpgm-hmr9","Warn: Project is vulnerable to: GHSA-35jh-r3h4-6jhm","Warn: Project is vulnerable to: GHSA-6vfc-qv3f-vr6c","Warn: Project is vulnerable to: GHSA-952p-6rrq-rcjv","Warn: Project is vulnerable to: GHSA-f8q6-p94x-37v3","Warn: Project is vulnerable to: GHSA-vh95-rmgr-6w4m","Warn: Project is vulnerable to: GHSA-xvch-5gv4-984h","Warn: Project is vulnerable to: GHSA-5rrq-pxf6-6jx5","Warn: Project is vulnerable to: GHSA-8fr3-hfg3-gpgp","Warn: Project is vulnerable to: GHSA-gf8q-jrpm-jvxq","Warn: Project is vulnerable to: GHSA-2r2c-g63r-vccr","Warn: Project is vulnerable to: GHSA-cfm4-qjh2-4765","Warn: Project is vulnerable to: GHSA-x4jg-mjrx-434g","Warn: Project is vulnerable to: GHSA-px4h-xg32-q955","Warn: Project is vulnerable to: GHSA-rp65-9cf3-cjxr","Warn: Project is vulnerable to: GHSA-76c9-3jph-rj3q","Warn: Project is vulnerable to: GHSA-hj48-42vr-x3v9","Warn: Project is vulnerable to: GHSA-9wv6-86v2-598j","Warn: Project is vulnerable to: GHSA-rhx6-c78j-4q9w","Warn: Project is vulnerable to: GHSA-h7cp-r72f-jxh6","Warn: Project is vulnerable to: GHSA-v62p-rq8g-8h59","Warn: Project is vulnerable to: GHSA-566m-qj78-rww5","Warn: Project is vulnerable to: GHSA-hwj9-h5mp-3pm3","Warn: Project is vulnerable to: GHSA-7fh5-64p2-3v2j","Warn: Project is vulnerable to: GHSA-wvhm-4hhf-97x9","Warn: Project is vulnerable to: GHSA-h4hr-7fg3-h35w","Warn: Project is vulnerable to: GHSA-gj77-59wh-66hg","Warn: Project is vulnerable to: GHSA-hqhp-5p83-hx96","Warn: Project is vulnerable to: GHSA-3949-f494-cm99","Warn: Project is vulnerable to: GHSA-x7hr-w5r2-h6wg","Warn: Project is vulnerable to: GHSA-hrpp-h998-j3pp","Warn: Project is vulnerable to: GHSA-p8p7-x288-28g6","Warn: Project is vulnerable to: GHSA-gcx4-mw62-g8wm","Warn: Project is vulnerable to: GHSA-c2qf-rxjj-qqgw","Warn: Project is vulnerable to: GHSA-44c6-4v22-4mhx","Warn: Project is vulnerable to: GHSA-4x5v-gmq8-25ch","Warn: Project is vulnerable to: GHSA-m6fv-jmcg-4jfg","Warn: Project is vulnerable to: GHSA-h9rv-jmmf-4pgx","Warn: Project is vulnerable to: GHSA-hxcc-f52p-wc94","Warn: Project is vulnerable to: GHSA-cm22-4g7w-348p","Warn: Project is vulnerable to: GHSA-4g88-fppr-53pp","Warn: Project is vulnerable to: GHSA-4jqc-8m5r-9rpr","Warn: Project is vulnerable to: GHSA-vx3p-948g-6vhq","Warn: Project is vulnerable to: GHSA-4wf5-vphf-c2xc","Warn: Project is vulnerable to: GHSA-jgrx-mgxx-jf9v","Warn: Project is vulnerable to: GHSA-72xf-g2v4-qvf3","Warn: Project is vulnerable to: GHSA-hh27-ffr2-f2jc","Warn: Project is vulnerable to: GHSA-rqff-837h-mm52","Warn: Project is vulnerable to: GHSA-8v38-pw62-9cw2","Warn: Project is vulnerable to: GHSA-hgjh-723h-mx2j","Warn: Project is vulnerable to: GHSA-jf5r-8hm2-f872","Warn: Project is vulnerable to: GHSA-5j4c-8p2g-v4jx","Warn: Project is vulnerable to: GHSA-g3ch-rx76-35fx","Warn: Project is vulnerable to: GHSA-wr3j-pwj9-hqq6","Warn: Project is vulnerable to: GHSA-4v9v-hfq4-rm2v","Warn: Project is vulnerable to: GHSA-9jgg-88mc-972h","Warn: Project is vulnerable to: GHSA-j8xg-fqg3-53r7","Warn: Project is vulnerable to: GHSA-6fc8-4gx4-v693","Warn: Project is vulnerable to: GHSA-3h5v-q93c-6h6q","Warn: Project is vulnerable to: GHSA-c4w7-xm78-47vh"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-19T17:34:30.048Z","repository_id":37768518,"created_at":"2025-08-19T17:34:30.049Z","updated_at":"2025-08-19T17:34:30.049Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":344872684,"owners_count":38334793,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-10-03T21:59:58.778Z","status":"online","status_checked_at":"2026-10-17T02:00:06.547Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["javascript","library","validation"],"created_at":"2024-07-31T02:01:06.670Z","updated_at":"2026-10-19T00:48:36.588Z","avatar_url":"https://github.com/imbrn.png","language":"JavaScript","funding_links":["https://www.buymeacoffee.com/imbrn"],"categories":["JavaScript","Repository","Validation","Helper Components","UI Components","📦 Legacy \u0026 Inactive Projects","Utilities"],"sub_categories":["Data Validation","Web DB","Form Validation","General Purpose Libraries","Reactive Programming"],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"./docs/assets/logo.png\" alt=\"v8n\" /\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\nThe ultimate JavaScript validation library you've ever needed.\u003cbr/\u003e\nDead simple fluent API. Customizable. Reusable.\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/imbrn/v8n/actions/workflows/push.yml\"\u003e\n    \u003cimg src=\"https://github.com/imbrn/v8n/actions/workflows/push.yml/badge.svg\" alt=\"Build\" /\u003e\n  \u003c/a\u003e\n  \u003cimg src=\"https://img.shields.io/npm/v/v8n.svg\" alt=\"npm version\" /\u003e\n  \u003cimg src=\"https://img.shields.io/bundlephobia/minzip/v8n.svg\" alt=\"npm bundle size (minified + gzip)\" /\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n\u003ca href=\"https://imbrn.github.io/v8n/Installation.html\"\u003eInstallation\u003c/a\u003e -\n\u003ca href=\"https://imbrn.github.io/v8n\"\u003eDocumentation\u003c/a\u003e -\n\u003ca href=\"https://imbrn.github.io/v8n/api/\"\u003eAPI\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n\u003ca href=\"https://www.buymeacoffee.com/imbrn\" target=\"_blank\"\u003e\u003cimg src=\"https://www.buymeacoffee.com/assets/img/custom_images/orange_img.png\" alt=\"Buy Me A Coffee\" style=\"height: auto !important;width: auto !important;\" \u003e\u003c/a\u003e\n\u003c/p\u003e\n\n## Introducing v8n\n\n\u003e **v8n** is an acronym for **v**_alidatio_**n**. Notice that it has exactly\n\u003e eight letters between **v** and **n** in the _\"validation\"_ word. This is the\n\u003e same pattern we are used to seeing with _i18n_, _a11y_, _l10n_ ...\n\n### Chainable API\n\nCreate validations very easily with its chainable API:\n\n```javascript\nv8n()\n  .string()\n  .minLength(5)\n  .first(\"H\")\n  .last(\"o\")\n  .test(\"Hello\"); // true\n```\n\n### Incredibly fluent\n\nMix **rules** and **modifiers** together to create complex validations with\ngreat ease and fluency:\n\n```javascript\nv8n()\n  .array()\n  .every.number()\n  .not.some.negative()\n  .test([1, 2, -3]); // false - no negative please!\n```\n\nSo fluent that it looks like English:\n\n```javascript\nv8n()\n  .some.not.uppercase() // expects that some character is not uppercase\n  .test(\"Hello\"); // true\n\nv8n()\n  .not.some.uppercase() // expects that no character is uppercase\n  .test(\"Hello\"); // false\n```\n\nNotice how we made very different validation strategies just by changing the\norder of the modifiers. It's so intuitive that seems to be impossible, but this\nis v8n.\n\n### Customizable\n\nCreate your own **custom validation rules** in a very intuitive way:\n\n```javascript\nfunction foo() {\n  return value =\u003e value === \"bar\";\n}\n\nv8n.extend({ foo });\n```\n\nv8n will treat them like built-in ones:\n\n```javascript\nv8n()\n  .string()\n  .foo()\n  .test(\"bar\"); // true\n```\n\n### Reusable\n\nExport validations just like you're used to do with your JavaScript modules:\n\n_specialNumber.js_\n\n```javascript\nimport v8n from \"v8n\";\n\nexport default v8n()\n  .number()\n  .between(50, 100)\n  .not.even();\n```\n\nand use them anywhere you want:\n\n```javascript\nimport specialNumber from \"../specialNumber\";\n\nspecialNumber.test(63); // true\n```\n\n### For any kind of data\n\nUse v8n to validate your data regardless of its type. You can validate\nprimitives, arrays, objects and whatever you want! You can also use them\ntogether!\n\n```javascript\n// numbers\nv8n()\n  .number()\n  .between(5, 10)\n  .test(7); //true\n\n// strings\nv8n()\n  .string()\n  .minLength(3)\n  .test(\"foo\"); // true\n\n// arrays\nv8n()\n  .array()\n  .every.even()\n  .test([2, 4, 6]); // true\n\n// objects\nconst myData = { id: \"fe03\" };\n\nv8n()\n  .schema({\n    id: v8n().string()\n  })\n  .test(myData); // true\n```\n\n### For any kind of validation\n\nDo simple validations with boolean based tests. Get more information about your\nvalidation process with exception based tests. And of course, perform\nasynchronous tests as well. All in one library.\n\n#### Boolean based validation:\n\n```javascript\nv8n()\n  .string()\n  .first(\"H\")\n  .test(\"Hello\"); // true\n```\n\n#### Exception based validation:\n\n```javascript\ntry {\n  v8n()\n    .string()\n    .first(\"b\")\n    .check(\"foo\");\n} catch (ex) {\n  console.log(ex.rule.name); // first\n}\n```\n\n#### Getting all failures:\n\n```javascript\nconst failed = v8n()\n  .string()\n  .minLength(3)\n  .testAll(10);\n\nfailed;\n// [\n//   ValidationError { rule: { name: \"string\", ... } },\n//   ValidationError { rule: { name: \"minLength\", ... } }\n// ]\n```\n\n#### Async validation:\n\nIf your validation strategy has some rule that performs time consuming\nvalidation, like a back-end check, you should use asynchronous validation:\n\n```javascript\nv8n()\n  .somAsyncRule()\n  .testAsync(\"foo\") // returns a Promise\n  .then(result =\u003e {\n    /* valid! */\n  })\n  .catch(ex =\u003e {\n    /* invalid! */\n  });\n```\n\n### Shareable\n\nShare your rules with the world, and use theirs as well.\n\nCreate useful validation rules and share them with the open source community,\nand let people around the world validate without reinventing the wheel.\n\n### Ready to use!\n\nThere are a lot of built-in rules and modifiers for you to use already\nimplemented in `v8n`'s core. Take a look at all of them in our\n[API](https://imbrn.github.io/v8n/api/) page. But if you can't find what you\nneed, go ahead and make it.\n\n### Tiny!\n\nAll these incredible features for just a few bytes:\n\n![npm bundle size (minified + gzip)](https://img.shields.io/bundlephobia/minzip/v8n.svg)\n\n## Architecture\n\nThe **v8n** core is composed of `rules` and `modifiers`. They are used together\nto build complex validations in an easy way.\n\n### Rules\n\nRules are the heart of the `v8n` ecosystem. You use them to build your\nvalidation strategies:\n\n```javascript\nv8n()\n  .string()\n  .minLength(3)\n  .test(\"Hello\"); // true\n```\n\nIn this code snippet, we're using two rules (`string` and `minLength`) to build\nour validation strategy. So our validated value (`\"Hello\"`) is valid because\nit's a string and it is at least 3 characters long.\n\n\u003e Rules can be more powerful if used along with _modifiers_. Learn about them in\n\u003e the next section.\n\n### Modifiers\n\nModifiers can be used to change rules meaning. For example, you can use the\n`not` modifier to expect the reversed result from a rule:\n\n```javascript\nv8n()\n  .not.equal(5)\n  .test(5); // false\n```\n\n\u003e You can check all available modifiers on our documentation page.\n\nModifiers are very powerful. They work as decorators for rules. When used\ntogether, they allow you to build very complex validations.\n\n## Contribute\n\nContributions of any kind are welcome! Read our\n[CONTRIBUTING](./.github/CONTRIBUTING.md) guide.\n\n## License\n\n[MIT License](https://opensource.org/licenses/MIT)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fimbrn%2Fv8n","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fimbrn%2Fv8n","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fimbrn%2Fv8n/lists"}