{"version":3,"sources":["jsdelivr-header.js","/npm/ical@0.5.0/ical.js"],"names":[],"mappings":"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","file":"/npm/ical@0.5.0/ical.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/ical@0.5.0/ical.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","(function(name, definition) {\n\n/****************\n *  A tolerant, minimal icalendar parser\n *  (http://tools.ietf.org/html/rfc5545)\n *\n *  <peterbraden@peterbraden.co.uk>\n * **************/\n\n  if (typeof module !== 'undefined') {\n    module.exports = definition();\n  } else if (typeof define === 'function' && typeof define.amd === 'object'){\n    define(definition);\n  } else {\n    this[name] = definition();\n  }\n\n}('ical', function(){\n\n   // Unescape Text re RFC 4.3.11\n  var text = function(t){\n    t = t || \"\";\n    return (t\n      .replace(/\\\\\\,/g, ',')\n      .replace(/\\\\\\;/g, ';')\n      .replace(/\\\\[nN]/g, '\\n')\n      .replace(/\\\\\\\\/g, '\\\\')\n    )\n  }\n\n  var parseParams = function(p){\n    var out = {}\n    for (var i = 0; i<p.length; i++){\n      if (p[i].indexOf('=') > -1){\n        var segs = p[i].split('=');\n        \n        out[segs[0]] = parseValue(segs.slice(1).join('='));\n        \n      }\n    }\n    return out || sp\n  }\n\n  var parseValue = function(val){\n    if ('TRUE' === val)\n      return true;\n    \n    if ('FALSE' === val)\n      return false;\n\n    var number = Number(val);\n    if (!isNaN(number))\n      return number;\n\n    return val;\n  }\n\n  var storeParam = function(name){\n    return function(val, params, curr){\n      var data;\n      if (params && params.length && !(params.length==1 && params[0]==='CHARSET=utf-8')){\n        data = {params:parseParams(params), val:text(val)}\n      }\n      else\n        data = text(val)\n\n      var current = curr[name];\n      if (Array.isArray(current)){\n        current.push(data);\n        return curr;\n      }\n\n      if (current != null){\n        curr[name] = [current, data];\n        return curr;\n      }\n\n      curr[name] = data;\n      return curr\n    }\n  }\n\n  var addTZ = function(dt, name, params){\n    var p = parseParams(params);\n\n    if (params && p){\n      dt[name].tz = p.TZID\n    }\n\n    return dt\n  }\n\n\n  var dateParam = function(name){\n    return function(val, params, curr){\n\n      // Store as string - worst case scenario\n      storeParam(name)(val, undefined, curr)\n\n      if (params && params[0] === \"VALUE=DATE\") {\n        // Just Date\n\n        var comps = /^(\\d{4})(\\d{2})(\\d{2})$/.exec(val);\n        if (comps !== null) {\n          // No TZ info - assume same timezone as this computer\n          curr[name] = new Date(\n            comps[1],\n            parseInt(comps[2], 10)-1,\n            comps[3]\n          );\n\n          return addTZ(curr, name, params);\n        }\n      }\n\n\n      //typical RFC date-time format\n      var comps = /^(\\d{4})(\\d{2})(\\d{2})T(\\d{2})(\\d{2})(\\d{2})(Z)?$/.exec(val);\n      if (comps !== null) {\n        if (comps[7] == 'Z'){ // GMT\n          curr[name] = new Date(Date.UTC(\n            parseInt(comps[1], 10),\n            parseInt(comps[2], 10)-1,\n            parseInt(comps[3], 10),\n            parseInt(comps[4], 10),\n            parseInt(comps[5], 10),\n            parseInt(comps[6], 10 )\n          ));\n          // TODO add tz\n        } else {\n          curr[name] = new Date(\n            parseInt(comps[1], 10),\n            parseInt(comps[2], 10)-1,\n            parseInt(comps[3], 10),\n            parseInt(comps[4], 10),\n            parseInt(comps[5], 10),\n            parseInt(comps[6], 10)\n          );\n        }\n      }\n\n      return addTZ(curr, name, params)\n    }\n  }\n\n\n  var geoParam = function(name){\n    return function(val, params, curr){\n      storeParam(val, params, curr)\n      var parts = val.split(';');\n      curr[name] = {lat:Number(parts[0]), lon:Number(parts[1])};\n      return curr\n    }\n  }\n\n  var categoriesParam = function (name) {\n    var separatorPattern = /\\s*,\\s*/g;\n    return function (val, params, curr) {\n      storeParam(val, params, curr)\n      curr[name] = val ? val.split(separatorPattern) : []\n      return curr\n    }\n  }\n\n  var addFBType = function(fb, params){\n    var p = parseParams(params);\n\n    if (params && p){\n      fb.type = p.FBTYPE || \"BUSY\"\n    }\n\n    return fb;\n  }\n\n  var freebusyParam = function (name) {\n    return function(val, params, curr){\n      var fb = addFBType({}, params);\n      curr[name] = curr[name] || []\n      curr[name].push(fb);\n\n      storeParam(val, params, fb);\n\n      var parts = val.split('/');\n\n      ['start', 'end'].forEach(function (name, index) {\n        dateParam(name)(parts[index], params, fb);\n      });\n\n      return curr;\n    }\n  }\n\n  return {\n\n\n    objectHandlers : {\n      'BEGIN' : function(component, params, curr, stack){\n          stack.push(curr)\n\n          return {type:component, params:params}\n        }\n\n      , 'END' : function(component, params, curr, stack){\n        // prevents the need to search the root of the tree for the VCALENDAR object\n        if (component === \"VCALENDAR\") {\n            //scan all high level object in curr and drop all strings\n            var key,\n                obj;\n            \n            for (key in curr) {\n                if(curr.hasOwnProperty(key)) {\n                   obj = curr[key];\n                   if (typeof obj === 'string') {\n                       delete curr[key];\n                   }\n                }\n            }\n            \n            return curr\n        }\n        \n        var par = stack.pop()\n\n        if (curr.uid)\n          par[curr.uid] = curr\n        else\n          par[Math.random()*100000] = curr  // Randomly assign ID : TODO - use true GUID\n\n        return par\n      }\n\n      , 'SUMMARY' : storeParam('summary')\n      , 'DESCRIPTION' : storeParam('description')\n      , 'URL' : storeParam('url')\n      , 'UID' : storeParam('uid')\n      , 'LOCATION' : storeParam('location')\n      , 'DTSTART' : dateParam('start')\n      , 'DTEND' : dateParam('end')\n      ,' CLASS' : storeParam('class')\n      , 'TRANSP' : storeParam('transparency')\n      , 'GEO' : geoParam('geo')\n      , 'PERCENT-COMPLETE': storeParam('completion')\n      , 'COMPLETED': dateParam('completed')\n      , 'CATEGORIES': categoriesParam('categories')\n      , 'FREEBUSY': freebusyParam('freebusy')\n    },\n\n\n    handleObject : function(name, val, params, ctx, stack, line){\n      var self = this\n\n      if(self.objectHandlers[name])\n        return self.objectHandlers[name](val, params, ctx, stack, line)\n\n      //handling custom properties\n      if(name.match(/X\\-[\\w\\-]+/) && stack.length > 0) {\n          //trimming the leading and perform storeParam\n          name = name.substring(2);\n          return (storeParam(name))(val, params, ctx, stack, line);\n      }\n      \n      return storeParam(name.toLowerCase())(val, params, ctx);\n    },\n\n\n    parseICS : function(str){\n      var self = this\n      var lines = str.split(/\\r?\\n/)\n      var ctx = {}\n      var stack = []\n\n      for (var i = 0, ii = lines.length, l = lines[0]; i<ii; i++, l=lines[i]){\n        //Unfold : RFC#3.1\n        while (lines[i+1] && /[ \\t]/.test(lines[i+1][0])) {\n          l += lines[i+1].slice(1)\n          i += 1\n        }\n\n        var kv = l.split(\":\")\n\n        if (kv.length < 2){\n          // Invalid line - must have k&v\n          continue;\n        }\n\n        // Although the spec says that vals with colons should be quote wrapped\n        // in practise nobody does, so we assume further colons are part of the\n        // val\n        var value = kv.slice(1).join(\":\")\n          , kp = kv[0].split(\";\")\n          , name = kp[0]\n          , params = kp.slice(1)\n\n        ctx = self.handleObject(name, value, params, ctx, stack, l) || {}\n      }\n\n       // type and params are added to the list of items, get rid of them.\n       delete ctx.type\n       delete ctx.params\n\n       return ctx\n    }\n\n  }\n}))\n"]}