iamcal 1.0.1 → 1.0.3
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 +8 -4
- package/lib/index.d.ts +110 -9
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +418 -7
- package/lib/io.js +28 -3
- package/lib/parse.js +135 -30
- package/lib/types.d.ts +6 -0
- package/lib/types.d.ts.map +1 -0
- package/lib/types.js +3 -0
- package/package.json +18 -11
- package/src/index.ts +383 -23
- package/src/types.ts +5 -0
- package/lib/index.js.map +0 -1
- package/lib/io.js.map +0 -1
- package/lib/parse.js.map +0 -1
package/lib/io.js
CHANGED
|
@@ -1,14 +1,39 @@
|
|
|
1
|
-
"use strict";
|
|
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.load = load;
|
|
7
|
+
exports.dump = dump;
|
|
8
|
+
const fs_1 = __importDefault(require("fs"));
|
|
9
|
+
const readline_1 = __importDefault(require("readline"));
|
|
10
|
+
const _1 = require(".");
|
|
11
|
+
const parse_1 = require("./parse");
|
|
2
12
|
/**
|
|
3
13
|
* Read a calendar from a .ical file
|
|
4
14
|
* @param path Path to the file to read
|
|
5
15
|
* @throws DeserializationError Component must be of valid format
|
|
6
16
|
* @throws TypeError Component must be a `VCALENDAR`
|
|
7
17
|
*/
|
|
8
|
-
async function load(
|
|
18
|
+
async function load(path) {
|
|
19
|
+
const stream = fs_1.default.createReadStream(path);
|
|
20
|
+
const lines = readline_1.default.createInterface({ input: stream, crlfDelay: Infinity });
|
|
21
|
+
const component = await (0, parse_1.deserialize)(lines);
|
|
22
|
+
if (component.name != 'VCALENDAR') {
|
|
23
|
+
throw TypeError('Component is not a calendar');
|
|
24
|
+
}
|
|
25
|
+
return new _1.Calendar(component);
|
|
26
|
+
}
|
|
9
27
|
/**
|
|
10
28
|
* Write a calendar to a .ical file
|
|
11
29
|
* @param calendar The calendar
|
|
12
30
|
* @param path Path to the file to write
|
|
13
|
-
*/
|
|
31
|
+
*/
|
|
32
|
+
function dump(calendar, path) {
|
|
33
|
+
return new Promise(resolve => {
|
|
34
|
+
fs_1.default.writeFile(path, calendar.serialize(), () => {
|
|
35
|
+
resolve();
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
}
|
|
14
39
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFZQSxvQkFXQztBQU9ELG9CQU1DO0FBcENELDRDQUFtQjtBQUNuQix3REFBK0I7QUFDL0Isd0JBQTRCO0FBQzVCLG1DQUFxQztBQUdyQzs7Ozs7R0FLRztBQUNJLEtBQUssVUFBVSxJQUFJLENBQUMsSUFBaUI7SUFDeEMsTUFBTSxNQUFNLEdBQUcsWUFBRSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFBO0lBQ3hDLE1BQU0sS0FBSyxHQUFHLGtCQUFRLENBQUMsZUFBZSxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQTtJQUU5RSxNQUFNLFNBQVMsR0FBRyxNQUFNLElBQUEsbUJBQVcsRUFBQyxLQUFLLENBQUMsQ0FBQTtJQUUxQyxJQUFJLFNBQVMsQ0FBQyxJQUFJLElBQUksV0FBVyxFQUFFLENBQUM7UUFDaEMsTUFBTSxTQUFTLENBQUMsNkJBQTZCLENBQUMsQ0FBQTtJQUNsRCxDQUFDO0lBRUQsT0FBTyxJQUFJLFdBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQTtBQUNsQyxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLElBQUksQ0FBQyxRQUFrQixFQUFFLElBQVk7SUFDakQsT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtRQUN6QixZQUFFLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsU0FBUyxFQUFFLEVBQUUsR0FBRyxFQUFFO1lBQzFDLE9BQU8sRUFBRSxDQUFBO1FBQ2IsQ0FBQyxDQUFDLENBQUE7SUFDTixDQUFDLENBQUMsQ0FBQTtBQUNOLENBQUMifQ==
|
package/lib/parse.js
CHANGED
|
@@ -1,22 +1,97 @@
|
|
|
1
|
-
"use strict";
|
|
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.DeserializationError = void 0;
|
|
7
|
+
exports.deserialize = deserialize;
|
|
8
|
+
exports.deserializeString = deserializeString;
|
|
9
|
+
exports.parseCalendar = parseCalendar;
|
|
10
|
+
exports.parseEvent = parseEvent;
|
|
11
|
+
const readline_1 = __importDefault(require("readline"));
|
|
12
|
+
const stream_1 = require("stream");
|
|
13
|
+
const _1 = require(".");
|
|
14
|
+
class DeserializationError extends Error {
|
|
15
|
+
name = 'DeserializationError';
|
|
16
|
+
}
|
|
17
|
+
exports.DeserializationError = DeserializationError;
|
|
2
18
|
/**
|
|
3
19
|
* Deserialize a calendar component
|
|
4
20
|
* @param lines the serialized component as a readline interface
|
|
5
21
|
*/
|
|
6
|
-
async function deserialize(
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
//
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
22
|
+
async function deserialize(lines) {
|
|
23
|
+
const component = new _1.Component('');
|
|
24
|
+
let done = false;
|
|
25
|
+
// We use a stack to keep track of nested components
|
|
26
|
+
const stack = new Array();
|
|
27
|
+
const subcomponentLines = new Array();
|
|
28
|
+
async function processLine(line) {
|
|
29
|
+
if (line.trim() === '')
|
|
30
|
+
return;
|
|
31
|
+
if (done) {
|
|
32
|
+
throw new DeserializationError('Trailing data after component end');
|
|
33
|
+
}
|
|
34
|
+
if (line.startsWith('BEGIN:')) {
|
|
35
|
+
// Begin component
|
|
36
|
+
const name = line.slice(line.indexOf(':') + 1);
|
|
37
|
+
stack.push(name);
|
|
38
|
+
if (stack.length == 1) {
|
|
39
|
+
component.name = name;
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
subcomponentLines.push(line);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
else if (line.startsWith('END:')) {
|
|
46
|
+
// End component
|
|
47
|
+
if (stack.length == 0) {
|
|
48
|
+
throw new DeserializationError('Component end before begin');
|
|
49
|
+
}
|
|
50
|
+
const stackName = stack.pop();
|
|
51
|
+
const name = line.slice(line.indexOf(':') + 1);
|
|
52
|
+
if (stackName !== name) {
|
|
53
|
+
throw new DeserializationError('Malformed subcomponent');
|
|
54
|
+
}
|
|
55
|
+
// Check the length of the stack after being popped
|
|
56
|
+
if (stack.length == 1) {
|
|
57
|
+
subcomponentLines.push(line);
|
|
58
|
+
const subcomponent = await deserializeString(subcomponentLines.join('\r\n'));
|
|
59
|
+
subcomponentLines.length = 0;
|
|
60
|
+
component.components.push(subcomponent);
|
|
61
|
+
}
|
|
62
|
+
else if (stack.length > 1) {
|
|
63
|
+
subcomponentLines.push(line);
|
|
64
|
+
}
|
|
65
|
+
else if (stack.length == 0) {
|
|
66
|
+
done = true;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
if (stack.length == 0)
|
|
71
|
+
throw new DeserializationError('Property outside of components');
|
|
72
|
+
if (stack.length > 1) {
|
|
73
|
+
// Line of subcomponent
|
|
74
|
+
subcomponentLines.push(line);
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
// Property
|
|
78
|
+
const colon = line.indexOf(':');
|
|
79
|
+
if (colon === -1) {
|
|
80
|
+
throw new DeserializationError(`Invalid content line: ${line}`);
|
|
81
|
+
}
|
|
82
|
+
const name = line.slice(0, colon);
|
|
83
|
+
const value = line.slice(colon + 1);
|
|
84
|
+
const params = name.split(';');
|
|
85
|
+
const property = {
|
|
86
|
+
name: params[0],
|
|
87
|
+
params: params.slice(1),
|
|
88
|
+
value: value,
|
|
89
|
+
};
|
|
90
|
+
component.properties.push(property);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/*
|
|
20
95
|
The following code unfolds lines and passes them to be processed above.
|
|
21
96
|
|
|
22
97
|
According to RFC 5545 content lines may be split using a line "folding"
|
|
@@ -32,29 +107,59 @@ const t=e.indexOf(":");if(-1===t)throw new DeserializationError(`Invalid content
|
|
|
32
107
|
DESCRIPTION:This is a lo
|
|
33
108
|
ng description
|
|
34
109
|
that exists on a long line.
|
|
35
|
-
*/
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
110
|
+
*/
|
|
111
|
+
let unfoldedLine = '';
|
|
112
|
+
for await (const line of lines) {
|
|
113
|
+
if (line.startsWith(' ') || line.startsWith('\t')) {
|
|
114
|
+
// Unfold continuation line (remove leading whitespace and append)
|
|
115
|
+
unfoldedLine += line.replace(/[\r\n]/, '').slice(1);
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
if (unfoldedLine) {
|
|
119
|
+
// Process the previous unfolded line
|
|
120
|
+
await processLine(unfoldedLine);
|
|
121
|
+
}
|
|
122
|
+
// Start a new unfolded line
|
|
123
|
+
unfoldedLine = line;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
// Process the last unfolded line
|
|
127
|
+
await processLine(unfoldedLine);
|
|
128
|
+
// Check that component has been closed
|
|
129
|
+
if (!done) {
|
|
130
|
+
throw new DeserializationError('No component end');
|
|
131
|
+
}
|
|
132
|
+
return component;
|
|
133
|
+
}
|
|
45
134
|
/**
|
|
46
135
|
* Deserialize a calendar component
|
|
47
136
|
* @param text the serialized component
|
|
48
|
-
*/
|
|
137
|
+
*/
|
|
138
|
+
async function deserializeString(text) {
|
|
139
|
+
const stream = stream_1.Readable.from(text);
|
|
140
|
+
const lines = readline_1.default.createInterface({ input: stream, crlfDelay: Infinity });
|
|
141
|
+
return deserialize(lines);
|
|
142
|
+
}
|
|
49
143
|
/**
|
|
50
144
|
* Parse a calendar in ICalendar format
|
|
51
145
|
* @param text the serialized calendar
|
|
52
146
|
* @returns the parsed calendar
|
|
53
|
-
*/
|
|
147
|
+
*/
|
|
148
|
+
async function parseCalendar(text) {
|
|
149
|
+
const component = await deserializeString(text);
|
|
150
|
+
if (component.name !== "VCALENDAR")
|
|
151
|
+
throw new DeserializationError("Not a calendar");
|
|
152
|
+
return new _1.Calendar(component);
|
|
153
|
+
}
|
|
54
154
|
/**
|
|
55
155
|
* Parse an event in ICalendar format
|
|
56
156
|
* @param text the serialized event
|
|
57
157
|
* @returns the parsed event
|
|
58
|
-
*/
|
|
59
|
-
|
|
60
|
-
|
|
158
|
+
*/
|
|
159
|
+
async function parseEvent(text) {
|
|
160
|
+
const component = await deserializeString(text);
|
|
161
|
+
if (component.name !== "VEVENT")
|
|
162
|
+
throw new DeserializationError("Not an event");
|
|
163
|
+
return new _1.CalendarEvent(component);
|
|
164
|
+
}
|
|
165
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcGFyc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBWUEsa0NBc0hDO0FBTUQsOENBSUM7QUFPRCxzQ0FLQztBQU9ELGdDQUtDO0FBcEtELHdEQUErQjtBQUMvQixtQ0FBaUM7QUFDakMsd0JBQXNEO0FBRXRELE1BQWEsb0JBQXFCLFNBQVEsS0FBSztJQUMzQyxJQUFJLEdBQUcsc0JBQXNCLENBQUE7Q0FDaEM7QUFGRCxvREFFQztBQUVEOzs7R0FHRztBQUNJLEtBQUssVUFBVSxXQUFXLENBQUMsS0FBeUI7SUFDdkQsTUFBTSxTQUFTLEdBQUcsSUFBSSxZQUFTLENBQUMsRUFBRSxDQUFDLENBQUE7SUFDbkMsSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFBO0lBRWhCLG9EQUFvRDtJQUNwRCxNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssRUFBVSxDQUFBO0lBRWpDLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxLQUFLLEVBQVUsQ0FBQTtJQUU3QyxLQUFLLFVBQVUsV0FBVyxDQUFDLElBQVk7UUFDbkMsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRTtZQUFFLE9BQU07UUFFOUIsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNQLE1BQU0sSUFBSSxvQkFBb0IsQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFBO1FBQ3ZFLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUM1QixrQkFBa0I7WUFDbEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBO1lBQzlDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7WUFFaEIsSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUNwQixTQUFT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
|
package/lib/types.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,QAAQ;IACrB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;CAChB"}
|
package/lib/types.js
ADDED
package/package.json
CHANGED
|
@@ -1,19 +1,29 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "iamcal",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.3",
|
|
4
4
|
"description": "Read and write ICalendar files",
|
|
5
5
|
"files": [
|
|
6
6
|
"/lib",
|
|
7
7
|
"/src"
|
|
8
8
|
],
|
|
9
9
|
"exports": {
|
|
10
|
-
".":
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
".": {
|
|
11
|
+
"default": "./lib/index.js",
|
|
12
|
+
"types": "./lib/index.d.ts"
|
|
13
|
+
},
|
|
14
|
+
"./parse": {
|
|
15
|
+
"default": "./lib/parse.js",
|
|
16
|
+
"types": "./lib/parse.d.ts"
|
|
17
|
+
},
|
|
18
|
+
"./io": {
|
|
19
|
+
"default": "./lib/io.js",
|
|
20
|
+
"types": "./lib/io.d.ts"
|
|
21
|
+
}
|
|
13
22
|
},
|
|
23
|
+
"main": "./lib/index.js",
|
|
24
|
+
"types": "./lib/index.d.ts",
|
|
14
25
|
"scripts": {
|
|
15
|
-
"build": "rimraf lib && tsc
|
|
16
|
-
"minify": "uglifyjs-folder lib -eo lib -x .js --config-file './uglify.json'",
|
|
26
|
+
"build": "rimraf lib && tsc",
|
|
17
27
|
"test": "echo \"Error: no test specified\" && exit 1"
|
|
18
28
|
},
|
|
19
29
|
"repository": {
|
|
@@ -30,12 +40,9 @@
|
|
|
30
40
|
"url": "https://github.com/olillin/iamcal/issues"
|
|
31
41
|
},
|
|
32
42
|
"homepage": "https://github.com/olillin/iamcal#readme",
|
|
33
|
-
"dependencies": {
|
|
34
|
-
"typescript": "^5.7.2"
|
|
35
|
-
},
|
|
36
43
|
"devDependencies": {
|
|
37
44
|
"@types/node": "^22.10.1",
|
|
38
45
|
"rimraf": "^6.0.1",
|
|
39
|
-
"
|
|
46
|
+
"typescript": "^5.7.2"
|
|
40
47
|
}
|
|
41
|
-
}
|
|
48
|
+
}
|