iamcal 1.0.1 → 1.0.2

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 CHANGED
@@ -1,4 +1,4 @@
1
- # iamcal
1
+ # iamcal [![build status](https://img.shields.io/github/actions/workflow/status/olillin/iamcal/npm-test.yml?style=flat-square)](https://github.com/olillin/iamcal/actions/workflows/npm-test.yml) [![npm badge](<https://img.shields.io/npm/v/iamcal?style=flat-square&color=red>)](https://www.npmjs.com/package/iamcal)
2
2
 
3
3
  A library for reading, modifying and writing [ICalendar](https://en.wikipedia.org/wiki/ICalendar) files.
4
4
 
package/lib/index.js CHANGED
@@ -1,8 +1,139 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.CalendarEvent=exports.Calendar=exports.Component=void 0;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CalendarEvent = exports.Calendar = exports.Component = void 0;
2
4
  // Max line length as defined by RFC 5545 3.1.
3
- const MAX_LINE_LENGTH=75;class Component{name;properties;components;constructor(e,t,r){this.name=e,this.properties=t||new Array,this.components=r||new Array}serialize(){
4
- // Create lines
5
- const e=[`BEGIN:${this.name}`];for(let t of this.properties){let r=t.name+t.params.map((e=>";"+e)).join("")+":"+t.value;
6
- // Wrap lines
7
- for(;r.length>75;)e.push(r.substring(0,75)),r=" "+r.substring(75);e.push(r)}for(let t of this.components)e.push(t.serialize());e.push(`END:${this.name}`);return e.join("\n")}getProperty(e){for(const t of this.properties)if(t.name===e)return t;return null}setProperty(e,t){for(const r of this.properties)if(r.name===e)return void(r.value=t);this.properties.push({name:e,params:[],value:t})}getPropertyParams(e){for(const t of this.properties)if(t.name===e)return t.params;return null}setPropertyParams(e,t){for(const r of this.properties)r.name===e&&(r.params=t)}}exports.Component=Component;class Calendar extends Component{name="VCALENDAR";constructor(e){super(e.name,e.properties,e.components)}events(){const e=new Array;for(let t of this.components)"VEVENT"===t.name&&e.push(new CalendarEvent(t));return e}}exports.Calendar=Calendar;class CalendarEvent extends Component{name="VEVENT";constructor(e){super(e.name,e.properties,e.components)}summary(){return this.getProperty("SUMMARY").value}setSummary(e){this.setProperty("SUMMARY",e)}description(){return this.getProperty("DESCRIPTION").value}setDescription(e){this.setProperty("DESCRIPTION",e)}location(){return this.getProperty("LOCATION")?.value}setLocation(e){this.setProperty("LOCATION",e)}start(){return new Date(this.getProperty("DTSTART").value)}setStart(e){this.setProperty("DTSTART",e.toISOString())}end(){return new Date(this.getProperty("DTEND").value)}setEnd(e){this.setProperty("DTEND",e.toISOString())}}exports.CalendarEvent=CalendarEvent;
5
+ const MAX_LINE_LENGTH = 75;
6
+ class Component {
7
+ name;
8
+ properties;
9
+ components;
10
+ constructor(name, properties, components) {
11
+ this.name = name;
12
+ if (properties) {
13
+ this.properties = properties;
14
+ }
15
+ else {
16
+ this.properties = new Array();
17
+ }
18
+ if (components) {
19
+ this.components = components;
20
+ }
21
+ else {
22
+ this.components = new Array();
23
+ }
24
+ }
25
+ serialize() {
26
+ // Create lines
27
+ const lines = [`BEGIN:${this.name}`];
28
+ for (let property of this.properties) {
29
+ let line = property['name'] + //
30
+ property.params.map(p => ';' + p).join('') +
31
+ ':' +
32
+ property['value'];
33
+ // Wrap lines
34
+ while (line.length > MAX_LINE_LENGTH) {
35
+ lines.push(line.substring(0, MAX_LINE_LENGTH));
36
+ line = " " + line.substring(MAX_LINE_LENGTH);
37
+ }
38
+ lines.push(line);
39
+ }
40
+ for (let component of this.components) {
41
+ lines.push(component.serialize());
42
+ }
43
+ lines.push(`END:${this.name}`);
44
+ // Join lines
45
+ const serialized = lines.join('\n');
46
+ return serialized;
47
+ }
48
+ getProperty(name) {
49
+ for (const property of this.properties) {
50
+ if (property.name === name) {
51
+ return property;
52
+ }
53
+ }
54
+ return null;
55
+ }
56
+ setProperty(name, value) {
57
+ for (const property of this.properties) {
58
+ if (property.name === name) {
59
+ property.value = value;
60
+ return;
61
+ }
62
+ }
63
+ this.properties.push({
64
+ name: name,
65
+ params: [],
66
+ value: value,
67
+ });
68
+ }
69
+ getPropertyParams(name) {
70
+ for (const property of this.properties) {
71
+ if (property.name === name) {
72
+ return property.params;
73
+ }
74
+ }
75
+ return null;
76
+ }
77
+ setPropertyParams(name, params) {
78
+ for (const property of this.properties) {
79
+ if (property.name === name) {
80
+ property.params = params;
81
+ }
82
+ }
83
+ }
84
+ }
85
+ exports.Component = Component;
86
+ class Calendar extends Component {
87
+ name = 'VCALENDAR';
88
+ constructor(component) {
89
+ super(component.name, component.properties, component.components);
90
+ }
91
+ events() {
92
+ const events = new Array();
93
+ for (let component of this.components) {
94
+ if (component.name === 'VEVENT') {
95
+ events.push(new CalendarEvent(component));
96
+ }
97
+ }
98
+ return events;
99
+ }
100
+ }
101
+ exports.Calendar = Calendar;
102
+ class CalendarEvent extends Component {
103
+ name = 'VEVENT';
104
+ constructor(component) {
105
+ super(component.name, component.properties, component.components);
106
+ }
107
+ summary() {
108
+ return this.getProperty('SUMMARY').value;
109
+ }
110
+ setSummary(value) {
111
+ this.setProperty("SUMMARY", value);
112
+ }
113
+ description() {
114
+ return this.getProperty('DESCRIPTION').value;
115
+ }
116
+ setDescription(value) {
117
+ this.setProperty("DESCRIPTION", value);
118
+ }
119
+ location() {
120
+ return this.getProperty('LOCATION')?.value;
121
+ }
122
+ setLocation(value) {
123
+ this.setProperty("LOCATION", value);
124
+ }
125
+ start() {
126
+ return new Date(this.getProperty('DTSTART').value);
127
+ }
128
+ setStart(value) {
129
+ this.setProperty("DTSTART", value.toISOString());
130
+ }
131
+ end() {
132
+ return new Date(this.getProperty('DTEND').value);
133
+ }
134
+ setEnd(value) {
135
+ this.setProperty("DTEND", value.toISOString());
136
+ }
137
+ }
138
+ exports.CalendarEvent = CalendarEvent;
8
139
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBTUEsOENBQThDO0FBQzlDLE1BQU0sZUFBZSxHQUFHLEVBQUUsQ0FBQTtBQUUxQixNQUFhLFNBQVM7SUFDbEIsSUFBSSxDQUFRO0lBQ1osVUFBVSxDQUFpQjtJQUMzQixVQUFVLENBQWtCO0lBRTVCLFlBQVksSUFBWSxFQUFFLFVBQTRCLEVBQUUsVUFBNkI7UUFDakYsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUE7UUFDaEIsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNiLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFBO1FBQ2hDLENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFBO1FBQ2pDLENBQUM7UUFDRCxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ2IsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUE7UUFDaEMsQ0FBQzthQUFNLENBQUM7WUFDSixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksS0FBSyxFQUFFLENBQUE7UUFDakMsQ0FBQztJQUNMLENBQUM7SUFFRCxTQUFTO1FBQ0wsZUFBZTtRQUNmLE1BQU0sS0FBSyxHQUFHLENBQUMsU0FBUyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQTtRQUVwQyxLQUFLLElBQUksUUFBUSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNuQyxJQUFJLElBQUksR0FDSixRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRTtnQkFDckIsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDMUMsR0FBRztnQkFDSCxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUE7WUFF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
package/lib/io.js CHANGED
@@ -1,14 +1,39 @@
1
- "use strict";var __importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.load=load,exports.dump=dump;const fs_1=__importDefault(require("fs")),readline_1=__importDefault(require("readline")),_1=require("."),parse_1=require("./parse");
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(e){const r=fs_1.default.createReadStream(e),t=readline_1.default.createInterface({input:r,crlfDelay:1/0}),a=await(0,parse_1.deserialize)(t);if("VCALENDAR"!=a.name)throw TypeError("Component is not a calendar");return new _1.Calendar(a)}
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
- */function dump(e,r){return new Promise((t=>{fs_1.default.writeFile(r,e.serialize(),(()=>{t()}))}))}
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";var __importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.DeserializationError=void 0,exports.deserialize=deserialize,exports.deserializeString=deserializeString,exports.parseCalendar=parseCalendar,exports.parseEvent=parseEvent;const readline_1=__importDefault(require("readline")),stream_1=require("stream"),_1=require(".");class DeserializationError extends Error{name="DeserializationError"}
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(e){const r=new _1.Component("");let t=!1;
7
- // We use a stack to keep track of nested components
8
- const i=new Array,n=new Array;async function a(e){if(""!==e.trim()){if(t)throw new DeserializationError("Trailing data after component end");if(e.startsWith("BEGIN:")){
9
- // Begin component
10
- const t=e.slice(e.indexOf(":")+1);i.push(t),1==i.length?r.name=t:n.push(e)}else if(e.startsWith("END:")){
11
- // End component
12
- if(0==i.length)throw new DeserializationError("Component end before begin");if(i.pop()!==e.slice(e.indexOf(":")+1))throw new DeserializationError("Malformed subcomponent");
13
- // Check the length of the stack after being popped
14
- if(1==i.length){n.push(e);const t=await deserializeString(n.join("\r\n"));n.length=0,r.components.push(t)}else i.length>1?n.push(e):0==i.length&&(t=!0)}else{if(0==i.length)throw new DeserializationError("Property outside of components");if(i.length>1)
15
- // Line of subcomponent
16
- n.push(e);else{
17
- // Property
18
- const t=e.indexOf(":");if(-1===t)throw new DeserializationError(`Invalid content line: ${e}`);const i=e.slice(0,t),n=e.slice(t+1),a=i.split(";"),s={name:a[0],params:a.slice(1),value:n};r.properties.push(s)}}}}
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
- */let s="";for await(const r of e)r.startsWith(" ")||r.startsWith("\t")?
36
- // Unfold continuation line (remove leading whitespace and append)
37
- s+=r.replace(/[\r\n]/,"").slice(1):(s&&
38
- // Process the previous unfolded line
39
- await a(s),
40
- // Start a new unfolded line
41
- s=r);
42
- // Process the last unfolded line
43
- // Check that component has been closed
44
- if(await a(s),!t)throw new DeserializationError("No component end");return r}
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
- */async function deserializeString(e){const r=stream_1.Readable.from(e);return deserialize(readline_1.default.createInterface({input:r,crlfDelay:1/0}))}
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
- */async function parseCalendar(e){const r=await deserializeString(e);if("VCALENDAR"!==r.name)throw new DeserializationError("Not a calendar");return new _1.Calendar(r)}
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
- */async function parseEvent(e){const r=await deserializeString(e);if("VEVENT"!==r.name)throw new DeserializationError("Not an event");return new _1.CalendarEvent(r)}
59
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcGFyc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBWUEsa0NBc0hDO0FBTUQsOENBSUM7QUFPRCxzQ0FLQztBQU9ELGdDQUtDO0FBcEtELHdEQUErQjtBQUMvQixtQ0FBaUM7QUFDakMsd0JBQXNEO0FBRXRELE1BQWEsb0JBQXFCLFNBQVEsS0FBSztJQUMzQyxJQUFJLEdBQUcsc0JBQXNCLENBQUE7Q0FDaEM7QUFGRCxvREFFQztBQUVEOzs7R0FHRztBQUNJLEtBQUssVUFBVSxXQUFXLENBQUMsS0FBeUI7SUFDdkQsTUFBTSxTQUFTLEdBQUcsSUFBSSxZQUFTLENBQUMsRUFBRSxDQUFDLENBQUE7SUFDbkMsSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFBO0lBRWhCLG9EQUFvRDtJQUNwRCxNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssRUFBVSxDQUFBO0lBRWpDLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxLQUFLLEVBQVUsQ0FBQTtJQUU3QyxLQUFLLFVBQVUsV0FBVyxDQUFDLElBQVk7UUFDbkMsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRTtZQUFFLE9BQU07UUFFOUIsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNQLE1BQU0sSUFBSSxvQkFBb0IsQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFBO1FBQ3ZFLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUM1QixrQkFBa0I7WUFDbEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBO1lBQzlDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7WUFFaEIsSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUNwQixTQUFT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
60
- exports.DeserializationError=DeserializationError;
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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "iamcal",
3
- "version": "1.0.1",
3
+ "version": "1.0.2",
4
4
  "description": "Read and write ICalendar files",
5
5
  "files": [
6
6
  "/lib",
@@ -12,8 +12,7 @@
12
12
  "./io": "./lib/io.js"
13
13
  },
14
14
  "scripts": {
15
- "build": "rimraf lib && tsc && npm run minify",
16
- "minify": "uglifyjs-folder lib -eo lib -x .js --config-file './uglify.json'",
15
+ "build": "rimraf lib && tsc",
17
16
  "test": "echo \"Error: no test specified\" && exit 1"
18
17
  },
19
18
  "repository": {
@@ -30,12 +29,9 @@
30
29
  "url": "https://github.com/olillin/iamcal/issues"
31
30
  },
32
31
  "homepage": "https://github.com/olillin/iamcal#readme",
33
- "dependencies": {
34
- "typescript": "^5.7.2"
35
- },
36
32
  "devDependencies": {
37
33
  "@types/node": "^22.10.1",
38
34
  "rimraf": "^6.0.1",
39
- "uglifyjs-folder": "^3.3.0"
35
+ "typescript": "^5.7.2"
40
36
  }
41
- }
37
+ }
package/lib/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"names":["MAX_LINE_LENGTH","Component","name","properties","components","constructor","this","Array","serialize","lines","property","line","params","map","p","join","length","push","substring","component","getProperty","setProperty","value","getPropertyParams","setPropertyParams","exports","Calendar","super","events","CalendarEvent","summary","setSummary","description","setDescription","location","setLocation","start","Date","setStart","toISOString","end","setEnd"],"sources":["../src/index.ts"],"mappings":";;AAOA,MAAMA,gBAAkB,GAExB,MAAaC,UACTC,KACAC,WACAC,WAEAC,YAAYH,EAAcC,EAA8BC,GACpDE,KAAKJ,KAAOA,EAERI,KAAKH,WADLA,GAGkB,IAAII,MAGtBD,KAAKF,WADLA,GAGkB,IAAIG,KAE9B,CAEAC;;AAEI,MAAMC,EAAQ,CAAC,SAASH,KAAKJ,QAE7B,IAAK,IAAIQ,KAAYJ,KAAKH,WAAY,CAClC,IAAIQ,EACAD,EAAe,KACfA,EAASE,OAAOC,KAAIC,GAAK,IAAMA,IAAGC,KAAK,IACvC,IACAL,EAAgB;aAGpB;KAAOC,EAAKK,OAjCA,IAkCRP,EAAMQ,KAAKN,EAAKO,UAAU,EAlClB,KAmCRP,EAAO,IAAMA,EAAKO,UAnCV,IAqCZT,EAAMQ,KAAKN,EACf,CAEA,IAAK,IAAIQ,KAAab,KAAKF,WACvBK,EAAMQ,KAAKE,EAAUX,aAGzBC,EAAMQ,KAAK,OAAOX,KAAKJ,QAKvB,OAFmBO,EAAMM,KAAK,KAGlC,CAEAK,YAAYlB,GACR,IAAK,MAAMQ,KAAYJ,KAAKH,WACxB,GAAIO,EAASR,OAASA,EAClB,OAAOQ,EAGf,OAAO,IACX,CAEAW,YAAYnB,EAAcoB,GACtB,IAAK,MAAMZ,KAAYJ,KAAKH,WACxB,GAAIO,EAASR,OAASA,EAElB,YADAQ,EAASY,MAAQA,GAIzBhB,KAAKH,WAAWc,KAAK,CACjBf,KAAMA,EACNU,OAAQ,GACRU,MAAOA,GAEf,CAEAC,kBAAkBrB,GACd,IAAK,MAAMQ,KAAYJ,KAAKH,WACxB,GAAIO,EAASR,OAASA,EAClB,OAAOQ,EAASE,OAGxB,OAAO,IACX,CAEAY,kBAAkBtB,EAAcU,GAC5B,IAAK,MAAMF,KAAYJ,KAAKH,WACpBO,EAASR,OAASA,IAClBQ,EAASE,OAASA,EAG9B,EAxFJa,QAAAxB,oBA2FA,MAAayB,iBAAiBzB,UAC1BC,KAAO,YAEPG,YAAYc,GACRQ,MAAMR,EAAUjB,KAAMiB,EAAUhB,WAAYgB,EAAUf,WAC1D,CAEAwB,SACI,MAAMA,EAAS,IAAIrB,MAEnB,IAAK,IAAIY,KAAab,KAAKF,WACA,WAAnBe,EAAUjB,MACV0B,EAAOX,KAAK,IAAIY,cAAcV,IAItC,OAAOS,CACX,EAjBJH,QAAAC,kBAoBA,MAAaG,sBAAsB5B,UAC/BC,KAAO,SAEPG,YAAYc,GACRQ,MAAMR,EAAUjB,KAAMiB,EAAUhB,WAAYgB,EAAUf,WAC1D,CAEA0B,UACI,OAAOxB,KAAKc,YAAY,WAAYE,KACxC,CAEAS,WAAWT,GACPhB,KAAKe,YAAY,UAAWC,EAChC,CAEAU,cACI,OAAO1B,KAAKc,YAAY,eAAgBE,KAC5C,CAEAW,eAAeX,GACXhB,KAAKe,YAAY,cAAeC,EACpC,CAEAY,WACI,OAAO5B,KAAKc,YAAY,aAAaE,KACzC,CAEAa,YAAYb,GACRhB,KAAKe,YAAY,WAAYC,EACjC,CAEAc,QACI,OAAO,IAAIC,KAAK/B,KAAKc,YAAY,WAAYE,MACjD,CAEAgB,SAAShB,GACLhB,KAAKe,YAAY,UAAWC,EAAMiB,cACtC,CAEAC,MACI,OAAO,IAAIH,KAAK/B,KAAKc,YAAY,SAAUE,MAC/C,CAEAmB,OAAOnB,GACHhB,KAAKe,YAAY,QAASC,EAAMiB,cACpC,EA7CJd,QAAAI","ignoreList":[]}
package/lib/io.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"names":["exports","load","dump","fs_1","__importDefault","require","readline_1","_1","parse_1","async","path","stream","default","createReadStream","lines","createInterface","input","crlfDelay","Infinity","component","deserialize","name","TypeError","Calendar","calendar","Promise","resolve","writeFile","serialize"],"sources":["../src/io.ts"],"mappings":"sKAYAA,QAAAC,UAkBAD,QAAAE,UA9BA,MAAAC,KAAAC,gBAAAC,QAAA,OACAC,WAAAF,gBAAAC,QAAA,aACAE,GAAAF,QAAA,KACAG,QAAAH,QAAA;;;;;;;AASOI,eAAeR,KAAKS,GACvB,MAAMC,EAASR,KAAAS,QAAGC,iBAAiBH,GAC7BI,EAAQR,WAAAM,QAASG,gBAAgB,CAAEC,MAAOL,EAAQM,UAAWC,MAE7DC,QAAkB,EAAAX,QAAAY,aAAYN,GAEpC,GAAsB,aAAlBK,EAAUE,KACV,MAAMC,UAAU,+BAGpB,OAAO,IAAIf,GAAAgB,SAASJ,EACxB;;;;;GAOA,SAAgBjB,KAAKsB,EAAoBd,GACrC,OAAO,IAAIe,SAAQC,IACfvB,KAAAS,QAAGe,UAAUjB,EAAMc,EAASI,aAAa,KACrCF,GAAS,GACX,GAEV","ignoreList":[]}
package/lib/parse.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"names":["exports","deserialize","deserializeString","parseCalendar","parseEvent","readline_1","__importDefault","require","stream_1","_1","DeserializationError","Error","name","async","lines","component","Component","done","stack","Array","subcomponentLines","processLine","line","trim","startsWith","slice","indexOf","push","length","pop","subcomponent","join","components","colon","value","params","split","property","properties","unfoldedLine","replace","text","stream","Readable","from","default","createInterface","input","crlfDelay","Infinity","Calendar","CalendarEvent"],"sources":["../src/parse.ts"],"mappings":"0MAYAA,QAAAC,wBA4HAD,QAAAE,oCAWAF,QAAAG,4BAYAH,QAAAI,sBA/JA,MAAAC,WAAAC,gBAAAC,QAAA,aACAC,SAAAD,QAAA,UACAE,GAAAF,QAAA,KAEA,MAAaG,6BAA6BC,MACtCC,KAAO;;;;;AAOJC,eAAeZ,YAAYa,GAC9B,MAAMC,EAAY,IAAIN,GAAAO,UAAU,IAChC,IAAIC,GAAO;oDAGX;MAAMC,EAAQ,IAAIC,MAEZC,EAAoB,IAAID,MAE9BN,eAAeQ,EAAYC,GACvB,GAAoB,KAAhBA,EAAKC,OAAT,CAEA,GAAIN,EACA,MAAM,IAAIP,qBAAqB,qCAGnC,GAAIY,EAAKE,WAAW,UAAW;;AAE3B,MAAMZ,EAAOU,EAAKG,MAAMH,EAAKI,QAAQ,KAAO,GAC5CR,EAAMS,KAAKf,GAES,GAAhBM,EAAMU,OACNb,EAAUH,KAAOA,EAEjBQ,EAAkBO,KAAKL,EAE/B,MAAO,GAAIA,EAAKE,WAAW,QAAS;;AAEhC,GAAoB,GAAhBN,EAAMU,OACN,MAAM,IAAIlB,qBAAqB,8BAKnC,GAFkBQ,EAAMW,QACXP,EAAKG,MAAMH,EAAKI,QAAQ,KAAO,GAExC,MAAM,IAAIhB,qBAAqB;mDAInC;GAAoB,GAAhBQ,EAAMU,OAAa,CACnBR,EAAkBO,KAAKL,GACvB,MAAMQ,QAAqB5B,kBAAkBkB,EAAkBW,KAAK,SACpEX,EAAkBQ,OAAS,EAE3Bb,EAAUiB,WAAWL,KAAKG,EAC9B,MAAWZ,EAAMU,OAAS,EACtBR,EAAkBO,KAAKL,GACA,GAAhBJ,EAAMU,SACbX,GAAO,EAEf,KAAO,CACH,GAAoB,GAAhBC,EAAMU,OAAa,MAAM,IAAIlB,qBAAqB,kCAEtD,GAAIQ,EAAMU,OAAS;;AAEfR,EAAkBO,KAAKL,OACpB;;AAEH,MAAMW,EAAQX,EAAKI,QAAQ,KAC3B,IAAe,IAAXO,EACA,MAAM,IAAIvB,qBAAqB,yBAAyBY,KAE5D,MAAMV,EAAOU,EAAKG,MAAM,EAAGQ,GACrBC,EAAQZ,EAAKG,MAAMQ,EAAQ,GAE3BE,EAASvB,EAAKwB,MAAM,KACpBC,EAAW,CACbzB,KAAMuB,EAAO,GACbA,OAAQA,EAAOV,MAAM,GACrBS,MAAOA,GAGXnB,EAAUuB,WAAWX,KAAKU,EAC9B,CACJ,CAhEwB,CAiE5B;;;;;;;;;;;;;;;;;MAmBA,IAAIE,EAAe,GACnB,UAAW,MAAMjB,KAAQR,EACjBQ,EAAKE,WAAW,MAAQF,EAAKE,WAAW;;AAExCe,GAAgBjB,EAAKkB,QAAQ,SAAU,IAAIf,MAAM,IAE7Cc;;MAEMlB,EAAYkB;;AAGtBA,EAAejB;;;AAQvB,SAHMD,EAAYkB,IAGbtB,EACD,MAAM,IAAIP,qBAAqB,oBAGnC,OAAOK,CACX;;;;GAMOF,eAAeX,kBAAkBuC,GACpC,MAAMC,EAASlC,SAAAmC,SAASC,KAAKH,GAE7B,OAAOxC,YADOI,WAAAwC,QAASC,gBAAgB,CAAEC,MAAOL,EAAQM,UAAWC,MAEvE;;;;;GAOOpC,eAAeV,cAAcsC,GAChC,MAAM1B,QAAkBb,kBAAkBuC,GAC1C,GAAuB,cAAnB1B,EAAUH,KACV,MAAM,IAAIF,qBAAqB,kBACnC,OAAO,IAAID,GAAAyC,SAASnC,EACxB;;;;;GAOOF,eAAeT,WAAWqC,GAC7B,MAAM1B,QAAkBb,kBAAkBuC,GAC1C,GAAuB,WAAnB1B,EAAUH,KACV,MAAM,IAAIF,qBAAqB,gBACnC,OAAO,IAAID,GAAA0C,cAAcpC,EAC7B;0yKAhKAf;QAAAU","ignoreList":[]}