UNPKG

@drfrost/bods-js

Version:

JavaScript client for the UK's Bus Open Data Service (BODS) API

143 lines 4.62 kB
import type { DisruptionData } from '../types/index.js'; import { HttpClient } from './http-client.js'; /** * Client for interacting with the BODS Disruptions API * * The Disruptions API provides information about current and planned * disruptions to bus services in SIRI-SX format (XML). * Data is updated as new information becomes available. */ export declare class DisruptionsClient { private httpClient; constructor(httpClient: HttpClient); /** * Get all current service disruptions in SIRI-SX format * * @returns Promise resolving to SIRI-SX XML data containing all disruptions * * @example * ```typescript * // Get all current disruptions * const disruptions = await client.disruptions.getAll(); * console.log('Disruptions XML:', disruptions.xmlData); * * // You would typically parse the XML to extract specific disruption details * const parser = new DOMParser(); * const doc = parser.parseFromString(disruptions.xmlData, 'text/xml'); * ``` */ getAll(): Promise<DisruptionData>; /** * Get current service disruptions (alias for getAll) * * @returns Promise resolving to SIRI-SX XML data containing current disruptions * * @example * ```typescript * const currentDisruptions = await client.disruptions.getCurrent(); * ``` */ getCurrent(): Promise<DisruptionData>; /** * Helper method to parse SIRI-SX XML and extract basic disruption information * Note: This is a basic parser. For production use, consider a more robust XML parsing solution. * Requires a DOM environment (browser) or a polyfill like jsdom in Node.js. * * @param xmlData - Raw SIRI-SX XML data * @returns Array of parsed disruption objects * * @example * ```typescript * const disruptions = await client.disruptions.getAll(); * const parsed = client.disruptions.parseDisruptions(disruptions.xmlData); * * parsed.forEach(disruption => { * console.log(`${disruption.summary}: ${disruption.description}`); * }); * ``` */ parseDisruptions(xmlData: string): Array<{ situationNumber?: string; participantRef?: string; summary?: string; description?: string; severity?: string; startTime?: string; endTime?: string; planned?: boolean; }>; /** * Get and parse current disruptions in one call * * @returns Promise resolving to array of parsed disruption objects * * @example * ```typescript * const disruptions = await client.disruptions.getCurrentParsed(); * * disruptions.forEach(disruption => { * if (disruption.planned) { * console.log(`Planned disruption: ${disruption.summary}`); * } else { * console.log(`Unplanned disruption: ${disruption.summary}`); * } * }); * ``` */ getCurrentParsed(): Promise<Array<{ situationNumber?: string; participantRef?: string; summary?: string; description?: string; severity?: string; startTime?: string; endTime?: string; planned?: boolean; }>>; /** * Filter parsed disruptions by criteria * * @param disruptions - Array of parsed disruptions * @param filters - Filter criteria * @returns Filtered array of disruptions * * @example * ```typescript * const allDisruptions = await client.disruptions.getCurrentParsed(); * * // Get only unplanned disruptions * const unplanned = client.disruptions.filterDisruptions(allDisruptions, { * planned: false * }); * * // Get disruptions from specific participant * const tfgmDisruptions = client.disruptions.filterDisruptions(allDisruptions, { * participantRef: 'TfGM' * }); * ``` */ filterDisruptions(disruptions: Array<{ situationNumber?: string; participantRef?: string; summary?: string; description?: string; severity?: string; startTime?: string; endTime?: string; planned?: boolean; }>, filters: { planned?: boolean; participantRef?: string; severity?: string; }): Array<{ situationNumber?: string; participantRef?: string; summary?: string; description?: string; severity?: string; startTime?: string; endTime?: string; planned?: boolean; }>; } //# sourceMappingURL=disruptions-client.d.ts.map