[v0.1.0] — 2026-08-16
Added
-
First release. Reads and writes RFC 8984 JSCalendar —
Event,TaskandGroup, with theLocation,VirtualLocation,Link,Relation,Participant,RecurrenceRule,NDayandAlertsub-objects.JSCalendar.decode/1dispatches on@type;JSCalendar.encode/1writes it back. -
No dependencies. Erlang's
:jsonand Elixir'sDurationare both standard library, so values map to standard types —LocalDateTimetoNaiveDateTime,UTCDateTimetoDateTime, and aString[Boolean]set to aMapSet. Requires Elixir 1.17 and OTP 27. -
Unknown properties round-trip. Anything the specification does not name is kept in each object's
extraand written back untouched, and a group entry of an unrecognised type is ignored rather than rejected or dropped, as RFC 8984 §5.3.1 requires. -
Properties equal to their RFC default are omitted on encode, so a document does not grow each time it is read and rewritten and encoding is idempotent.
-
JSCalendar.Patchimplements RFC 8984 §1.4.9 PatchObjects withapply/3andvalidate/1. An invalid pointer rejects the whole patch rather than applying part of it, and:ignoreand:onlyexpress the prefixes and suffixes the specification restricts particular properties to. -
JSCalendar.Occurrence.at/2builds one instance of a recurring object from its recurrence id, applying any override. It answers:excludeddistinctly from{:error, _}, andoverridden/1lists the ids an object varies. -
recurrenceOverridesandlocalizationsare typed as patch maps — keyed by recurrence id and language tag respectively — andtimeZonesasJSCalendar.TimeZonewithJSCalendar.TimeZoneRulestandard and daylight rules.