@fullcalendar/icalendar 6.0.0-beta.1 → 6.0.0-beta.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.
File without changes
@@ -1,13 +1,9 @@
1
- /*!
2
- FullCalendar v6.0.0-beta.1
3
- Docs & License: https://fullcalendar.io/
4
- (c) 2022 Adam Shaw
5
- */
6
1
  'use strict';
7
2
 
8
3
  Object.defineProperty(exports, '__esModule', { value: true });
9
4
 
10
- var common = require('@fullcalendar/common');
5
+ var index_cjs = require('@fullcalendar/core/index.cjs');
6
+ var internal_cjs = require('@fullcalendar/core/internal.cjs');
11
7
  var ICAL = require('ical.js');
12
8
 
13
9
  function _interopNamespace(e) {
@@ -19,14 +15,12 @@ function _interopNamespace(e) {
19
15
  var d = Object.getOwnPropertyDescriptor(e, k);
20
16
  Object.defineProperty(n, k, d.get ? d : {
21
17
  enumerable: true,
22
- get: function () {
23
- return e[k];
24
- }
18
+ get: function () { return e[k]; }
25
19
  });
26
20
  }
27
21
  });
28
22
  }
29
- n['default'] = e;
23
+ n["default"] = e;
30
24
  return Object.freeze(n);
31
25
  }
32
26
 
@@ -132,7 +126,7 @@ class IcalExpander {
132
126
  }
133
127
  }
134
128
 
