UNPKG

@furkot/export-ical

Version:

Generate iCalendar file from Furkot trip data.

49 lines (41 loc) 1.59 kB
import { v5 as uuid } from 'uuid'; import { formatArray } from './format.js'; import property from './property.js'; ical.contentType = 'text/calendar'; ical.extension = 'ics'; const NAMESPACE = 'e29ebc86-9ab8-420b-a8c6-932a120f4461'; function id2uuid(id, day) { if (day) { id += day; } return uuid(id, NAMESPACE) + '@furkot.com'; } function ts2date(ts) { // remove dashes and colons and strip milliseconds return new Date(ts).toISOString().replace(/[-:]/g, '').slice(0, -5); } export default function* ical({ metadata, routes }) { const dtstamp = ts2date(Date.now()); yield* property('BEGIN', 'VCALENDAR'); yield* property('VERSION', '2.0'); yield* property('PRODID', '-//code42day//Furkot - road trip planner//EN'); yield* property('X-WR-CALNAME', metadata.name); yield* property('X-WR-CALDESC', metadata.desc); for (const step of routes[0].points) { if (!(step.id && (step.name || step.address || step.url || step.notes))) { continue; } yield* property('BEGIN', 'VEVENT'); yield* property('DTSTAMP', dtstamp); yield* property('UID', id2uuid(step.id, step.day)); yield* property('SUMMARY', step.name); yield* property('DESCRIPTION', step.notes); yield* property('URL', step.url); yield* property('LOCATION', step.address); yield* property('GEO', [step.coordinates.lat, step.coordinates.lon], formatArray); yield* property('DTSTART', ts2date(step.arrival_time)); yield* property('DTEND', ts2date(step.departure_time)); yield* property('END', 'VEVENT'); } yield* property('END', 'VCALENDAR'); }