{"_id":"kenteken-kit","_rev":"6-f4c2e92160cf15974550d1b6d343ac65","name":"kenteken-kit","dist-tags":{"latest":"0.2.6"},"versions":{"0.1.0":{"name":"kenteken-kit","version":"0.1.0","keywords":["kenteken","registration-plate","number-plate","dutch","netherlands","formatter","validator","rdw"],"license":"MIT","_id":"kenteken-kit@0.1.0","maintainers":[{"name":"scan-kenteken","email":"mark@scankenteken.nl"}],"homepage":"https://github.com/scan-kenteken/kenteken-kit#readme","bugs":{"url":"https://github.com/scan-kenteken/kenteken-kit/issues"},"dist":{"shasum":"14f8f286ebb63047074a249f64eeedc7dd5b0ca6","tarball":"https://registry.npmjs.org/kenteken-kit/-/kenteken-kit-0.1.0.tgz","fileCount":5,"integrity":"sha512-QiBASPn7cTcBSaK54xvLrqA146Lx5unfJGwCiuYsxh/q12YpP7fRH2mnKotKTeiKeI2kOP8ed+g+27PTYCj9mA==","signatures":[{"sig":"MEUCIFhbPBFmeCL7SIUcUhLI6DPkXZcz4IVksi3CKTTnNKRLAiEA1zjuqrypEk4KeKkk/rFImSio4tmiC2c+fxrRKO6AMJg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":16952},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"gitHead":"72d22b372f5bc02702d4dd217789e096164a2487","scripts":{"test":"npm run build && node --test test/*.test.mjs","build":"npm run clean && tsc -p tsconfig.build.json","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","prepack":"npm run typecheck && npm test","typecheck":"tsc --noEmit"},"_npmUser":{"name":"scan-kenteken","email":"mark@scankenteken.nl"},"repository":{"url":"git+https://github.com/scan-kenteken/kenteken-kit.git","type":"git"},"_npmVersion":"11.12.1","description":"Tiny Dutch kenteken formatter, parser, and validator toolkit.","directories":{},"sideEffects":false,"_nodeVersion":"24.13.0","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3"},"_npmOperationalInternal":{"tmp":"tmp/kenteken-kit_0.1.0_1781637194663_0.7455955796648184","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"kenteken-kit","version":"0.2.1","keywords":["kenteken","registration-plate","number-plate","dutch","netherlands","formatter","validator","rdw"],"license":"MIT","_id":"kenteken-kit@0.2.1","maintainers":[{"name":"scan-kenteken","email":"mark@scankenteken.nl"}],"homepage":"https://github.com/scan-kenteken/kenteken-kit#readme","bugs":{"url":"https://github.com/scan-kenteken/kenteken-kit/issues"},"dist":{"shasum":"3b037fe77e3ac2f523f913a1c7f9d575749ba2f3","tarball":"https://registry.npmjs.org/kenteken-kit/-/kenteken-kit-0.2.1.tgz","fileCount":6,"integrity":"sha512-ctRRiW62IFqtP5tqVVQLMRJ5u2yj1ogJPUFCOffKMyKjLo77uIuvnBBXC+9S3c/dZU/ZZGf6SiAStVJcOS1eig==","signatures":[{"sig":"MEUCIQCvBFG/fOf7B/sH7VAsRUCwwLG7GCQR1zNa5Vhrt1ZY7wIgbqzTyVXFJzX7Ksk72LAohtQMyaYfdNnEm20ypny3YrM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":77457},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"gitHead":"2e1efa0a7d0511d2ff75c613230557a96cf0628a","scripts":{"test":"npm run build && node --test test/*.test.mjs","build":"npm run clean && tsc -p tsconfig.build.json","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","prepack":"npm run typecheck && npm test","typecheck":"tsc --noEmit"},"_npmUser":{"name":"scan-kenteken","email":"mark@scankenteken.nl"},"repository":{"url":"git+https://github.com/scan-kenteken/kenteken-kit.git","type":"git"},"_npmVersion":"11.12.1","description":"Tiny Dutch kenteken formatter, parser, and validator toolkit.","directories":{},"sideEffects":false,"_nodeVersion":"24.13.0","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3"},"_npmOperationalInternal":{"tmp":"tmp/kenteken-kit_0.2.1_1781720796116_0.8543366748833383","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"kenteken-kit","version":"0.2.2","keywords":["kenteken","registration-plate","number-plate","dutch","netherlands","formatter","validator","rdw"],"license":"MIT","_id":"kenteken-kit@0.2.2","maintainers":[{"name":"scan-kenteken","email":"mark@scankenteken.nl"}],"homepage":"https://github.com/scan-kenteken/kenteken-kit#readme","bugs":{"url":"https://github.com/scan-kenteken/kenteken-kit/issues"},"dist":{"shasum":"39b934a17aea2fd6978ebe4fd1de06dcd1d2f57c","tarball":"https://registry.npmjs.org/kenteken-kit/-/kenteken-kit-0.2.2.tgz","fileCount":6,"integrity":"sha512-bRDR9vOT8UG7evtxj6lJS2rlGIcVfxfMBkzVj+6GkG6FHz2dTe1nAwJTdMnOIbBUfF/2nuaMIMD+oB9keeNiwA==","signatures":[{"sig":"MEUCIQDZqL4doQRFrGR0ig4fzmyscg41weKo5dDbmS0i+vhdnwIgN9jZwBQ972SsmAhqLvXtFwTckMr38YtWeEghZFd4gTw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":74107},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"gitHead":"2e1efa0a7d0511d2ff75c613230557a96cf0628a","scripts":{"test":"npm run build && node --test test/*.test.mjs","build":"npm run clean && tsc -p tsconfig.build.json","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","prepack":"npm run typecheck && npm test","typecheck":"tsc --noEmit"},"_npmUser":{"name":"scan-kenteken","email":"mark@scankenteken.nl"},"repository":{"url":"git+https://github.com/scan-kenteken/kenteken-kit.git","type":"git"},"_npmVersion":"11.12.1","description":"Tiny Dutch kenteken formatter, parser, and validator toolkit.","directories":{},"sideEffects":false,"_nodeVersion":"24.13.0","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3"},"_npmOperationalInternal":{"tmp":"tmp/kenteken-kit_0.2.2_1781721476989_0.9620905393135559","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"kenteken-kit","version":"0.2.3","keywords":["kenteken","registration-plate","number-plate","dutch","netherlands","formatter","validator","rdw"],"license":"MIT","_id":"kenteken-kit@0.2.3","maintainers":[{"name":"scan-kenteken","email":"mark@scankenteken.nl"}],"homepage":"https://github.com/scan-kenteken/kenteken-kit#readme","bugs":{"url":"https://github.com/scan-kenteken/kenteken-kit/issues"},"dist":{"shasum":"fd7cc28224f9fa99f6e2fce0710a16a90d652606","tarball":"https://registry.npmjs.org/kenteken-kit/-/kenteken-kit-0.2.3.tgz","fileCount":6,"integrity":"sha512-mVIUezUHRcpKA6m8R6QWh2LuUNf4mxFO+8apTNCgskAavXguqrJf+cjdRCR5/HvO5zEwSwLCCnPH2aLssMyuvA==","signatures":[{"sig":"MEUCIQDRC7TlIb9+nF3j81G51tQDJX7dPoeEZrueDZg8YS8smAIgctPFO+2PswNGidrrj2tQ+dQU/Egj/dbVaR29QgseMyc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/kenteken-kit@0.2.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":75510},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"gitHead":"3ea1d59ec51de0a437ecc253ab7f6cae763ac948","scripts":{"test":"npm run build && node --test test/*.test.mjs","build":"npm run clean && tsc -p tsconfig.build.json","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","prepack":"npm run typecheck && npm test","typecheck":"tsc --noEmit","version:bump":"node scripts/bump-version.mjs","version:sync":"node scripts/sync-version.mjs","version:check":"node scripts/check-versions.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:034efed1-3790-467d-9e2f-f834966a9778"}},"repository":{"url":"git+https://github.com/scan-kenteken/kenteken-kit.git","type":"git"},"_npmVersion":"11.13.0","description":"Tiny Dutch kenteken formatter, parser, and validator toolkit.","directories":{},"sideEffects":false,"_nodeVersion":"24.16.0","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3"},"_npmOperationalInternal":{"tmp":"tmp/kenteken-kit_0.2.3_1781722631953_0.47322747298481715","host":"s3://npm-registry-packages-npm-production"}},"0.2.4":{"name":"kenteken-kit","version":"0.2.4","keywords":["kenteken","registration-plate","number-plate","dutch","netherlands","formatter","validator","rdw"],"license":"MIT","_id":"kenteken-kit@0.2.4","maintainers":[{"name":"scan-kenteken","email":"mark@scankenteken.nl"}],"homepage":"https://github.com/scan-kenteken/kenteken-kit#readme","bugs":{"url":"https://github.com/scan-kenteken/kenteken-kit/issues"},"dist":{"shasum":"fbd638fe2797b63d131d9dca4296294c6864c81c","tarball":"https://registry.npmjs.org/kenteken-kit/-/kenteken-kit-0.2.4.tgz","fileCount":7,"integrity":"sha512-p3scdkADgt3ZFKBGLJtiqQxTPfU4Ur8YIpGG7c+w+7Lf9wx2is/N2osyuYZobwCS3hsrirWBdVHGW4adaSaMNg==","signatures":[{"sig":"MEUCIFPNFoySZoOtRs6q8Dq8WZCW7fzNPfZmLmEfpJj3ynrPAiEArDPKATuYxBnT1qDOUBRXyZOAfLl7FPtcGyvWgN1IwwQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/kenteken-kit@0.2.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":250383},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"gitHead":"644d13af2ca208cba3ac1596c569bf17529178eb","scripts":{"test":"npm run build && node --test test/*.test.mjs","build":"npm run clean && tsc -p tsconfig.build.json","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","prepack":"npm run typecheck && npm test && node scripts/pack-readme.mjs npm","postpack":"node scripts/pack-readme.mjs restore","typecheck":"tsc --noEmit","version:bump":"node scripts/bump-version.mjs","version:sync":"node scripts/sync-version.mjs","version:check":"node scripts/check-versions.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:034efed1-3790-467d-9e2f-f834966a9778"}},"repository":{"url":"git+https://github.com/scan-kenteken/kenteken-kit.git","type":"git"},"_npmVersion":"11.13.0","description":"Tiny Dutch kenteken formatter, parser, and validator toolkit.","directories":{},"sideEffects":false,"_nodeVersion":"24.16.0","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3"},"_npmOperationalInternal":{"tmp":"tmp/kenteken-kit_0.2.4_1781723539613_0.5503809225516629","host":"s3://npm-registry-packages-npm-production"}},"0.2.6":{"name":"kenteken-kit","version":"0.2.6","description":"Tiny Dutch kenteken formatter, parser, and validator toolkit.","type":"module","license":"MIT","sideEffects":false,"engines":{"node":">=18"},"main":"./dist/index.js","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"scripts":{"clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","build":"npm run clean && tsc -p tsconfig.build.json","test":"npm run build && node --test test/*.test.mjs","typecheck":"tsc --noEmit","version:sync":"node scripts/sync-version.mjs","version:check":"node scripts/check-versions.mjs","version:bump":"node scripts/bump-version.mjs","prepack":"npm run typecheck && npm test && node scripts/pack-readme.mjs npm","postpack":"node scripts/pack-readme.mjs restore"},"keywords":["kenteken","registration-plate","number-plate","dutch","netherlands","formatter","validator","rdw"],"repository":{"type":"git","url":"git+https://github.com/scan-kenteken/kenteken-kit.git"},"bugs":{"url":"https://github.com/scan-kenteken/kenteken-kit/issues"},"homepage":"https://github.com/scan-kenteken/kenteken-kit#readme","devDependencies":{"typescript":"^5.9.3"},"gitHead":"b70e2eec7078b635674525e949ae27337a1dd4f4","_id":"kenteken-kit@0.2.6","_nodeVersion":"24.16.0","_npmVersion":"11.13.0","dist":{"integrity":"sha512-eT2PaUUEokV7XWV8tXi2YtuF6frTmrAPo/F1pU1Zy6Fh3wPmCAIJDO4GeJ2uN6trnLPFdz6DokRBqgHuhnzcAQ==","shasum":"943ba29fd78ec9d8bbb621f52fe75a17db286183","tarball":"https://registry.npmjs.org/kenteken-kit/-/kenteken-kit-0.2.6.tgz","fileCount":7,"unpackedSize":250457,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/kenteken-kit@0.2.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCwONmAE30GqPApaD48MsAXfvw2YcG2IBE/HpHXfAShMwIhAOsS/TPC4T/NKiJMBEVG0ZLIQA0znGvGX6t/dkNlbQcF"}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:034efed1-3790-467d-9e2f-f834966a9778"}},"directories":{},"maintainers":[{"name":"scan-kenteken","email":"mark@scankenteken.nl"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/kenteken-kit_0.2.6_1781859957892_0.59171981154861"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-16T19:13:14.586Z","modified":"2026-06-19T09:05:58.336Z","0.1.0":"2026-06-16T19:13:14.806Z","0.2.1":"2026-06-17T18:26:36.284Z","0.2.2":"2026-06-17T18:37:57.199Z","0.2.3":"2026-06-17T18:57:12.113Z","0.2.4":"2026-06-17T19:12:19.820Z","0.2.6":"2026-06-19T09:05:58.070Z"},"bugs":{"url":"https://github.com/scan-kenteken/kenteken-kit/issues"},"license":"MIT","homepage":"https://github.com/scan-kenteken/kenteken-kit#readme","keywords":["kenteken","registration-plate","number-plate","dutch","netherlands","formatter","validator","rdw"],"repository":{"type":"git","url":"git+https://github.com/scan-kenteken/kenteken-kit.git"},"description":"Tiny Dutch kenteken formatter, parser, and validator toolkit.","maintainers":[{"name":"scan-kenteken","email":"mark@scankenteken.nl"}],"readme":"# kenteken-kit\n\n`formatKentekenPartial` formats live input as a Dutch plate while the user types.\n\n<p align=\"center\">\n  <img src=\"./assets/format-kenteken-partial-demo.gif\" alt=\"formatKentekenPartial demo: valid and invalid Dutch plates\" />\n</p>\n\nTiny Dutch kenteken formatting, parsing, and validation for JavaScript and TypeScript.\n\nThis package is intentionally small:\n\n- no runtime dependencies\n- pure functions, no class instance state\n- modern ESM build\n- TypeScript declarations\n- partial formatting for live inputs and OCR cleanup\n- parse results with issue codes instead of only `true` or `false`\n\n## Install\n\n```sh\nnpm install kenteken-kit\n```\n\n## Usage\n\n```ts\nimport {\n  formatKenteken,\n  formatKentekenPartial,\n  isKenteken,\n  normalizeKenteken,\n  parseKenteken,\n} from \"kenteken-kit\";\n\nnormalizeKenteken(\" kjr-50.s \"); // \"KJR50S\"\nformatKenteken(\"kjr50s\"); // \"KJR-50-S\"\nformatKentekenPartial(\"kjr5\"); // \"KJR-5\"\nisKenteken(\"G-001-BB\"); // true\n\nparseKenteken(\"G-001-BB\");\n// {\n//   input: \"G-001-BB\",\n//   normalized: \"G001BB\",\n//   formatted: \"G-001-BB\",\n//   series: 10,\n//   seriesPattern: \"X-999-XX\",\n//   isValid: true,\n//   issues: []\n// }\n```\n\n## API\n\n### `normalizeKenteken(raw)`\n\nUppercases `raw` and removes every character except ASCII letters and digits.\n\n### `formatKenteken(raw)`\n\nReturns a normalized kenteken with RDW-style dash groups when the value matches one\nof the supported series. Unknown 6-character shapes are returned normalized.\n\n### `formatKentekenPartial(raw)`\n\nFormats up to six normalized characters for live input fields. When a partial\nvalue has a single matching series prefix, it uses that series' grouping.\nOtherwise it falls back to simple letter/digit runs.\n\n### `parseKenteken(raw)`\n\nReturns normalized text, formatted text, series metadata, and validation issues.\n\nIssue codes:\n\n- `too_short`\n- `too_long`\n- `unknown_series`\n- `disallowed_letter`\n- `forbidden_combination`\n\n### `isKenteken(raw)`\n\nConvenience boolean around `parseKenteken(raw).isValid`.\n\n### `KENTEKEN_SERIES`\n\nMetadata for the supported Dutch kenteken series. Each item includes a series\nnumber, display pattern, normalized mask, group lengths, and example.\n\n## Rules and scope\n\nThe formatter supports 14 common Dutch kenteken series. Validation applies general\nRDW-style letter and combination rules, but this package is not an issuance\ncheck. It does not tell you whether a specific kenteken actually exists, belongs\nto a specific vehicle category, or was issued on a specific date.\n\nFor vehicle data, use RDW open data or the official RDW kentekencheck. This\npackage is not affiliated with RDW.\n\nUseful RDW references:\n\n- https://www.rdw.nl/de-kentekenplaat/cijfers-en-letters-op-de-kentekenplaat\n- https://www.rdw.nl/de-kentekenplaat/overzicht-van-kentekenseries\n\n## License\n\nMIT\n","readmeFilename":"README.md"}