135
- let eventSourceDef = {
129
+ const eventSourceDef = {
136
130
  parseMeta(refined) {
137
131
  if (refined.url && refined.format === 'ics') {
138
132
  return {
@@ -142,78 +136,40 @@ let eventSourceDef = {
142
136
  }
143
137
  return null;
144
138
  },
145
- fetch(arg, onSuccess, onFailure) {
146
- let { meta } = arg.eventSource;
139
+ fetch(arg, successCallback, errorCallback) {
140
+ let meta = arg.eventSource.meta;
147
141
  let { internalState } = meta;
148
- function handleICalEvents(errorMessage, iCalExpander, xhr) {
149
- if (errorMessage) {
150
- onFailure({ message: errorMessage, xhr });
151
- }
152
- else {
153
- onSuccess({ rawEvents: expandICalEvents(iCalExpander, arg.range), xhr });
154
- }
155
- }
156
142
  /*
157
143
  NOTE: isRefetch is a HACK. we would do the recurring-expanding in a separate plugin hook,
158
144
  but we couldn't leverage built-in allDay-guessing, among other things.
159
145
  */
160
146
  if (!internalState || arg.isRefetch) {
161
147
  internalState = meta.internalState = {
162
- completed: false,
163
- callbacks: [handleICalEvents],
164
- errorMessage: '',
165
- iCalExpander: null,
166
- xhr: null,
148
+ response: null,
149
+ iCalExpanderPromise: fetch(meta.url, { method: 'GET' }).then((response) => {
150
+ return response.text().then((icsText) => {
151
+ internalState.response = response;
152
+ return new IcalExpander({
153
+ ics: icsText,
154
+ skipInvalidDates: true,
155
+ });
156
+ });
157
+ }),
167
158
  };
168
- requestICal(meta.url, (rawFeed, xhr) => {
169
- let iCalExpander = new IcalExpander({
170
- ics: rawFeed,
171
- skipInvalidDates: true,
172
- });
173
- for (let callback of internalState.callbacks) {
174
- callback('', iCalExpander, xhr);
175
- }
176
- internalState.completed = true;
177
- internalState.callbacks = [];
178
- internalState.iCalExpander = iCalExpander;
179
- internalState.xhr = xhr;
180
- }, (errorMessage, xhr) => {
181
- for (let callback of internalState.callbacks) {
182
- callback(errorMessage, null, xhr);
183
- }
184
- internalState.completed = true;
185
- internalState.callbacks = [];
186
- internalState.errorMessage = errorMessage;
187
- internalState.xhr = xhr;
188
- });
189
- }
190
- else if (!internalState.completed) {
191
- internalState.callbacks.push(handleICalEvents);
192
- }
193
- else {
194
- handleICalEvents(internalState.errorMessage, internalState.iCalExpander, internalState.xhr);
195
159
  }
160
+ internalState.iCalExpanderPromise.then((iCalExpander) => {
161
+ successCallback({
162
+ rawEvents: expandICalEvents(iCalExpander, arg.range),
163
+ response: internalState.response,
164
+ });
165
+ }, errorCallback);
196
166
  },
197
167
  };
198
- function requestICal(url, successCallback, failureCallback) {
199
- const xhr = new XMLHttpRequest();
200
- xhr.open('GET', url, true);
201
- xhr.onload = () => {
202
- if (xhr.status >= 200 && xhr.status < 400) {
203
- successCallback(xhr.responseText, xhr);
204
- }
205
- else {
206
- failureCallback('Request failed', xhr);
207
- }
208
- };
209
- xhr.onerror = () => failureCallback('Request failed', xhr);
210
- xhr.send(null);
211
- }
212
168
  function expandICalEvents(iCalExpander, range) {
213
169
  // expand the range. because our `range` is timeZone-agnostic UTC
214
170
  // or maybe because ical.js always produces dates in local time? i forget
215
- let rangeStart = common.addDays(range.start, -1);
216
- let rangeEnd = common.addDays(range.end, 1);
171
+ let rangeStart = internal_cjs.addDays(range.start, -1);
172
+ let rangeEnd = internal_cjs.addDays(range.end, 1);
217
173
  let iCalRes = iCalExpander.between(rangeStart, rangeEnd); // end inclusive. will give extra results
218
174
  let expanded = [];
219
175
  // TODO: instead of using startDate/endDate.toString to communicate allDay,
@@ -252,8 +208,10 @@ function specifiesEnd(iCalEvent) {
252
208
  return Boolean(iCalEvent.component.getFirstProperty('dtend')) ||
253
209
  Boolean(iCalEvent.component.getFirstProperty('duration'));
254
210
  }
255
- var main = common.createPlugin({
211
+
212
+ var index = index_cjs.createPlugin({
213
+ name: '@fullcalendar/icalendar',
256
214
  eventSourceDefs: [eventSourceDef],
257
215
  });
258
216
 
259
- exports.default = main;
217
+ exports["default"] = index;
package/index.d.ts ADDED
@@ -0,0 +1,6 @@
1
+ import { PluginDef } from '@fullcalendar/core';
2
+
3
+ declare const _default: PluginDef;
4
+ //# sourceMappingURL=index.d.ts.map
5
+
6
+ export { _default as default };
@@ -1,9 +1,9 @@
1
1
  /*!
2
- FullCalendar v6.0.0-beta.1
2
+ FullCalendar iCalendar Plugin v6.0.0-beta.2
3
3
  Docs & License: https://fullcalendar.io/
4
4
  (c) 2022 Adam Shaw
5
5
  */
6
- var FullCalendarICalendar = (function (exports, common, ICAL) {
6
+ FullCalendar.ICalendar = (function (exports, internal, core, ICAL) {
7
7
  'use strict';
8
8
 
9
9
  function _interopNamespace(e) {
@@ -15,15 +15,13 @@ var FullCalendarICalendar = (function (exports, common, ICAL) {
15
15
  var d = Object.getOwnPropertyDescriptor(e, k);
16
16
  Object.defineProperty(n, k, d.get ? d : {
17
17
  enumerable: true,
18
- get: function () {
19
- return e[k];
20
- }
18
+ get: function () { return e[k]; }
21
19
  });
22
20
  }
23
21
  });
24
22
  }
25
- n['default'] = e;
26
- return Object.freeze(n);
23
+ n["default"] = e;
24
+ return n;
27
25
  }
28
26
 
29
27
  var ICAL__namespace = /*#__PURE__*/_interopNamespace(ICAL);
@@ -128,7 +126,7 @@ var FullCalendarICalendar = (function (exports, common, ICAL) {
128
126
  }
129
127
  }
130
128
 
131
- let eventSourceDef = {
129
+ const eventSourceDef = {
132
130
  parseMeta(refined) {
133
131
  if (refined.url && refined.format === 'ics') {
134
132
  return {
@@ -138,78 +136,40 @@ var FullCalendarICalendar = (function (exports, common, ICAL) {
138
136
  }
139
137
  return null;
140
138
  },
141
- fetch(arg, onSuccess, onFailure) {
142
- let { meta } = arg.eventSource;
139
+ fetch(arg, successCallback, errorCallback) {
140
+ let meta = arg.eventSource.meta;
143
141
  let { internalState } = meta;
144
- function handleICalEvents(errorMessage, iCalExpander, xhr) {
145
- if (errorMessage) {
146
- onFailure({ message: errorMessage, xhr });
147
- }
148
- else {
149
- onSuccess({ rawEvents: expandICalEvents(iCalExpander, arg.range), xhr });
150
- }
151
- }
152
142
  /*
153
143
  NOTE: isRefetch is a HACK. we would do the recurring-expanding in a separate plugin hook,
154
144
  but we couldn't leverage built-in allDay-guessing, among other things.
155
145
  */
156
146
  if (!internalState || arg.isRefetch) {
157
147
  internalState = meta.internalState = {
158
- completed: false,
159
- callbacks: [handleICalEvents],
160
- errorMessage: '',
161
- iCalExpander: null,
162
- xhr: null,
148
+ response: null,
149
+ iCalExpanderPromise: fetch(meta.url, { method: 'GET' }).then((response) => {
150
+ return response.text().then((icsText) => {
151
+ internalState.response = response;
152
+ return new IcalExpander({
153
+ ics: icsText,
154
+ skipInvalidDates: true,
155
+ });
156
+ });
157
+ }),
163
158
  };
164
- requestICal(meta.url, (rawFeed, xhr) => {
165
- let iCalExpander = new IcalExpander({
166
- ics: rawFeed,
167
- skipInvalidDates: true,
168
- });
169
- for (let callback of internalState.callbacks) {
170
- callback('', iCalExpander, xhr);
171
- }
172
- internalState.completed = true;
173
- internalState.callbacks = [];
174
- internalState.iCalExpander = iCalExpander;
175
- internalState.xhr = xhr;
176
- }, (errorMessage, xhr) => {
177
- for (let callback of internalState.callbacks) {
178
- callback(errorMessage, null, xhr);
179
- }
180
- internalState.completed = true;
181
- internalState.callbacks = [];
182
- internalState.errorMessage = errorMessage;
183
- internalState.xhr = xhr;
184
- });
185
- }
186
- else if (!internalState.completed) {
187
- internalState.callbacks.push(handleICalEvents);
188
- }
189
- else {
190
- handleICalEvents(internalState.errorMessage, internalState.iCalExpander, internalState.xhr);
191
159
  }
160
+ internalState.iCalExpanderPromise.then((iCalExpander) => {
161
+ successCallback({
162
+ rawEvents: expandICalEvents(iCalExpander, arg.range),
163
+ response: internalState.response,
164
+ });
165
+ }, errorCallback);
192
166
  },
193
167
  };
194
- function requestICal(url, successCallback, failureCallback) {
195
- const xhr = new XMLHttpRequest();
196
- xhr.open('GET', url, true);
197
- xhr.onload = () => {
198
- if (xhr.status >= 200 && xhr.status < 400) {
199
- successCallback(xhr.responseText, xhr);
200
- }
201
- else {
202
- failureCallback('Request failed', xhr);
203
- }
204
- };
205
- xhr.onerror = () => failureCallback('Request failed', xhr);
206
- xhr.send(null);
207
- }
208
168
  function expandICalEvents(iCalExpander, range) {
209
169
  // expand the range. because our `range` is timeZone-agnostic UTC
210
170
  // or maybe because ical.js always produces dates in local time? i forget
211
- let rangeStart = common.addDays(range.start, -1);
212
- let rangeEnd = common.addDays(range.end, 1);
171
+ let rangeStart = internal.addDays(range.start, -1);
172
+ let rangeEnd = internal.addDays(range.end, 1);
213
173
  let iCalRes = iCalExpander.between(rangeStart, rangeEnd); // end inclusive. will give extra results
214
174
  let expanded = [];
215
175
  // TODO: instead of using startDate/endDate.toString to communicate allDay,
@@ -248,16 +208,18 @@ var FullCalendarICalendar = (function (exports, common, ICAL) {
248
208
  return Boolean(iCalEvent.component.getFirstProperty('dtend')) ||
249
209
  Boolean(iCalEvent.component.getFirstProperty('duration'));
250
210
  }
251
- var plugin = common.createPlugin({
211
+
212
+ var plugin = core.createPlugin({
213
+ name: '@fullcalendar/icalendar',
252
214
  eventSourceDefs: [eventSourceDef],
253
215
  });
254
216
 
255
- common.globalPlugins.push(plugin);
217
+ internal.globalPlugins.push(plugin);
256
218
 
257
- exports.default = plugin;
219
+ exports["default"] = plugin;
258
220
 
259
221
  Object.defineProperty(exports, '__esModule', { value: true });
260
222
 
261
223
  return exports;
262
224
 
263
- }({}, FullCalendar, ICAL));
225
+ })({}, FullCalendar.Internal, FullCalendar, ICAL);
@@ -0,0 +1,6 @@
1
+ /*!
2
+ FullCalendar iCalendar Plugin v6.0.0-beta.2
3
+ Docs & License: https://fullcalendar.io/
4
+ (c) 2022 Adam Shaw
5
+ */
6
+ FullCalendar.ICalendar=function(e,t,n,r){"use strict";function a(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(n){if("default"!==n){var r=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,r.get?r:{enumerable:!0,get:function(){return e[n]}})}})),t.default=e,t}var s=a(r);class i{constructor(e){this.maxIterations=null!=e.maxIterations?e.maxIterations:1e3,this.skipInvalidDates=null!=e.skipInvalidDates&&e.skipInvalidDates,this.jCalData=s.parse(e.ics),this.component=new s.Component(this.jCalData),this.events=this.component.getAllSubcomponents("vevent").map(e=>new s.Event(e)),this.skipInvalidDates&&(this.events=this.events.filter(e=>{try{return e.startDate.toJSDate(),e.endDate.toJSDate(),!0}catch(e){return!1}}))}between(e,t){function n(n,r){return(!e||r>=e.getTime())&&(!t||n<=t.getTime())}function r(e){const t=e.startDate.toJSDate().getTime();let n=e.endDate.toJSDate().getTime();return e.endDate.isDate&&n>t&&(n-=1),{startTime:t,endTime:n}}const a=[];this.events.forEach(e=>{e.isRecurrenceException()&&a.push(e)});const s={events:[],occurrences:[]};return this.events.filter(e=>!e.isRecurrenceException()).forEach(e=>{const i=[];if(e.component.getAllProperties("exdate").forEach(e=>{const t=e.getFirstValue();i.push(t.toJSDate().getTime())}),e.isRecurring()){const o=e.iterator();let c,l=0;do{if(l+=1,c=o.next(),c){const o=e.getOccurrenceDetails(c),{startTime:l,endTime:u}=r(o),d=-1!==i.indexOf(l),p=a.find(t=>t.uid===e.uid&&t.recurrenceId.toJSDate().getTime()===o.startDate.toJSDate().getTime());if(t&&l>t.getTime())break;n(l,u)&&(p?s.events.push(p):d||s.occurrences.push(o))}}while(c&&(!this.maxIterations||l<this.maxIterations));return}const{startTime:o,endTime:c}=r(e);n(o,c)&&s.events.push(e)}),s}before(e){return this.between(void 0,e)}after(e){return this.between(e)}all(){return this.between()}}const o={parseMeta:e=>e.url&&"ics"===e.format?{url:e.url,format:"ics"}:null,fetch(e,t,n){let r=e.eventSource.meta,{internalState:a}=r;a&&!e.isRefetch||(a=r.internalState={response:null,iCalExpanderPromise:fetch(r.url,{method:"GET"}).then(e=>e.text().then(t=>(a.response=e,new i({ics:t,skipInvalidDates:!0}))))}),a.iCalExpanderPromise.then(n=>{t({rawEvents:c(n,e.range),response:a.response})},n)}};function c(e,n){let r=t.addDays(n.start,-1),a=t.addDays(n.end,1),s=e.between(r,a),i=[];for(let e of s.events)i.push(Object.assign(Object.assign({},l(e)),{start:e.startDate.toString(),end:d(e)&&e.endDate?e.endDate.toString():null}));for(let e of s.occurrences){let t=e.item;i.push(Object.assign(Object.assign({},l(t)),{start:e.startDate.toString(),end:d(t)&&e.endDate?e.endDate.toString():null}))}return i}function l(e){return{title:e.summary,url:u(e),extendedProps:{location:e.location,organizer:e.organizer,description:e.description}}}function u(e){let t=e.component.getFirstProperty("url");return t?t.getFirstValue():""}function d(e){return Boolean(e.component.getFirstProperty("dtend"))||Boolean(e.component.getFirstProperty("duration"))}var p=n.createPlugin({name:"@fullcalendar/icalendar",eventSourceDefs:[o]});return t.globalPlugins.push(p),e.default=p,Object.defineProperty(e,"__esModule",{value:!0}),e}({},FullCalendar.Internal,FullCalendar,ICAL);
@@ -1,9 +1,5 @@
1
- /*!
2
- FullCalendar v6.0.0-beta.1
3
- Docs & License: https://fullcalendar.io/
4
- (c) 2022 Adam Shaw
5
- */
6
- import { createPlugin, addDays } from '@fullcalendar/common';
1
+ import { createPlugin } from '@fullcalendar/core/index.js';
2
+ import { addDays } from '@fullcalendar/core/internal.js';
7
3
  import * as ICAL from 'ical.js';
8
4
 
9
5
  /* eslint-disable */
@@ -106,7 +102,7 @@ class IcalExpander {
106
102
  }
107
103
  }
108
104
 
109
- let eventSourceDef = {
105
+ const eventSourceDef = {
110
106
  parseMeta(refined) {
111
107
  if (refined.url && refined.format === 'ics') {
112
108
  return {
@@ -116,73 +112,35 @@ let eventSourceDef = {
116
112
  }
117
113
  return null;
118
114
  },
119
- fetch(arg, onSuccess, onFailure) {
120
- let { meta } = arg.eventSource;
115
+ fetch(arg, successCallback, errorCallback) {
116
+ let meta = arg.eventSource.meta;
121
117
  let { internalState } = meta;
122
- function handleICalEvents(errorMessage, iCalExpander, xhr) {
123
- if (errorMessage) {
124
- onFailure({ message: errorMessage, xhr });
125
- }
126
- else {
127
- onSuccess({ rawEvents: expandICalEvents(iCalExpander, arg.range), xhr });
128
- }
129
- }
130
118
  /*
131
119
  NOTE: isRefetch is a HACK. we would do the recurring-expanding in a separate plugin hook,
132
120
  but we couldn't leverage built-in allDay-guessing, among other things.
133
121
  */
134
122
  if (!internalState || arg.isRefetch) {
135
123
  internalState = meta.internalState = {
136
- completed: false,
137
- callbacks: [handleICalEvents],
138
- errorMessage: '',
139
- iCalExpander: null,
140
- xhr: null,
124
+ response: null,
125
+ iCalExpanderPromise: fetch(meta.url, { method: 'GET' }).then((response) => {
126
+ return response.text().then((icsText) => {
127
+ internalState.response = response;
128
+ return new IcalExpander({
129
+ ics: icsText,
130
+ skipInvalidDates: true,
131
+ });
132
+ });
133
+ }),
141
134
  };
142
- requestICal(meta.url, (rawFeed, xhr) => {
143
- let iCalExpander = new IcalExpander({
144
- ics: rawFeed,
145
- skipInvalidDates: true,
146
- });
147
- for (let callback of internalState.callbacks) {
148
- callback('', iCalExpander, xhr);
149
- }
150
- internalState.completed = true;
151
- internalState.callbacks = [];
152
- internalState.iCalExpander = iCalExpander;
153
- internalState.xhr = xhr;
154
- }, (errorMessage, xhr) => {
155
- for (let callback of internalState.callbacks) {
156
- callback(errorMessage, null, xhr);
157
- }
158
- internalState.completed = true;
159
- internalState.callbacks = [];
160
- internalState.errorMessage = errorMessage;
161
- internalState.xhr = xhr;
162
- });
163
- }
164
- else if (!internalState.completed) {
165
- internalState.callbacks.push(handleICalEvents);
166
- }
167
- else {
168
- handleICalEvents(internalState.errorMessage, internalState.iCalExpander, internalState.xhr);
169
135
  }
136
+ internalState.iCalExpanderPromise.then((iCalExpander) => {
137
+ successCallback({
138
+ rawEvents: expandICalEvents(iCalExpander, arg.range),
139
+ response: internalState.response,
140
+ });
141
+ }, errorCallback);
170
142
  },
171
143
  };
172
- function requestICal(url, successCallback, failureCallback) {
173
- const xhr = new XMLHttpRequest();
174
- xhr.open('GET', url, true);
175
- xhr.onload = () => {
176
- if (xhr.status >= 200 && xhr.status < 400) {
177
- successCallback(xhr.responseText, xhr);
178
- }
179
- else {
180
- failureCallback('Request failed', xhr);
181
- }
182
- };
183
- xhr.onerror = () => failureCallback('Request failed', xhr);
184
- xhr.send(null);
185
- }
186
144
  function expandICalEvents(iCalExpander, range) {
187
145
  // expand the range. because our `range` is timeZone-agnostic UTC
188
146
  // or maybe because ical.js always produces dates in local time? i forget
@@ -226,9 +184,10 @@ function specifiesEnd(iCalEvent) {
226
184
  return Boolean(iCalEvent.component.getFirstProperty('dtend')) ||
227
185
  Boolean(iCalEvent.component.getFirstProperty('duration'));
228
186
  }
229
- var main = createPlugin({
187
+
188
+ var index = createPlugin({
189
+ name: '@fullcalendar/icalendar',
230
190
  eventSourceDefs: [eventSourceDef],
231
191
  });
232
192
 
233
- export default main;
234
- //# sourceMappingURL=main.js.map
193
+ export { index as default };
package/package.json CHANGED
@@ -1,30 +1,50 @@
1
1
  {
2
2
  "name": "@fullcalendar/icalendar",
3
- "version": "6.0.0-beta.1",
4
- "title": "FullCalendar iCalendar Plugin",
5
- "description": "Fetch events from a public iCalendar / .ics feed",
6
- "docs": "https://fullcalendar.io/docs/icalendar",
7
- "dependencies": {
8
- "@fullcalendar/common": "6.0.0-beta.1",
9
- "ical.js": "^1.4.0",
10
- "tslib": "^2.1.0"
11
- },
12
- "main": "main.cjs.js",
13
- "module": "main.js",
14
- "types": "main.d.ts",
15
- "jsdelivr": "main.global.min.js",
16
- "browserGlobal": "FullCalendarICalendar",
3
+ "version": "6.0.0-beta.2",
4
+ "keywords": [
5
+ "calendar",
6
+ "event",
7
+ "full-sized"
8
+ ],
17
9
  "homepage": "https://fullcalendar.io/",
10
+ "docs": "https://fullcalendar.io/docs/icalendar",
18
11
  "bugs": "https://fullcalendar.io/reporting-bugs",
19
12
  "repository": {
20
13
  "type": "git",
21
14
  "url": "https://github.com/fullcalendar/fullcalendar.git",
22
- "homepage": "https://github.com/fullcalendar/fullcalendar"
15
+ "homepage": "https://github.com/fullcalendar/fullcalendar",
16
+ "directory": "packages/icalendar"
23
17
  },
24
18
  "license": "MIT",
25
19
  "author": {
26
- "name": "NJ Pearman",
27
- "email": "n.pearman@gmail.com",
28
- "url": "https://github.com/njpearman/"
20
+ "name": "Adam Shaw",
21
+ "email": "arshaw@arshaw.com",
22
+ "url": "http://arshaw.com/"
23
+ },
24
+ "copyright": "2022 Adam Shaw",
25
+ "type": "module",
26
+ "title": "FullCalendar iCalendar Plugin",
27
+ "description": "Fetch events from a public iCalendar / .ics feed",
28
+ "dependencies": {
29
+ "ical.js": "^1.4.0"
30
+ },
31
+ "peerDependencies": {
32
+ "@fullcalendar/core": "6.0.0-beta.2"
33
+ },
34
+ "main": "./index.cjs",
35
+ "module": "./index.js",
36
+ "types": "./index.d.ts",
37
+ "unpkg": "./index.global.min.js",
38
+ "jsdelvr": "./index.global.min.js",
39
+ "exports": {
40
+ "./package.json": "./package.json",
41
+ "./index.cjs": "./index.cjs",
42
+ "./index.js": "./index.js",
43
+ ".": {
44
+ "require": "./index.cjs",
45
+ "import": "./index.js",
46
+ "types": "./index.d.ts",
47
+ "default": "./index.global.js"
48
+ }
29
49
  }
30
50
  }
package/main.d.ts DELETED
@@ -1,6 +0,0 @@
1
- import * as _fullcalendar_common from '@fullcalendar/common';
2
-
3
- declare const _default: _fullcalendar_common.PluginDef;
4
-
5
-
6
- export default _default;
@@ -1,6 +0,0 @@
1
- /*!
2
- FullCalendar v6.0.0-beta.1
3
- Docs & License: https://fullcalendar.io/
4
- (c) 2022 Adam Shaw
5
- */
6
- var FullCalendarICalendar=function(e,t,n){"use strict";function r(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(n){if("default"!==n){var r=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,r.get?r:{enumerable:!0,get:function(){return e[n]}})}})),t.default=e,Object.freeze(t)}var a=r(n);class s{constructor(e){this.maxIterations=null!=e.maxIterations?e.maxIterations:1e3,this.skipInvalidDates=null!=e.skipInvalidDates&&e.skipInvalidDates,this.jCalData=a.parse(e.ics),this.component=new a.Component(this.jCalData),this.events=this.component.getAllSubcomponents("vevent").map((e=>new a.Event(e))),this.skipInvalidDates&&(this.events=this.events.filter((e=>{try{return e.startDate.toJSDate(),e.endDate.toJSDate(),!0}catch(e){return!1}})))}between(e,t){function n(n,r){return(!e||r>=e.getTime())&&(!t||n<=t.getTime())}function r(e){const t=e.startDate.toJSDate().getTime();let n=e.endDate.toJSDate().getTime();return e.endDate.isDate&&n>t&&(n-=1),{startTime:t,endTime:n}}const a=[];this.events.forEach((e=>{e.isRecurrenceException()&&a.push(e)}));const s={events:[],occurrences:[]};return this.events.filter((e=>!e.isRecurrenceException())).forEach((e=>{const i=[];if(e.component.getAllProperties("exdate").forEach((e=>{const t=e.getFirstValue();i.push(t.toJSDate().getTime())})),e.isRecurring()){const o=e.iterator();let l,c=0;do{if(c+=1,l=o.next(),l){const o=e.getOccurrenceDetails(l),{startTime:c,endTime:u}=r(o),d=-1!==i.indexOf(c),f=a.find((t=>t.uid===e.uid&&t.recurrenceId.toJSDate().getTime()===o.startDate.toJSDate().getTime()));if(t&&c>t.getTime())break;n(c,u)&&(f?s.events.push(f):d||s.occurrences.push(o))}}while(l&&(!this.maxIterations||c<this.maxIterations));return}const{startTime:o,endTime:l}=r(e);n(o,l)&&s.events.push(e)})),s}before(e){return this.between(void 0,e)}after(e){return this.between(e)}all(){return this.between()}}let i={parseMeta:e=>e.url&&"ics"===e.format?{url:e.url,format:"ics"}:null,fetch(e,t,n){let{meta:r}=e.eventSource,{internalState:a}=r;function i(r,a,s){r?n({message:r,xhr:s}):t({rawEvents:o(a,e.range),xhr:s})}!a||e.isRefetch?(a=r.internalState={completed:!1,callbacks:[i],errorMessage:"",iCalExpander:null,xhr:null},function(e,t,n){const r=new XMLHttpRequest;r.open("GET",e,!0),r.onload=()=>{r.status>=200&&r.status<400?t(r.responseText,r):n("Request failed",r)},r.onerror=()=>n("Request failed",r),r.send(null)}(r.url,((e,t)=>{let n=new s({ics:e,skipInvalidDates:!0});for(let e of a.callbacks)e("",n,t);a.completed=!0,a.callbacks=[],a.iCalExpander=n,a.xhr=t}),((e,t)=>{for(let n of a.callbacks)n(e,null,t);a.completed=!0,a.callbacks=[],a.errorMessage=e,a.xhr=t}))):a.completed?i(a.errorMessage,a.iCalExpander,a.xhr):a.callbacks.push(i)}};function o(e,n){let r=t.addDays(n.start,-1),a=t.addDays(n.end,1),s=e.between(r,a),i=[];for(let e of s.events)i.push(Object.assign(Object.assign({},l(e)),{start:e.startDate.toString(),end:u(e)&&e.endDate?e.endDate.toString():null}));for(let e of s.occurrences){let t=e.item;i.push(Object.assign(Object.assign({},l(t)),{start:e.startDate.toString(),end:u(t)&&e.endDate?e.endDate.toString():null}))}return i}function l(e){return{title:e.summary,url:c(e),extendedProps:{location:e.location,organizer:e.organizer,description:e.description}}}function c(e){let t=e.component.getFirstProperty("url");return t?t.getFirstValue():""}function u(e){return Boolean(e.component.getFirstProperty("dtend"))||Boolean(e.component.getFirstProperty("duration"))}var d=t.createPlugin({eventSourceDefs:[i]});return t.globalPlugins.push(d),e.default=d,Object.defineProperty(e,"__esModule",{value:!0}),e}({},FullCalendar,ICAL);
package/main.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"main.js","sources":["src/ical-expander/IcalExpander.js","src/main.ts"],"sourcesContent":["/* eslint-disable */\n/*\nfrom https://github.com/mifi/ical-expander\nreleased under https://github.com/mifi/ical-expander/blob/master/LICENSE\noperates entirely in UTC\n*/\n\nimport * as ICAL from 'ical.js'\n\nexport class IcalExpander {\n constructor(opts) {\n this.maxIterations = opts.maxIterations != null ? opts.maxIterations : 1000;\n this.skipInvalidDates = opts.skipInvalidDates != null ? opts.skipInvalidDates : false;\n\n this.jCalData = ICAL.parse(opts.ics);\n this.component = new ICAL.Component(this.jCalData);\n this.events = this.component.getAllSubcomponents('vevent').map(vevent => new ICAL.Event(vevent));\n\n if (this.skipInvalidDates) {\n this.events = this.events.filter((evt) => {\n try {\n evt.startDate.toJSDate();\n evt.endDate.toJSDate();\n return true;\n } catch (err) {\n // skipping events with invalid time\n return false;\n }\n });\n }\n }\n\n between(after, before) {\n function isEventWithinRange(startTime, endTime) {\n return (!after || endTime >= after.getTime()) &&\n (!before || startTime <= before.getTime());\n }\n\n function getTimes(eventOrOccurrence) {\n const startTime = eventOrOccurrence.startDate.toJSDate().getTime();\n let endTime = eventOrOccurrence.endDate.toJSDate().getTime();\n\n // If it is an all day event, the end date is set to 00:00 of the next day\n // So we need to make it be 23:59:59 to compare correctly with the given range\n if (eventOrOccurrence.endDate.isDate && (endTime > startTime)) {\n endTime -= 1;\n }\n\n return { startTime, endTime };\n }\n\n const exceptions = [];\n\n this.events.forEach((event) => {\n if (event.isRecurrenceException()) exceptions.push(event);\n });\n\n const ret = {\n events: [],\n occurrences: [],\n };\n\n this.events.filter(e => !e.isRecurrenceException()).forEach((event) => {\n const exdates = [];\n\n event.component.getAllProperties('exdate').forEach((exdateProp) => {\n const exdate = exdateProp.getFirstValue();\n exdates.push(exdate.toJSDate().getTime());\n });\n\n // Recurring event is handled differently\n if (event.isRecurring()) {\n const iterator = event.iterator();\n\n let next;\n let i = 0;\n\n do {\n i += 1;\n next = iterator.next();\n if (next) {\n const occurrence = event.getOccurrenceDetails(next);\n\n const { startTime, endTime } = getTimes(occurrence);\n\n const isOccurrenceExcluded = exdates.indexOf(startTime) !== -1;\n\n // TODO check that within same day?\n const exception = exceptions.find(ex => ex.uid === event.uid && ex.recurrenceId.toJSDate().getTime() === occurrence.startDate.toJSDate().getTime());\n\n // We have passed the max date, stop\n if (before && startTime > before.getTime()) break;\n\n // Check that we are within our range\n if (isEventWithinRange(startTime, endTime)) {\n if (exception) {\n ret.events.push(exception);\n } else if (!isOccurrenceExcluded) {\n ret.occurrences.push(occurrence);\n }\n }\n }\n }\n while (next && (!this.maxIterations || i < this.maxIterations));\n\n return;\n }\n\n // Non-recurring event:\n const { startTime, endTime } = getTimes(event);\n\n if (isEventWithinRange(startTime, endTime)) ret.events.push(event);\n });\n\n return ret;\n }\n\n before(before) {\n return this.between(undefined, before);\n }\n\n after(after) {\n return this.between(after);\n }\n\n all() {\n return this.between();\n }\n}\n","import { createPlugin, EventSourceDef, EventInput, DateRange, addDays } from '@fullcalendar/common'\nimport * as ICAL from 'ical.js'\nimport { IcalExpander } from './ical-expander/IcalExpander'\n\ntype Success = (rawFeed: string, xhr: XMLHttpRequest) => void\ntype Failure = (error: string, xhr: XMLHttpRequest) => void\n\ninterface ICalFeedMeta {\n url: string\n format: 'ics', // for EventSourceApi\n internalState?: InternalState // HACK. TODO: use classes in future\n}\n\ninterface InternalState {\n completed: boolean\n callbacks: ((errorMessage: string, iCalExpander: IcalExpander, xhr: XMLHttpRequest) => void)[]\n errorMessage: string\n iCalExpander: IcalExpander\n xhr: XMLHttpRequest | null\n}\n\nlet eventSourceDef: EventSourceDef<ICalFeedMeta> = {\n\n parseMeta(refined) {\n if (refined.url && refined.format === 'ics') {\n return {\n url: refined.url,\n format: 'ics',\n }\n }\n return null\n },\n\n fetch(arg, onSuccess, onFailure) {\n let { meta } = arg.eventSource\n let { internalState } = meta\n\n function handleICalEvents(errorMessage, iCalExpander: IcalExpander, xhr) {\n if (errorMessage) {\n onFailure({ message: errorMessage, xhr })\n } else {\n onSuccess({ rawEvents: expandICalEvents(iCalExpander, arg.range), xhr })\n }\n }\n\n /*\n NOTE: isRefetch is a HACK. we would do the recurring-expanding in a separate plugin hook,\n but we couldn't leverage built-in allDay-guessing, among other things.\n */\n if (!internalState || arg.isRefetch) {\n internalState = meta.internalState = { // our ghetto Promise\n completed: false,\n callbacks: [handleICalEvents],\n errorMessage: '',\n iCalExpander: null,\n xhr: null,\n }\n\n requestICal(\n meta.url,\n (rawFeed, xhr) => {\n let iCalExpander = new IcalExpander({\n ics: rawFeed,\n skipInvalidDates: true,\n })\n\n for (let callback of internalState.callbacks) {\n callback('', iCalExpander, xhr)\n }\n\n internalState.completed = true\n internalState.callbacks = []\n internalState.iCalExpander = iCalExpander\n internalState.xhr = xhr\n },\n (errorMessage, xhr) => {\n for (let callback of internalState.callbacks) {\n callback(errorMessage, null, xhr)\n }\n\n internalState.completed = true\n internalState.callbacks = []\n internalState.errorMessage = errorMessage\n internalState.xhr = xhr\n },\n )\n } else if (!internalState.completed) {\n internalState.callbacks.push(handleICalEvents)\n } else {\n handleICalEvents(internalState.errorMessage, internalState.iCalExpander, internalState.xhr)\n }\n },\n}\n\nfunction requestICal(url: string, successCallback: Success, failureCallback: Failure) {\n const xhr = new XMLHttpRequest()\n xhr.open('GET', url, true)\n xhr.onload = () => {\n if (xhr.status >= 200 && xhr.status < 400) {\n successCallback(xhr.responseText, xhr)\n } else {\n failureCallback('Request failed', xhr)\n }\n }\n xhr.onerror = () => failureCallback('Request failed', xhr)\n xhr.send(null)\n}\n\nfunction expandICalEvents(iCalExpander: IcalExpander, range: DateRange): EventInput[] {\n // expand the range. because our `range` is timeZone-agnostic UTC\n // or maybe because ical.js always produces dates in local time? i forget\n let rangeStart = addDays(range.start, -1)\n let rangeEnd = addDays(range.end, 1)\n\n let iCalRes = iCalExpander.between(rangeStart, rangeEnd) // end inclusive. will give extra results\n let expanded: EventInput[] = []\n\n // TODO: instead of using startDate/endDate.toString to communicate allDay,\n // we can query startDate/endDate.isDate. More efficient to avoid formatting/reparsing.\n\n // single events\n for (let iCalEvent of iCalRes.events) {\n expanded.push({\n ...buildNonDateProps(iCalEvent),\n start: iCalEvent.startDate.toString(),\n end: (specifiesEnd(iCalEvent) && iCalEvent.endDate)\n ? iCalEvent.endDate.toString()\n : null,\n })\n }\n\n // recurring event instances\n for (let iCalOccurence of iCalRes.occurrences) {\n let iCalEvent = iCalOccurence.item\n expanded.push({\n ...buildNonDateProps(iCalEvent),\n start: iCalOccurence.startDate.toString(),\n end: (specifiesEnd(iCalEvent) && iCalOccurence.endDate)\n ? iCalOccurence.endDate.toString()\n : null,\n })\n }\n\n return expanded\n}\n\nfunction buildNonDateProps(iCalEvent: ICAL.Event): EventInput {\n return {\n title: iCalEvent.summary,\n url: extractEventUrl(iCalEvent),\n extendedProps: {\n location: iCalEvent.location,\n organizer: iCalEvent.organizer,\n description: iCalEvent.description,\n },\n }\n}\n\nfunction extractEventUrl(iCalEvent: ICAL.Event): string {\n let urlProp = iCalEvent.component.getFirstProperty('url')\n return urlProp ? urlProp.getFirstValue() : ''\n}\n\nfunction specifiesEnd(iCalEvent: ICAL.Event) {\n return Boolean(iCalEvent.component.getFirstProperty('dtend')) ||\n Boolean(iCalEvent.component.getFirstProperty('duration'))\n}\n\nexport default createPlugin({\n eventSourceDefs: [eventSourceDef],\n})\n"],"names":[],"mappings":"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"}