{"_id":"@emdzej/nfsx-data-files","_rev":"3-65adff4d1bde9949196d03f2aa824b32","name":"@emdzej/nfsx-data-files","dist-tags":{"latest":"0.4.0"},"versions":{"0.1.0":{"name":"@emdzej/nfsx-data-files","version":"0.1.0","_id":"@emdzej/nfsx-data-files@0.1.0","maintainers":[{"name":"emdzej","email":"michal@jaskolski.pro"}],"homepage":"https://github.com/emdzej/nfsx#readme","bugs":{"url":"https://github.com/emdzej/nfsx/issues"},"dist":{"shasum":"385936e8e155341864b34f7fb0d27f2dfe2e79a1","tarball":"https://registry.npmjs.org/@emdzej/nfsx-data-files/-/nfsx-data-files-0.1.0.tgz","fileCount":38,"integrity":"sha512-Ai87ktvOm59GLZt/sjsdkvzRFYqWAGL6EkpvanyK/ran4o08zdv4LWsWgZCyMsM4jiyRoZiJsDwSzMcURUkiQA==","signatures":[{"sig":"MEYCIQC7qKbxiWURQnrQ4uVpZIqkj7nSMfhcLTuEMP2eLFouUQIhAOScNWHUuvMtb3BDRIN/csQpLniOaNUWORdNUwra3Mmu","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":91382},"main":"dist/index.js","type":"module","_from":"file:emdzej-nfsx-data-files-0.1.0.tgz","types":"dist/index.d.ts","scripts":{"test":"vitest run --passWithNoTests","build":"tsc -p tsconfig.json","clean":"rm -rf dist .turbo *.tsbuildinfo","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"emdzej","email":"michal@jaskolski.pro"},"_resolved":"/private/var/folders/7h/x_w_580x4s9dq3sq11tpvzkwy3nbj8/T/ef590eb138307c205532accc3c276ba4/emdzej-nfsx-data-files-0.1.0.tgz","_integrity":"sha512-Ai87ktvOm59GLZt/sjsdkvzRFYqWAGL6EkpvanyK/ran4o08zdv4LWsWgZCyMsM4jiyRoZiJsDwSzMcURUkiQA==","repository":{"url":"git+https://github.com/emdzej/nfsx.git","type":"git","directory":"packages/data-files"},"_npmVersion":"11.14.1","description":"Plaintext parsers for BMW NFS / WinKFP data files: kmm_*.txt (planner inputs), HWNR.DA2 (part-number → SG lookup), KFCONF10.DA2 (per-SG flash config), SGIDC.AS2 / SGIDD.AS2 (auth material), npv.dat (ZB upgrade table), prgifsel.dat (transport selector). Al","directories":{},"_nodeVersion":"22.22.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.1.8","@types/node":"^22.13.1"},"_npmOperationalInternal":{"tmp":"tmp/nfsx-data-files_0.1.0_1780306006162_0.6716267561193354","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@emdzej/nfsx-data-files","version":"0.2.0","_id":"@emdzej/nfsx-data-files@0.2.0","maintainers":[{"name":"emdzej","email":"michal@jaskolski.pro"}],"homepage":"https://github.com/emdzej/nfsx#readme","bugs":{"url":"https://github.com/emdzej/nfsx/issues"},"dist":{"shasum":"2f721b9e6fa761d3bd884e27a3dd011fdb41f6f1","tarball":"https://registry.npmjs.org/@emdzej/nfsx-data-files/-/nfsx-data-files-0.2.0.tgz","fileCount":38,"integrity":"sha512-xWqTN/IHyemJJ9H9JjDhd269+yN0jIgGelGBBZ4CGcxN3r/62nJZLi/arfazZDcNtscwViJ2e4D98YgJVTVLxw==","signatures":[{"sig":"MEYCIQC3ZdzEmnpk+VzluYK/jwokogw1gLoy8PgWOZWiKOLalAIhAKtZdNMmiXYzvpFH6wHDt4EnemvEsCpPnTvlqxyNImrU","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":91382},"main":"dist/index.js","type":"module","_from":"file:emdzej-nfsx-data-files-0.2.0.tgz","types":"dist/index.d.ts","scripts":{"test":"vitest run --passWithNoTests","build":"tsc -p tsconfig.json","clean":"rm -rf dist .turbo *.tsbuildinfo","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"emdzej","email":"michal@jaskolski.pro"},"_resolved":"/private/var/folders/7h/x_w_580x4s9dq3sq11tpvzkwy3nbj8/T/d91c40fbaa1f9eb2a4f35a468ed64735/emdzej-nfsx-data-files-0.2.0.tgz","_integrity":"sha512-xWqTN/IHyemJJ9H9JjDhd269+yN0jIgGelGBBZ4CGcxN3r/62nJZLi/arfazZDcNtscwViJ2e4D98YgJVTVLxw==","repository":{"url":"git+https://github.com/emdzej/nfsx.git","type":"git","directory":"packages/data-files"},"_npmVersion":"11.14.1","description":"Plaintext parsers for BMW NFS / WinKFP data files: kmm_*.txt (planner inputs), HWNR.DA2 (part-number → SG lookup), KFCONF10.DA2 (per-SG flash config), SGIDC.AS2 / SGIDD.AS2 (auth material), npv.dat (ZB upgrade table), prgifsel.dat (transport selector). Al","directories":{},"_nodeVersion":"22.22.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.1.8","@types/node":"^22.13.1"},"_npmOperationalInternal":{"tmp":"tmp/nfsx-data-files_0.2.0_1780342462649_0.09526961102995601","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@emdzej/nfsx-data-files","version":"0.4.0","description":"Plaintext parsers for BMW NFS / WinKFP data files: kmm_*.txt (planner inputs), HWNR.DA2 (part-number → SG lookup), KFCONF10.DA2 (per-SG flash config), SGIDC.AS2 / SGIDD.AS2 (auth material), npv.dat (ZB upgrade table), prgifsel.dat (transport selector). Al","main":"dist/index.js","types":"dist/index.d.ts","type":"module","devDependencies":{"@types/node":"^22.13.1","vitest":"^2.1.8"},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/emdzej/nfsx.git","directory":"packages/data-files"},"scripts":{"build":"tsc -p tsconfig.json","test":"vitest run --passWithNoTests","test:watch":"vitest","typecheck":"tsc --noEmit","clean":"rm -rf dist .turbo *.tsbuildinfo"},"_id":"@emdzej/nfsx-data-files@0.4.0","bugs":{"url":"https://github.com/emdzej/nfsx/issues"},"homepage":"https://github.com/emdzej/nfsx#readme","_integrity":"sha512-m2KB/2Yt9XAaIP7pxJeu+hmpOYmT1jHRCgFrIX9prfl+a/ldCXaSEq8mIYbhStRgiKlLMTc5gVuppcYof4YPdw==","_resolved":"/private/var/folders/7h/x_w_580x4s9dq3sq11tpvzkwy3nbj8/T/aa5967bda1d2feb2a10a7c513b4117b3/emdzej-nfsx-data-files-0.4.0.tgz","_from":"file:emdzej-nfsx-data-files-0.4.0.tgz","_nodeVersion":"22.22.1","_npmVersion":"11.16.0","dist":{"integrity":"sha512-m2KB/2Yt9XAaIP7pxJeu+hmpOYmT1jHRCgFrIX9prfl+a/ldCXaSEq8mIYbhStRgiKlLMTc5gVuppcYof4YPdw==","shasum":"eb78aa76fb180ee5470e7730a2c32cbf20485744","tarball":"https://registry.npmjs.org/@emdzej/nfsx-data-files/-/nfsx-data-files-0.4.0.tgz","fileCount":38,"unpackedSize":91382,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCP8S9sv+wxZsxIjMFx8jIupZHEYJxUroq2wYZY3gLKPAIhAKJb+hkCcmC8WwjIZq7sG7WYuHKuf8oJYUGIJWvhJ6OQ"}]},"_npmUser":{"name":"emdzej","email":"michal@jaskolski.pro"},"directories":{},"maintainers":[{"name":"emdzej","email":"michal@jaskolski.pro"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/nfsx-data-files_0.4.0_1783345224308_0.1896894277378054"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-01T09:26:45.964Z","modified":"2026-07-06T13:40:24.543Z","0.1.0":"2026-06-01T09:26:46.405Z","0.2.0":"2026-06-01T19:34:22.815Z","0.4.0":"2026-07-06T13:40:24.431Z"},"bugs":{"url":"https://github.com/emdzej/nfsx/issues"},"homepage":"https://github.com/emdzej/nfsx#readme","repository":{"type":"git","url":"git+https://github.com/emdzej/nfsx.git","directory":"packages/data-files"},"description":"Plaintext parsers for BMW NFS / WinKFP data files: kmm_*.txt (planner inputs), HWNR.DA2 (part-number → SG lookup), KFCONF10.DA2 (per-SG flash config), SGIDC.AS2 / SGIDD.AS2 (auth material), npv.dat (ZB upgrade table), prgifsel.dat (transport selector). Al","maintainers":[{"name":"emdzej","email":"michal@jaskolski.pro"}],"readme":"# @emdzej/nfsx-data-files\n\nPlaintext parsers for BMW NFS / WinKFP data files — the inputs to\nthe flash planner.\n\nAll file formats are line-oriented plaintext. The `.DA2` / `.AS2`\nextensions are versioned-format naming (not binary v2). See\n[`../../docs/architecture.md §9.2`](../../docs/architecture.md#92-file-format-reference-priorities-for-parser-implementation)\nfor the full format reference.\n\n## Status\n\n| File | Parser | Status |\n|---|---|---|\n| `kmm_SIT.txt` | `parseKmmSit` | ✅ |\n| `HWNR.DA2` | `parseHwnr` | ✅ |\n| `KFCONF10.DA2` | `parseKfConf` | ✅ |\n| `SGIDC.AS2`, `SGIDD.AS2` | `parseSgId` (shared) | ✅ |\n| `npv.dat` | `parseNpv` | ✅ |\n| `prgifsel.dat` | `parsePrgIfSel` | ✅ |\n| `kmm_SG.txt`, `kmm_SGK.txt`, `kmm_SWT.txt`, … (15 others) | — | ⏳ pending non-E46 SP-Daten samples |\n\n## Usage\n\n```typescript\nimport { parseKmmSit } from '@emdzej/nfsx-data-files';\nimport { readFileSync } from 'node:fs';\n\nconst content = readFileSync('kmm_SIT.txt', { encoding: 'latin1' });\nconst file = parseKmmSit(content);\n\nfor (const row of file.rows) {\n  console.log(`0x${row.diagAddr.toString(16)} ${row.shortName} ${row.transport}`);\n}\n\nfor (const err of file.unparsed) {\n  console.warn(`line ${err.lineNo}: ${err.reason}`);\n}\n```\n\n## Conventions\n\n- **Encoding**: BMW ships files as ISO-8859-1 / Latin-1 (umlauts in\n  comments). Read the file with `encoding: 'latin1'` upstream; the\n  parsers take JS strings and don't care about encoding.\n- **Error model**: rows that fail to parse land in `unparsed` rather\n  than throwing. A single malformed row in a 3000-row file\n  shouldn't sink the whole load.\n- **Raw preserved**: every parsed row carries `raw: string[]` for\n  forward-compat — unknown enum values stay round-trippable.\n","readmeFilename":"README.md"}