{"_id":"@ameen-nexus/validator","_rev":"3-747b1132537e38bb40747612af32d85d","name":"@ameen-nexus/validator","dist-tags":{"latest":"1.0.2"},"versions":{"1.0.0":{"name":"@ameen-nexus/validator","version":"1.0.0","license":"MIT","_id":"@ameen-nexus/validator@1.0.0","maintainers":[{"name":"mudassirameen","email":"mudassirameen205@gmail.com"}],"dist":{"shasum":"067f15da19282a4087e7f87363345527cc7a06f1","tarball":"https://registry.npmjs.org/@ameen-nexus/validator/-/validator-1.0.0.tgz","fileCount":14,"integrity":"sha512-iOvr1Z3G8/BQnqIuV+BOBF/vFRJl16YDjDOrzd6VDMo8rUscRYLaBnonFhqxXalZebSI1KfYau0m7OONArUv8g==","signatures":[{"sig":"MEQCIAofY24cSv12RDKPBljE7PH8hkYHf4/i8sL/Cc17xFciAiBYGlQLxNYxyMEaEL2ZCazTKILnozMrDtPslhrVqBooBw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":139096},"main":"./dist/index.cjs","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./react":{"types":"./dist/react-extensions/index.d.ts","import":"./dist/react-extensions/index.mjs","require":"./dist/react-extensions/index.js"}},"gitHead":"c299fc67a2e613d3395c117b947f4b6c5cb0ecd7","private":false,"scripts":{"lint":"eslint \"src/**/*.{ts,tsx}\"","test":"vitest","build":"tsup","clean":"rimraf dist","prepare":"npm run build","prepublishOnly":"npm run test && npm run build"},"_npmUser":{"name":"mudassirameen","email":"mudassirameen205@gmail.com"},"_npmVersion":"10.9.2","description":"Laravel-like validation library for React (TypeScript)","directories":{},"_nodeVersion":"22.17.1","dependencies":{"axios":"^1.11.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^6.0.0","axios":"^1.11.0","react":"^19.1.1","eslint":"^8.0.0","rimraf":"^3.0.0","vitest":"^1.0.0","react-dom":"^19.1.1","typescript":"^5.0.0","@types/react":"^18.0.0","@types/react-dom":"^18.0.0"},"peerDependencies":{"axios":"^1.0.0","react":">=17","react-dom":">=17"},"_npmOperationalInternal":{"tmp":"tmp/validator_1.0.0_1756134543250_0.07277986187808039","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@ameen-nexus/validator","version":"1.0.1","license":"MIT","_id":"@ameen-nexus/validator@1.0.1","maintainers":[{"name":"mudassirameen","email":"mudassirameen205@gmail.com"}],"dist":{"shasum":"68918c0fd96a95f9313db20eba4a720b5db1c01f","tarball":"https://registry.npmjs.org/@ameen-nexus/validator/-/validator-1.0.1.tgz","fileCount":14,"integrity":"sha512-pV1ASiRtTxFrIRJUFAoJLv1AcM311L7j0uPCO0EQHe3sAoQdk5z1bGCwhFkZ4GdFNgH2HhlR2f13WZuBTDr3IA==","signatures":[{"sig":"MEUCIEH28LUk+7fku6AOl0kjrRDZciTj1DL8C5pZaCkkvj83AiEAmVr7d5EVRXPaaOC0nZVNNyMFZvP/tQAP0bxTPaj5GM8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":139094},"main":"./dist/index.cjs","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./react":{"types":"./dist/react-extensions/index.d.ts","import":"./dist/react-extensions/index.mjs","require":"./dist/react-extensions/index.js"}},"gitHead":"5d4860242182162eb2668d985831410cc1ab4fee","private":false,"scripts":{"lint":"eslint \"src/**/*.{ts,tsx}\"","test":"vitest","build":"tsup","clean":"rimraf dist","prepare":"npm run build","prepublishOnly":"npm run test && npm run build"},"_npmUser":{"name":"mudassirameen","email":"mudassirameen205@gmail.com"},"_npmVersion":"10.9.2","description":"Laravel-like validation library for React (TypeScript)","directories":{},"_nodeVersion":"22.17.1","dependencies":{"axios":"^1.11.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^6.0.0","axios":"^1.11.0","react":"^19.1.1","eslint":"^8.0.0","rimraf":"^3.0.0","vitest":"^1.0.0","react-dom":"^19.1.1","typescript":"^5.0.0","@types/react":"^18.0.0","@types/react-dom":"^18.0.0"},"peerDependencies":{"axios":"^1.0.0","react":">=17","react-dom":">=17"},"_npmOperationalInternal":{"tmp":"tmp/validator_1.0.1_1756136917645_0.23561141056450663","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@ameen-nexus/validator","version":"1.0.2","private":false,"description":"Laravel-like validation library for React (TypeScript)","main":"./dist/index.cjs","module":"./dist/index.mjs","types":"./dist/index.d.ts","exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.js","types":"./dist/index.d.ts"},"./react":{"import":"./dist/react-extensions/index.mjs","require":"./dist/react-extensions/index.js","types":"./dist/react-extensions/index.d.ts"}},"scripts":{"build":"tsup","clean":"rimraf dist","prepare":"npm run build","test":"vitest","lint":"eslint \"src/**/*.{ts,tsx}\"","prepublishOnly":"npm run test && npm run build"},"peerDependencies":{"axios":"^1.0.0","react":">=17","react-dom":">=17"},"devDependencies":{"axios":"^1.11.0","react":"^19.1.1","react-dom":"^19.1.1","eslint":"^8.0.0","rimraf":"^3.0.0","tsup":"^6.0.0","typescript":"^5.0.0","vitest":"^1.0.0","@types/react":"^18.0.0","@types/react-dom":"^18.0.0"},"dependencies":{"axios":"^1.11.0"},"license":"MIT","_id":"@ameen-nexus/validator@1.0.2","gitHead":"6c09c194350821266120bc85d33cbf9fc960aa05","_nodeVersion":"22.17.1","_npmVersion":"10.9.2","dist":{"integrity":"sha512-19LgVOk11kSYUBWUhWEgvIoc6JcHMjGeSJdakXo17EFRcy1LyO3G3IU0YwAvpcFnnAXGL7duU0UjnJtC2gYAyA==","shasum":"09ba99ec6089b3a2cacad9dac2848cfb021f5c0a","tarball":"https://registry.npmjs.org/@ameen-nexus/validator/-/validator-1.0.2.tgz","fileCount":14,"unpackedSize":138609,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIH3qyqkLZ+xFGGIuDQxinPb+ih0uCbSnc1htlJnCCwJIAiEAySt5ne7wO+DSyvg5iF217HWadQpB7KB714kyKeEeIaU="}]},"_npmUser":{"name":"mudassirameen","email":"mudassirameen205@gmail.com"},"directories":{},"maintainers":[{"name":"mudassirameen","email":"mudassirameen205@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/validator_1.0.2_1757099058702_0.9285519631121468"},"_hasShrinkwrap":false}},"time":{"created":"2025-08-25T15:09:03.168Z","modified":"2025-09-05T19:04:19.103Z","1.0.0":"2025-08-25T15:09:03.455Z","1.0.1":"2025-08-25T15:48:37.861Z","1.0.2":"2025-09-05T19:04:18.894Z"},"license":"MIT","description":"Laravel-like validation library for React (TypeScript)","maintainers":[{"name":"mudassirameen","email":"mudassirameen205@gmail.com"}],"readme":"# @ameen-nexus/validator\r\n\r\nA Laravel-inspired validation library for React with TypeScript support, providing both core validation utilities and React hooks for form management.\r\n\r\n---\r\n\r\n## Installation\r\n\r\n```bash\r\nnpm install @ameen-nexus/validator\r\n```\r\n\r\n---\r\n\r\n## Features\r\n\r\n- 🚀 **Laravel-style validation rules**\r\n- 📝 **TypeScript support**\r\n- ⚛️ **React hooks integration**\r\n- 🔄 **Automatic dependency tracking between fields**\r\n- 🌐 **Axios integration for form submissions**\r\n- 🎯 **Built-in validation rules + custom rule support**\r\n\r\n---\r\n\r\n## Quick Start\r\n\r\n### Core Validation\r\n\r\n```typescript\r\nimport { useForm } from '@ameen-nexus/validator/react';\r\n\r\nconst data = { email: 'test@example.com', password: 'secret' };\r\nconst rules = {\r\n  email: 'required|email',\r\n  password: 'required|min:8'\r\n};\r\n\r\nconst { valid, errors } = useForm(data, rules);\r\n```\r\n\r\n### React Hook Usage\r\n\r\n```tsx\r\nimport { useForm } from '@ameen-nexus/validator/react';\r\n\r\nconst MyForm = () => {\r\n  const { data, setField, errors, post } = useForm(\r\n    { email: '', password: '' },\r\n    {\r\n      email: 'required|email',\r\n      password: 'required|min:8|confirmed'\r\n    }\r\n  );\r\n\r\n  return (\r\n    <form onSubmit={(e) => {\r\n      e.preventDefault();\r\n      post('/api/register');\r\n    }}>\r\n      <input\r\n        value={data.email}\r\n        onChange={(e) => setField('email', e.target.value)}\r\n      />\r\n      {errors.email && <span>{errors.email}</span>}\r\n\r\n      <input\r\n        type=\"password\"\r\n        value={data.password}\r\n        onChange={(e) => setField('password', e.target.value)}\r\n      />\r\n\r\n      <input\r\n        type=\"password\"\r\n        placeholder=\"Confirm Password\"\r\n        onChange={(e) => setField('password_confirmation', e.target.value)}\r\n      />\r\n      {errors.password && <span>{errors.password}</span>}\r\n\r\n      <button type=\"submit\">Register</button>\r\n    </form>\r\n  );\r\n};\r\n```\r\n\r\n---\r\n\r\n## Available Rules\r\n\r\n- `required` - Field must be present\r\n- `email` - Valid email format\r\n- `min:X` - Minimum length/value\r\n- `max:X` - Maximum length/value\r\n- `confirmed` - Field must have matching confirmation field\r\n- `same:field` - Match another field's value\r\n- `numeric` - Must be numeric\r\n- `boolean` - Must be boolean\r\n- `in:a,b,c` - Must be in given list\r\n- `regex:pattern` - Match regex pattern\r\n\r\n> And many more...\r\n\r\n---\r\n\r\n## API Reference\r\n\r\n### `useForm` Hook\r\n\r\n```typescript\r\nconst {\r\n  data,           // Form data object\r\n  setField,       // Update single field\r\n  setData,        // Update multiple fields\r\n  errors,         // Validation errors\r\n  validateField,  // Validate single field\r\n  validate,       // Validate all fields\r\n  post,           // Submit via POST\r\n  get,            // Submit via GET\r\n  put,            // Submit via PUT\r\n  patch,          // Submit via PATCH\r\n  delete: del,    // Submit via DELETE\r\n  reset,          // Reset form values\r\n  processing      // Submission state\r\n} = useForm(initialValues, validationRules);\r\n```\r\n\r\n## Validation Rules Syntax\r\n\r\nRules can be specified as:\r\n\r\n- **String** with pipe-separated rules: `'required|email|min:8'`\r\n\r\n___\r\n\r\n### Form Submission\r\n\r\n```typescript\r\nconst { post } = useForm(/* ... */);\r\n\r\nconst handleSubmit = async () => {\r\n  try {\r\n    await post('/api/submit', {\r\n      onSuccess: (response) => console.log('Success!'),\r\n      onError: (error) => console.error('Error!')\r\n    });\r\n  } catch (error) {\r\n    if (error.validation) {\r\n      console.log('Validation errors:', error.errors);\r\n    }\r\n  }\r\n};\r\n```\r\n\r\n---\r\n\r\n## License\r\n\r\n\r\nMIT License\r\n\r\nCopyright (c) 2025 AmeenNexus\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n","readmeFilename":"README.md"}