Skip to content

Parse and generate iCalendar with Typescript

License

Notifications You must be signed in to change notification settings

Neuvernetzung/ts-ics

Repository files navigation

TS-ICS

neuvernetzung-logo

NPM

This package can parse and create Ics files and provides TypeScript types for easy handling.

Motivation

Many of the Ics packages provide good functionality, however none of these are type safe. This package can parse Ics strings with Zod. Also, many packages are not actively maintained.

Installation

npm i ts-ics

generate

generateIcsCalendar

import { generateIcsCalendar, type VCalendar } from "ts-ics";

const calendar: VCalendar = {...}

const icsCalendarString = generateIcsCalendar(calendar);

generateIcsEvent

import { generateIcsEvent, type VEvent } from "ts-ics";

const event: VEvent = {...}

const icsEventString = generateIcsEvent(event);

parse

parseIcsCalendar

parse with zod

import { parseIcsCalendar, type VCalendar } from "ts-ics";

const calendarParsed: VCalendar = parseIcsCalendar(icsCalendarString);

without zod parsing

import { icsCalendarToObject, type VCalendar } from "ts-ics";

const calendar: VCalendar = icsCalendarToObject(icsCalendarString);

parseIcsEvent

parse with zod

import { parseIcsEvent, type VEvent } from "ts-ics";

const eventParsed: VEvent = parseIcsEvent(icsEventString);

without zod parsing

import { icsEventToObject, type VEvent } from "ts-ics";

const event: VEvent = icsEventToObject(icsEventString);

utils

extendByRecurrenceRule

import { extendByRecurrenceRule } from "ts-ics";

const start = new Date(Date.UTC(2023, 9, 5));
const ruleString = "FREQ=DAILY;BYMINUTE=15,16,17,18,19;BYSECOND=0,20,40";

const rule = parseIcsRecurrenceRule(ruleString);

const dates = extendByRecurrenceRule(rule, {
  start,
  end: addDays(start, 1),
});

License

MIT - License

Thanks

Thanks to iCalendar.org for the ics documentation and the many examples which are used for testing purposes.