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, }