{"_id":"@emdzej/ncsx-text-tables","_rev":"6-143f82ae8bd98747e4989845da8d449a","name":"@emdzej/ncsx-text-tables","dist-tags":{"latest":"0.9.0"},"versions":{"0.4.0":{"name":"@emdzej/ncsx-text-tables","version":"0.4.0","_id":"@emdzej/ncsx-text-tables@0.4.0","maintainers":[{"name":"emdzej","email":"michal@jaskolski.pro"}],"homepage":"https://github.com/emdzej/ncsx#readme","bugs":{"url":"https://github.com/emdzej/ncsx/issues"},"dist":{"shasum":"62a9bd53e5db37e2a3a23799a727c9922f8cdded","tarball":"https://registry.npmjs.org/@emdzej/ncsx-text-tables/-/ncsx-text-tables-0.4.0.tgz","fileCount":31,"integrity":"sha512-4z9Ovlw+capVYPNLcuybm0H/LhFagZrlYoUettTU95/pGpvgK00h7NjECCOirPl6Kwxi6AG+9IIeljF7UJjkoA==","signatures":[{"sig":"MEYCIQDgmgD65uqT8/FrVNIabnhh3kN/+/LmvgUOY0RbPOERYwIhAIqeDBdoL1YTARsbsg8sLJcLJ45khbgePWXkf9axT8jY","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":40308},"main":"dist/index.js","type":"module","_from":"file:emdzej-ncsx-text-tables-0.4.0.tgz","types":"dist/index.d.ts","scripts":{"lint":"eslint .","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/076c58b079a6b19be0e94a98768f760c/emdzej-ncsx-text-tables-0.4.0.tgz","_integrity":"sha512-4z9Ovlw+capVYPNLcuybm0H/LhFagZrlYoUettTU95/pGpvgK00h7NjECCOirPl6Kwxi6AG+9IIeljF7UJjkoA==","repository":{"url":"git+https://github.com/emdzej/ncsx.git","type":"git","directory":"packages/text-tables"},"_npmVersion":"11.14.1","description":"Parsers for NCSEXPER DATEN text tables (SGFAM, ZST, AT, AT.M00, AT.ZUS). Spec: ../../docs/daten-format.md §2","directories":{},"_nodeVersion":"22.22.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.1.8","@types/node":"^22.13.1"},"_npmOperationalInternal":{"tmp":"tmp/ncsx-text-tables_0.4.0_1779705624439_0.38976294202582085","host":"s3://npm-registry-packages-npm-production"}},"0.5.1":{"name":"@emdzej/ncsx-text-tables","version":"0.5.1","_id":"@emdzej/ncsx-text-tables@0.5.1","maintainers":[{"name":"emdzej","email":"michal@jaskolski.pro"}],"homepage":"https://github.com/emdzej/ncsx#readme","bugs":{"url":"https://github.com/emdzej/ncsx/issues"},"dist":{"shasum":"1021ba406bef469f9cb7e273bbab3cecdb7d9909","tarball":"https://registry.npmjs.org/@emdzej/ncsx-text-tables/-/ncsx-text-tables-0.5.1.tgz","fileCount":31,"integrity":"sha512-8feAJrUxn2g8NnG2rhOXYINn3+hA0j05rZP6BLwGK5IgF+PnMtqPw5i/EINO+SzxpjhKOWfAF/QiqxP5EfhyfA==","signatures":[{"sig":"MEUCID70QT8WUz6Seg10kFNOv6FxPMByWiCPH2/nHwdY+MQCAiEAprSYRg3iU3UFF96Edq17qytp3Dh47bwlgSNHfeNjO80=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":40308},"main":"dist/index.js","type":"module","_from":"file:emdzej-ncsx-text-tables-0.5.1.tgz","types":"dist/index.d.ts","scripts":{"lint":"eslint .","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/ed1f25c1dca7a4ee0c13298afe445709/emdzej-ncsx-text-tables-0.5.1.tgz","_integrity":"sha512-8feAJrUxn2g8NnG2rhOXYINn3+hA0j05rZP6BLwGK5IgF+PnMtqPw5i/EINO+SzxpjhKOWfAF/QiqxP5EfhyfA==","repository":{"url":"git+https://github.com/emdzej/ncsx.git","type":"git","directory":"packages/text-tables"},"_npmVersion":"11.14.1","description":"Parsers for NCSEXPER DATEN text tables (SGFAM, ZST, AT, AT.M00, AT.ZUS). Spec: ../../docs/daten-format.md §2","directories":{},"_nodeVersion":"22.22.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.1.8","@types/node":"^22.13.1"},"_npmOperationalInternal":{"tmp":"tmp/ncsx-text-tables_0.5.1_1779876435389_0.39178059869327764","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@emdzej/ncsx-text-tables","version":"0.6.0","_id":"@emdzej/ncsx-text-tables@0.6.0","maintainers":[{"name":"emdzej","email":"michal@jaskolski.pro"}],"homepage":"https://github.com/emdzej/ncsx#readme","bugs":{"url":"https://github.com/emdzej/ncsx/issues"},"dist":{"shasum":"09d0d1b45a80307dfbea9ae881c26bbba373a973","tarball":"https://registry.npmjs.org/@emdzej/ncsx-text-tables/-/ncsx-text-tables-0.6.0.tgz","fileCount":31,"integrity":"sha512-dIFYZ5kw6yeXiYpmoF1C9ZNsYMZB2eE1gEPSlV8p7r7VRmf+60CZ+Gl+oAs86EeBfo78el+l/UDwpkoTZXRjvw==","signatures":[{"sig":"MEYCIQDh1sV1PnGwtl0fyzPt9feKHQBB1gb0OqTyHurktwCW3QIhALgAiLQngc8da7Xe3wJ8UogHRJhvcKxvWjoD3ZQaiX2z","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":40308},"main":"dist/index.js","type":"module","_from":"file:emdzej-ncsx-text-tables-0.6.0.tgz","types":"dist/index.d.ts","scripts":{"lint":"eslint .","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/279b133ad4002f269001b5b85a11d4e9/emdzej-ncsx-text-tables-0.6.0.tgz","_integrity":"sha512-dIFYZ5kw6yeXiYpmoF1C9ZNsYMZB2eE1gEPSlV8p7r7VRmf+60CZ+Gl+oAs86EeBfo78el+l/UDwpkoTZXRjvw==","repository":{"url":"git+https://github.com/emdzej/ncsx.git","type":"git","directory":"packages/text-tables"},"_npmVersion":"11.14.1","description":"Parsers for NCSEXPER DATEN text tables (SGFAM, ZST, AT, AT.M00, AT.ZUS). Spec: ../../docs/daten-format.md §2","directories":{},"_nodeVersion":"22.22.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.1.8","@types/node":"^22.13.1"},"_npmOperationalInternal":{"tmp":"tmp/ncsx-text-tables_0.6.0_1779981239521_0.11525632279444364","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@emdzej/ncsx-text-tables","version":"0.7.0","_id":"@emdzej/ncsx-text-tables@0.7.0","maintainers":[{"name":"emdzej","email":"michal@jaskolski.pro"}],"homepage":"https://github.com/emdzej/ncsx#readme","bugs":{"url":"https://github.com/emdzej/ncsx/issues"},"dist":{"shasum":"a7275165b54620faee541e4c7cc862f1b7e32be3","tarball":"https://registry.npmjs.org/@emdzej/ncsx-text-tables/-/ncsx-text-tables-0.7.0.tgz","fileCount":31,"integrity":"sha512-yYo2MTK5MM7Av1jZ6aVkpiTEw5976VJRr18c5UpnoR+qxClDQrZ+1X9GVnGvbFeiL2dN1Pu2WQlVpgw6H9arPA==","signatures":[{"sig":"MEUCIQDQdcoQ6Nd2xUCi9N+fBYBS0UFl0vZtgMwAxx3C0ZwsbwIgRYq44ocBiiG699NTvVyEQqrJgctbLTc2OPN5l+O2OAY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":40308},"main":"dist/index.js","type":"module","_from":"file:emdzej-ncsx-text-tables-0.7.0.tgz","types":"dist/index.d.ts","scripts":{"lint":"eslint .","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/d44ac8c4bc40e670f4d1dcc5a743d29a/emdzej-ncsx-text-tables-0.7.0.tgz","_integrity":"sha512-yYo2MTK5MM7Av1jZ6aVkpiTEw5976VJRr18c5UpnoR+qxClDQrZ+1X9GVnGvbFeiL2dN1Pu2WQlVpgw6H9arPA==","repository":{"url":"git+https://github.com/emdzej/ncsx.git","type":"git","directory":"packages/text-tables"},"_npmVersion":"11.14.1","description":"Parsers for NCSEXPER DATEN text tables (SGFAM, ZST, AT, AT.M00, AT.ZUS). Spec: ../../docs/daten-format.md §2","directories":{},"_nodeVersion":"22.22.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.1.8","@types/node":"^22.13.1"},"_npmOperationalInternal":{"tmp":"tmp/ncsx-text-tables_0.7.0_1780063005628_0.863656066544793","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"@emdzej/ncsx-text-tables","version":"0.8.0","_id":"@emdzej/ncsx-text-tables@0.8.0","maintainers":[{"name":"emdzej","email":"michal@jaskolski.pro"}],"homepage":"https://github.com/emdzej/ncsx#readme","bugs":{"url":"https://github.com/emdzej/ncsx/issues"},"dist":{"shasum":"40f10ba642729772d716e2c5fd2afd06e2f2d820","tarball":"https://registry.npmjs.org/@emdzej/ncsx-text-tables/-/ncsx-text-tables-0.8.0.tgz","fileCount":31,"integrity":"sha512-VI34LoBMW9RKEUjaWcIN7U3OPQXJzx7sZNDpsYW7Jrw5s6/UKMQtXyQ/ZUMab3ZgEo2kG66gaT2zaDUnWPLzkg==","signatures":[{"sig":"MEUCIQCeHM6EG0EqMpfNn/YpbIecvduHfPUMpBfxHfMqrDWvpwIgVMpfOQGZfg1zM3WW6TQ3naTvpqqafNz0CWx00gTAKxc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":40308},"main":"dist/index.js","type":"module","_from":"file:emdzej-ncsx-text-tables-0.8.0.tgz","types":"dist/index.d.ts","scripts":{"lint":"eslint .","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/b7451f4aab2e1376a9e555d0bcadf0ea/emdzej-ncsx-text-tables-0.8.0.tgz","_integrity":"sha512-VI34LoBMW9RKEUjaWcIN7U3OPQXJzx7sZNDpsYW7Jrw5s6/UKMQtXyQ/ZUMab3ZgEo2kG66gaT2zaDUnWPLzkg==","repository":{"url":"git+https://github.com/emdzej/ncsx.git","type":"git","directory":"packages/text-tables"},"_npmVersion":"11.16.0","description":"Parsers for NCSEXPER DATEN text tables (SGFAM, ZST, AT, AT.M00, AT.ZUS). Spec: ../../docs/daten-format.md §2","directories":{},"_nodeVersion":"22.22.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.1.8","@types/node":"^22.13.1"},"_npmOperationalInternal":{"tmp":"tmp/ncsx-text-tables_0.8.0_1780758408854_0.9676969393711581","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"@emdzej/ncsx-text-tables","version":"0.9.0","description":"Parsers for NCSEXPER DATEN text tables (SGFAM, ZST, AT, AT.M00, AT.ZUS). Spec: ../../docs/daten-format.md §2","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/ncsx.git","directory":"packages/text-tables"},"scripts":{"build":"tsc -p tsconfig.json","test":"vitest run --passWithNoTests","test:watch":"vitest","lint":"eslint .","typecheck":"tsc --noEmit","clean":"rm -rf dist .turbo *.tsbuildinfo"},"_id":"@emdzej/ncsx-text-tables@0.9.0","bugs":{"url":"https://github.com/emdzej/ncsx/issues"},"homepage":"https://github.com/emdzej/ncsx#readme","_integrity":"sha512-iJm/DXReNqK/UDHeR6PNQXOL3qt6OOo+5aTyQnFbesGom78gBMYY4+sDwnzPbtc86j/dCbz4xo6aFQBQU5uyBg==","_resolved":"/private/var/folders/7h/x_w_580x4s9dq3sq11tpvzkwy3nbj8/T/4c9d850f43b15f716843193a317cb56c/emdzej-ncsx-text-tables-0.9.0.tgz","_from":"file:emdzej-ncsx-text-tables-0.9.0.tgz","_nodeVersion":"22.22.1","_npmVersion":"11.16.0","dist":{"integrity":"sha512-iJm/DXReNqK/UDHeR6PNQXOL3qt6OOo+5aTyQnFbesGom78gBMYY4+sDwnzPbtc86j/dCbz4xo6aFQBQU5uyBg==","shasum":"470c87bd61fe649df77cbde58f71e163e50b77e4","tarball":"https://registry.npmjs.org/@emdzej/ncsx-text-tables/-/ncsx-text-tables-0.9.0.tgz","fileCount":31,"unpackedSize":40308,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQD5o/WSaslXi0nyxiWzUrvYTFHPmXhQ8SxiBQDIgkGEoAIgcKwRfO08ND2R7CpxUgcothN2ZdAXb3mKGSaaIrcIfWI="}]},"_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/ncsx-text-tables_0.9.0_1783336557732_0.6786526488545044"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-25T10:40:24.206Z","modified":"2026-07-06T11:15:57.977Z","0.4.0":"2026-05-25T10:40:24.598Z","0.5.1":"2026-05-27T10:07:15.556Z","0.6.0":"2026-05-28T15:13:59.696Z","0.7.0":"2026-05-29T13:56:45.761Z","0.8.0":"2026-06-06T15:06:49.023Z","0.9.0":"2026-07-06T11:15:57.868Z"},"bugs":{"url":"https://github.com/emdzej/ncsx/issues"},"homepage":"https://github.com/emdzej/ncsx#readme","repository":{"type":"git","url":"git+https://github.com/emdzej/ncsx.git","directory":"packages/text-tables"},"description":"Parsers for NCSEXPER DATEN text tables (SGFAM, ZST, AT, AT.M00, AT.ZUS). Spec: ../../docs/daten-format.md §2","maintainers":[{"name":"emdzej","email":"michal@jaskolski.pro"}],"readme":"# @emdzej/ncsx-text-tables\n\nParsers for the **text-format** companion files NCSEXPER ships alongside its binary DATEN\nfiles under `C:\\NCSEXPER\\DATEN\\<BR>\\`. These are all line-oriented, ISO-8859-1, with their\nown legacy syntax conventions (semicolon-prefixed data rows, positional whitespace\ncolumns, etc.).\n\nSpec: [`../../docs/daten-format.md` §2](../../docs/daten-format.md#2-text-table-format).\n\n## Files parsed\n\n| File                  | Parser            | Purpose                                                    |\n|-----------------------|-------------------|------------------------------------------------------------|\n| `<BR>SGFAM.DAT`       | `parseSgfam`      | Logical SG short-name → `(CABD, SGBD, ZCS-flag, FA-flag)`  |\n| `<BR>AT.000`          | `parseAt`         | FA-token dictionary: type-letter + code + FSW list         |\n| `<BR>AT.M00`          | `parseAtM00`      | Compact M-list (Z / E / W / S category records)            |\n| `<BR>AT.ZUS`          | `parseAtZus`      | AT companion (same lexical form, mostly change log)        |\n| `<BR>ZST.000`         | `parseZst`        | SA-bit / ASW-bit / FA-bit master with masks + FSW keywords |\n\n## Install\n\n```bash\npnpm add @emdzej/ncsx-text-tables\n# or:\n\"@emdzej/ncsx-text-tables\": \"workspace:*\"\n```\n\n**Encoding matters.** These files are Latin-1, not UTF-8. Decode accordingly:\n\n```ts\nconst raw = readFileSync(path, 'latin1');\n```\n\n## Quick start\n\n```ts\nimport { readFileSync } from 'node:fs';\nimport {\n  parseSgfam,\n  parseAt,\n  parseAtM00,\n  parseZst,\n} from '@emdzej/ncsx-text-tables';\n\nconst root = '/Users/me/NCSEXPER/DATEN/e46';\n\nconst sgfam = parseSgfam(readFileSync(`${root}/E46SGFAM.DAT`, 'latin1'));\nconsole.log(sgfam.rows.find((r) => r.sgName === 'EWS'));\n// { sgName: 'EWS', cabd: 'A_EWS3', sgbd: 'C_EWS3', zcsFlag: …, faFlag: … }\n\nconst at = parseAt(readFileSync(`${root}/E46AT.000`, 'latin1'));\nconst w502 = at.records.find((r) => r.category === 'W' && r.code === '502');\nconsole.log(w502?.fsws);   // ['SWA', …] — FSWs implied by FA code 502\n\nconst zst = parseZst(readFileSync(`${root}/E46ZST.000`, 'latin1'));\nconsole.log(zst.records.filter((r) => r.fsw === 'DAUERTON').length);\n```\n\n## API\n\n| Export                | Returns                                       |\n|-----------------------|-----------------------------------------------|\n| `parseSgfam(text)`    | `SgfamFile { rows: SgfamRow[] }`              |\n| `parseAt(text)`       | `AtFile { records: AtRecord[] }`              |\n| `parseAtM00(text)`    | `AtM00File { entries: AtM00Entry[] }`         |\n| `parseAtZus(text)`    | Same shape as `parseAt`                       |\n| `parseZst(text)`      | `ZstFile { header, records, unparsed }`       |\n| `iterLines(text)`     | Low-level line iterator (handles comments)    |\n| `tokens(line)`        | Whitespace-tokenise a row line                |\n\n## Key concepts\n\n### SGFAM — the SG family table\n\nPer-SG declaration:\n\n- `sgName` — logical short name like `EWS`, `KMB`, `LSZ_E46`\n- `cabd` — coding-bundle DATEN file name to load (e.g. `A_EWS3` → opens `A_EWS3.C07`)\n- `sgbd` — EDIABAS SGBD file the cable speaks (e.g. `C_EWS3`)\n- `zcsFlag` / `faFlag` — whether this SG participates in ZCS / FA scopes\n\n### AT — FA token dictionary\n\nEach record is `(category, code, fsws[])`:\n\n- `category` — one of `W` (Werks-/order option), `Z` (Zwang/forced), `E` (Entfall/excluded),\n  `S` (Sonderfall/special)\n- `code` — 4-digit short code, e.g. `0205`\n- `fsws[]` — function-keyword names this FA code implies (used by `fa-asw` to build the\n  ASW bit set)\n\n### AT.M00 — compact M-list\n\nA variant of AT used for chassis-wide forced-inclusion rules. `parseAtM00` exposes the same\n`(category, code, fsws[])` shape.\n\n### ZST — the master SA/FA/FSW table\n\nThe grand reference for SA/VN/FA-code ↔ ASW-bit-mask + FA-bit-mask + FSW keyword.\nNotably, the file format uses lines that start with `;` to look like comments to legacy\neditors, but the parser knows to treat them as data when they match the right shape.\n\n## Related\n\n- [`@emdzej/ncsx-chassis`](../chassis/) — loads + indexes all of these into a `Chassis` bundle.\n- [`@emdzej/ncsx-fa-asw`](../fa-asw/) — uses `parseAt` output to map FA strings → ASW bit set.\n- Spec: [`../../docs/daten-format.md` §2](../../docs/daten-format.md#2-text-table-format).\n","readmeFilename":"README.md"}