generate-ical 1.0.6 → 1.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,33 @@
1
+ type Event = {
2
+ startDate: Date;
3
+ title: string;
4
+ description?: {
5
+ plain: string;
6
+ html?: string;
7
+ };
8
+ location?: {
9
+ title: string;
10
+ address?: string;
11
+ geo?: {
12
+ lat: number;
13
+ lon: number;
14
+ };
15
+ };
16
+ organizer?: {
17
+ name: string;
18
+ email?: string;
19
+ mailTo?: string;
20
+ sentBy?: string;
21
+ };
22
+ url?: string;
23
+ } & ({
24
+ isAllDay: true;
25
+ endDate?: Date;
26
+ } | {
27
+ isAllDay: false;
28
+ endDate: Date;
29
+ });
30
+ export default function generateIcal(data: Event): string;
31
+ export declare function escape(string: string): string;
32
+ export declare function escapeInQuotes(string: string): string;
33
+ export {};
package/dist/index.js ADDED
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.default = generateIcal;
7
+ exports.escape = escape;
8
+ exports.escapeInQuotes = escapeInQuotes;
9
+ const uuid_random_1 = __importDefault(require("uuid-random"));
10
+ function generateIcal(data) {
11
+ const id = (0, uuid_random_1.default)();
12
+ let result = "";
13
+ function addRow(row) {
14
+ result += `${row}\r\n`;
15
+ }
16
+ addRow("BEGIN:VCALENDAR");
17
+ addRow("VERSION:2.0");
18
+ addRow("PRODID://Hadermite//ical-generator//EN");
19
+ addRow("CALSCALE:GREGORIAN");
20
+ addRow("BEGIN:VEVENT");
21
+ addRow(`UID:${id}`);
22
+ addRow(`SEQUENCE:0`);
23
+ addRow(`DTSTAMP:${formatDateTime(new Date())}`);
24
+ addRow(`SUMMARY:${escape(data.title)}`);
25
+ if (data.description !== undefined) {
26
+ const { plain, html } = data.description;
27
+ addRow(`DESCRIPTION:${plain}`);
28
+ if (html !== undefined) {
29
+ addRow(`X-ALT-DESC;FMTTYPE=text/html:${escape(html)}`);
30
+ }
31
+ }
32
+ if (data.isAllDay) {
33
+ addRow(`DTSTART;VALUE=DATE:${formatDate(data.startDate)}`);
34
+ if (data.endDate !== undefined) {
35
+ addRow(`DTEND;VALUE=DATE:${formatDate(data.endDate)}`);
36
+ }
37
+ }
38
+ else {
39
+ addRow(`DTSTART:${formatDateTime(data.startDate)}`);
40
+ addRow(`DTEND:${formatDateTime(data.endDate)}`);
41
+ }
42
+ if (data.location !== undefined) {
43
+ addRow(`LOCATION:${escape(data.location.title)}`);
44
+ if (data.location.address !== undefined) {
45
+ addRow(escape(data.location.address));
46
+ }
47
+ if (data.location.geo !== undefined) {
48
+ const { lat, lon } = data.location.geo;
49
+ addRow(`GEO:${escape(lat.toString())};${escape(lon.toString())}`);
50
+ }
51
+ }
52
+ if (data.organizer !== undefined) {
53
+ const { name, sentBy, email, mailTo } = data.organizer;
54
+ let string = `ORGANIZER;CN=${escapeInQuotes(name)}`;
55
+ if (sentBy !== undefined) {
56
+ string += `;SENT-BY="mailto:${escapeInQuotes(sentBy)}"`;
57
+ }
58
+ if (email !== undefined && mailTo !== undefined) {
59
+ string += `;EMAIL=${escape(email)}`;
60
+ }
61
+ if (email !== undefined) {
62
+ string += `:mailto:${escape(mailTo !== null && mailTo !== void 0 ? mailTo : email)}`;
63
+ }
64
+ addRow(string);
65
+ }
66
+ if (data.url !== undefined) {
67
+ addRow(`URL;VALUE=URI:${escape(data.url)}`);
68
+ }
69
+ addRow("END:VEVENT");
70
+ addRow("END:VCALENDAR");
71
+ return result;
72
+ }
73
+ function escape(string) {
74
+ return string.replace(/[\\;,]/g, match => "\\" + match).replace(/(?:\r\n|\r|\n)/g, "\\n");
75
+ }
76
+ function escapeInQuotes(string) {
77
+ return string.replace(/[\\;,"]/g, match => "\\" + match).replace(/(?:\r\n|\r|\n)/g, "\\n");
78
+ }
79
+ function formatDate(date) {
80
+ const year = date.getUTCFullYear().toString();
81
+ const month = `${date.getUTCMonth() + 1}`.padStart(2, "0");
82
+ const day = `${date.getUTCDate()}`.padStart(2, "0");
83
+ return `${year}${month}${day}`;
84
+ }
85
+ function formatDateTime(date) {
86
+ const hours = `${date.getUTCHours()}`.padStart(2, "0");
87
+ const minutes = `${date.getUTCMinutes()}`.padStart(2, "0");
88
+ const seconds = `${date.getUTCSeconds()}`.padStart(2, "0");
89
+ return `${formatDate(date)}T${hours}${minutes}${seconds}Z`;
90
+ }
91
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "generate-ical",
3
- "version": "1.0.6",
3
+ "version": "1.0.7",
4
4
  "author": {
5
5
  "name": "Lukas Wiklund",
6
6
  "email": "lukas@wiklund.se",