import slugg from 'slugg'; const parseLine = ({profile}, p) => { if (!p) { return null; } // todo: handle this upstream const name = p.line || p.addName || p.name || null; // wtf const res = { type: 'line', // This is terrible, but FPTF demands an ID. Let's pray for HAFAS. id: p.prodCtx && p.prodCtx.lineId && slugg(p.prodCtx.lineId.trim()) || name && slugg(name.trim()) || null, // todo: what is p.prodCtx.matchId? use as `id`? expose it. fahrtNr: p.prodCtx && p.prodCtx.num || null, name, public: true, }; // todo: what is p.number? // todo: what is p.prodCtx.catCode? if (p.prodCtx && 'string' === typeof p.prodCtx.admin) { res.adminCode = p.prodCtx.admin; } if (p.prodCtx && 'string' === typeof p.prodCtx.catOut) { const productName = p.prodCtx.catOut.trim(); if (productName != '') { res.productName = productName; } } if ('cls' in p) { // todo: use profile.products.find() for this const byBitmask = []; for (let product of profile.products) { for (let bitmask of product.bitmasks) { byBitmask[bitmask] = product; } } // todo: what if `p.cls` is the sum of two bitmasks? const product = byBitmask[parseInt(p.cls)]; res.mode = product && product.mode || null; res.product = product && product.id || null; } if (p.operator) { res.operator = p.operator; } // todo: move up return res; }; export { parseLine, };