import { parseScan } from '../src/lib/barcode.ts'; const GS = '\x1D'; const RS = '\x1E'; // User's Digi-Key barcode as the scanner actually delivers it (with GS between // fields and the RS format-envelope after `[)>`). const digiKey = [ '[)>', RS, '06', GS, 'P2073-USB1035-GF-P-0-B-B-ND', GS, '1PUSB1035-GF-P-0-B-B', GS, '30P2073-USB1035-GF-P-0-B-B-ND', GS, 'K', GS, '1K9867254010', GS, '10K1242607169', GS, 'D25511', GS, 'T251215-501', GS, '11K1', GS, '4LCN', GS, 'Q6', GS, '11ZPICK', GS, '12Z1064967213', GS, '13Z9999992', GS, '20Z' + '0'.repeat(55) ].join(''); const cases = [ { name: "Digi-Key MH10.8.2 with GS separators (qty=6)", raw: digiKey, expected: { partCode: '2073-USB1035-GF-P-0-B-B-ND', quantity: 6 } }, { name: "same barcode but scanner stripped all separators (fallback)", raw: '[)>06P2073-USB1035-GF-P-0-B-B-ND1PUSB1035-GF-P-0-B-B30P2073-USB1035-GF-P-0-B-B-NDK1K9867254010K1242607169D25511T251215-50111K14LCNQ611ZPICK12Z1064967213Z99999920Z0000000000000000000000000000000000000000000000000000000', expected: { partCode: '2073-USB1035-GF-P-0-B-B-ND', quantity: 6 } }, { name: 'GS-separated without MH10.8.2 envelope', raw: `30PABC${GS}Q15`, expected: { partCode: 'ABC', quantity: 15 } }, { name: 'Quantity legitimately 611 before 11Z (fallback path)', raw: '[)>06PABC1PXYZQ61111ZPICK', expected: { partCode: 'ABC', quantity: 611 } }, { name: 'MH10.8.2 with separators, only 1P present', raw: `[)>06${GS}1PMYPART${GS}Q42`, expected: { partCode: 'MYPART', quantity: 42 } }, { name: 'JSON-like', raw: '{PM:WIDGET-42,QTY:7}', expected: { partCode: 'WIDGET-42', quantity: 7 } } ]; let pass = 0; let fail = 0; for (const c of cases) { const got = parseScan(c.raw); const ok = got.partCode === c.expected.partCode && got.quantity === c.expected.quantity; if (ok) { pass++; console.log(`ok ${c.name}`); } else { fail++; console.log(`FAIL ${c.name}`); console.log(` got ${JSON.stringify(got)}`); console.log(` expected ${JSON.stringify(c.expected)}`); } } console.log(`\n${pass}/${pass + fail} pass`); process.exit(fail ? 1 : 0);