diff --git a/p/sncb/index.js b/p/sncb/index.js index ad7f6541..b9937814 100644 --- a/p/sncb/index.js +++ b/p/sncb/index.js @@ -3,6 +3,9 @@ const {readFileSync} = require('fs') const {join} = require('path') const {Agent} = require('https') +const {strictEqual: eql} = require('assert') +const {parseHook} = require('../../lib/profile-hooks') +const parseLine = require('../../parse/line') const products = require('./products') // `www.belgianrail.be:443` doesn't provide the necessary CA certificate @@ -21,6 +24,35 @@ const transformReqBody = ({opt}, body) => { return body } +// todo: this is ugly +const lineNameWithoutFahrtNr = ({parsed}) => { + const {name, fahrtNr} = parsed + if (!name || !fahrtNr || !/s\d/i.test(name)) return parsed + const i = name.indexOf(fahrtNr) + if (i < 0) return parsed + + if ( + /\s/.test(name[i - 1] || '') && // space before + name.length === i + fahrtNr.length // nothing behind + ) return { + ...parsed, + name: name.slice(0, i - 1) + name.slice(i + fahrtNr.length + 1), + } + return parsed +} +eql(lineNameWithoutFahrtNr({ + parsed: {name: 'THA 123', fahrtNr: '123'} +}).name, 'THA 123') +eql(lineNameWithoutFahrtNr({ + parsed: {name: 'S1 123', fahrtNr: '123'} +}).name, 'S1') +eql(lineNameWithoutFahrtNr({ + parsed: {name: 'S1-123', fahrtNr: '123'} +}).name, 'S1-123') +eql(lineNameWithoutFahrtNr({ + parsed: {name: 'S1 123a', fahrtNr: '123'} +}).name, 'S1 123a') + const sncbProfile = { locale: 'fr-BE', timezone: 'Europe/Brussels', @@ -31,6 +63,8 @@ const sncbProfile = { products, + parseLine: parseHook(parseLine, lineNameWithoutFahrtNr), + trip: true, refreshJourney: true, radar: true,