From fc8c1bc0748b3e262902f48324e1a8243c53737c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Andr=C3=A9s=20Jarana?= Date: Thu, 2 Aug 2018 13:37:58 +0200 Subject: [PATCH] chore: bump version to v2.7.1-m --- .gitignore | 1 - dist/defaults.js | 30 ++++++ dist/index.js | 124 +++++++++++++++++++++++++ dist/pipeline/build.js | 46 +++++++++ dist/pipeline/format.js | 87 +++++++++++++++++ dist/pipeline/index.js | 24 +++++ dist/pipeline/validate.js | 13 +++ dist/schema/index.js | 77 +++++++++++++++ dist/utils/fold-line.js | 17 ++++ dist/utils/format-duration.js | 25 +++++ dist/utils/format-text.js | 9 ++ dist/utils/index.js | 64 +++++++++++++ dist/utils/set-alarm.js | 88 ++++++++++++++++++ dist/utils/set-contact.js | 19 ++++ dist/utils/set-date-with-local-time.js | 50 ++++++++++ dist/utils/set-date-with-utc-time.js | 50 ++++++++++ dist/utils/set-date.js | 41 ++++++++ dist/utils/set-description.js | 16 ++++ dist/utils/set-geolocation.js | 12 +++ dist/utils/set-organizer.js | 17 ++++ dist/utils/set-summary.js | 16 ++++ package.json | 2 +- 22 files changed, 826 insertions(+), 2 deletions(-) create mode 100644 dist/defaults.js create mode 100644 dist/index.js create mode 100644 dist/pipeline/build.js create mode 100644 dist/pipeline/format.js create mode 100644 dist/pipeline/index.js create mode 100644 dist/pipeline/validate.js create mode 100644 dist/schema/index.js create mode 100644 dist/utils/fold-line.js create mode 100644 dist/utils/format-duration.js create mode 100644 dist/utils/format-text.js create mode 100644 dist/utils/index.js create mode 100644 dist/utils/set-alarm.js create mode 100644 dist/utils/set-contact.js create mode 100644 dist/utils/set-date-with-local-time.js create mode 100644 dist/utils/set-date-with-utc-time.js create mode 100644 dist/utils/set-date.js create mode 100644 dist/utils/set-description.js create mode 100644 dist/utils/set-geolocation.js create mode 100644 dist/utils/set-organizer.js create mode 100644 dist/utils/set-summary.js diff --git a/.gitignore b/.gitignore index 6390f94..8a20256 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,3 @@ node_modules .DS_Store write-event.js output.ics -dist/ \ No newline at end of file diff --git a/dist/defaults.js b/dist/defaults.js new file mode 100644 index 0000000..ec5d7d6 --- /dev/null +++ b/dist/defaults.js @@ -0,0 +1,30 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _v = require('uuid/v1'); + +var _v2 = _interopRequireDefault(_v); + +var _moment = require('moment'); + +var _moment2 = _interopRequireDefault(_moment); + +var _utils = require('./utils'); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var now = (0, _moment2.default)().utc(); + +var defaults = { + title: 'Untitled event', + productId: 'adamgibbons/ics', + method: 'PUBLISH', + uid: (0, _v2.default)(), + timestamp: (0, _utils.setDateWithUTCtime)([now.get('year'), now.get('month') + 1, now.get('date'), now.get('hours'), now.get('minutes'), now.get('seconds')]), + start: (0, _utils.setDateWithUTCtime)() +}; + +exports.default = defaults; \ No newline at end of file diff --git a/dist/index.js b/dist/index.js new file mode 100644 index 0000000..6010427 --- /dev/null +++ b/dist/index.js @@ -0,0 +1,124 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.createEvent = createEvent; +exports.createEvents = createEvents; + +var _v = require('uuid/v4'); + +var _v2 = _interopRequireDefault(_v); + +var _pipeline = require('./pipeline'); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function assignUniqueId(event) { + event.uid = event.uid || (0, _v2.default)(); + return (0, _pipeline.validateEvent)((0, _pipeline.buildEvent)(event)); +} + +function applyInitialFormatting(_ref) { + var error = _ref.error, + value = _ref.value; + + if (error) { + return { error: error, value: null }; + } + + return { error: null, value: (0, _pipeline.formatEvent)(value) }; +} + +function reformatEventsByPosition(_ref2, idx, list) { + var error = _ref2.error, + value = _ref2.value; + + if (error) return { error: error, value: value }; + + if (idx === 0) { + // beginning of list + return { value: value.slice(0, value.indexOf('END:VCALENDAR')), error: null }; + } + + if (idx === list.length - 1) { + // end of list + return { value: value.slice(value.indexOf('BEGIN:VEVENT')), error: null }; + } + + return { error: null, value: value.slice(value.indexOf('BEGIN:VEVENT'), value.indexOf('END:VEVENT') + 12) }; +} + +function catenateEvents(accumulator, _ref3, idx) { + var error = _ref3.error, + value = _ref3.value; + + if (error) { + accumulator.error = error; + accumulator.value = null; + return accumulator; + } + + if (accumulator.value) { + accumulator.value = accumulator.value.concat(value); + return accumulator; + } + + accumulator.value = value; + return accumulator; +} + +function createEvent(attributes, cb) { + if (!attributes) { + Error('Attributes argument is required'); + } + + if (!cb) { + // No callback, so return error or value in an object + var _validateEvent = (0, _pipeline.validateEvent)((0, _pipeline.buildEvent)(attributes)), + _error = _validateEvent.error, + _value = _validateEvent.value; + + if (_error) return { error: _error, value: _value }; + + var event = ''; + + try { + event = (0, _pipeline.formatEvent)(_value); + } catch (error) { + return { error: error, value: null }; + } + + return { error: null, value: event }; + } + + // Return a node-style callback + + var _validateEvent2 = (0, _pipeline.validateEvent)((0, _pipeline.buildEvent)(attributes)), + error = _validateEvent2.error, + value = _validateEvent2.value; + + if (error) return cb(error); + + return cb(null, (0, _pipeline.formatEvent)(value)); +} + +function createEvents(events, cb) { + if (!events) { + return { error: Error('one argument is required'), value: null }; + } + + if (events.length === 1) { + return createEvent(events[0], cb); + } + + var _events$map$map$map$r = events.map(assignUniqueId).map(applyInitialFormatting).map(reformatEventsByPosition).reduce(catenateEvents, { error: null, value: null }), + error = _events$map$map$map$r.error, + value = _events$map$map$map$r.value; + + if (!cb) { + return { error: error, value: value }; + } + + return cb(error, value); +} \ No newline at end of file diff --git a/dist/pipeline/build.js b/dist/pipeline/build.js new file mode 100644 index 0000000..9b7d4cb --- /dev/null +++ b/dist/pipeline/build.js @@ -0,0 +1,46 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = buildEvent; + +var _lodash = require('lodash'); + +var _lodash2 = _interopRequireDefault(_lodash); + +var _defaults = require('../defaults'); + +var _defaults2 = _interopRequireDefault(_defaults); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function buildEvent() { + var attributes = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + var title = attributes.title, + productId = attributes.productId, + method = attributes.method, + uid = attributes.uid, + start = attributes.start, + startType = attributes.startType, + duration = attributes.duration, + end = attributes.end, + description = attributes.description, + url = attributes.url, + geo = attributes.geo, + location = attributes.location, + status = attributes.status, + categories = attributes.categories, + organizer = attributes.organizer, + attendees = attributes.attendees, + alarms = attributes.alarms; + + // fill in default values where necessary + + var output = Object.assign({}, _defaults2.default, attributes); + + // remove falsey values + var cleanOutput = _lodash2.default.pickBy(output, _lodash2.default.identity); + + return cleanOutput; +} \ No newline at end of file diff --git a/dist/pipeline/format.js b/dist/pipeline/format.js new file mode 100644 index 0000000..3460685 --- /dev/null +++ b/dist/pipeline/format.js @@ -0,0 +1,87 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = formatEvent; + +var _utils = require('../utils'); + +var _lodash = require('lodash'); + +var _lodash2 = _interopRequireDefault(_lodash); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function formatEvent() { + var attributes = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + var title = attributes.title, + productId = attributes.productId, + method = attributes.method, + uid = attributes.uid, + timestamp = attributes.timestamp, + start = attributes.start, + startType = attributes.startType, + duration = attributes.duration, + end = attributes.end, + description = attributes.description, + url = attributes.url, + geo = attributes.geo, + location = attributes.location, + status = attributes.status, + categories = attributes.categories, + organizer = attributes.organizer, + attendees = attributes.attendees, + alarms = attributes.alarms; + + + var icsFormat = ''; + icsFormat += 'BEGIN:VCALENDAR\r\n'; + icsFormat += 'VERSION:2.0\r\n'; + icsFormat += 'CALSCALE:GREGORIAN\r\n'; + icsFormat += (0, _utils.foldLine)('PRODID:' + productId) + '\r\n'; + icsFormat += (0, _utils.foldLine)('METHOD:' + method) + '\r\n'; + icsFormat += 'X-PUBLISHED-TTL:PT1H\r\n'; + icsFormat += 'BEGIN:VEVENT\r\n'; + icsFormat += 'UID:' + uid + '\r\n'; + icsFormat += (0, _utils.foldLine)('SUMMARY:' + (title ? (0, _utils.setSummary)(title) : title)) + '\r\n'; + icsFormat += 'DTSTAMP:' + timestamp + '\r\n'; + + // All day events like anniversaries must be specified as VALUE type DATE + icsFormat += 'DTSTART' + (start && start.length == 3 ? ";VALUE=DATE" : "") + ':' + (0, _utils.setDate)(start, startType) + '\r\n'; + + // End is not required for all day events on single days (like anniversaries) + if (!(_lodash2.default.isEqual(start, end) && end && end.length == 3)) { + if (end && end.length == 3) { + icsFormat += 'DTEND;VALUE=DATE:' + (0, _utils.setDate)(end, startType) + '\r\n'; + } else if (end) { + icsFormat += 'DTEND:' + (0, _utils.setDate)(end, startType) + '\r\n'; + } + } + + icsFormat += description ? (0, _utils.foldLine)('DESCRIPTION:' + (0, _utils.setDescription)(description)) + '\r\n' : ''; + icsFormat += url ? (0, _utils.foldLine)('URL:' + url) + '\r\n' : ''; + icsFormat += geo ? (0, _utils.foldLine)('GEO:' + (0, _utils.setGeolocation)(geo)) + '\r\n' : ''; + icsFormat += location ? (0, _utils.foldLine)('LOCATION:' + location) + '\r\n' : ''; + icsFormat += status ? (0, _utils.foldLine)('STATUS:' + status) + '\r\n' : ''; + icsFormat += categories ? (0, _utils.foldLine)('CATEGORIES:' + categories) + '\r\n' : ''; + icsFormat += organizer ? (0, _utils.foldLine)('ORGANIZER;' + (0, _utils.setOrganizer)(organizer)) + '\r\n' : ''; + + if (attendees) { + attendees.map(function (attendee) { + icsFormat += (0, _utils.foldLine)('ATTENDEE;' + (0, _utils.setContact)(attendee)) + '\r\n'; + }); + } + + if (alarms) { + alarms.map(function (alarm) { + icsFormat += (0, _utils.setAlarm)(alarm); + }); + } + + icsFormat += duration ? 'DURATION:' + (0, _utils.formatDuration)(duration) + '\r\n' : ''; + icsFormat += 'END:VEVENT\r\n'; + icsFormat += 'END:VCALENDAR\r\n'; + + return icsFormat; +} \ No newline at end of file diff --git a/dist/pipeline/index.js b/dist/pipeline/index.js new file mode 100644 index 0000000..9ce914c --- /dev/null +++ b/dist/pipeline/index.js @@ -0,0 +1,24 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.validateEvent = exports.formatEvent = exports.buildEvent = undefined; + +var _build = require('./build'); + +var _build2 = _interopRequireDefault(_build); + +var _format = require('./format'); + +var _format2 = _interopRequireDefault(_format); + +var _validate = require('./validate'); + +var _validate2 = _interopRequireDefault(_validate); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +exports.buildEvent = _build2.default; +exports.formatEvent = _format2.default; +exports.validateEvent = _validate2.default; \ No newline at end of file diff --git a/dist/pipeline/validate.js b/dist/pipeline/validate.js new file mode 100644 index 0000000..0daeead --- /dev/null +++ b/dist/pipeline/validate.js @@ -0,0 +1,13 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _schema = require('../schema'); + +var _schema2 = _interopRequireDefault(_schema); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +exports.default = _schema2.default; \ No newline at end of file diff --git a/dist/schema/index.js b/dist/schema/index.js new file mode 100644 index 0000000..eea97f6 --- /dev/null +++ b/dist/schema/index.js @@ -0,0 +1,77 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = validateEvent; + +var _joi = require('joi'); + +var _joi2 = _interopRequireDefault(_joi); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var dateTimeSchema = _joi2.default.array().min(3).max(7).ordered(_joi2.default.number().integer(), _joi2.default.number().integer().min(1).max(12), _joi2.default.number().integer().min(1).max(31), _joi2.default.number().integer().min(0).max(23), _joi2.default.number().integer().min(0).max(60), _joi2.default.number().integer().min(0).max(60)); + +var durationSchema = _joi2.default.object().keys({ + before: _joi2.default.boolean(), //option to set before alaram + weeks: _joi2.default.number(), + days: _joi2.default.number(), + hours: _joi2.default.number(), + minutes: _joi2.default.number(), + seconds: _joi2.default.number() +}); + +var contactSchema = _joi2.default.object().keys({ + name: _joi2.default.string(), + email: _joi2.default.string().email(), + rsvp: _joi2.default.boolean() +}); + +var organizerSchema = _joi2.default.object().keys({ + name: _joi2.default.string(), + email: _joi2.default.string().email() +}); + +var alarmSchema = _joi2.default.object().keys({ + action: _joi2.default.string().regex(/audio|display|email/).required(), + trigger: _joi2.default.any().required(), + description: _joi2.default.string(), + duration: durationSchema, + repeat: _joi2.default.number(), + attach: _joi2.default.string(), + attachType: _joi2.default.string(), + summary: _joi2.default.string(), + attendee: contactSchema, + 'x-prop': _joi2.default.any(), + 'iana-prop': _joi2.default.any() +}); + +var schema = _joi2.default.object().keys({ + timestamp: _joi2.default.any(), + title: _joi2.default.string(), + productId: _joi2.default.string(), + method: _joi2.default.string(), + uid: _joi2.default.string().required(), + start: dateTimeSchema.required(), + duration: durationSchema, + startType: _joi2.default.string(), + end: dateTimeSchema, + description: _joi2.default.string(), + url: _joi2.default.string().uri(), + geo: _joi2.default.object().keys({ lat: _joi2.default.number(), lon: _joi2.default.number() }), + location: _joi2.default.string(), + status: _joi2.default.string().regex(/TENTATIVE|CANCELLED|CONFIRMED/), + categories: _joi2.default.array().items(_joi2.default.string()), + organizer: organizerSchema, + attendees: _joi2.default.array().items(contactSchema), + alarms: _joi2.default.array().items(alarmSchema) +}).xor('end', 'duration'); + +function validateEvent(candidate) { + var _Joi$validate = _joi2.default.validate(candidate, schema), + error = _Joi$validate.error, + value = _Joi$validate.value; + + return { error: error, value: value }; +} \ No newline at end of file diff --git a/dist/utils/fold-line.js b/dist/utils/fold-line.js new file mode 100644 index 0000000..4063d49 --- /dev/null +++ b/dist/utils/fold-line.js @@ -0,0 +1,17 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = foldLine; +function foldLine(line) { + var parts = []; + var length = 75; + while (line.length > length) { + parts.push(line.slice(0, length)); + line = line.slice(length); + length = 74; + } + parts.push(line); + return parts.join('\r\n\t'); +} \ No newline at end of file diff --git a/dist/utils/format-duration.js b/dist/utils/format-duration.js new file mode 100644 index 0000000..10bcc2f --- /dev/null +++ b/dist/utils/format-duration.js @@ -0,0 +1,25 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = formatDuration; +function formatDuration() { + var attributes = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + var weeks = attributes.weeks, + days = attributes.days, + hours = attributes.hours, + minutes = attributes.minutes, + seconds = attributes.seconds; + + + var formattedDuration = 'P'; + formattedDuration += weeks ? weeks + 'W' : ''; + formattedDuration += days ? days + 'D' : ''; + formattedDuration += 'T'; + formattedDuration += hours ? hours + 'H' : ''; + formattedDuration += minutes ? minutes + 'M' : ''; + formattedDuration += seconds ? seconds + 'S' : ''; + + return formattedDuration; +} \ No newline at end of file diff --git a/dist/utils/format-text.js b/dist/utils/format-text.js new file mode 100644 index 0000000..8458083 --- /dev/null +++ b/dist/utils/format-text.js @@ -0,0 +1,9 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = formatText; +function formatText(text) { + return text.replace(/\\/gm, "\\\\").replace(/\r?\n/gm, "\\n").replace(/;/gm, "\\;").replace(/,/gm, "\\,"); +} \ No newline at end of file diff --git a/dist/utils/index.js b/dist/utils/index.js new file mode 100644 index 0000000..baaa5bb --- /dev/null +++ b/dist/utils/index.js @@ -0,0 +1,64 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.foldLine = exports.setDescription = exports.setSummary = exports.formatDuration = exports.setAlarm = exports.setOrganizer = exports.setContact = exports.setGeolocation = exports.setDateWithLocalTime = exports.setDateWithUTCtime = exports.setDate = undefined; + +var _setDate = require('./set-date'); + +var _setDate2 = _interopRequireDefault(_setDate); + +var _setDateWithUtcTime = require('./set-date-with-utc-time'); + +var _setDateWithUtcTime2 = _interopRequireDefault(_setDateWithUtcTime); + +var _setDateWithLocalTime = require('./set-date-with-local-time'); + +var _setDateWithLocalTime2 = _interopRequireDefault(_setDateWithLocalTime); + +var _setGeolocation = require('./set-geolocation'); + +var _setGeolocation2 = _interopRequireDefault(_setGeolocation); + +var _setContact = require('./set-contact'); + +var _setContact2 = _interopRequireDefault(_setContact); + +var _setOrganizer = require('./set-organizer'); + +var _setOrganizer2 = _interopRequireDefault(_setOrganizer); + +var _setAlarm = require('./set-alarm'); + +var _setAlarm2 = _interopRequireDefault(_setAlarm); + +var _setDescription = require('./set-description'); + +var _setDescription2 = _interopRequireDefault(_setDescription); + +var _setSummary = require('./set-summary'); + +var _setSummary2 = _interopRequireDefault(_setSummary); + +var _formatDuration = require('./format-duration'); + +var _formatDuration2 = _interopRequireDefault(_formatDuration); + +var _foldLine = require('./fold-line'); + +var _foldLine2 = _interopRequireDefault(_foldLine); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +exports.setDate = _setDate2.default; +exports.setDateWithUTCtime = _setDateWithUtcTime2.default; +exports.setDateWithLocalTime = _setDateWithLocalTime2.default; +exports.setGeolocation = _setGeolocation2.default; +exports.setContact = _setContact2.default; +exports.setOrganizer = _setOrganizer2.default; +exports.setAlarm = _setAlarm2.default; +exports.formatDuration = _formatDuration2.default; +exports.setSummary = _setSummary2.default; +exports.setDescription = _setDescription2.default; +exports.foldLine = _foldLine2.default; \ No newline at end of file diff --git a/dist/utils/set-alarm.js b/dist/utils/set-alarm.js new file mode 100644 index 0000000..29e0426 --- /dev/null +++ b/dist/utils/set-alarm.js @@ -0,0 +1,88 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = setAlarm; + +var _setDate = require('./set-date'); + +var _setDate2 = _interopRequireDefault(_setDate); + +var _foldLine = require('./fold-line'); + +var _foldLine2 = _interopRequireDefault(_foldLine); + +var _lodash = require('lodash'); + +var _lodash2 = _interopRequireDefault(_lodash); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function setDuration(_ref) { + var weeks = _ref.weeks, + days = _ref.days, + hours = _ref.hours, + minutes = _ref.minutes, + seconds = _ref.seconds; + + var formattedString = 'P'; + formattedString += weeks ? weeks + 'W' : ''; + formattedString += days ? days + 'D' : ''; + formattedString += 'T'; + formattedString += hours ? hours + 'H' : ''; + formattedString += minutes ? minutes + 'M' : ''; + formattedString += seconds ? seconds + 'S' : ''; + + return formattedString; +} + +function setTrigger(trigger) { + var formattedString = ''; + if (_lodash2.default.isArray(trigger)) { + formattedString = 'TRIGGER;VALUE=DATE-TIME:' + (0, _setDate2.default)(trigger) + '\r\n'; + } else { + var alert = trigger.before ? '-' : ''; + formattedString = 'TRIGGER:' + (alert + setDuration(trigger)) + '\r\n'; + } + + return formattedString; +} + +function setAction(action) { + return action.toUpperCase(); +} + +function setAlarm() { + var attributes = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + var action = attributes.action, + repeat = attributes.repeat, + description = attributes.description, + duration = attributes.duration, + attach = attributes.attach, + attachType = attributes.attachType, + trigger = attributes.trigger, + summary = attributes.summary; + + + var formattedString = 'BEGIN:VALARM\r\n'; + formattedString += (0, _foldLine2.default)('ACTION:' + setAction(action)) + '\r\n'; + formattedString += repeat ? (0, _foldLine2.default)('REPEAT:' + repeat) + '\r\n' : ''; + formattedString += description ? (0, _foldLine2.default)('DESCRIPTION:' + description) + '\r\n' : ''; + formattedString += duration ? (0, _foldLine2.default)('DURATION:' + setDuration(duration)) + '\r\n' : ''; + var attachInfo = attachType ? attachType : 'FMTTYPE=audio/basic'; + formattedString += attach ? (0, _foldLine2.default)('ATTACH;' + attachInfo + ':' + attach) + '\r\n' : ''; + formattedString += trigger ? setTrigger(trigger) : ''; + formattedString += summary ? (0, _foldLine2.default)('SUMMARY:' + summary) + '\r\n' : ''; + formattedString += 'END:VALARM\r\n'; + + return formattedString; +} + +// Example: A duration of 15 days, 5 hours, and 20 seconds would be: + +// P15DT5H0M20S + +// A duration of 7 weeks would be: + +// P7W \ No newline at end of file diff --git a/dist/utils/set-contact.js b/dist/utils/set-contact.js new file mode 100644 index 0000000..50a85bd --- /dev/null +++ b/dist/utils/set-contact.js @@ -0,0 +1,19 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = setContact; +function setContact(_ref) { + var name = _ref.name, + email = _ref.email, + rsvp = _ref.rsvp; + + var formattedAttendee = ''; + formattedAttendee += rsvp ? 'RSVP=TRUE;' : 'RSVP=FALSE;'; + formattedAttendee += 'CN='; + formattedAttendee += name || 'Unnamed attendee'; + formattedAttendee += email ? ':mailto:' + email : ''; + + return formattedAttendee; +} \ No newline at end of file diff --git a/dist/utils/set-date-with-local-time.js b/dist/utils/set-date-with-local-time.js new file mode 100644 index 0000000..8ae3893 --- /dev/null +++ b/dist/utils/set-date-with-local-time.js @@ -0,0 +1,50 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); // +// DATE-TIME +// FORM #1: DATE WITH LOCAL TIME +// +// The date with local time form is simply a DATE-TIME value that +// does not contain the UTC designator nor does it reference a time +// zone. DATE-TIME values of this type are said to be "floating" +// and are not bound to any time zone in particular. +// +// For example, the following represents +// January 18, 1998, at 11 PM: +// +// 19980118T230000 +// + +exports.default = setDateWithLocalTime; + +var _moment = require('moment'); + +var _moment2 = _interopRequireDefault(_moment); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function setDateWithLocalTime() { + var args = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; + + if (args.length > 0) { + var _args = _slicedToArray(args, 6), + year = _args[0], + month = _args[1], + date = _args[2], + _args$ = _args[3], + hours = _args$ === undefined ? 0 : _args$, + _args$2 = _args[4], + minutes = _args$2 === undefined ? 0 : _args$2, + _args$3 = _args[5], + seconds = _args$3 === undefined ? 0 : _args$3; + + var formattedDate = (0, _moment2.default)([year, month - 1, date, hours, minutes, seconds]).format('YYYYMMDDTHHmm00'); + return formattedDate; + } + + return (0, _moment2.default)().format('YYYYMMDDTHHmm00'); +} \ No newline at end of file diff --git a/dist/utils/set-date-with-utc-time.js b/dist/utils/set-date-with-utc-time.js new file mode 100644 index 0000000..8abff22 --- /dev/null +++ b/dist/utils/set-date-with-utc-time.js @@ -0,0 +1,50 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); // +// FORM #2: DATE WITH UTC TIME +// +// The date with UTC time, or absolute time, is identified by a LATIN +// CAPITAL LETTER Z suffix character, the UTC designator, appended to +// the time value. For example, the following represents January 19, +// 1998, at 0700 UTC: +// +// 19980119T070000Z +// +// The "TZID" property parameter MUST NOT be applied to DATE-TIME +// properties whose time values are specified in UTC. +// + +exports.default = setDateWithUTCtime; + +var _moment = require('moment'); + +var _moment2 = _interopRequireDefault(_moment); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function setDateWithUTCtime() { + var args = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; + + if (args.length > 0) { + var _args = _slicedToArray(args, 6), + year = _args[0], + month = _args[1], + date = _args[2], + _args$ = _args[3], + hours = _args$ === undefined ? 0 : _args$, + _args$2 = _args[4], + minutes = _args$2 === undefined ? 0 : _args$2, + _args$3 = _args[5], + seconds = _args$3 === undefined ? 0 : _args$3; + + var formattedDate = (0, _moment2.default)([year, month - 1, date, hours, minutes, seconds]).utc().format('YYYYMMDDTHHmm00') + 'Z'; + + return formattedDate; + } + + return (0, _moment2.default)().utc().format('YYYYMMDDTHHmm00') + 'Z'; +} \ No newline at end of file diff --git a/dist/utils/set-date.js b/dist/utils/set-date.js new file mode 100644 index 0000000..6a30fe5 --- /dev/null +++ b/dist/utils/set-date.js @@ -0,0 +1,41 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); + +exports.default = setDate; + +var _moment = require('moment'); + +var _moment2 = _interopRequireDefault(_moment); + +var _index = require('./index'); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function setDate() { + var args = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; + var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'utc'; + + var _args = _slicedToArray(args, 6), + year = _args[0], + month = _args[1], + date = _args[2], + hours = _args[3], + minutes = _args[4], + seconds = _args[5]; + + if (args.length === 3) { + return (0, _moment2.default)([year, month - 1, date]).format('YYYYMMDD'); + } + + if (type === 'local') { + return (0, _index.setDateWithLocalTime)([year, month, date, hours, minutes, seconds || 0]); + } + + // type === 'utc' + return (0, _index.setDateWithUTCtime)([year, month, date, hours, minutes, seconds || 0]); +} \ No newline at end of file diff --git a/dist/utils/set-description.js b/dist/utils/set-description.js new file mode 100644 index 0000000..464e781 --- /dev/null +++ b/dist/utils/set-description.js @@ -0,0 +1,16 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = setDescription; + +var _formatText = require('./format-text'); + +var _formatText2 = _interopRequireDefault(_formatText); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function setDescription(description) { + return (0, _formatText2.default)(description); +} \ No newline at end of file diff --git a/dist/utils/set-geolocation.js b/dist/utils/set-geolocation.js new file mode 100644 index 0000000..8bde04b --- /dev/null +++ b/dist/utils/set-geolocation.js @@ -0,0 +1,12 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = setGeolocation; +function setGeolocation(_ref) { + var lat = _ref.lat, + lon = _ref.lon; + + return lat + ";" + lon; +} \ No newline at end of file diff --git a/dist/utils/set-organizer.js b/dist/utils/set-organizer.js new file mode 100644 index 0000000..b0de425 --- /dev/null +++ b/dist/utils/set-organizer.js @@ -0,0 +1,17 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = setOrganizer; +function setOrganizer(_ref) { + var name = _ref.name, + email = _ref.email; + + var formattedOrganizer = ''; + formattedOrganizer += 'CN='; + formattedOrganizer += name || 'Organizer'; + formattedOrganizer += email ? ':mailto:' + email : ''; + + return formattedOrganizer; +} \ No newline at end of file diff --git a/dist/utils/set-summary.js b/dist/utils/set-summary.js new file mode 100644 index 0000000..4e202e0 --- /dev/null +++ b/dist/utils/set-summary.js @@ -0,0 +1,16 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = setSummary; + +var _formatText = require('./format-text'); + +var _formatText2 = _interopRequireDefault(_formatText); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function setSummary(summary) { + return (0, _formatText2.default)(summary); +} \ No newline at end of file diff --git a/package.json b/package.json index bb4f350..4381998 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ics", - "version": "2.7.1", + "version": "2.7.1-m", "description": "iCal (ics) file generator", "main": "index.js", "scripts": {