{"_id":"@bernierllc/validators-pagination-contract","_rev":"7-76f5daf88fb03e665e436e49c72f8446","name":"@bernierllc/validators-pagination-contract","dist-tags":{"latest":"1.6.0"},"versions":{"1.0.0":{"name":"@bernierllc/validators-pagination-contract","version":"1.0.0","keywords":["validator","pagination","validation","schema","api","contract","primitive","bernierllc"],"author":{"name":"Bernier LLC"},"license":"UNLICENSED","_id":"@bernierllc/validators-pagination-contract@1.0.0","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/BernierLLC/tools#readme","bugs":{"url":"https://github.com/BernierLLC/tools/issues"},"dist":{"shasum":"9a12059437d135fc4726ac11e0502723a5e044b7","tarball":"https://registry.npmjs.org/@bernierllc/validators-pagination-contract/-/validators-pagination-contract-1.0.0.tgz","fileCount":28,"integrity":"sha512-qOEKSSS4oOTUF50LF67Ptsg+cEz8ddKhxDoD3pc57meWxbhi55nuqAr2idZTObADbUvA7uO5OQyOYk8Yv/DvOg==","signatures":[{"sig":"MEYCIQDLT1xQDz2DjWQzFc4eMb1ya6MRke1EO4U7W/CaqrMBbgIhALDsneoljyy053G+PfRxK5bC3h4eVSPtwy6WlX/FiZoD","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":112387},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","gitHead":"31f3a945702aebca1527571a5dddddde19c4aad5","scripts":{"lint":"eslint src --ext .ts","test":"jest --watch","build":"tsc","clean":"rm -rf dist","test:run":"jest","typecheck":"tsc --noEmit","test:coverage":"jest --coverage"},"_npmUser":{"name":"mkbernier","email":"mkbernier@gmail.com"},"repository":{"url":"git+https://github.com/BernierLLC/tools.git","type":"git","directory":"packages/validators/validators-pagination-contract"},"_npmVersion":"11.4.2","description":"Primitive schema validator for pagination contract validation (limit/offset, cursor-based)","directories":{},"_nodeVersion":"24.4.1","dependencies":{"@bernierllc/validators-core":"^0.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.40.0","ts-jest":"^29.1.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/validators-pagination-contract_1.0.0_1760037627318_0.9466157301032618","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@bernierllc/validators-pagination-contract","version":"1.2.0","keywords":["validator","pagination","validation","schema","api","contract","primitive","bernierllc"],"author":{"name":"Bernier LLC"},"license":"UNLICENSED","_id":"@bernierllc/validators-pagination-contract@1.2.0","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/BernierLLC/tools#readme","bugs":{"url":"https://github.com/BernierLLC/tools/issues"},"dist":{"shasum":"1d623c102359b53c71041b7fc814f0b93aa2b49a","tarball":"https://registry.npmjs.org/@bernierllc/validators-pagination-contract/-/validators-pagination-contract-1.2.0.tgz","fileCount":28,"integrity":"sha512-nQ0AzcpSG45hTvM+1vM/5Xjjd86TsiOfcv6RJ/9c3509x/+Nizf7Q4NL31PifArES/vIzSxzMziUkAoaoVdFfQ==","signatures":[{"sig":"MEUCIQD8rXoAxZN8yXGilc3E5ZfYZLTOraQr4Fd0IpPEs6bkrwIgZmlQZE1cCorlhoAsbHeqgJG/Dv7ccXoBD0nqO1IYLWM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":112490},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","gitHead":"af7e74b3715d56d3a193e1bb6743b337c2b0df6d","scripts":{"lint":"eslint src --ext .ts","test":"jest --watch","build":"tsc","clean":"rm -rf dist","test:run":"jest","typecheck":"tsc --noEmit","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:12f9807d-84d7-409b-a315-acd08be87ce8"}},"repository":{"url":"git+https://github.com/BernierLLC/tools.git","type":"git","directory":"packages/validators/validators-pagination-contract"},"_npmVersion":"lerna/9.0.3/node@v20.19.6+x64 (linux)","description":"Primitive schema validator for pagination contract validation (limit/offset, cursor-based)","directories":{},"_nodeVersion":"20.19.6","dependencies":{"@bernierllc/validators-core":"0.1.2"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.40.0","ts-jest":"^29.1.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/validators-pagination-contract_1.2.0_1767642370876_0.7536118736538264","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"@bernierllc/validators-pagination-contract","version":"1.2.1","keywords":["validator","pagination","validation","schema","api","contract","primitive","bernierllc"],"author":{"name":"Bernier LLC"},"license":"UNLICENSED","_id":"@bernierllc/validators-pagination-contract@1.2.1","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/BernierLLC/tools#readme","bugs":{"url":"https://github.com/BernierLLC/tools/issues"},"dist":{"shasum":"1b93051c2caee55bb14a5edda7b6ce567ef72568","tarball":"https://registry.npmjs.org/@bernierllc/validators-pagination-contract/-/validators-pagination-contract-1.2.1.tgz","fileCount":28,"integrity":"sha512-GSxw7DzuR8jJw/f3dWy6L3BveVstk3bvP0y3qeVl19ijmF3MsUIwFjdx9H3iXid8zIs0B7jTQ0YYMwnUpR3jGw==","signatures":[{"sig":"MEQCIBrmmfQ2QLajnO3Qg4N/GTDUYLnzjw1K1iPebNTQBrxiAiB9V66j05AMMgS/ghfo2UF9t6dX/TdLCU3+wIIm5KZ7EA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":112432},"main":"./dist/index.js","type":"module","_from":"file:bernierllc-validators-pagination-contract-1.2.1.tgz","types":"./dist/index.d.ts","scripts":{"lint":"eslint src --ext .ts","test":"jest --watch","build":"tsc","clean":"rm -rf dist","test:run":"jest","typecheck":"tsc --noEmit","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:12f9807d-84d7-409b-a315-acd08be87ce8"}},"_resolved":"/tmp/b0da923f7b94a8aab9ac36e39bf26f31/bernierllc-validators-pagination-contract-1.2.1.tgz","_integrity":"sha512-GSxw7DzuR8jJw/f3dWy6L3BveVstk3bvP0y3qeVl19ijmF3MsUIwFjdx9H3iXid8zIs0B7jTQ0YYMwnUpR3jGw==","repository":{"url":"git+https://github.com/BernierLLC/tools.git","type":"git","directory":"packages/validators/validators-pagination-contract"},"_npmVersion":"11.11.0","description":"Primitive schema validator for pagination contract validation (limit/offset, cursor-based)","directories":{},"_nodeVersion":"20.20.0","dependencies":{"@bernierllc/validators-core":"0.1.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.40.0","ts-jest":"^29.1.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/validators-pagination-contract_1.2.1_1773078310421_0.2058618489996007","host":"s3://npm-registry-packages-npm-production"}},"1.2.2":{"name":"@bernierllc/validators-pagination-contract","version":"1.2.2","keywords":["validator","pagination","validation","schema","api","contract","primitive","bernierllc"],"author":{"name":"Bernier LLC"},"license":"UNLICENSED","_id":"@bernierllc/validators-pagination-contract@1.2.2","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/BernierLLC/tools#readme","bugs":{"url":"https://github.com/BernierLLC/tools/issues"},"dist":{"shasum":"8fb25883464f6f2f45074a4ee1ef49b6040ab5dd","tarball":"https://registry.npmjs.org/@bernierllc/validators-pagination-contract/-/validators-pagination-contract-1.2.2.tgz","fileCount":28,"integrity":"sha512-qJNX+lPVDXylgplwudwZXqBkS1Wcv/uTzrarP+3dKJXnLjgDrAxp6vBNbR/xxpM83eqUBwR9Wyxzgp6OHPWTFg==","signatures":[{"sig":"MEUCIGKJ66Jb5YRRAaHJ4uQU+l+BWyxouv+3OF88wtWNDstZAiEAqi8OMmc0y+Gce0dLoA4NAc0f032DzNLB5dADXU/0Kaw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":112432},"main":"./dist/index.js","type":"module","_from":"file:bernierllc-validators-pagination-contract-1.2.2.tgz","types":"./dist/index.d.ts","scripts":{"lint":"eslint src --ext .ts","test":"jest --watch","build":"tsc","clean":"rm -rf dist","test:run":"jest","typecheck":"tsc --noEmit","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:12f9807d-84d7-409b-a315-acd08be87ce8"}},"_resolved":"/home/runner/work/tools/tools/packages/validators/validators-pagination-contract/bernierllc-validators-pagination-contract-1.2.2.tgz","_integrity":"sha512-qJNX+lPVDXylgplwudwZXqBkS1Wcv/uTzrarP+3dKJXnLjgDrAxp6vBNbR/xxpM83eqUBwR9Wyxzgp6OHPWTFg==","repository":{"url":"git+https://github.com/BernierLLC/tools.git","type":"git","directory":"packages/validators/validators-pagination-contract"},"_npmVersion":"11.11.0","description":"Primitive schema validator for pagination contract validation (limit/offset, cursor-based)","directories":{},"_nodeVersion":"20.20.0","dependencies":{"@bernierllc/validators-core":"0.1.4"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.40.0","ts-jest":"^29.1.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/validators-pagination-contract_1.2.2_1773163959162_0.6319459656289335","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@bernierllc/validators-pagination-contract","version":"1.3.0","keywords":["validator","pagination","validation","schema","api","contract","primitive","bernierllc"],"author":{"name":"Bernier LLC"},"license":"UNLICENSED","_id":"@bernierllc/validators-pagination-contract@1.3.0","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/BernierLLC/tools#readme","bugs":{"url":"https://github.com/BernierLLC/tools/issues"},"dist":{"shasum":"28d1c19521d59a0e2d4cafbc5ef8628e1411f615","tarball":"https://registry.npmjs.org/@bernierllc/validators-pagination-contract/-/validators-pagination-contract-1.3.0.tgz","fileCount":28,"integrity":"sha512-e0PEYITK4d8VzOAnvPI1qjzOUNmSu5jOd+JbudGSmdCnUjCMv1+5yaiedX1hrF1RrEYXuUEt3TpjDOc2WUiBcw==","signatures":[{"sig":"MEUCIC1DyOU3DtiBy5oyBeNLAfXafpakezTdK6TI8oAzy0krAiEA8Mc7GsnXalXTDlB/wWAjuPo0fTxyYT0qz4qZmpVAR38=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":112432},"main":"./dist/index.js","type":"module","_from":"file:bernierllc-validators-pagination-contract-1.3.0.tgz","types":"./dist/index.d.ts","scripts":{"lint":"eslint src --ext .ts","test":"jest --watch","build":"tsc","clean":"rm -rf dist","test:run":"jest","typecheck":"tsc --noEmit","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:12f9807d-84d7-409b-a315-acd08be87ce8"}},"_resolved":"/home/runner/work/tools/tools/packages/validators/validators-pagination-contract/bernierllc-validators-pagination-contract-1.3.0.tgz","_integrity":"sha512-e0PEYITK4d8VzOAnvPI1qjzOUNmSu5jOd+JbudGSmdCnUjCMv1+5yaiedX1hrF1RrEYXuUEt3TpjDOc2WUiBcw==","repository":{"url":"git+https://github.com/BernierLLC/tools.git","type":"git","directory":"packages/validators/validators-pagination-contract"},"_npmVersion":"11.14.1","description":"Primitive schema validator for pagination contract validation (limit/offset, cursor-based)","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@bernierllc/validators-core":"0.2.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.40.0","ts-jest":"^29.1.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/validators-pagination-contract_1.3.0_1779242192255_0.4197793468515041","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"@bernierllc/validators-pagination-contract","version":"1.4.0","keywords":["validator","pagination","validation","schema","api","contract","primitive","bernierllc"],"author":{"name":"Bernier LLC"},"license":"UNLICENSED","_id":"@bernierllc/validators-pagination-contract@1.4.0","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/BernierLLC/tools#readme","bugs":{"url":"https://github.com/BernierLLC/tools/issues"},"dist":{"shasum":"f2966cdbbf2fb5b003742195606d4a987b168274","tarball":"https://registry.npmjs.org/@bernierllc/validators-pagination-contract/-/validators-pagination-contract-1.4.0.tgz","fileCount":28,"integrity":"sha512-cra0P3FQk+Ff6onKg5WYxeQM1LGjzywy8Y/hzxyFIkVabg0AXYcvK1QkLQEbbpVi/mzgRWzp4k4vAi3t4fe4IQ==","signatures":[{"sig":"MEUCIDqglWJom2dPWqv+TRtKlW6px/aaRU7o2DxgAqCsjFwHAiEA4LSj9knq2Xtpcg1AJKj53DBPOAvZumoNFtOw7aP9v4Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":112432},"main":"./dist/index.js","type":"module","_from":"file:bernierllc-validators-pagination-contract-1.4.0.tgz","types":"./dist/index.d.ts","scripts":{"lint":"eslint src --ext .ts","test":"jest --watch","build":"tsc","clean":"rm -rf dist","test:run":"jest","typecheck":"tsc --noEmit","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:12f9807d-84d7-409b-a315-acd08be87ce8"}},"_resolved":"/home/runner/work/tools/tools/packages/validators/validators-pagination-contract/bernierllc-validators-pagination-contract-1.4.0.tgz","_integrity":"sha512-cra0P3FQk+Ff6onKg5WYxeQM1LGjzywy8Y/hzxyFIkVabg0AXYcvK1QkLQEbbpVi/mzgRWzp4k4vAi3t4fe4IQ==","repository":{"url":"git+https://github.com/BernierLLC/tools.git","type":"git","directory":"packages/validators/validators-pagination-contract"},"_npmVersion":"11.14.1","description":"Primitive schema validator for pagination contract validation (limit/offset, cursor-based)","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@bernierllc/validators-core":"0.3.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.40.0","ts-jest":"^29.1.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/validators-pagination-contract_1.4.0_1779250948237_0.5810967034261807","host":"s3://npm-registry-packages-npm-production"}},"1.6.0":{"name":"@bernierllc/validators-pagination-contract","version":"1.6.0","description":"Primitive schema validator for pagination contract validation (limit/offset, cursor-based)","type":"module","main":"./dist/index.js","types":"./dist/index.d.ts","keywords":["validator","pagination","validation","schema","api","contract","primitive","bernierllc"],"author":{"name":"Bernier LLC"},"license":"UNLICENSED","dependencies":{"@bernierllc/validators-core":"0.4.0"},"devDependencies":{"@types/jest":"^29.5.0","@types/node":"^20.0.0","@typescript-eslint/eslint-plugin":"^6.0.0","@typescript-eslint/parser":"^6.0.0","eslint":"^8.40.0","jest":"^29.5.0","ts-jest":"^29.1.0","typescript":"^5.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"repository":{"type":"git","url":"git+https://github.com/BernierLLC/tools.git","directory":"packages/validators/validators-pagination-contract"},"scripts":{"build":"tsc","clean":"rm -rf dist","test":"jest --watch","test:run":"jest","test:coverage":"jest --coverage","lint":"eslint src --ext .ts","typecheck":"tsc --noEmit"},"_id":"@bernierllc/validators-pagination-contract@1.6.0","bugs":{"url":"https://github.com/BernierLLC/tools/issues"},"homepage":"https://github.com/BernierLLC/tools#readme","_integrity":"sha512-dsgx50OOtAw2YrlFhXagTyAmLu82+U/FF3s1x3HtbOnhrFkskpFnBuNpmFDNDxS+8xNyG/tmvT/YhVNuzRD3wg==","_resolved":"/home/runner/work/tools/tools/packages/validators/validators-pagination-contract/bernierllc-validators-pagination-contract-1.6.0.tgz","_from":"file:bernierllc-validators-pagination-contract-1.6.0.tgz","_nodeVersion":"20.20.2","_npmVersion":"11.14.1","dist":{"integrity":"sha512-dsgx50OOtAw2YrlFhXagTyAmLu82+U/FF3s1x3HtbOnhrFkskpFnBuNpmFDNDxS+8xNyG/tmvT/YhVNuzRD3wg==","shasum":"1193bda40fc8f137199b447717681135f016d67f","tarball":"https://registry.npmjs.org/@bernierllc/validators-pagination-contract/-/validators-pagination-contract-1.6.0.tgz","fileCount":32,"unpackedSize":115253,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDq33TSM3yT2PPy6yKwO4pMB2JdDa93LTWHisSBGnG3bgIhAIIIfTTz1Nn7wsNjb1rVy8oUHJIQTYsuIb3IIu93blpr"}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:12f9807d-84d7-409b-a315-acd08be87ce8"}},"directories":{},"maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/validators-pagination-contract_1.6.0_1779252235388_0.0007560257378946833"},"_hasShrinkwrap":false}},"time":{"created":"2025-10-09T19:20:27.261Z","modified":"2026-05-20T04:43:55.673Z","1.0.0":"2025-10-09T19:20:27.505Z","1.2.0":"2026-01-05T19:46:11.004Z","1.2.1":"2026-03-09T17:45:10.606Z","1.2.2":"2026-03-10T17:32:39.302Z","1.3.0":"2026-05-20T01:56:32.524Z","1.4.0":"2026-05-20T04:22:28.385Z","1.6.0":"2026-05-20T04:43:55.527Z"},"bugs":{"url":"https://github.com/BernierLLC/tools/issues"},"author":{"name":"Bernier LLC"},"license":"UNLICENSED","homepage":"https://github.com/BernierLLC/tools#readme","keywords":["validator","pagination","validation","schema","api","contract","primitive","bernierllc"],"repository":{"type":"git","url":"git+https://github.com/BernierLLC/tools.git","directory":"packages/validators/validators-pagination-contract"},"description":"Primitive schema validator for pagination contract validation (limit/offset, cursor-based)","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"readme":"# @bernierllc/validators-pagination-contract\n\nPrimitive schema validator for pagination contract validation (limit/offset, cursor-based).\n\n## Installation\n\n```bash\nnpm install @bernierllc/validators-pagination-contract\n```\n\n## Usage\n\n### Basic Validation\n\n```typescript\nimport {\n  validatePaginationParams,\n  validatePaginationResponse,\n  isValidPagination,\n} from '@bernierllc/validators-pagination-contract';\n\n// Validate offset/limit pagination parameters\nconst problems = await validatePaginationParams({\n  limit: 20,\n  offset: 0,\n});\n\nif (problems.length === 0) {\n  console.log('Valid pagination parameters');\n}\n\n// Validate pagination response structure\nconst response = {\n  data: [{ id: 1 }, { id: 2 }],\n  meta: {\n    total: 100,\n    count: 2,\n    hasNext: true,\n  },\n};\n\nconst responseProblems = await validatePaginationResponse(response);\n\n// Quick validation check\nconst isValid = await isValidPagination({ limit: 10, offset: 0 });\n```\n\n### Cursor-based Pagination\n\n```typescript\nimport { validatePaginationParams } from '@bernierllc/validators-pagination-contract';\n\n// Validate cursor pagination\nconst problems = await validatePaginationParams(\n  {\n    cursor: 'abc123',\n    limit: 20,\n  },\n  {\n    paginationType: 'cursor',\n  }\n);\n\n// Validate with after/before cursors\nconst cursorProblems = await validatePaginationParams(\n  {\n    after: 'xyz789',\n    limit: 10,\n  },\n  {\n    paginationType: 'cursor',\n  }\n);\n```\n\n### Custom Validation Options\n\n```typescript\nimport { validatePaginationParams } from '@bernierllc/validators-pagination-contract';\n\nconst problems = await validatePaginationParams(\n  {\n    limit: 50,\n    offset: 100,\n  },\n  {\n    maxLimit: 100,\n    minLimit: 1,\n    allowNegativeOffset: false,\n    checkTotalCount: true,\n    checkNavigationLinks: true,\n    checkPageBoundaries: true,\n  }\n);\n```\n\n### Type Detection\n\n```typescript\nimport { detectPaginationType } from '@bernierllc/validators-pagination-contract';\n\nconst type = detectPaginationType({ limit: 10, offset: 0 });\n// Returns: 'offset'\n\nconst cursorType = detectPaginationType({ cursor: 'abc123' });\n// Returns: 'cursor'\n\nconst pageType = detectPaginationType({ page: 1, limit: 10 });\n// Returns: 'page'\n```\n\n### Parameter Normalization\n\n```typescript\nimport { normalizePaginationParams } from '@bernierllc/validators-pagination-contract';\n\n// Normalize string parameters to numbers\nconst normalized = await normalizePaginationParams({\n  limit: '20',\n  offset: '0',\n});\n// Returns: { limit: 20, offset: 0 }\n\n// Clamp values to allowed ranges\nconst clamped = await normalizePaginationParams(\n  { limit: 200 },\n  { maxLimit: 100 }\n);\n// Returns: { limit: 100 }\n```\n\n## API Reference\n\n### Main Functions\n\n#### `validatePaginationParams(data, options?, utils?)`\n\nValidates pagination parameters against contract conventions.\n\n**Parameters:**\n- `data` (unknown) - Pagination parameters to validate\n- `options` (PaginationContractOptions) - Validation options (optional)\n- `utils` (SharedUtils) - Shared utilities (optional)\n\n**Returns:** `Promise<Problem[]>` - Array of validation problems\n\n#### `validatePaginationResponse(response, options?, utils?)`\n\nValidates pagination response structure.\n\n**Parameters:**\n- `response` (unknown) - Pagination response to validate\n- `options` (PaginationContractOptions) - Validation options (optional)\n- `utils` (SharedUtils) - Shared utilities (optional)\n\n**Returns:** `Promise<Problem[]>` - Array of validation problems\n\n#### `isValidPagination(data, options?)`\n\nQuick check if pagination parameters are valid.\n\n**Parameters:**\n- `data` (unknown) - Pagination parameters to check\n- `options` (PaginationContractOptions) - Validation options (optional)\n\n**Returns:** `Promise<boolean>` - true if valid, false otherwise\n\n#### `detectPaginationType(data)`\n\nDetects the pagination type from parameters.\n\n**Parameters:**\n- `data` (unknown) - Pagination parameters\n\n**Returns:** `PaginationType | null` - Detected type ('offset', 'cursor', 'page') or null\n\n#### `normalizePaginationParams(data, options?)`\n\nNormalizes and validates pagination parameters.\n\n**Parameters:**\n- `data` (unknown) - Raw pagination parameters\n- `options` (PaginationContractOptions) - Validation options (optional)\n\n**Returns:** `Promise<Record<string, unknown> | null>` - Normalized parameters or null if invalid\n\n### Validation Rules\n\nThe package includes the following validation rules:\n\n#### `offsetLimitRule`\n\nValidates offset/limit pagination parameters:\n- Limit must be a positive integer within bounds\n- Offset must be a non-negative integer (unless `allowNegativeOffset` is true)\n- Checks min/max limit constraints\n\n#### `cursorPaginationRule`\n\nValidates cursor-based pagination:\n- Cursor must be a non-empty string\n- Cannot specify both `after` and `before` cursors\n- Validates cursor format if enabled\n\n#### `responseStructureRule`\n\nValidates pagination response structure:\n- Data field must be an array (if required)\n- Metadata fields must have correct types\n- Links must be valid URLs\n\n#### `totalCountRule`\n\nValidates total count consistency:\n- Count must match data array length\n- Count cannot exceed total\n- Total pages calculation must be correct\n- Current page must be within bounds\n\n#### `navigationLinksRule`\n\nValidates navigation links consistency:\n- `hasNext` must match presence of `nextCursor` or `next` link\n- `hasPrevious` must match presence of `previousCursor` or `previous` link\n- Page numbers must be sequential\n- Link URLs must be valid\n\n### Types\n\n#### `PaginationContractOptions`\n\n```typescript\ninterface PaginationContractOptions {\n  paginationType?: 'offset' | 'cursor' | 'page';\n  checkTotalCount?: boolean;\n  checkNavigationLinks?: boolean;\n  checkPageBoundaries?: boolean;\n  maxLimit?: number;\n  minLimit?: number;\n  allowNegativeOffset?: boolean;\n  requireDataArray?: boolean;\n  validateCursorFormat?: boolean;\n}\n```\n\n#### `PaginationResponse`\n\n```typescript\ninterface PaginationResponse<T = unknown> {\n  data: T[];\n  meta?: PaginationMeta;\n  links?: {\n    next?: string;\n    previous?: string;\n    first?: string;\n    last?: string;\n  };\n  pagination?: PaginationMeta;\n}\n```\n\n## Examples\n\n### Express API Middleware\n\n```typescript\nimport { validatePaginationParams, normalizePaginationParams } from '@bernierllc/validators-pagination-contract';\n\nasync function paginationMiddleware(req, res, next) {\n  const normalized = await normalizePaginationParams(req.query, {\n    maxLimit: 100,\n    minLimit: 1,\n  });\n\n  if (!normalized) {\n    return res.status(400).json({ error: 'Invalid pagination parameters' });\n  }\n\n  req.pagination = normalized;\n  next();\n}\n```\n\n### Response Validation\n\n```typescript\nimport { validatePaginationResponse } from '@bernierllc/validators-pagination-contract';\n\nasync function validateApiResponse(response) {\n  const problems = await validatePaginationResponse(response, {\n    requireDataArray: true,\n    checkTotalCount: true,\n    checkNavigationLinks: true,\n  });\n\n  if (problems.length > 0) {\n    console.error('Response validation errors:', problems);\n    return false;\n  }\n\n  return true;\n}\n```\n\n### GraphQL Pagination Validator\n\n```typescript\nimport { validatePaginationParams } from '@bernierllc/validators-pagination-contract';\n\nasync function validateGraphQLPagination(args) {\n  const problems = await validatePaginationParams(\n    {\n      after: args.after,\n      before: args.before,\n      limit: args.first || args.last,\n    },\n    {\n      paginationType: 'cursor',\n      maxLimit: 100,\n    }\n  );\n\n  if (problems.length > 0) {\n    throw new Error(`Invalid pagination: ${problems[0].message}`);\n  }\n}\n```\n\n## Validation Severity\n\nThe validator reports problems with different severity levels:\n\n- **error**: Critical issues that violate API contract (invalid types, out of bounds values)\n- **warning**: Inconsistencies that may indicate bugs (mismatched flags and links)\n\n## Performance\n\n- Lightweight validation with minimal overhead\n- Synchronous type checks with async API for consistency\n- No external dependencies beyond @bernierllc/validators-core\n\n## Integration Status\n\n- **Logger**: not-applicable - Pure validation utility with no logging requirements\n- **Docs-Suite**: ready - Complete TypeDoc documentation with markdown README\n- **NeverHub**: not-applicable - Stateless validation utility with no service dependencies\n\n## See Also\n\n- [@bernierllc/validators-core](../validators-core) - Core validation framework\n- [@bernierllc/validators-json-structure](../validators-json-structure) - JSON structure validation\n- [@bernierllc/validators-runner](../validators-runner) - Validation execution engine\n\n## License\n\nCopyright (c) 2025 Bernier LLC. All rights reserved.\n","readmeFilename":"README.md"}