iamcal 3.0.2 → 3.1.0
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.
- package/README.md +2 -2
- package/lib/io.d.ts +20 -0
- package/lib/io.d.ts.map +1 -1
- package/lib/io.js +30 -1
- package/lib/parse.d.ts +11 -3
- package/lib/parse.d.ts.map +1 -1
- package/lib/parse.js +42 -22
- package/lib/property/escape.d.ts.map +1 -1
- package/lib/property/escape.js +11 -5
- package/package.json +1 -1
- package/src/io.ts +42 -1
- package/src/parse.ts +43 -19
- package/src/property/escape.ts +11 -4
package/README.md
CHANGED
|
@@ -19,7 +19,7 @@ Below is an example of editing a calendar file.
|
|
|
19
19
|
```typescript
|
|
20
20
|
import { Calendar, dump, parseCalendar } from 'iamcal'
|
|
21
21
|
|
|
22
|
-
const calendar: Calendar =
|
|
22
|
+
const calendar: Calendar = parseCalendar(`
|
|
23
23
|
BEGIN:VCALENDAR
|
|
24
24
|
VERSION:2.0
|
|
25
25
|
PRODID:example
|
|
@@ -40,7 +40,7 @@ calendar.getEvents().forEach(event => {
|
|
|
40
40
|
}
|
|
41
41
|
})
|
|
42
42
|
|
|
43
|
-
|
|
43
|
+
dumpCalendarSync(calendar, './new_calendar.ics')
|
|
44
44
|
```
|
|
45
45
|
|
|
46
46
|
Running the code will produce the file `new_calendar.ics`:
|
package/lib/io.d.ts
CHANGED
|
@@ -5,14 +5,34 @@ import { Calendar } from './components/Calendar';
|
|
|
5
5
|
* @param path Path to the file.
|
|
6
6
|
* @returns The calendar deserialized from the file.
|
|
7
7
|
* @throws {DeserializationError} If the file content is not a valid calendar.
|
|
8
|
+
* @deprecated Use `loadCalendarSync` instead.
|
|
8
9
|
*/
|
|
9
10
|
export declare function load(path: fs.PathLike): Promise<Calendar>;
|
|
11
|
+
/**
|
|
12
|
+
* Read a calendar from a iCalendar file.
|
|
13
|
+
* @param path Path to the file.
|
|
14
|
+
* @param encoding The file encoding, defaults to UTF-8.
|
|
15
|
+
* @returns The calendar deserialized from the file.
|
|
16
|
+
* @throws {DeserializationError} If the file content is not a valid component.
|
|
17
|
+
* @throws {ComponentValidationError} If the deserialized component is not a VCALENDAR.
|
|
18
|
+
*/
|
|
19
|
+
export declare function loadCalendarSync(path: fs.PathLike, encoding?: BufferEncoding): Calendar;
|
|
10
20
|
/**
|
|
11
21
|
* Write a calendar to a file.
|
|
12
22
|
* @param calendar The calendar to write to file.
|
|
13
23
|
* @param path Path to the file to write.
|
|
14
24
|
* @example
|
|
15
25
|
* dump(myCalendar, 'calendar.ics')
|
|
26
|
+
* @deprecated Use `dumpCalendarSync` instead.
|
|
16
27
|
*/
|
|
17
28
|
export declare function dump(calendar: Calendar, path: string): Promise<void>;
|
|
29
|
+
/**
|
|
30
|
+
* Write a calendar to a file.
|
|
31
|
+
* @param calendar The calendar to write to file.
|
|
32
|
+
* @param path Path to the file to write.
|
|
33
|
+
* @param encoding The file encoding, defaults to UTF-8.
|
|
34
|
+
* @example
|
|
35
|
+
* dump(myCalendar, 'calendar.ics')
|
|
36
|
+
*/
|
|
37
|
+
export declare function dumpCalendarSync(calendar: Calendar, path: string, encoding?: BufferEncoding): void;
|
|
18
38
|
//# sourceMappingURL=io.d.ts.map
|
package/lib/io.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"io.d.ts","sourceRoot":"","sources":["../src/io.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAA;AAEnB,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;
|
|
1
|
+
{"version":3,"file":"io.d.ts","sourceRoot":"","sources":["../src/io.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAA;AAEnB,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAQhD;;;;;;GAMG;AACH,wBAAsB,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAc/D;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC5B,IAAI,EAAE,EAAE,CAAC,QAAQ,EACjB,QAAQ,GAAE,cAAuB,GAClC,QAAQ,CAIV;AAED;;;;;;;GAOG;AACH,wBAAgB,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAMpE;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC5B,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,MAAM,EACZ,QAAQ,GAAE,cAAuB,GAClC,IAAI,CAGN"}
|
package/lib/io.js
CHANGED
|
@@ -4,7 +4,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.load = load;
|
|
7
|
+
exports.loadCalendarSync = loadCalendarSync;
|
|
7
8
|
exports.dump = dump;
|
|
9
|
+
exports.dumpCalendarSync = dumpCalendarSync;
|
|
8
10
|
const fs_1 = __importDefault(require("fs"));
|
|
9
11
|
const readline_1 = __importDefault(require("readline"));
|
|
10
12
|
const Calendar_1 = require("./components/Calendar");
|
|
@@ -14,6 +16,7 @@ const parse_1 = require("./parse");
|
|
|
14
16
|
* @param path Path to the file.
|
|
15
17
|
* @returns The calendar deserialized from the file.
|
|
16
18
|
* @throws {DeserializationError} If the file content is not a valid calendar.
|
|
19
|
+
* @deprecated Use `loadCalendarSync` instead.
|
|
17
20
|
*/
|
|
18
21
|
async function load(path) {
|
|
19
22
|
const stream = fs_1.default.createReadStream(path);
|
|
@@ -27,12 +30,26 @@ async function load(path) {
|
|
|
27
30
|
}
|
|
28
31
|
return new Calendar_1.Calendar(component);
|
|
29
32
|
}
|
|
33
|
+
/**
|
|
34
|
+
* Read a calendar from a iCalendar file.
|
|
35
|
+
* @param path Path to the file.
|
|
36
|
+
* @param encoding The file encoding, defaults to UTF-8.
|
|
37
|
+
* @returns The calendar deserialized from the file.
|
|
38
|
+
* @throws {DeserializationError} If the file content is not a valid component.
|
|
39
|
+
* @throws {ComponentValidationError} If the deserialized component is not a VCALENDAR.
|
|
40
|
+
*/
|
|
41
|
+
function loadCalendarSync(path, encoding = 'utf8') {
|
|
42
|
+
const text = fs_1.default.readFileSync(path, { encoding: encoding });
|
|
43
|
+
const component = (0, parse_1.deserializeComponentString)(text);
|
|
44
|
+
return new Calendar_1.Calendar(component);
|
|
45
|
+
}
|
|
30
46
|
/**
|
|
31
47
|
* Write a calendar to a file.
|
|
32
48
|
* @param calendar The calendar to write to file.
|
|
33
49
|
* @param path Path to the file to write.
|
|
34
50
|
* @example
|
|
35
51
|
* dump(myCalendar, 'calendar.ics')
|
|
52
|
+
* @deprecated Use `dumpCalendarSync` instead.
|
|
36
53
|
*/
|
|
37
54
|
function dump(calendar, path) {
|
|
38
55
|
return new Promise(resolve => {
|
|
@@ -41,4 +58,16 @@ function dump(calendar, path) {
|
|
|
41
58
|
});
|
|
42
59
|
});
|
|
43
60
|
}
|
|
44
|
-
|
|
61
|
+
/**
|
|
62
|
+
* Write a calendar to a file.
|
|
63
|
+
* @param calendar The calendar to write to file.
|
|
64
|
+
* @param path Path to the file to write.
|
|
65
|
+
* @param encoding The file encoding, defaults to UTF-8.
|
|
66
|
+
* @example
|
|
67
|
+
* dump(myCalendar, 'calendar.ics')
|
|
68
|
+
*/
|
|
69
|
+
function dumpCalendarSync(calendar, path, encoding = 'utf8') {
|
|
70
|
+
const text = calendar.serialize();
|
|
71
|
+
fs_1.default.writeFileSync(path, text, { encoding: encoding });
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFpQkEsb0JBY0M7QUFVRCw0Q0FPQztBQVVELG9CQU1DO0FBVUQsNENBT0M7QUFqRkQsNENBQW1CO0FBQ25CLHdEQUErQjtBQUMvQixvREFBZ0Q7QUFDaEQsbUNBSWdCO0FBR2hCOzs7Ozs7R0FNRztBQUNJLEtBQUssVUFBVSxJQUFJLENBQUMsSUFBaUI7SUFDeEMsTUFBTSxNQUFNLEdBQUcsWUFBRSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFBO0lBQ3hDLE1BQU0sS0FBSyxHQUFHLGtCQUFRLENBQUMsZUFBZSxDQUFDO1FBQ25DLEtBQUssRUFBRSxNQUFNO1FBQ2IsU0FBUyxFQUFFLFFBQVE7S0FDdEIsQ0FBQyxDQUFBO0lBRUYsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFBLDRCQUFvQixFQUFDLEtBQUssQ0FBQyxDQUFBO0lBRW5ELElBQUksU0FBUyxDQUFDLElBQUksSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUNoQyxNQUFNLElBQUksNEJBQW9CLENBQUMsK0JBQStCLENBQUMsQ0FBQTtJQUNuRSxDQUFDO0lBRUQsT0FBTyxJQUFJLG1CQUFRLENBQUMsU0FBUyxDQUFDLENBQUE7QUFDbEMsQ0FBQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxTQUFnQixnQkFBZ0IsQ0FDNUIsSUFBaUIsRUFDakIsV0FBMkIsTUFBTTtJQUVqQyxNQUFNLElBQUksR0FBRyxZQUFFLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFBO0lBQzFELE1BQU0sU0FBUyxHQUFHLElBQUEsa0NBQTBCLEVBQUMsSUFBSSxDQUFDLENBQUE7SUFDbEQsT0FBTyxJQUFJLG1CQUFRLENBQUMsU0FBUyxDQUFDLENBQUE7QUFDbEMsQ0FBQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxTQUFnQixJQUFJLENBQUMsUUFBa0IsRUFBRSxJQUFZO0lBQ2pELE9BQU8sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDekIsWUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLFNBQVMsRUFBRSxFQUFFLEdBQUcsRUFBRTtZQUMxQyxPQUFPLEVBQUUsQ0FBQTtRQUNiLENBQUMsQ0FBQyxDQUFBO0lBQ04sQ0FBQyxDQUFDLENBQUE7QUFDTixDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILFNBQWdCLGdCQUFnQixDQUM1QixRQUFrQixFQUNsQixJQUFZLEVBQ1osV0FBMkIsTUFBTTtJQUVqQyxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsU0FBUyxFQUFFLENBQUE7SUFDakMsWUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUE7QUFDeEQsQ0FBQyJ9
|
package/lib/parse.d.ts
CHANGED
|
@@ -11,27 +11,35 @@ export declare class DeserializationError extends Error {
|
|
|
11
11
|
* @param lines The serialized component as a **readline** interface.
|
|
12
12
|
* @returns The deserialized calendar component object.
|
|
13
13
|
* @throws {DeserializationError} If the component is invalid.
|
|
14
|
+
* @deprecated Use the synchronous `deserializeComponentLines` instead.
|
|
14
15
|
*/
|
|
15
16
|
export declare function deserializeComponent(lines: readline.Interface): Promise<Component>;
|
|
17
|
+
/**
|
|
18
|
+
* Deserialize a calendar component from a list of lines.
|
|
19
|
+
* @param lines The serialized component as a list of lines.
|
|
20
|
+
* @returns The deserialized calendar component object.
|
|
21
|
+
* @throws {DeserializationError} If the component is invalid.
|
|
22
|
+
*/
|
|
23
|
+
export declare function deserializeComponentLines(lines: string[]): Component;
|
|
16
24
|
/**
|
|
17
25
|
* Deserialize a calendar component string.
|
|
18
26
|
* @param text The serialized component.
|
|
19
27
|
* @returns The deserialized component object.
|
|
20
28
|
* @throws {DeserializationError} If the component is invalid.
|
|
21
29
|
*/
|
|
22
|
-
export declare function deserializeComponentString(text: string):
|
|
30
|
+
export declare function deserializeComponentString(text: string): Component;
|
|
23
31
|
/**
|
|
24
32
|
* Parse a serialized calendar.
|
|
25
33
|
* @param text A serialized calendar as you would see in an iCalendar file.
|
|
26
34
|
* @returns The parsed calendar object.
|
|
27
35
|
*/
|
|
28
|
-
export declare function parseCalendar(text: string):
|
|
36
|
+
export declare function parseCalendar(text: string): Calendar;
|
|
29
37
|
/**
|
|
30
38
|
* Parse a serialized calendar event.
|
|
31
39
|
* @param text A serialized event as you would see in an iCalendar file.
|
|
32
40
|
* @returns The parsed event object.
|
|
33
41
|
*/
|
|
34
|
-
export declare function parseEvent(text: string):
|
|
42
|
+
export declare function parseEvent(text: string): CalendarEvent;
|
|
35
43
|
/**
|
|
36
44
|
* Deserialize a component property.
|
|
37
45
|
* @param line The serialized content line that defines this property.
|
package/lib/parse.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../src/parse.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../src/parse.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAA;AAC/B,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAMtD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAM9C,+EAA+E;AAC/E,qBAAa,oBAAqB,SAAQ,KAAK;IAC3C,IAAI,SAAyB;CAChC;AAED;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CACtC,KAAK,EAAE,QAAQ,CAAC,SAAS,GAC1B,OAAO,CAAC,SAAS,CAAC,CAGpB;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,SAAS,CAkHpE;AAqBD;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAGlE;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAGpD;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAGtD;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAC/B,IAAI,EAAE,MAAM,EACZ,MAAM,GAAE,OAAe,GACxB,QAAQ,CA8LV"}
|
package/lib/parse.js
CHANGED
|
@@ -1,16 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
3
|
exports.DeserializationError = void 0;
|
|
7
4
|
exports.deserializeComponent = deserializeComponent;
|
|
5
|
+
exports.deserializeComponentLines = deserializeComponentLines;
|
|
8
6
|
exports.deserializeComponentString = deserializeComponentString;
|
|
9
7
|
exports.parseCalendar = parseCalendar;
|
|
10
8
|
exports.parseEvent = parseEvent;
|
|
11
9
|
exports.deserializeProperty = deserializeProperty;
|
|
12
|
-
const readline_1 = __importDefault(require("readline"));
|
|
13
|
-
const stream_1 = require("stream");
|
|
14
10
|
const component_1 = require("./component");
|
|
15
11
|
const components_1 = require("./components");
|
|
16
12
|
const patterns_1 = require("./patterns");
|
|
@@ -26,14 +22,25 @@ exports.DeserializationError = DeserializationError;
|
|
|
26
22
|
* @param lines The serialized component as a **readline** interface.
|
|
27
23
|
* @returns The deserialized calendar component object.
|
|
28
24
|
* @throws {DeserializationError} If the component is invalid.
|
|
25
|
+
* @deprecated Use the synchronous `deserializeComponentLines` instead.
|
|
29
26
|
*/
|
|
30
27
|
async function deserializeComponent(lines) {
|
|
28
|
+
const realLines = await readLines(lines);
|
|
29
|
+
return deserializeComponentLines(realLines);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Deserialize a calendar component from a list of lines.
|
|
33
|
+
* @param lines The serialized component as a list of lines.
|
|
34
|
+
* @returns The deserialized calendar component object.
|
|
35
|
+
* @throws {DeserializationError} If the component is invalid.
|
|
36
|
+
*/
|
|
37
|
+
function deserializeComponentLines(lines) {
|
|
31
38
|
const component = new component_1.Component('');
|
|
32
39
|
let done = false;
|
|
33
40
|
// We use a stack to keep track of nested components
|
|
34
41
|
const stack = new Array();
|
|
35
42
|
const subcomponentLines = new Array();
|
|
36
|
-
const processLine =
|
|
43
|
+
const processLine = (line) => {
|
|
37
44
|
if (line.trim() === '')
|
|
38
45
|
return;
|
|
39
46
|
if (done) {
|
|
@@ -63,7 +70,7 @@ async function deserializeComponent(lines) {
|
|
|
63
70
|
// Check the length of the stack after being popped
|
|
64
71
|
if (stack.length == 1) {
|
|
65
72
|
subcomponentLines.push(line);
|
|
66
|
-
const subcomponent =
|
|
73
|
+
const subcomponent = deserializeComponentString(subcomponentLines.join('\r\n'));
|
|
67
74
|
subcomponentLines.length = 0;
|
|
68
75
|
component.components.push(subcomponent);
|
|
69
76
|
}
|
|
@@ -106,7 +113,7 @@ async function deserializeComponent(lines) {
|
|
|
106
113
|
that exists on a long line.
|
|
107
114
|
*/
|
|
108
115
|
let unfoldedLine = '';
|
|
109
|
-
for
|
|
116
|
+
for (const line of lines) {
|
|
110
117
|
if (line.startsWith(' ') || line.startsWith('\t')) {
|
|
111
118
|
// Unfold continuation line (remove leading whitespace and append)
|
|
112
119
|
unfoldedLine += line.replace(/[\r\n]/, '').slice(1);
|
|
@@ -114,41 +121,54 @@ async function deserializeComponent(lines) {
|
|
|
114
121
|
else {
|
|
115
122
|
if (unfoldedLine) {
|
|
116
123
|
// Process the previous unfolded line
|
|
117
|
-
|
|
124
|
+
processLine(unfoldedLine);
|
|
118
125
|
}
|
|
119
126
|
// Start a new unfolded line
|
|
120
127
|
unfoldedLine = line;
|
|
121
128
|
}
|
|
122
129
|
}
|
|
123
130
|
// Process the last unfolded line
|
|
124
|
-
|
|
131
|
+
processLine(unfoldedLine);
|
|
125
132
|
// Check that component has been closed
|
|
126
133
|
if (!done) {
|
|
127
134
|
throw new DeserializationError('Component has no end');
|
|
128
135
|
}
|
|
129
136
|
return component;
|
|
130
137
|
}
|
|
138
|
+
/**
|
|
139
|
+
* Convert a **readline** interface to a list of lines.
|
|
140
|
+
* @param rl The interface.
|
|
141
|
+
* @returns The list of lines read from the interface.
|
|
142
|
+
* @throws {DeserializationError} If the component is invalid.
|
|
143
|
+
*/
|
|
144
|
+
async function readLines(rl) {
|
|
145
|
+
return new Promise(resolve => {
|
|
146
|
+
const lines = [];
|
|
147
|
+
rl.on('line', line => {
|
|
148
|
+
lines.push(line);
|
|
149
|
+
});
|
|
150
|
+
rl.on('close', () => {
|
|
151
|
+
resolve(lines);
|
|
152
|
+
});
|
|
153
|
+
});
|
|
154
|
+
}
|
|
131
155
|
/**
|
|
132
156
|
* Deserialize a calendar component string.
|
|
133
157
|
* @param text The serialized component.
|
|
134
158
|
* @returns The deserialized component object.
|
|
135
159
|
* @throws {DeserializationError} If the component is invalid.
|
|
136
160
|
*/
|
|
137
|
-
|
|
138
|
-
const
|
|
139
|
-
|
|
140
|
-
input: stream,
|
|
141
|
-
crlfDelay: Infinity,
|
|
142
|
-
});
|
|
143
|
-
return deserializeComponent(lines);
|
|
161
|
+
function deserializeComponentString(text) {
|
|
162
|
+
const lines = text.split(/\r?\n/g);
|
|
163
|
+
return deserializeComponentLines(lines);
|
|
144
164
|
}
|
|
145
165
|
/**
|
|
146
166
|
* Parse a serialized calendar.
|
|
147
167
|
* @param text A serialized calendar as you would see in an iCalendar file.
|
|
148
168
|
* @returns The parsed calendar object.
|
|
149
169
|
*/
|
|
150
|
-
|
|
151
|
-
const component =
|
|
170
|
+
function parseCalendar(text) {
|
|
171
|
+
const component = deserializeComponentString(text);
|
|
152
172
|
return new components_1.Calendar(component);
|
|
153
173
|
}
|
|
154
174
|
/**
|
|
@@ -156,8 +176,8 @@ async function parseCalendar(text) {
|
|
|
156
176
|
* @param text A serialized event as you would see in an iCalendar file.
|
|
157
177
|
* @returns The parsed event object.
|
|
158
178
|
*/
|
|
159
|
-
|
|
160
|
-
const component =
|
|
179
|
+
function parseEvent(text) {
|
|
180
|
+
const component = deserializeComponentString(text);
|
|
161
181
|
return new components_1.CalendarEvent(component);
|
|
162
182
|
}
|
|
163
183
|
/**
|
|
@@ -343,4 +363,4 @@ function deserializeProperty(line, strict = false) {
|
|
|
343
363
|
const parsedValue = (0, escape_1.unescapeTextPropertyValue)(rawValue);
|
|
344
364
|
return new Property_1.Property(propertyName, parsedValue, parsedParameters);
|
|
345
365
|
}
|
|
346
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcGFyc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBMEJBLG9EQW9IQztBQVFELGdFQVNDO0FBT0Qsc0NBR0M7QUFPRCxnQ0FHQztBQVNELGtEQWlNQztBQTdYRCx3REFBK0I7QUFDL0IsbUNBQWlDO0FBQ2pDLDJDQUF1QztBQUN2Qyw2Q0FBc0Q7QUFDdEQseUNBSW1CO0FBQ25CLGtEQUE4QztBQUM5Qyw4Q0FHMEI7QUFFMUIsK0VBQStFO0FBQy9FLE1BQWEsb0JBQXFCLFNBQVEsS0FBSztJQUMzQyxJQUFJLEdBQUcsc0JBQXNCLENBQUE7Q0FDaEM7QUFGRCxvREFFQztBQUVEOzs7OztHQUtHO0FBQ0ksS0FBSyxVQUFVLG9CQUFvQixDQUN0QyxLQUF5QjtJQUV6QixNQUFNLFNBQVMsR0FBRyxJQUFJLHFCQUFTLENBQUMsRUFBRSxDQUFDLENBQUE7SUFDbkMsSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFBO0lBRWhCLG9EQUFvRDtJQUNwRCxNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssRUFBVSxDQUFBO0lBRWpDLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxLQUFLLEVBQVUsQ0FBQTtJQUU3QyxNQUFNLFdBQVcsR0FBRyxLQUFLLEVBQUUsSUFBWSxFQUFFLEVBQUU7UUFDdkMsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRTtZQUFFLE9BQU07UUFFOUIsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNQLE1BQU0sSUFBSSxvQkFBb0IsQ0FDMUIseUNBQXlDLENBQzVDLENBQUE7UUFDTCxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDNUIsa0JBQWtCO1lBQ2xCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FB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
|
|
366
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcGFyc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBMEJBLG9EQUtDO0FBUUQsOERBa0hDO0FBMkJELGdFQUdDO0FBT0Qsc0NBR0M7QUFPRCxnQ0FHQztBQVNELGtEQWlNQztBQXBaRCwyQ0FBdUM7QUFDdkMsNkNBQXNEO0FBQ3RELHlDQUltQjtBQUNuQixrREFBOEM7QUFDOUMsOENBRzBCO0FBRTFCLCtFQUErRTtBQUMvRSxNQUFhLG9CQUFxQixTQUFRLEtBQUs7SUFDM0MsSUFBSSxHQUFHLHNCQUFzQixDQUFBO0NBQ2hDO0FBRkQsb0RBRUM7QUFFRDs7Ozs7O0dBTUc7QUFDSSxLQUFLLFVBQVUsb0JBQW9CLENBQ3RDLEtBQXlCO0lBRXpCLE1BQU0sU0FBUyxHQUFHLE1BQU0sU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ3hDLE9BQU8seUJBQXlCLENBQUMsU0FBUyxDQUFDLENBQUE7QUFDL0MsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBZ0IseUJBQXlCLENBQUMsS0FBZTtJQUNyRCxNQUFNLFNBQVMsR0FBRyxJQUFJLHFCQUFTLENBQUMsRUFBRSxDQUFDLENBQUE7SUFDbkMsSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFBO0lBRWhCLG9EQUFvRDtJQUNwRCxNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssRUFBVSxDQUFBO0lBRWpDLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxLQUFLLEVBQVUsQ0FBQTtJQUU3QyxNQUFNLFdBQVcsR0FBRyxDQUFDLElBQVksRUFBRSxFQUFFO1FBQ2pDLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUU7WUFBRSxPQUFNO1FBRTlCLElBQUksSUFBSSxFQUFFLENBQUM7WUFDUCxNQUFNLElBQUksb0JBQW9CLENBQzFCLHlDQUF5QyxDQUM1QyxDQUFBO1FBQ0wsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxR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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"escape.d.ts","sourceRoot":"","sources":["../../src/property/escape.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CA2C/D;AAED;;;;;;GAMG;AACH,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAclE;AAED;;;;;GAKG;AACH,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKpE;AAGD,eAAO,MAAM,eAAe,KAAK,CAAA;AAEjC;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"escape.d.ts","sourceRoot":"","sources":["../../src/property/escape.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CA2C/D;AAED;;;;;;GAMG;AACH,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAclE;AAED;;;;;GAKG;AACH,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKpE;AAGD,eAAO,MAAM,eAAe,KAAK,CAAA;AAEjC;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAmB7C;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEhD"}
|
package/lib/property/escape.js
CHANGED
|
@@ -107,16 +107,22 @@ exports.MAX_LINE_LENGTH = 75;
|
|
|
107
107
|
* @returns The folded line.
|
|
108
108
|
*/
|
|
109
109
|
function foldLine(line) {
|
|
110
|
-
if (line.length
|
|
110
|
+
if (line.length <= exports.MAX_LINE_LENGTH)
|
|
111
111
|
return line;
|
|
112
|
-
const
|
|
112
|
+
const firstChar = line.charAt(0);
|
|
113
|
+
const lines = [line.substring(1, exports.MAX_LINE_LENGTH)];
|
|
113
114
|
const matches = line
|
|
114
115
|
.substring(exports.MAX_LINE_LENGTH)
|
|
115
|
-
.matchAll(new RegExp(`.{${exports.MAX_LINE_LENGTH -
|
|
116
|
+
.matchAll(new RegExp(`.{${exports.MAX_LINE_LENGTH - 1}}`, 'g'));
|
|
116
117
|
for (const match of matches) {
|
|
117
118
|
lines.push(match[0]);
|
|
118
119
|
}
|
|
119
|
-
|
|
120
|
+
// Add last line
|
|
121
|
+
const lastLineStart = Math.floor(line.length / (exports.MAX_LINE_LENGTH - 1)) *
|
|
122
|
+
(exports.MAX_LINE_LENGTH - 1) +
|
|
123
|
+
1;
|
|
124
|
+
lines.push(line.substring(lastLineStart));
|
|
125
|
+
return firstChar + lines.join('\r\n ');
|
|
120
126
|
}
|
|
121
127
|
/**
|
|
122
128
|
* Unfold a single line as specified in RFC 5545 3.1.
|
|
@@ -126,4 +132,4 @@ function foldLine(line) {
|
|
|
126
132
|
function unfoldLine(lines) {
|
|
127
133
|
return lines.replace(/\r\n /g, '');
|
|
128
134
|
}
|
|
129
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
135
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNjYXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Byb3BlcnR5L2VzY2FwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFVQSwwREFFQztBQVNELDhEQTJDQztBQVNELG9FQWNDO0FBUUQsd0VBS0M7QUFVRCw0QkFtQkM7QUFPRCxnQ0FFQztBQTFJRCwwQ0FBaUM7QUFFakM7Ozs7Ozs7R0FPRztBQUNILFNBQWdCLHVCQUF1QixDQUFDLEtBQWE7SUFDakQsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFBO0FBQ3RFLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFnQix5QkFBeUIsQ0FBQyxLQUFhO0lBQ25ELHFFQUFxRTtJQUNyRSxNQUFNLEtBQUssR0FBYSxFQUFFLENBQUE7SUFFMUIseUNBQXlDO0lBQ3pDLE1BQU0sU0FBUyxHQUFHLElBQUEsY0FBRyxFQUFDLElBQUksQ0FBQyxDQUFBO0lBQzNCLE1BQU0sT0FBTyxHQUFHLElBQUEsY0FBRyxFQUFDLElBQUksQ0FBQyxDQUFBO0lBQ3pCLE1BQU0sVUFBVSxHQUFHLElBQUEsY0FBRyxFQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQzNCLE1BQU0sVUFBVSxHQUFHLElBQUEsY0FBRyxFQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQzNCLE1BQU0sS0FBSyxHQUFHLElBQUEsY0FBRyxFQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ3RCLE1BQU0sU0FBUyxHQUFHLElBQUEsY0FBRyxFQUFDLEdBQUcsQ0FBQyxDQUFBO0lBRTFCLElBQUksd0JBQXdCLEdBQUcsS0FBSyxDQUFBO0lBQ3BDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDcEMsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFD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
|
package/package.json
CHANGED
package/src/io.ts
CHANGED
|
@@ -1,13 +1,19 @@
|
|
|
1
1
|
import fs from 'fs'
|
|
2
2
|
import readline from 'readline'
|
|
3
3
|
import { Calendar } from './components/Calendar'
|
|
4
|
-
import {
|
|
4
|
+
import {
|
|
5
|
+
DeserializationError,
|
|
6
|
+
deserializeComponent,
|
|
7
|
+
deserializeComponentString,
|
|
8
|
+
} from './parse'
|
|
9
|
+
import { ComponentValidationError } from './component'
|
|
5
10
|
|
|
6
11
|
/**
|
|
7
12
|
* Read a calendar from a iCalendar file.
|
|
8
13
|
* @param path Path to the file.
|
|
9
14
|
* @returns The calendar deserialized from the file.
|
|
10
15
|
* @throws {DeserializationError} If the file content is not a valid calendar.
|
|
16
|
+
* @deprecated Use `loadCalendarSync` instead.
|
|
11
17
|
*/
|
|
12
18
|
export async function load(path: fs.PathLike): Promise<Calendar> {
|
|
13
19
|
const stream = fs.createReadStream(path)
|
|
@@ -25,12 +31,30 @@ export async function load(path: fs.PathLike): Promise<Calendar> {
|
|
|
25
31
|
return new Calendar(component)
|
|
26
32
|
}
|
|
27
33
|
|
|
34
|
+
/**
|
|
35
|
+
* Read a calendar from a iCalendar file.
|
|
36
|
+
* @param path Path to the file.
|
|
37
|
+
* @param encoding The file encoding, defaults to UTF-8.
|
|
38
|
+
* @returns The calendar deserialized from the file.
|
|
39
|
+
* @throws {DeserializationError} If the file content is not a valid component.
|
|
40
|
+
* @throws {ComponentValidationError} If the deserialized component is not a VCALENDAR.
|
|
41
|
+
*/
|
|
42
|
+
export function loadCalendarSync(
|
|
43
|
+
path: fs.PathLike,
|
|
44
|
+
encoding: BufferEncoding = 'utf8'
|
|
45
|
+
): Calendar {
|
|
46
|
+
const text = fs.readFileSync(path, { encoding: encoding })
|
|
47
|
+
const component = deserializeComponentString(text)
|
|
48
|
+
return new Calendar(component)
|
|
49
|
+
}
|
|
50
|
+
|
|
28
51
|
/**
|
|
29
52
|
* Write a calendar to a file.
|
|
30
53
|
* @param calendar The calendar to write to file.
|
|
31
54
|
* @param path Path to the file to write.
|
|
32
55
|
* @example
|
|
33
56
|
* dump(myCalendar, 'calendar.ics')
|
|
57
|
+
* @deprecated Use `dumpCalendarSync` instead.
|
|
34
58
|
*/
|
|
35
59
|
export function dump(calendar: Calendar, path: string): Promise<void> {
|
|
36
60
|
return new Promise(resolve => {
|
|
@@ -39,3 +63,20 @@ export function dump(calendar: Calendar, path: string): Promise<void> {
|
|
|
39
63
|
})
|
|
40
64
|
})
|
|
41
65
|
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Write a calendar to a file.
|
|
69
|
+
* @param calendar The calendar to write to file.
|
|
70
|
+
* @param path Path to the file to write.
|
|
71
|
+
* @param encoding The file encoding, defaults to UTF-8.
|
|
72
|
+
* @example
|
|
73
|
+
* dump(myCalendar, 'calendar.ics')
|
|
74
|
+
*/
|
|
75
|
+
export function dumpCalendarSync(
|
|
76
|
+
calendar: Calendar,
|
|
77
|
+
path: string,
|
|
78
|
+
encoding: BufferEncoding = 'utf8'
|
|
79
|
+
): void {
|
|
80
|
+
const text = calendar.serialize()
|
|
81
|
+
fs.writeFileSync(path, text, { encoding: encoding })
|
|
82
|
+
}
|
package/src/parse.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import readline from 'readline'
|
|
2
|
-
import { Readable } from 'stream'
|
|
3
2
|
import { Component } from './component'
|
|
4
3
|
import { Calendar, CalendarEvent } from './components'
|
|
5
4
|
import {
|
|
@@ -23,10 +22,22 @@ export class DeserializationError extends Error {
|
|
|
23
22
|
* @param lines The serialized component as a **readline** interface.
|
|
24
23
|
* @returns The deserialized calendar component object.
|
|
25
24
|
* @throws {DeserializationError} If the component is invalid.
|
|
25
|
+
* @deprecated Use the synchronous `deserializeComponentLines` instead.
|
|
26
26
|
*/
|
|
27
27
|
export async function deserializeComponent(
|
|
28
28
|
lines: readline.Interface
|
|
29
29
|
): Promise<Component> {
|
|
30
|
+
const realLines = await readLines(lines)
|
|
31
|
+
return deserializeComponentLines(realLines)
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Deserialize a calendar component from a list of lines.
|
|
36
|
+
* @param lines The serialized component as a list of lines.
|
|
37
|
+
* @returns The deserialized calendar component object.
|
|
38
|
+
* @throws {DeserializationError} If the component is invalid.
|
|
39
|
+
*/
|
|
40
|
+
export function deserializeComponentLines(lines: string[]): Component {
|
|
30
41
|
const component = new Component('')
|
|
31
42
|
let done = false
|
|
32
43
|
|
|
@@ -35,7 +46,7 @@ export async function deserializeComponent(
|
|
|
35
46
|
|
|
36
47
|
const subcomponentLines = new Array<string>()
|
|
37
48
|
|
|
38
|
-
const processLine =
|
|
49
|
+
const processLine = (line: string) => {
|
|
39
50
|
if (line.trim() === '') return
|
|
40
51
|
|
|
41
52
|
if (done) {
|
|
@@ -71,7 +82,7 @@ export async function deserializeComponent(
|
|
|
71
82
|
// Check the length of the stack after being popped
|
|
72
83
|
if (stack.length == 1) {
|
|
73
84
|
subcomponentLines.push(line)
|
|
74
|
-
const subcomponent =
|
|
85
|
+
const subcomponent = deserializeComponentString(
|
|
75
86
|
subcomponentLines.join('\r\n')
|
|
76
87
|
)
|
|
77
88
|
subcomponentLines.length = 0
|
|
@@ -117,14 +128,14 @@ export async function deserializeComponent(
|
|
|
117
128
|
that exists on a long line.
|
|
118
129
|
*/
|
|
119
130
|
let unfoldedLine = ''
|
|
120
|
-
for
|
|
131
|
+
for (const line of lines) {
|
|
121
132
|
if (line.startsWith(' ') || line.startsWith('\t')) {
|
|
122
133
|
// Unfold continuation line (remove leading whitespace and append)
|
|
123
134
|
unfoldedLine += line.replace(/[\r\n]/, '').slice(1)
|
|
124
135
|
} else {
|
|
125
136
|
if (unfoldedLine) {
|
|
126
137
|
// Process the previous unfolded line
|
|
127
|
-
|
|
138
|
+
processLine(unfoldedLine)
|
|
128
139
|
}
|
|
129
140
|
// Start a new unfolded line
|
|
130
141
|
unfoldedLine = line
|
|
@@ -132,7 +143,7 @@ export async function deserializeComponent(
|
|
|
132
143
|
}
|
|
133
144
|
|
|
134
145
|
// Process the last unfolded line
|
|
135
|
-
|
|
146
|
+
processLine(unfoldedLine)
|
|
136
147
|
|
|
137
148
|
// Check that component has been closed
|
|
138
149
|
if (!done) {
|
|
@@ -142,21 +153,34 @@ export async function deserializeComponent(
|
|
|
142
153
|
return component
|
|
143
154
|
}
|
|
144
155
|
|
|
156
|
+
/**
|
|
157
|
+
* Convert a **readline** interface to a list of lines.
|
|
158
|
+
* @param rl The interface.
|
|
159
|
+
* @returns The list of lines read from the interface.
|
|
160
|
+
* @throws {DeserializationError} If the component is invalid.
|
|
161
|
+
*/
|
|
162
|
+
async function readLines(rl: readline.Interface): Promise<string[]> {
|
|
163
|
+
return new Promise(resolve => {
|
|
164
|
+
const lines: string[] = []
|
|
165
|
+
|
|
166
|
+
rl.on('line', line => {
|
|
167
|
+
lines.push(line)
|
|
168
|
+
})
|
|
169
|
+
rl.on('close', () => {
|
|
170
|
+
resolve(lines)
|
|
171
|
+
})
|
|
172
|
+
})
|
|
173
|
+
}
|
|
174
|
+
|
|
145
175
|
/**
|
|
146
176
|
* Deserialize a calendar component string.
|
|
147
177
|
* @param text The serialized component.
|
|
148
178
|
* @returns The deserialized component object.
|
|
149
179
|
* @throws {DeserializationError} If the component is invalid.
|
|
150
180
|
*/
|
|
151
|
-
export
|
|
152
|
-
text
|
|
153
|
-
)
|
|
154
|
-
const stream = Readable.from(text)
|
|
155
|
-
const lines = readline.createInterface({
|
|
156
|
-
input: stream,
|
|
157
|
-
crlfDelay: Infinity,
|
|
158
|
-
})
|
|
159
|
-
return deserializeComponent(lines)
|
|
181
|
+
export function deserializeComponentString(text: string): Component {
|
|
182
|
+
const lines = text.split(/\r?\n/g)
|
|
183
|
+
return deserializeComponentLines(lines)
|
|
160
184
|
}
|
|
161
185
|
|
|
162
186
|
/**
|
|
@@ -164,8 +188,8 @@ export async function deserializeComponentString(
|
|
|
164
188
|
* @param text A serialized calendar as you would see in an iCalendar file.
|
|
165
189
|
* @returns The parsed calendar object.
|
|
166
190
|
*/
|
|
167
|
-
export
|
|
168
|
-
const component =
|
|
191
|
+
export function parseCalendar(text: string): Calendar {
|
|
192
|
+
const component = deserializeComponentString(text)
|
|
169
193
|
return new Calendar(component)
|
|
170
194
|
}
|
|
171
195
|
|
|
@@ -174,8 +198,8 @@ export async function parseCalendar(text: string): Promise<Calendar> {
|
|
|
174
198
|
* @param text A serialized event as you would see in an iCalendar file.
|
|
175
199
|
* @returns The parsed event object.
|
|
176
200
|
*/
|
|
177
|
-
export
|
|
178
|
-
const component =
|
|
201
|
+
export function parseEvent(text: string): CalendarEvent {
|
|
202
|
+
const component = deserializeComponentString(text)
|
|
179
203
|
return new CalendarEvent(component)
|
|
180
204
|
}
|
|
181
205
|
|
package/src/property/escape.ts
CHANGED
|
@@ -109,17 +109,24 @@ export const MAX_LINE_LENGTH = 75
|
|
|
109
109
|
* @returns The folded line.
|
|
110
110
|
*/
|
|
111
111
|
export function foldLine(line: string): string {
|
|
112
|
-
if (line.length
|
|
112
|
+
if (line.length <= MAX_LINE_LENGTH) return line
|
|
113
113
|
|
|
114
|
-
const
|
|
114
|
+
const firstChar = line.charAt(0)
|
|
115
|
+
const lines = [line.substring(1, MAX_LINE_LENGTH)]
|
|
115
116
|
const matches = line
|
|
116
117
|
.substring(MAX_LINE_LENGTH)
|
|
117
|
-
.matchAll(new RegExp(`.{${MAX_LINE_LENGTH -
|
|
118
|
+
.matchAll(new RegExp(`.{${MAX_LINE_LENGTH - 1}}`, 'g'))
|
|
118
119
|
for (const match of matches) {
|
|
119
120
|
lines.push(match[0])
|
|
120
121
|
}
|
|
122
|
+
// Add last line
|
|
123
|
+
const lastLineStart =
|
|
124
|
+
Math.floor(line.length / (MAX_LINE_LENGTH - 1)) *
|
|
125
|
+
(MAX_LINE_LENGTH - 1) +
|
|
126
|
+
1
|
|
127
|
+
lines.push(line.substring(lastLineStart))
|
|
121
128
|
|
|
122
|
-
return lines.join('\r\n ')
|
|
129
|
+
return firstChar + lines.join('\r\n ')
|
|
123
130
|
}
|
|
124
131
|
|
|
125
132
|
/**
|