[
  {
    "path": ".github/dependabot.yml",
    "content": "version: 2\nupdates:\n  - package-ecosystem: \"npm\"\n    directory: \"/\"\n    schedule:\n      interval: \"daily\"\n  - package-ecosystem: \"github-actions\"\n    directory: \"/\"\n    schedule:\n      interval: \"daily\"\n"
  },
  {
    "path": ".github/labeler.yml",
    "content": "config:\n  - ./*\ntooling:\n  - tooling/**/*.*\nassets:\n  - static/**/*.*\ntests:\n  - any: [\"src/**/*.spec.js\", \"cypress/**/*\"]\npackage:\n  - any: [\"package.json\", \"package-lock.json\"]\nsource:\n  - src/**/*\n"
  },
  {
    "path": ".github/workflows/node.yml",
    "content": "name: Node CI\non:\n  push:\n    branches:\n      - master\n  workflow_dispatch:\njobs:\n  release:\n    name: Build, test, and release\n    runs-on: ubuntu-latest\n    if: \"!contains(github.event.head_commit.message, '[skip ci]')\"\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v4\n      - name: Setup Node.js\n        uses: actions/setup-node@v4\n        with:\n          node-version: 16\n      - name: Cache node modules\n        uses: actions/cache@v4\n        env:\n          cache-name: cache-node-modules\n        with:\n          path: ~/.npm\n          key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}\n          restore-keys: |\n            ${{ runner.os }}-build-${{ env.cache-name }}-\n            ${{ runner.os }}-build-\n            ${{ runner.os }}-\n      - name: Install dependencies\n        run: npm ci\n      - name: Build TypeScript\n        run: npm run build\n      - name: Release\n        run: npx semantic-release\n        env:\n          GITHUB_TOKEN: ${{ secrets.GH_PAT }}\n          NPM_TOKEN: ${{ secrets.NPM_TOKEN }}\n          GIT_AUTHOR_NAME: \"Koj Bot\"\n          GIT_AUTHOR_EMAIL: \"bot@koj.co\"\n          GIT_COMMITTER_NAME: \"Koj Bot\"\n          GIT_COMMITTER_EMAIL: \"bot@koj.co\"\n"
  },
  {
    "path": ".github/workflows/release-scheduler.yml",
    "content": "name: Release Scheduler CI\non:\n  schedule:\n    - cron: \"0 0 * * 1\"\n  workflow_dispatch:\njobs:\n  releaseScheduler:\n    runs-on: ubuntu-latest\n    steps:\n      - name: Run release-scheduler\n        uses: koj-co/release-scheduler@master\n        env:\n          GH_PAT: ${{ secrets.GH_PAT }}\n"
  },
  {
    "path": ".github/workflows/stale.yml",
    "content": "name: \"Stale Issues CI\"\non:\n  schedule:\n    - cron: \"0 0 * * *\"\njobs:\n  stale:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/stale@v9\n        with:\n          repo-token: ${{ secrets.GH_PAT }}\n          stale-issue-message: \"⚠️ This issue has not seen any activity in the past 2 months so I'm marking it as stale. I'll close it if it doesn't see any activity in the coming week.\"\n          stale-pr-message: \"⚠️ This PR has not seen any activity in the past 2 months so I'm marking it as stale. I'll close it if it doesn't see any activity in the coming week.\"\n          days-before-stale: 60\n          days-before-close: 7\n          stale-issue-label: \"wontfix\"\n          exempt-issue-labels: \"wip\"\n          stale-pr-label: \"wontfix\"\n          exempt-pr-labels: \"wip\"\n"
  },
  {
    "path": ".github/workflows/test.yml",
    "content": "name: Test CI\non:\n  push:\n    branches-ignore:\n      - master\njobs:\n  release:\n    name: Build and test\n    runs-on: ubuntu-18.04\n    if: \"!contains(github.event.head_commit.message, '[skip ci]')\"\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v4\n      - name: Setup Node.js\n        uses: actions/setup-node@v4\n        with:\n          node-version: 16\n      - name: Install dependencies\n        run: npm ci\n      - name: Build TypeScript\n        run: npm run build\n"
  },
  {
    "path": ".gitignore",
    "content": "node_modules\ncoverage\n.nyc_output\n.DS_Store\n*.log\n.vscode\n.idea\ncompiled\n.awcache\n.rpt2_cache\ndist/\n"
  },
  {
    "path": ".npmignore",
    "content": ".vscode\n.licenses\n.github\n"
  },
  {
    "path": ".prettierrc.cjs",
    "content": "module.exports = require(\"@koj/config\").prettier;\n"
  },
  {
    "path": "CHANGELOG.md",
    "content": "## v2.11.0 (2025-06-20)\n\n[📝 Release notes](https://github.com/AnandChowdhary/calendar-link/releases/tag/v2.11.0) · [💻 Compare](https://github.com/AnandChowdhary/calendar-link/compare/v2.10.0...v2.11.0) · [🔖 Tag](https://github.com/AnandChowdhary/calendar-link/tree/v2.11.0) · 🗄️ Archive ([zip](https://github.com/AnandChowdhary/calendar-link/archive/v2.11.0.zip) · [tar.gz](https://github.com/AnandChowdhary/calendar-link/archive/v2.11.0.tar.gz))\n\n### ✨ New features\n\n- [`f1863f6`](https://github.com/AnandChowdhary/calendar-link/commit/f1863f6)  Support adding guests for outlook (#648)\n(Issues: [`#648`](https://github.com/AnandChowdhary/calendar-link/issues/648))\n\n## v2.10.0 (2025-05-20)\n\n[📝 Release notes](https://github.com/AnandChowdhary/calendar-link/releases/tag/v2.10.0) · [💻 Compare](https://github.com/AnandChowdhary/calendar-link/compare/v2.9.0...v2.10.0) · [🔖 Tag](https://github.com/AnandChowdhary/calendar-link/tree/v2.10.0) · 🗄️ Archive ([zip](https://github.com/AnandChowdhary/calendar-link/archive/v2.10.0.zip) · [tar.gz](https://github.com/AnandChowdhary/calendar-link/archive/v2.10.0.tar.gz))\n\n### ✨ New features\n\n- [`a9581ed`](https://github.com/AnandChowdhary/calendar-link/commit/a9581ed)  Add support for ICS file&#x27;s UID field\n\n## v2.9.0 (2025-05-19)\n\n[📝 Release notes](https://github.com/AnandChowdhary/calendar-link/releases/tag/v2.9.0) · [💻 Compare](https://github.com/AnandChowdhary/calendar-link/compare/v2.8.0...v2.9.0) · [🔖 Tag](https://github.com/AnandChowdhary/calendar-link/tree/v2.9.0) · 🗄️ Archive ([zip](https://github.com/AnandChowdhary/calendar-link/archive/v2.9.0.zip) · [tar.gz](https://github.com/AnandChowdhary/calendar-link/archive/v2.9.0.tar.gz))\n\n### ✨ New features\n\n- [`dfd7975`](https://github.com/AnandChowdhary/calendar-link/commit/dfd7975)  Set ics PRODID correctly (#621)\n(Issues: [`#621`](https://github.com/AnandChowdhary/calendar-link/issues/621))\n\n### 🐛 Bug fixes\n\n- [`194118a`](https://github.com/AnandChowdhary/calendar-link/commit/194118a)  Events without end should not necessarily end &quot;now&quot; (#622)\n(Issues: [`#622`](https://github.com/AnandChowdhary/calendar-link/issues/622))\n\n### ⬆️ Dependency updates\n\n- [`dd4bc49`](https://github.com/AnandChowdhary/calendar-link/commit/dd4bc49)  Upgrade dependencies and workflows for improved CI performance\n\n## v2.8.0 (2024-12-23)\n\n[📝 Release notes](https://github.com/AnandChowdhary/calendar-link/releases/tag/v2.8.0) · [💻 Compare](https://github.com/AnandChowdhary/calendar-link/compare/v2.7.0...v2.8.0) · [🔖 Tag](https://github.com/AnandChowdhary/calendar-link/tree/v2.8.0) · 🗄️ Archive ([zip](https://github.com/AnandChowdhary/calendar-link/archive/v2.8.0.zip) · [tar.gz](https://github.com/AnandChowdhary/calendar-link/archive/v2.8.0.tar.gz))\n\n### ✨ New features\n\n- [`581db9f`](https://github.com/AnandChowdhary/calendar-link/commit/581db9f)  Add status X-MICROSOFT for allDay support\n\n## v2.7.0 (2024-07-31)\n\n[📝 Release notes](https://github.com/AnandChowdhary/calendar-link/releases/tag/v2.7.0) · [💻 Compare](https://github.com/AnandChowdhary/calendar-link/compare/v2.6.1...v2.7.0) · [🔖 Tag](https://github.com/AnandChowdhary/calendar-link/tree/v2.7.0) · 🗄️ Archive ([zip](https://github.com/AnandChowdhary/calendar-link/archive/v2.7.0.zip) · [tar.gz](https://github.com/AnandChowdhary/calendar-link/archive/v2.7.0.tar.gz))\n\n### ✨ New features\n\n- [`003905a`](https://github.com/AnandChowdhary/calendar-link/commit/003905a)  Add Microsoft Teams Calendar Event Generation Feature (#604)\n(Issues: [`#604`](https://github.com/AnandChowdhary/calendar-link/issues/604))\n\n## v2.6.1 (2024-07-31)\n\n[📝 Release notes](https://github.com/AnandChowdhary/calendar-link/releases/tag/v2.6.1) · [💻 Compare](https://github.com/AnandChowdhary/calendar-link/compare/v2.6.0...v2.6.1) · [🔖 Tag](https://github.com/AnandChowdhary/calendar-link/tree/v2.6.1) · 🗄️ Archive ([zip](https://github.com/AnandChowdhary/calendar-link/archive/v2.6.1.zip) · [tar.gz](https://github.com/AnandChowdhary/calendar-link/archive/v2.6.1.tar.gz))\n\n### 🐛 Bug fixes\n\n- [`6da873c`](https://github.com/AnandChowdhary/calendar-link/commit/6da873c)  Fix Snapshot Tests for ICS Links (#600)\n(Issues: [`#600`](https://github.com/AnandChowdhary/calendar-link/issues/600))\n\n## v2.6.0 (2023-09-29)\n\n[📝 Release notes](https://github.com/AnandChowdhary/calendar-link/releases/tag/v2.6.0) · [💻 Compare](https://github.com/AnandChowdhary/calendar-link/compare/v2.5.1...v2.6.0) · [🔖 Tag](https://github.com/AnandChowdhary/calendar-link/tree/v2.6.0) · 🗄️ Archive ([zip](https://github.com/AnandChowdhary/calendar-link/archive/v2.6.0.zip) · [tar.gz](https://github.com/AnandChowdhary/calendar-link/archive/v2.6.0.tar.gz))\n\n### ✨ New features\n\n- [`2d2067f`](https://github.com/AnandChowdhary/calendar-link/commit/2d2067f)  Trigger release manually\n\n## v2.5.1 (2023-07-19)\n\n[📝 Release notes](https://github.com/AnandChowdhary/calendar-link/releases/tag/v2.5.1) · [💻 Compare](https://github.com/AnandChowdhary/calendar-link/compare/v2.5.0...v2.5.1) · [🔖 Tag](https://github.com/AnandChowdhary/calendar-link/tree/v2.5.1) · 🗄️ Archive ([zip](https://github.com/AnandChowdhary/calendar-link/archive/v2.5.1.zip) · [tar.gz](https://github.com/AnandChowdhary/calendar-link/archive/v2.5.1.tar.gz))\n\n### 🐛 Bug fixes\n\n- [`e4a2eaa`](https://github.com/AnandChowdhary/calendar-link/commit/e4a2eaa)  Fix ICS file generation with CLRF and absent fields (#553)\n(Issues: [`#553`](https://github.com/AnandChowdhary/calendar-link/issues/553))\n\n## v2.5.0 (2023-07-12)\n\n[📝 Release notes](https://github.com/AnandChowdhary/calendar-link/releases/tag/v2.5.0) · [💻 Compare](https://github.com/AnandChowdhary/calendar-link/compare/v2.4.0...v2.5.0) · [🔖 Tag](https://github.com/AnandChowdhary/calendar-link/tree/v2.5.0) · 🗄️ Archive ([zip](https://github.com/AnandChowdhary/calendar-link/archive/v2.5.0.zip) · [tar.gz](https://github.com/AnandChowdhary/calendar-link/archive/v2.5.0.tar.gz))\n\n### ✨ New features\n\n- [`4828504`](https://github.com/AnandChowdhary/calendar-link/commit/4828504)  Use ubuntu-latest for CI\n- [`0ac72d5`](https://github.com/AnandChowdhary/calendar-link/commit/0ac72d5)  Release new version\n\n## v2.4.0 (2022-10-21)\n\n[📝 Release notes](https://github.com/AnandChowdhary/calendar-link/releases/tag/v2.4.0) · [💻 Compare](https://github.com/AnandChowdhary/calendar-link/compare/v2.3.1...v2.4.0) · [🔖 Tag](https://github.com/AnandChowdhary/calendar-link/tree/v2.4.0) · 🗄️ Archive ([zip](https://github.com/AnandChowdhary/calendar-link/archive/v2.4.0.zip) · [tar.gz](https://github.com/AnandChowdhary/calendar-link/archive/v2.4.0.tar.gz))\n\n### ✨ New features\n\n- [`9b3efb4`](https://github.com/AnandChowdhary/calendar-link/commit/9b3efb4)  Add support for local time in Outlook and Office365\n\n### ⬆️ Dependency updates\n\n- [`4d551e8`](https://github.com/AnandChowdhary/calendar-link/commit/4d551e8)  Bump parse-path from 4.0.2 to 7.0.0 (#488)\n(Issues: [`#488`](https://github.com/AnandChowdhary/calendar-link/issues/488))- [`dc0df9e`](https://github.com/AnandChowdhary/calendar-link/commit/dc0df9e)  Bump actions/setup-node from 2.1.5 to 3.5.1 (#486)\n(Issues: [`#486`](https://github.com/AnandChowdhary/calendar-link/issues/486))- [`da3fa08`](https://github.com/AnandChowdhary/calendar-link/commit/da3fa08)  Bump actions/checkout from 2.3.4 to 3.1.0 (#485)\n(Issues: [`#485`](https://github.com/AnandChowdhary/calendar-link/issues/485))- [`6756c4b`](https://github.com/AnandChowdhary/calendar-link/commit/6756c4b)  Bump typescript from 4.2.3 to 4.8.4 (#481)\n(Issues: [`#481`](https://github.com/AnandChowdhary/calendar-link/issues/481))- [`c184373`](https://github.com/AnandChowdhary/calendar-link/commit/c184373)  Bump actions/stale from 3 to 6 (#478)\n(Issues: [`#478`](https://github.com/AnandChowdhary/calendar-link/issues/478))- [`7ea8657`](https://github.com/AnandChowdhary/calendar-link/commit/7ea8657)  Bump ansi-regex, ansi-regex and ansi-regex (#490)\n(Issues: [`#490`](https://github.com/AnandChowdhary/calendar-link/issues/490))- [`5755074`](https://github.com/AnandChowdhary/calendar-link/commit/5755074)  Bump actions/cache from 2 to 3.0.11 (#493)\n(Issues: [`#493`](https://github.com/AnandChowdhary/calendar-link/issues/493))\n\n## v2.3.1 (2022-10-20)\n\n[📝 Release notes](https://github.com/AnandChowdhary/calendar-link/releases/tag/v2.3.1) · [💻 Compare](https://github.com/AnandChowdhary/calendar-link/compare/v2.3.0...v2.3.1) · [🔖 Tag](https://github.com/AnandChowdhary/calendar-link/tree/v2.3.1) · 🗄️ Archive ([zip](https://github.com/AnandChowdhary/calendar-link/archive/v2.3.1.zip) · [tar.gz](https://github.com/AnandChowdhary/calendar-link/archive/v2.3.1.tar.gz))\n\n### 🐛 Bug fixes\n\n- [`339e6e4`](https://github.com/AnandChowdhary/calendar-link/commit/339e6e4)  missing RRULE prefix for google (#489)\n(Issues: [`#489`](https://github.com/AnandChowdhary/calendar-link/issues/489))\n\n## v2.3.0 (2022-10-19)\n\n[📝 Release notes](https://github.com/AnandChowdhary/calendar-link/releases/tag/v2.3.0) · [💻 Compare](https://github.com/AnandChowdhary/calendar-link/compare/v2.2.0...v2.3.0) · [🔖 Tag](https://github.com/AnandChowdhary/calendar-link/tree/v2.3.0) · 🗄️ Archive ([zip](https://github.com/AnandChowdhary/calendar-link/archive/v2.3.0.zip) · [tar.gz](https://github.com/AnandChowdhary/calendar-link/archive/v2.3.0.tar.gz))\n\n### ✨ New features\n\n- [`2ce44b7`](https://github.com/AnandChowdhary/calendar-link/commit/2ce44b7)  Recurring events\n\n## v2.2.0 (2022-05-16)\n\n[📝 Release notes](https://github.com/AnandChowdhary/calendar-link/releases/tag/v2.2.0) · [💻 Compare](https://github.com/AnandChowdhary/calendar-link/compare/v2.1.1...v2.2.0) · [🔖 Tag](https://github.com/AnandChowdhary/calendar-link/tree/v2.2.0) · 🗄️ Archive ([zip](https://github.com/AnandChowdhary/calendar-link/archive/v2.2.0.zip) · [tar.gz](https://github.com/AnandChowdhary/calendar-link/archive/v2.2.0.tar.gz))\n\n### ✨ New features\n\n- [`87f3aa7`](https://github.com/AnandChowdhary/calendar-link/commit/87f3aa7)  Trigger new release\n\n## v2.1.1 (2021-04-16)\n\n[📝 Release notes](https://github.com/AnandChowdhary/calendar-link/releases/tag/v2.1.1) · [💻 Compare](https://github.com/AnandChowdhary/calendar-link/compare/v2.1.0...v2.1.1) · [🔖 Tag](https://github.com/AnandChowdhary/calendar-link/tree/v2.1.1) · 🗄️ Archive ([zip](https://github.com/AnandChowdhary/calendar-link/archive/v2.1.1.zip) · [tar.gz](https://github.com/AnandChowdhary/calendar-link/archive/v2.1.1.tar.gz))\n\n### 🐛 Bug fixes\n\n- [`7ff87dc`](https://github.com/AnandChowdhary/calendar-link/commit/7ff87dc)  Add docs for units (fixed #286)\n(Issues: [`#286`](https://github.com/AnandChowdhary/calendar-link/issues/286))\n\n## v2.1.0 (2021-04-15)\n\n[📝 Release notes](https://github.com/AnandChowdhary/calendar-link/releases/tag/v2.1.0) · [💻 Compare](https://github.com/AnandChowdhary/calendar-link/compare/v2.0.16...v2.1.0) · [🔖 Tag](https://github.com/AnandChowdhary/calendar-link/tree/v2.1.0) · 🗄️ Archive ([zip](https://github.com/AnandChowdhary/calendar-link/archive/v2.1.0.zip) · [tar.gz](https://github.com/AnandChowdhary/calendar-link/archive/v2.1.0.tar.gz))\n\n### ✨ New features\n\n- [`376ae97`](https://github.com/AnandChowdhary/calendar-link/commit/376ae97)  Deploy new UMD/ES modules\n\n## v2.0.16 (2021-03-08)\n\n[📝 Release notes](https://github.com/AnandChowdhary/calendar-link/releases/tag/v2.0.16) · [💻 Compare](https://github.com/AnandChowdhary/calendar-link/compare/v2.0.15...v2.0.16) · [🔖 Tag](https://github.com/AnandChowdhary/calendar-link/tree/v2.0.16) · 🗄️ Archive ([zip](https://github.com/AnandChowdhary/calendar-link/archive/v2.0.16.zip) · [tar.gz](https://github.com/AnandChowdhary/calendar-link/archive/v2.0.16.tar.gz))\n\n### ⬆️ Dependency updates\n\n- [`c1741d1`](https://github.com/AnandChowdhary/calendar-link/commit/c1741d1)  Bump query-string from 6.14.0 to 6.14.1\n- [`7cb3493`](https://github.com/AnandChowdhary/calendar-link/commit/7cb3493)  Bump semantic-release from 17.4.0 to 17.4.1\n- [`22a79d2`](https://github.com/AnandChowdhary/calendar-link/commit/22a79d2)  Bump typescript from 4.2.2 to 4.2.3\n- [`a6bfe2a`](https://github.com/AnandChowdhary/calendar-link/commit/a6bfe2a)  Bump ts-jest from 26.5.2 to 26.5.3\n\n## v2.0.15 (2021-03-01)\n\n[📝 Release notes](https://github.com/AnandChowdhary/calendar-link/releases/tag/v2.0.15) · [💻 Compare](https://github.com/AnandChowdhary/calendar-link/compare/v2.0.14...v2.0.15) · [🔖 Tag](https://github.com/AnandChowdhary/calendar-link/tree/v2.0.15) · 🗄️ Archive ([zip](https://github.com/AnandChowdhary/calendar-link/archive/v2.0.15.zip) · [tar.gz](https://github.com/AnandChowdhary/calendar-link/archive/v2.0.15.tar.gz))\n\n### ⬆️ Dependency updates\n\n- [`4dc96f3`](https://github.com/AnandChowdhary/calendar-link/commit/4dc96f3)  Bump actions/setup-node from v2.1.4 to v2.1.5\n- [`74e463b`](https://github.com/AnandChowdhary/calendar-link/commit/74e463b)  Bump typescript from 4.1.5 to 4.2.2\n- [`cd9e252`](https://github.com/AnandChowdhary/calendar-link/commit/cd9e252)  Bump ts-jest from 26.5.1 to 26.5.2\n- [`e1fc524`](https://github.com/AnandChowdhary/calendar-link/commit/e1fc524)  Bump semantic-release from 17.3.9 to 17.4.0\n\n## v2.0.14 (2021-02-22)\n\n[📝 Release notes](https://github.com/AnandChowdhary/calendar-link/releases/tag/v2.0.14) · [💻 Compare](https://github.com/AnandChowdhary/calendar-link/compare/v2.0.13...v2.0.14) · [🔖 Tag](https://github.com/AnandChowdhary/calendar-link/tree/v2.0.14) · 🗄️ Archive ([zip](https://github.com/AnandChowdhary/calendar-link/archive/v2.0.14.zip) · [tar.gz](https://github.com/AnandChowdhary/calendar-link/archive/v2.0.14.tar.gz))\n\n### ⬆️ Dependency updates\n\n- [`bffd4aa`](https://github.com/AnandChowdhary/calendar-link/commit/bffd4aa)  Bump semantic-release from 17.3.8 to 17.3.9\n- [`654d5eb`](https://github.com/AnandChowdhary/calendar-link/commit/654d5eb)  Bump vsoch/pull-request-action from 1.0.13 to 1.0.14\n- [`3f28822`](https://github.com/AnandChowdhary/calendar-link/commit/3f28822)  Bump pascalgn/automerge-action from v0.13.0 to v0.13.1\n- [`dbd5da9`](https://github.com/AnandChowdhary/calendar-link/commit/dbd5da9)  Bump vsoch/pull-request-action from 1.0.14 to 1.0.15\n\n## v2.0.13 (2021-02-15)\n\n[📝 Release notes](https://github.com/AnandChowdhary/calendar-link/releases/tag/v2.0.13) · [💻 Compare](https://github.com/AnandChowdhary/calendar-link/compare/v2.0.12...v2.0.13) · [🔖 Tag](https://github.com/AnandChowdhary/calendar-link/tree/v2.0.13) · 🗄️ Archive ([zip](https://github.com/AnandChowdhary/calendar-link/archive/v2.0.13.zip) · [tar.gz](https://github.com/AnandChowdhary/calendar-link/archive/v2.0.13.tar.gz))\n\n### ⬆️ Dependency updates\n\n- [`e78919b`](https://github.com/AnandChowdhary/calendar-link/commit/e78919b)  Bump semantic-release from 17.3.7 to 17.3.8\n- [`e3f8340`](https://github.com/AnandChowdhary/calendar-link/commit/e3f8340)  Bump ts-jest from 26.5.0 to 26.5.1\n- [`8eaf178`](https://github.com/AnandChowdhary/calendar-link/commit/8eaf178)  Bump typescript from 4.1.3 to 4.1.4\n- [`d00ae83`](https://github.com/AnandChowdhary/calendar-link/commit/d00ae83)  Bump query-string from 6.13.8 to 6.14.0\n- [`e86754a`](https://github.com/AnandChowdhary/calendar-link/commit/e86754a)  Bump typescript from 4.1.4 to 4.1.5\n\n## v2.0.12 (2021-02-08)\n\n[📝 Release notes](https://github.com/AnandChowdhary/calendar-link/releases/tag/v2.0.12) · [💻 Compare](https://github.com/AnandChowdhary/calendar-link/compare/v2.0.11...v2.0.12) · [🔖 Tag](https://github.com/AnandChowdhary/calendar-link/tree/v2.0.12) · 🗄️ Archive ([zip](https://github.com/AnandChowdhary/calendar-link/archive/v2.0.12.zip) · [tar.gz](https://github.com/AnandChowdhary/calendar-link/archive/v2.0.12.tar.gz))\n\n### ⬆️ Dependency updates\n\n- [`e0e9942`](https://github.com/AnandChowdhary/calendar-link/commit/e0e9942)  Bump ts-jest from 26.4.4 to 26.5.0\n\n## v2.0.11 (2021-02-01)\n\n[📝 Release notes](https://github.com/AnandChowdhary/calendar-link/releases/tag/v2.0.11) · [💻 Compare](https://github.com/AnandChowdhary/calendar-link/compare/v2.0.10...v2.0.11) · [🔖 Tag](https://github.com/AnandChowdhary/calendar-link/tree/v2.0.11) · 🗄️ Archive ([zip](https://github.com/AnandChowdhary/calendar-link/archive/v2.0.11.zip) · [tar.gz](https://github.com/AnandChowdhary/calendar-link/archive/v2.0.11.tar.gz))\n\n### ⬆️ Dependency updates\n\n- [`7d1d848`](https://github.com/AnandChowdhary/calendar-link/commit/7d1d848)  Bump dayjs from 1.10.3 to 1.10.4\n- [`20c87ca`](https://github.com/AnandChowdhary/calendar-link/commit/20c87ca)  Bump semantic-release from 17.3.6 to 17.3.7\n\n## v2.0.10 (2021-01-25)\n\n[📝 Release notes](https://github.com/AnandChowdhary/calendar-link/releases/tag/v2.0.10) · [💻 Compare](https://github.com/AnandChowdhary/calendar-link/compare/v2.0.9...v2.0.10) · [🔖 Tag](https://github.com/AnandChowdhary/calendar-link/tree/v2.0.10) · 🗄️ Archive ([zip](https://github.com/AnandChowdhary/calendar-link/archive/v2.0.10.zip) · [tar.gz](https://github.com/AnandChowdhary/calendar-link/archive/v2.0.10.tar.gz))\n\n### ⬆️ Dependency updates\n\n- [`98bd892`](https://github.com/AnandChowdhary/calendar-link/commit/98bd892)  Bump semantic-release from 17.3.2 to 17.3.3\n- [`927646c`](https://github.com/AnandChowdhary/calendar-link/commit/927646c)  Bump @semantic-release/npm from 7.0.9 to 7.0.10\n- [`57d7bc3`](https://github.com/AnandChowdhary/calendar-link/commit/57d7bc3)  Bump semantic-release from 17.3.3 to 17.3.4\n- [`08299b8`](https://github.com/AnandChowdhary/calendar-link/commit/08299b8)  Bump semantic-release from 17.3.4 to 17.3.6\n\n## v2.0.9 (2021-01-18)\n\n[📝 Release notes](https://github.com/AnandChowdhary/calendar-link/releases/tag/v2.0.9) · [💻 Compare](https://github.com/AnandChowdhary/calendar-link/compare/v2.0.8...v2.0.9) · [🔖 Tag](https://github.com/AnandChowdhary/calendar-link/tree/v2.0.9) · 🗄️ Archive ([zip](https://github.com/AnandChowdhary/calendar-link/archive/v2.0.9.zip) · [tar.gz](https://github.com/AnandChowdhary/calendar-link/archive/v2.0.9.tar.gz))\n\n### ⬆️ Dependency updates\n\n- [`f4a33a7`](https://github.com/AnandChowdhary/calendar-link/commit/f4a33a7)  Bump dayjs from 1.10.2 to 1.10.3\n- [`c593b68`](https://github.com/AnandChowdhary/calendar-link/commit/c593b68)  Bump semantic-release from 17.3.1 to 17.3.2\n\n## v2.0.8 (2021-01-11)\n\n[📝 Release notes](https://github.com/AnandChowdhary/calendar-link/releases/tag/v2.0.8) · [💻 Compare](https://github.com/AnandChowdhary/calendar-link/compare/v2.0.7...v2.0.8) · [🔖 Tag](https://github.com/AnandChowdhary/calendar-link/tree/v2.0.8) · 🗄️ Archive ([zip](https://github.com/AnandChowdhary/calendar-link/archive/v2.0.8.zip) · [tar.gz](https://github.com/AnandChowdhary/calendar-link/archive/v2.0.8.tar.gz))\n\n### ⬆️ Dependency updates\n\n- [`70dccdb`](https://github.com/AnandChowdhary/calendar-link/commit/70dccdb)  Bump dayjs from 1.9.8 to 1.10.1\n- [`cefc6f3`](https://github.com/AnandChowdhary/calendar-link/commit/cefc6f3)  Bump dayjs from 1.10.1 to 1.10.2\n- [`b38bb28`](https://github.com/AnandChowdhary/calendar-link/commit/b38bb28)  Bump @types/jest from 26.0.19 to 26.0.20\n\n## v2.0.7 (2021-01-04)\n\n[📝 Release notes](https://github.com/AnandChowdhary/calendar-link/releases/tag/v2.0.7) · [💻 Compare](https://github.com/AnandChowdhary/calendar-link/compare/v2.0.6...v2.0.7) · [🔖 Tag](https://github.com/AnandChowdhary/calendar-link/tree/v2.0.7) · 🗄️ Archive ([zip](https://github.com/AnandChowdhary/calendar-link/archive/v2.0.7.zip) · [tar.gz](https://github.com/AnandChowdhary/calendar-link/archive/v2.0.7.tar.gz))\n\n### ⬆️ Dependency updates\n\n- [`9ea5f1f`](https://github.com/AnandChowdhary/calendar-link/commit/9ea5f1f)  Bump dayjs from 1.9.7 to 1.9.8\n- [`57deca6`](https://github.com/AnandChowdhary/calendar-link/commit/57deca6)  Bump semantic-release from 17.3.0 to 17.3.1\n- [`d309356`](https://github.com/AnandChowdhary/calendar-link/commit/d309356)  Bump query-string from 6.13.7 to 6.13.8\n\n## v2.0.6 (2020-12-28)\n\n[📝 Release notes](https://github.com/AnandChowdhary/calendar-link/releases/tag/v2.0.6) · [💻 Compare](https://github.com/AnandChowdhary/calendar-link/compare/v2.0.5...v2.0.6) · [🔖 Tag](https://github.com/AnandChowdhary/calendar-link/tree/v2.0.6) · 🗄️ Archive ([zip](https://github.com/AnandChowdhary/calendar-link/archive/v2.0.6.zip) · [tar.gz](https://github.com/AnandChowdhary/calendar-link/archive/v2.0.6.tar.gz))\n\n### ⬆️ Dependency updates\n\n- [`96a46eb`](https://github.com/AnandChowdhary/calendar-link/commit/96a46eb)  Bump vsoch/pull-request-action from 1.0.12 to 1.0.13\n- [`afabdce`](https://github.com/AnandChowdhary/calendar-link/commit/afabdce)  Bump pascalgn/automerge-action from v0.12.0 to v0.13.0\n\n## v2.0.5 (2020-12-21)\n\n[📝 Release notes](https://github.com/AnandChowdhary/calendar-link/releases/tag/v2.0.5) · [💻 Compare](https://github.com/AnandChowdhary/calendar-link/compare/v2.0.4...v2.0.5) · [🔖 Tag](https://github.com/AnandChowdhary/calendar-link/tree/v2.0.5) · 🗄️ Archive ([zip](https://github.com/AnandChowdhary/calendar-link/archive/v2.0.5.zip) · [tar.gz](https://github.com/AnandChowdhary/calendar-link/archive/v2.0.5.tar.gz))\n\n### ⬆️ Dependency updates\n\n- [`03b581f`](https://github.com/AnandChowdhary/calendar-link/commit/03b581f)  Bump typescript from 4.1.2 to 4.1.3\n- [`5a098e5`](https://github.com/AnandChowdhary/calendar-link/commit/5a098e5)  Bump actions/setup-node from v2.1.3 to v2.1.4\n\n## v2.0.4 (2020-12-14)\n\n[📝 Release notes](https://github.com/AnandChowdhary/calendar-link/releases/tag/v2.0.4) · [💻 Compare](https://github.com/AnandChowdhary/calendar-link/compare/v2.0.3...v2.0.4) · [🔖 Tag](https://github.com/AnandChowdhary/calendar-link/tree/v2.0.4) · 🗄️ Archive ([zip](https://github.com/AnandChowdhary/calendar-link/archive/v2.0.4.zip) · [tar.gz](https://github.com/AnandChowdhary/calendar-link/archive/v2.0.4.tar.gz))\n\n### ⬆️ Dependency updates\n\n- [`454f6d5`](https://github.com/AnandChowdhary/calendar-link/commit/454f6d5)  Bump dayjs from 1.9.6 to 1.9.7\n- [`d658954`](https://github.com/AnandChowdhary/calendar-link/commit/d658954)  Bump @types/jest from 26.0.16 to 26.0.17\n- [`e89c536`](https://github.com/AnandChowdhary/calendar-link/commit/e89c536)  Bump @types/jest from 26.0.17 to 26.0.18\n- [`d75c79b`](https://github.com/AnandChowdhary/calendar-link/commit/d75c79b)  Bump @types/jest from 26.0.18 to 26.0.19\n- [`3f5cb35`](https://github.com/AnandChowdhary/calendar-link/commit/3f5cb35)  Bump actions/setup-node from v2.1.2 to v2.1.3\n- [`ac8f283`](https://github.com/AnandChowdhary/calendar-link/commit/ac8f283)  Bump ini from 1.3.5 to 1.3.7\n\n## v2.0.3 (2020-12-07)\n\n[📝 Release notes](https://github.com/AnandChowdhary/calendar-link/releases/tag/v2.0.3) · [💻 Compare](https://github.com/AnandChowdhary/calendar-link/compare/v2.0.2...v2.0.3) · [🔖 Tag](https://github.com/AnandChowdhary/calendar-link/tree/v2.0.3) · 🗄️ Archive ([zip](https://github.com/AnandChowdhary/calendar-link/archive/v2.0.3.zip) · [tar.gz](https://github.com/AnandChowdhary/calendar-link/archive/v2.0.3.tar.gz))\n\n### ⬆️ Dependency updates\n\n- [`5f507d8`](https://github.com/AnandChowdhary/calendar-link/commit/5f507d8)  Bump @types/jest from 26.0.15 to 26.0.16\n- [`db9f07d`](https://github.com/AnandChowdhary/calendar-link/commit/db9f07d)  Bump @koj/config from 1.2.9 to 1.2.11\n- [`2a1a283`](https://github.com/AnandChowdhary/calendar-link/commit/2a1a283)  Bump @semantic-release/npm from 7.0.8 to 7.0.9\n\n## [v2.0.2](https://github.com/AnandChowdhary/calendar-link/compare/v2.0.1...v2.0.2) (2020-11-30)\n\n### ⬆️ Dependency updates\n\n- [`066b3dd`](https://github.com/AnandChowdhary/calendar-link/commit/066b3dd)  Bump semantic-release from 17.2.4 to 17.3.0\n\n## [v2.0.1](https://github.com/AnandChowdhary/calendar-link/compare/v2.0.0...v2.0.1) (2020-11-23)\n\n### ⬆️ Dependency updates\n\n- [`7666634`](https://github.com/AnandChowdhary/calendar-link/commit/7666634)  Bump query-string from 6.13.5 to 6.13.6\n- [`925ba7f`](https://github.com/AnandChowdhary/calendar-link/commit/925ba7f)  Bump jest from 26.5.3 to 26.6.0\n- [`a06c6ed`](https://github.com/AnandChowdhary/calendar-link/commit/a06c6ed)  Bump @types/jest from 26.0.14 to 26.0.15\n- [`f130e0d`](https://github.com/AnandChowdhary/calendar-link/commit/f130e0d)  Bump vsoch/pull-request-action from 1.0.10 to 1.0.11\n- [`fb33dd2`](https://github.com/AnandChowdhary/calendar-link/commit/fb33dd2)  Bump jest from 26.6.0 to 26.6.1\n- [`43a869a`](https://github.com/AnandChowdhary/calendar-link/commit/43a869a)  Bump dayjs from 1.9.3 to 1.9.4\n- [`d602964`](https://github.com/AnandChowdhary/calendar-link/commit/d602964)  Bump ts-jest from 26.4.1 to 26.4.3\n- [`4f4b551`](https://github.com/AnandChowdhary/calendar-link/commit/4f4b551)  Bump typescript from 4.0.3 to 4.0.5\n- [`38cdadf`](https://github.com/AnandChowdhary/calendar-link/commit/38cdadf)  Bump @koj/config from 1.2.5 to 1.2.6\n- [`e88438c`](https://github.com/AnandChowdhary/calendar-link/commit/e88438c)  Bump @koj/config from 1.2.6 to 1.2.7\n- [`b146cd7`](https://github.com/AnandChowdhary/calendar-link/commit/b146cd7)  Bump semantic-release from 17.2.1 to 17.2.2\n- [`156dbe1`](https://github.com/AnandChowdhary/calendar-link/commit/156dbe1)  Bump jest from 26.6.1 to 26.6.2\n- [`7b20e30`](https://github.com/AnandChowdhary/calendar-link/commit/7b20e30)  Bump actions/checkout from v2.3.3 to v2.3.4\n- [`9a4e975`](https://github.com/AnandChowdhary/calendar-link/commit/9a4e975)  Bump @koj/config from 1.2.7 to 1.2.8\n- [`912ecac`](https://github.com/AnandChowdhary/calendar-link/commit/912ecac)  Bump jest from 26.6.2 to 26.6.3\n- [`49cd32b`](https://github.com/AnandChowdhary/calendar-link/commit/49cd32b)  Bump query-string from 6.13.6 to 6.13.7\n- [`4dd597e`](https://github.com/AnandChowdhary/calendar-link/commit/4dd597e)  Bump dayjs from 1.9.4 to 1.9.5\n- [`ecb28b0`](https://github.com/AnandChowdhary/calendar-link/commit/ecb28b0)  Bump ts-jest from 26.4.3 to 26.4.4\n- [`88da0d7`](https://github.com/AnandChowdhary/calendar-link/commit/88da0d7)  Bump dayjs from 1.9.5 to 1.9.6\n- [`4490ea7`](https://github.com/AnandChowdhary/calendar-link/commit/4490ea7)  Bump @semantic-release/github from 7.1.1 to 7.1.2\n- [`d959618`](https://github.com/AnandChowdhary/calendar-link/commit/d959618)  Bump semantic-release from 17.2.2 to 17.2.3\n- [`47a61d2`](https://github.com/AnandChowdhary/calendar-link/commit/47a61d2)  Bump @semantic-release/npm from 7.0.6 to 7.0.8\n- [`fc6a455`](https://github.com/AnandChowdhary/calendar-link/commit/fc6a455)  Bump @koj/config from 1.2.8 to 1.2.9\n- [`b7ffeb5`](https://github.com/AnandChowdhary/calendar-link/commit/b7ffeb5)  Bump @semantic-release/github from 7.1.2 to 7.2.0\n- [`e0e599a`](https://github.com/AnandChowdhary/calendar-link/commit/e0e599a)  Update koj-co/template\n- [`7a5e25c`](https://github.com/AnandChowdhary/calendar-link/commit/7a5e25c)  Bump semantic-release from 17.2.3 to 17.2.4\n- [`237d0a4`](https://github.com/AnandChowdhary/calendar-link/commit/237d0a4)  Bump typescript from 4.0.5 to 4.1.2\n\n# [v2.0.0](https://github.com/AnandChowdhary/calendar-link/compare/v1.0.0...v2.0.0) (2020-10-17)\n\n## 💥 Breaking changes\n\n- [`008de9a`](https://github.com/AnandChowdhary/calendar-link/commit/008de9a)  Trigger major release\n\n# v1.0.0 (2020-10-17)\n\n## ✨ New features\n\n- [`5fb280f`](https://github.com/AnandChowdhary/calendar-link/commit/5fb280f)  Add Google link generator\n- [`c1b3875`](https://github.com/AnandChowdhary/calendar-link/commit/c1b3875)  Add Outlook and Yahoo! Calendar\n- [`d10afa6`](https://github.com/AnandChowdhary/calendar-link/commit/d10afa6)  Add all day events &amp; improve timezone handling\n- [`34e70d3`](https://github.com/AnandChowdhary/calendar-link/commit/34e70d3)  Allow all day events spanning multiple days\n- [`6f820e1`](https://github.com/AnandChowdhary/calendar-link/commit/6f820e1)  Trigger major release\n\n## ♻️ Updates\n\n- [`793ac2e`](https://github.com/AnandChowdhary/calendar-link/commit/793ac2e)  Use query-string instead of querystring\n\n## 🐛 Bug fixes\n\n- [`f01579b`](https://github.com/AnandChowdhary/calendar-link/commit/f01579b)  Use new Outlook URL\n"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2019 Anand Chowdhary <anandchowdhary@gmail.com>\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "# 📅 Calendar Link\n\n<!-- prettier-ignore-start -->\n|   | Status |\n| - | - |\n| Build | ![GitHub Actions Workflow Status](https://img.shields.io/github/actions/workflow/status/AnandChowdhary/calendar-link/node.yml) [![Dependencies](https://img.shields.io/librariesio/github/AnandChowdhary/calendar-link)](https://libraries.io/github/AnandChowdhary/calendar-link) [![GitHub release (latest by date)](https://img.shields.io/github/v/release/AnandChowdhary/calendar-link)](https://github.com/AnandChowdhary/calendar-link/releases) |\n| Health | [![License](https://img.shields.io/github/license/anandchowdhary/calendar-link.svg)](https://github.com/AnandChowdhary/calendar-link/blob/master/LICENSE) [![Coverage](https://img.shields.io/coveralls/github/AnandChowdhary/calendar-link)](https://coveralls.io/github/AnandChowdhary/calendar-link) |\n| Community | ![NPM type definitions](https://img.shields.io/npm/types/calendar-link.svg) [![NPM](https://img.shields.io/npm/v/calendar-link.svg)](https://www.npmjs.com/package/calendar-link) ![GitHub contributors](https://img.shields.io/github/contributors/AnandChowdhary/calendar-link) |\n<!-- prettier-ignore-end -->\n\nJavaScript library to generate an event link for Google Calendar, Yahoo!\nCalendar, Microsoft Outlook, etc.\n\n[![NPM](https://nodei.co/npm/calendar-link.png)](https://npm.im/calendar-link/)\n\n### Usage\n\n```js\n// Usage with Node.js\nconst { google, outlook, office365, yahoo, ics } = require(\"calendar-link\");\n\n// Usage with TypeScript or ES6\nimport { google, outlook, office365, yahoo, ics } from \"calendar-link\";\n\n// Set event as an object\nconst event = {\n  uid: \"your-unqiue-id\",\n  title: \"My birthday party\",\n  description: \"Be there!\",\n  start: \"2019-12-29 18:00:00 +0100\",\n  duration: [3, \"hour\"],\n};\n\n// Then fetch the link\ngoogle(event); // https://calendar.google.com/calendar/render...\noutlook(event); // https://outlook.live.com/owa/...\noffice365(event); // https://outlook.office.com/owa/...\nyahoo(event); // https://calendar.yahoo.com/?v=60&title=...\nics(event); // standard ICS file based on https://icalendar.org\n```\n\n### Options\n\n| Property           | Description                     | Allowed values                                                                                                                            |\n| ------------------ | ------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- |\n| `title` (required) | Event title                     | String                                                                                                                                    |\n| `start` (required) | Start time                      | JS Date / ISO 8601 string / Unix Timestamp                                                                                                |\n| `end`              | End time                        | JS Date / ISO 8601 string / Unix Timestamp                                                                                                |\n| `duration`         | Event duration                  | Array with value (Number) and unit (String)                                                                                               |\n| `allDay`           | All day event                   | Boolean                                                                                                                                   |\n| `rRule`            | Recurring event                 | iCal [recurrence rule](https://www.rfc-editor.org/rfc/rfc5545#section-3.3.10) string <br />**NOTE:** Only supported by `google` and `ics` |\n| `description`      | Information about the event     | String                                                                                                                                    |\n| `location`         | Event location in words         | String                                                                                                                                    |\n| `busy`             | Mark on calendar as busy?       | Boolean                                                                                                                                   |\n| `guests`           | Emails of other guests. This is currently only supported for `google`, `outlook`, `outlookMobile`, `office365`, `office365Mobile` and `msTeams`          | Array of emails (String)                                                                                                                  |\n| `url`              | Calendar document URL           | String                                                                                                                                    |\n| `uid`              | Unique identifier for the event | String                                                                                                                                    |\n\n#### Notes\n\n- Any one of the fields `end`, `duration`, or `allDay` is required.\n- The allowed units in `duration` are listed here: https://day.js.org/docs/en/durations/creating#list-of-all-available-units.\n- The `url` field defaults to `document.URL` if a global `document` object exists. For server-side rendering, you should supply the `url` manually.\n- Not all calendars support the `guests` and `url` fields. For `guests` support in outlook/office calendar, this has been tested with `outlook` and `office365` [when this PR was implemented](https://github.com/AnandChowdhary/calendar-link/pull/648) but we weren't able to test this with `outlookMobile` and `office365Mobile` so it might not work as expected. However, all outlook/office calendar links have same path and query string structure so we just added them as even if the query string is invalid, it will just be ignored and won't break anything.\n- If you don't pass the start and end time in UTC, Google will convert it to UTC but Outlook won't, so it's a good idea to use UTC when passing dates and times\n- There are some known issues in Office 365 because of which we can't generate a consistent link in all devices (#542)\n- The `uid` field is currently optional and will generate a random ID if not provided. In a future version, this field will be required to ensure proper event identification and deduplication.\n\n## Compatibility\n\nThis package uses [URLSearchParams](https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams) (Node.js >= 10, 97%+ browsers), but if you need to include a polyfill, you can include [url-search-params-polyfill](https://www.npmjs.com/package/url-search-params-polyfill) first.\n\n## License\n\nMIT © [Anand Chowdhary](https://anandchowdhary.com/?utm_source=github&utm_medium=calendar-link&utm_campaign=readme)\n"
  },
  {
    "path": "_config.yml",
    "content": "theme: jekyll-theme-minimal"
  },
  {
    "path": "jest-global-setup.js",
    "content": "module.exports = async () => {\n  process.env.TZ = \"UTC\";\n};\n"
  },
  {
    "path": "jest.config.js",
    "content": "module.exports = {\n  preset: \"ts-jest\",\n  globalSetup: \"./jest-global-setup.js\",\n  testEnvironment: \"node\",\n  watchPathIgnorePatterns: ['node_modules'],\n};\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"calendar-link\",\n  \"version\": \"2.11.0\",\n  \"description\": \"📅 Calendar link generator for popular services, like Google, Outlook, and Yahoo.\",\n  \"main\": \"dist/index.js\",\n  \"types\": \"dist/index.d.ts\",\n  \"source\": \"src/index.ts\",\n  \"exports\": {\n    \".\": {\n      \"import\": \"./dist/index.modern.mjs\",\n      \"require\": \"./dist/index.js\",\n      \"types\": \"./dist/index.d.ts\"\n    }\n  },\n  \"umd:main\": \"dist/index.umd.js\",\n  \"files\": [\n    \"dist\"\n  ],\n  \"scripts\": {\n    \"build:umd\": \"microbundle --external none --format modern,umd\",\n    \"build:cjs\": \"tsc -m commonjs\",\n    \"build\": \"run-p build:*\",\n    \"test\": \"jest\",\n    \"test-watch\": \"jest --watch\",\n    \"coverage\": \"jest --coverage\",\n    \"update-template\": \"npx update-template https://github.com/AnandChowdhary/calendar-link\",\n    \"semantic-release\": \"semantic-release\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/AnandChowdhary/calendar-link.git\"\n  },\n  \"keywords\": [\n    \"nodejs\",\n    \"typescript\",\n    \"calendar\",\n    \"calendar-link\",\n    \"google-calendar\",\n    \"outlook\",\n    \"yahoo\"\n  ],\n  \"author\": \"Anand Chowdhary <mail@anandchowdhary.com>\",\n  \"license\": \"MIT\",\n  \"bugs\": {\n    \"url\": \"https://github.com/AnandChowdhary/calendar-link/issues\"\n  },\n  \"homepage\": \"https://anandchowdhary.github.io/calendar-link/\",\n  \"devDependencies\": {\n    \"@koj/config\": \"1.2.11\",\n    \"@semantic-release/changelog\": \"^5.0.1\",\n    \"@semantic-release/git\": \"^9.0.0\",\n    \"@semantic-release/github\": \"^7.1.1\",\n    \"@semantic-release/npm\": \"^7.0.6\",\n    \"@types/jest\": \"^26.0.14\",\n    \"jest\": \"^26.6.0\",\n    \"microbundle\": \"^0.15.1\",\n    \"npm-run-all\": \"^4.1.5\",\n    \"semantic-release\": \"^17.2.1\",\n    \"semantic-release-gitmoji\": \"^1.3.4\",\n    \"ts-jest\": \"^26.4.1\",\n    \"typescript\": \"^4.0.3\"\n  },\n  \"dependencies\": {\n    \"dayjs\": \"^1.9.3\"\n  }\n}\n"
  },
  {
    "path": "release.config.js",
    "content": "module.exports = require(\"@koj/config\").releaseMaster;\n"
  },
  {
    "path": "src/__snapshots__/index.spec.ts.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`aol service generate a aol link 1`] = `\"https://calendar.aol.com/?dur=false&et=20191229T020000Z&st=20191229T000000Z&title=Birthday%20party&v=60\"`;\n\nexports[`aol service generate a aol link with description 1`] = `\"https://calendar.aol.com/?desc=Bring%20gifts%21&dur=false&et=20191229T020000Z&st=20191229T000000Z&title=Birthday%20party&v=60\"`;\n\nexports[`aol service generate a aol link with guests 1`] = `\"https://calendar.aol.com/?dur=false&et=20191229T020000Z&st=20191229T000000Z&title=Birthday%20party&v=60\"`;\n\nexports[`aol service generate a aol link with time & timezone 1`] = `\"https://calendar.aol.com/?dur=false&et=20191229T130000Z&st=20191229T110000Z&title=Birthday%20party&v=60\"`;\n\nexports[`aol service generate a multi day aol link 1`] = `\"https://calendar.aol.com/?dur=allday&et=20200112&st=20191229&title=Birthday%20party&v=60\"`;\n\nexports[`aol service generate a recurring aol link 1`] = `\"https://calendar.aol.com/?dur=false&et=20191229T020000Z&st=20191229T000000Z&title=Birthday%20party&v=60\"`;\n\nexports[`aol service generate an all day aol link 1`] = `\"https://calendar.aol.com/?dur=allday&et=20191230&st=20191229&title=Birthday%20party&v=60\"`;\n\nexports[`google service generate a google link 1`] = `\"https://calendar.google.com/calendar/render?action=TEMPLATE&dates=20191229T000000Z%2F20191229T020000Z&text=Birthday%20party\"`;\n\nexports[`google service generate a google link with description 1`] = `\"https://calendar.google.com/calendar/render?action=TEMPLATE&dates=20191229T000000Z%2F20191229T020000Z&details=Bring%20gifts%21&text=Birthday%20party\"`;\n\nexports[`google service generate a google link with guests 1`] = `\"https://calendar.google.com/calendar/render?action=TEMPLATE&add=hello%40example.com%2Canother%40example.com&dates=20191229T000000Z%2F20191229T020000Z&text=Birthday%20party\"`;\n\nexports[`google service generate a google link with time & timezone 1`] = `\"https://calendar.google.com/calendar/render?action=TEMPLATE&dates=20191229T110000Z%2F20191229T130000Z&text=Birthday%20party\"`;\n\nexports[`google service generate a multi day google link 1`] = `\"https://calendar.google.com/calendar/render?action=TEMPLATE&dates=20191229%2F20200112&text=Birthday%20party\"`;\n\nexports[`google service generate a recurring google link 1`] = `\"https://calendar.google.com/calendar/render?action=TEMPLATE&dates=20191229T000000Z%2F20191229T020000Z&recur=RRULE%3AFREQ%3DYEARLY%3BINTERVAL%3D1&text=Birthday%20party\"`;\n\nexports[`google service generate an all day google link 1`] = `\"https://calendar.google.com/calendar/render?action=TEMPLATE&dates=20191229%2F20191230&text=Birthday%20party\"`;\n\nexports[`ics service generate a ics link 1`] = `\"data:text/calendar;charset=utf8,BEGIN:VCALENDAR%0D%0AVERSION:2.0%0D%0APRODID:-%2F%2FAnandChowdhary%2F%2Fcalendar-link%2F%2FEN%0D%0ABEGIN:VEVENT%0D%0ADTSTART:20191229T000000Z%0D%0ADTEND:20191229T020000Z%0D%0ADTSTAMP:20191228T120000Z%0D%0ASUMMARY:Birthday%20party%0D%0AUID:12345%0D%0AEND:VEVENT%0D%0AEND:VCALENDAR%0D%0A\"`;\n\nexports[`ics service generate a ics link with description 1`] = `\"data:text/calendar;charset=utf8,BEGIN:VCALENDAR%0D%0AVERSION:2.0%0D%0APRODID:-%2F%2FAnandChowdhary%2F%2Fcalendar-link%2F%2FEN%0D%0ABEGIN:VEVENT%0D%0ADTSTART:20191229T000000Z%0D%0ADTEND:20191229T020000Z%0D%0ADTSTAMP:20191228T120000Z%0D%0ASUMMARY:Birthday%20party%0D%0ADESCRIPTION:Bring%20gifts!%0D%0AUID:12345%0D%0AEND:VEVENT%0D%0AEND:VCALENDAR%0D%0A\"`;\n\nexports[`ics service generate a ics link with guests 1`] = `\"data:text/calendar;charset=utf8,BEGIN:VCALENDAR%0D%0AVERSION:2.0%0D%0APRODID:-%2F%2FAnandChowdhary%2F%2Fcalendar-link%2F%2FEN%0D%0ABEGIN:VEVENT%0D%0ADTSTART:20191229T000000Z%0D%0ADTEND:20191229T020000Z%0D%0ADTSTAMP:20191228T120000Z%0D%0ASUMMARY:Birthday%20party%0D%0AUID:12345%0D%0AEND:VEVENT%0D%0AEND:VCALENDAR%0D%0A\"`;\n\nexports[`ics service generate a ics link with time & timezone 1`] = `\"data:text/calendar;charset=utf8,BEGIN:VCALENDAR%0D%0AVERSION:2.0%0D%0APRODID:-%2F%2FAnandChowdhary%2F%2Fcalendar-link%2F%2FEN%0D%0ABEGIN:VEVENT%0D%0ADTSTART:20191229T110000Z%0D%0ADTEND:20191229T130000Z%0D%0ADTSTAMP:20191228T120000Z%0D%0ASUMMARY:Birthday%20party%0D%0AUID:12345%0D%0AEND:VEVENT%0D%0AEND:VCALENDAR%0D%0A\"`;\n\nexports[`ics service generate a ics link with uid 1`] = `\"data:text/calendar;charset=utf8,BEGIN:VCALENDAR%0D%0AVERSION:2.0%0D%0APRODID:-%2F%2FAnandChowdhary%2F%2Fcalendar-link%2F%2FEN%0D%0ABEGIN:VEVENT%0D%0ADTSTART:20191229T000000Z%0D%0ADTEND:20191229T020000Z%0D%0ADTSTAMP:20191228T120000Z%0D%0ASUMMARY:Birthday%20party%0D%0AUID:abc_123%0D%0AEND:VEVENT%0D%0AEND:VCALENDAR%0D%0A\"`;\n\nexports[`ics service generate a multi day ics link 1`] = `\"data:text/calendar;charset=utf8,BEGIN:VCALENDAR%0D%0AVERSION:2.0%0D%0APRODID:-%2F%2FAnandChowdhary%2F%2Fcalendar-link%2F%2FEN%0D%0ABEGIN:VEVENT%0D%0ADTSTART:20191229%0D%0ADTEND:20200112%0D%0ADTSTAMP:20191228T120000Z%0D%0AX-MICROSOFT-CDO-ALLDAYEVENT:TRUE%0D%0AX-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE%0D%0ASUMMARY:Birthday%20party%0D%0AUID:12345%0D%0AEND:VEVENT%0D%0AEND:VCALENDAR%0D%0A\"`;\n\nexports[`ics service generate a recurring ics link 1`] = `\"data:text/calendar;charset=utf8,BEGIN:VCALENDAR%0D%0AVERSION:2.0%0D%0APRODID:-%2F%2FAnandChowdhary%2F%2Fcalendar-link%2F%2FEN%0D%0ABEGIN:VEVENT%0D%0ADTSTART:20191229T000000Z%0D%0ADTEND:20191229T020000Z%0D%0ADTSTAMP:20191228T120000Z%0D%0ARRULE:FREQ%3DYEARLY%3BINTERVAL%3D1%0D%0ASUMMARY:Birthday%20party%0D%0AUID:12345%0D%0AEND:VEVENT%0D%0AEND:VCALENDAR%0D%0A\"`;\n\nexports[`ics service generate an all day ics link 1`] = `\"data:text/calendar;charset=utf8,BEGIN:VCALENDAR%0D%0AVERSION:2.0%0D%0APRODID:-%2F%2FAnandChowdhary%2F%2Fcalendar-link%2F%2FEN%0D%0ABEGIN:VEVENT%0D%0ADTSTART:20191229%0D%0ADTEND:20191230%0D%0ADTSTAMP:20191228T120000Z%0D%0AX-MICROSOFT-CDO-ALLDAYEVENT:TRUE%0D%0AX-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE%0D%0ASUMMARY:Birthday%20party%0D%0ASTATUS:CONFIRMED%0D%0AUID:12345%0D%0AEND:VEVENT%0D%0AEND:VCALENDAR%0D%0A\"`;\n\nexports[`msTeams service generate a msTeams link 1`] = `\"https://teams.microsoft.com/l/meeting/new?endTime=2019-12-29T02%3A00%3A00.000Z&startTime=2019-12-29T00%3A00%3A00.000Z&subject=Birthday%20party\"`;\n\nexports[`msTeams service generate a msTeams link with description 1`] = `\"https://teams.microsoft.com/l/meeting/new?content=Bring%20gifts%21&endTime=2019-12-29T02%3A00%3A00.000Z&startTime=2019-12-29T00%3A00%3A00.000Z&subject=Birthday%20party\"`;\n\nexports[`msTeams service generate a msTeams link with guests 1`] = `\"https://teams.microsoft.com/l/meeting/new?attendees=hello%40example.com%2Canother%40example.com&endTime=2019-12-29T02%3A00%3A00.000Z&startTime=2019-12-29T00%3A00%3A00.000Z&subject=Birthday%20party\"`;\n\nexports[`msTeams service generate a msTeams link with time & timezone 1`] = `\"https://teams.microsoft.com/l/meeting/new?endTime=2019-12-29T13%3A00%3A00.000Z&startTime=2019-12-29T11%3A00%3A00.000Z&subject=Birthday%20party\"`;\n\nexports[`msTeams service generate a multi day msTeams link 1`] = `\"https://teams.microsoft.com/l/meeting/new?endTime=2020-01-12T00%3A00%3A00.000Z&startTime=2019-12-29T00%3A00%3A00.000Z&subject=Birthday%20party\"`;\n\nexports[`msTeams service generate a recurring msTeams link 1`] = `\"https://teams.microsoft.com/l/meeting/new?endTime=2019-12-29T02%3A00%3A00.000Z&startTime=2019-12-29T00%3A00%3A00.000Z&subject=Birthday%20party\"`;\n\nexports[`msTeams service generate an all day msTeams link 1`] = `\"https://teams.microsoft.com/l/meeting/new?endTime=2019-12-30T00%3A00%3A00.000Z&startTime=2019-12-29T00%3A00%3A00.000Z&subject=Birthday%20party\"`;\n\nexports[`office365 service generate a multi day office365 link 1`] = `\"https://outlook.office.com/calendar/0/action/compose?allday=true&enddt=2020-01-12T00%3A00%3A00&path=%2Fcalendar%2Faction%2Fcompose&rru=addevent&startdt=2019-12-29T00%3A00%3A00&subject=Birthday%20party\"`;\n\nexports[`office365 service generate a office365 link 1`] = `\"https://outlook.office.com/calendar/0/action/compose?allday=false&enddt=2019-12-29T02%3A00%3A00&path=%2Fcalendar%2Faction%2Fcompose&rru=addevent&startdt=2019-12-29T00%3A00%3A00&subject=Birthday%20party\"`;\n\nexports[`office365 service generate a office365 link with description 1`] = `\"https://outlook.office.com/calendar/0/action/compose?allday=false&body=Bring%20gifts%21&enddt=2019-12-29T02%3A00%3A00&path=%2Fcalendar%2Faction%2Fcompose&rru=addevent&startdt=2019-12-29T00%3A00%3A00&subject=Birthday%20party\"`;\n\nexports[`office365 service generate a office365 link with guests 1`] = `\"https://outlook.office.com/calendar/0/action/compose?allday=false&enddt=2019-12-29T02%3A00%3A00&path=%2Fcalendar%2Faction%2Fcompose&rru=addevent&startdt=2019-12-29T00%3A00%3A00&subject=Birthday%20party&to=hello%40example.com%2Canother%40example.com\"`;\n\nexports[`office365 service generate a office365 link with time & timezone 1`] = `\"https://outlook.office.com/calendar/0/action/compose?allday=false&enddt=2019-12-29T13%3A00%3A00&path=%2Fcalendar%2Faction%2Fcompose&rru=addevent&startdt=2019-12-29T11%3A00%3A00&subject=Birthday%20party\"`;\n\nexports[`office365 service generate a recurring office365 link 1`] = `\"https://outlook.office.com/calendar/0/action/compose?allday=false&enddt=2019-12-29T02%3A00%3A00&path=%2Fcalendar%2Faction%2Fcompose&rru=addevent&startdt=2019-12-29T00%3A00%3A00&subject=Birthday%20party\"`;\n\nexports[`office365 service generate an all day office365 link 1`] = `\"https://outlook.office.com/calendar/0/action/compose?allday=true&enddt=2019-12-30T00%3A00%3A00&path=%2Fcalendar%2Faction%2Fcompose&rru=addevent&startdt=2019-12-29T00%3A00%3A00&subject=Birthday%20party\"`;\n\nexports[`office365Mobile service generate a multi day office365Mobile link 1`] = `\"https://outlook.office.com/calendar/0/deeplink/compose?allday=true&enddt=2020-01-12T00%3A00%3A00&path=%2Fcalendar%2Faction%2Fcompose&rru=addevent&startdt=2019-12-29T00%3A00%3A00&subject=Birthday%20party\"`;\n\nexports[`office365Mobile service generate a office365Mobile link 1`] = `\"https://outlook.office.com/calendar/0/deeplink/compose?allday=false&enddt=2019-12-29T02%3A00%3A00&path=%2Fcalendar%2Faction%2Fcompose&rru=addevent&startdt=2019-12-29T00%3A00%3A00&subject=Birthday%20party\"`;\n\nexports[`office365Mobile service generate a office365Mobile link with description 1`] = `\"https://outlook.office.com/calendar/0/deeplink/compose?allday=false&body=Bring%20gifts%21&enddt=2019-12-29T02%3A00%3A00&path=%2Fcalendar%2Faction%2Fcompose&rru=addevent&startdt=2019-12-29T00%3A00%3A00&subject=Birthday%20party\"`;\n\nexports[`office365Mobile service generate a office365Mobile link with guests 1`] = `\"https://outlook.office.com/calendar/0/deeplink/compose?allday=false&enddt=2019-12-29T02%3A00%3A00&path=%2Fcalendar%2Faction%2Fcompose&rru=addevent&startdt=2019-12-29T00%3A00%3A00&subject=Birthday%20party&to=hello%40example.com%2Canother%40example.com\"`;\n\nexports[`office365Mobile service generate a office365Mobile link with time & timezone 1`] = `\"https://outlook.office.com/calendar/0/deeplink/compose?allday=false&enddt=2019-12-29T13%3A00%3A00&path=%2Fcalendar%2Faction%2Fcompose&rru=addevent&startdt=2019-12-29T11%3A00%3A00&subject=Birthday%20party\"`;\n\nexports[`office365Mobile service generate a recurring office365Mobile link 1`] = `\"https://outlook.office.com/calendar/0/deeplink/compose?allday=false&enddt=2019-12-29T02%3A00%3A00&path=%2Fcalendar%2Faction%2Fcompose&rru=addevent&startdt=2019-12-29T00%3A00%3A00&subject=Birthday%20party\"`;\n\nexports[`office365Mobile service generate an all day office365Mobile link 1`] = `\"https://outlook.office.com/calendar/0/deeplink/compose?allday=true&enddt=2019-12-30T00%3A00%3A00&path=%2Fcalendar%2Faction%2Fcompose&rru=addevent&startdt=2019-12-29T00%3A00%3A00&subject=Birthday%20party\"`;\n\nexports[`outlook service generate a multi day outlook link 1`] = `\"https://outlook.live.com/calendar/0/action/compose?allday=true&enddt=2020-01-12T00%3A00%3A00&path=%2Fcalendar%2Faction%2Fcompose&rru=addevent&startdt=2019-12-29T00%3A00%3A00&subject=Birthday%20party\"`;\n\nexports[`outlook service generate a outlook link 1`] = `\"https://outlook.live.com/calendar/0/action/compose?allday=false&enddt=2019-12-29T02%3A00%3A00&path=%2Fcalendar%2Faction%2Fcompose&rru=addevent&startdt=2019-12-29T00%3A00%3A00&subject=Birthday%20party\"`;\n\nexports[`outlook service generate a outlook link with description 1`] = `\"https://outlook.live.com/calendar/0/action/compose?allday=false&body=Bring%20gifts%21&enddt=2019-12-29T02%3A00%3A00&path=%2Fcalendar%2Faction%2Fcompose&rru=addevent&startdt=2019-12-29T00%3A00%3A00&subject=Birthday%20party\"`;\n\nexports[`outlook service generate a outlook link with guests 1`] = `\"https://outlook.live.com/calendar/0/action/compose?allday=false&enddt=2019-12-29T02%3A00%3A00&path=%2Fcalendar%2Faction%2Fcompose&rru=addevent&startdt=2019-12-29T00%3A00%3A00&subject=Birthday%20party&to=hello%40example.com%2Canother%40example.com\"`;\n\nexports[`outlook service generate a outlook link with time & timezone 1`] = `\"https://outlook.live.com/calendar/0/action/compose?allday=false&enddt=2019-12-29T13%3A00%3A00&path=%2Fcalendar%2Faction%2Fcompose&rru=addevent&startdt=2019-12-29T11%3A00%3A00&subject=Birthday%20party\"`;\n\nexports[`outlook service generate a recurring outlook link 1`] = `\"https://outlook.live.com/calendar/0/action/compose?allday=false&enddt=2019-12-29T02%3A00%3A00&path=%2Fcalendar%2Faction%2Fcompose&rru=addevent&startdt=2019-12-29T00%3A00%3A00&subject=Birthday%20party\"`;\n\nexports[`outlook service generate an all day outlook link 1`] = `\"https://outlook.live.com/calendar/0/action/compose?allday=true&enddt=2019-12-30T00%3A00%3A00&path=%2Fcalendar%2Faction%2Fcompose&rru=addevent&startdt=2019-12-29T00%3A00%3A00&subject=Birthday%20party\"`;\n\nexports[`outlookMobile service generate a multi day outlookMobile link 1`] = `\"https://outlook.live.com/calendar/0/deeplink/compose?allday=true&enddt=2020-01-12T00%3A00%3A00&path=%2Fcalendar%2Faction%2Fcompose&rru=addevent&startdt=2019-12-29T00%3A00%3A00&subject=Birthday%20party\"`;\n\nexports[`outlookMobile service generate a outlookMobile link 1`] = `\"https://outlook.live.com/calendar/0/deeplink/compose?allday=false&enddt=2019-12-29T02%3A00%3A00&path=%2Fcalendar%2Faction%2Fcompose&rru=addevent&startdt=2019-12-29T00%3A00%3A00&subject=Birthday%20party\"`;\n\nexports[`outlookMobile service generate a outlookMobile link with description 1`] = `\"https://outlook.live.com/calendar/0/deeplink/compose?allday=false&body=Bring%20gifts%21&enddt=2019-12-29T02%3A00%3A00&path=%2Fcalendar%2Faction%2Fcompose&rru=addevent&startdt=2019-12-29T00%3A00%3A00&subject=Birthday%20party\"`;\n\nexports[`outlookMobile service generate a outlookMobile link with guests 1`] = `\"https://outlook.live.com/calendar/0/deeplink/compose?allday=false&enddt=2019-12-29T02%3A00%3A00&path=%2Fcalendar%2Faction%2Fcompose&rru=addevent&startdt=2019-12-29T00%3A00%3A00&subject=Birthday%20party&to=hello%40example.com%2Canother%40example.com\"`;\n\nexports[`outlookMobile service generate a outlookMobile link with time & timezone 1`] = `\"https://outlook.live.com/calendar/0/deeplink/compose?allday=false&enddt=2019-12-29T13%3A00%3A00&path=%2Fcalendar%2Faction%2Fcompose&rru=addevent&startdt=2019-12-29T11%3A00%3A00&subject=Birthday%20party\"`;\n\nexports[`outlookMobile service generate a recurring outlookMobile link 1`] = `\"https://outlook.live.com/calendar/0/deeplink/compose?allday=false&enddt=2019-12-29T02%3A00%3A00&path=%2Fcalendar%2Faction%2Fcompose&rru=addevent&startdt=2019-12-29T00%3A00%3A00&subject=Birthday%20party\"`;\n\nexports[`outlookMobile service generate an all day outlookMobile link 1`] = `\"https://outlook.live.com/calendar/0/deeplink/compose?allday=true&enddt=2019-12-30T00%3A00%3A00&path=%2Fcalendar%2Faction%2Fcompose&rru=addevent&startdt=2019-12-29T00%3A00%3A00&subject=Birthday%20party\"`;\n\nexports[`yahoo service generate a multi day yahoo link 1`] = `\"https://calendar.yahoo.com/?dur=allday&et=20200112&st=20191229&title=Birthday%20party&v=60\"`;\n\nexports[`yahoo service generate a recurring yahoo link 1`] = `\"https://calendar.yahoo.com/?dur=false&et=20191229T020000Z&st=20191229T000000Z&title=Birthday%20party&v=60\"`;\n\nexports[`yahoo service generate a yahoo link 1`] = `\"https://calendar.yahoo.com/?dur=false&et=20191229T020000Z&st=20191229T000000Z&title=Birthday%20party&v=60\"`;\n\nexports[`yahoo service generate a yahoo link with description 1`] = `\"https://calendar.yahoo.com/?desc=Bring%20gifts%21&dur=false&et=20191229T020000Z&st=20191229T000000Z&title=Birthday%20party&v=60\"`;\n\nexports[`yahoo service generate a yahoo link with guests 1`] = `\"https://calendar.yahoo.com/?dur=false&et=20191229T020000Z&st=20191229T000000Z&title=Birthday%20party&v=60\"`;\n\nexports[`yahoo service generate a yahoo link with time & timezone 1`] = `\"https://calendar.yahoo.com/?dur=false&et=20191229T130000Z&st=20191229T110000Z&title=Birthday%20party&v=60\"`;\n\nexports[`yahoo service generate an all day yahoo link 1`] = `\"https://calendar.yahoo.com/?dur=allday&et=20191230&st=20191229&title=Birthday%20party&v=60\"`;\n"
  },
  {
    "path": "src/index.spec.ts",
    "content": "import {\n  aol,\n  google,\n  ics,\n  msTeams,\n  office365,\n  office365Mobile,\n  outlook,\n  outlookMobile,\n  yahoo,\n} from \"./index\";\nimport { CalendarEvent } from \"./interfaces\";\n\nfor (const service of [\n  aol,\n  google,\n  ics,\n  msTeams,\n  office365,\n  office365Mobile,\n  outlook,\n  outlookMobile,\n  yahoo,\n]) {\n  beforeAll(() => {\n    jest.useFakeTimers(\"modern\");\n    jest.setSystemTime(new Date(\"2019-12-28T12:00:00.000Z\"));\n\n    jest.spyOn(global.Math, \"random\").mockReturnValue(0.12345);\n  });\n\n  afterAll(() => {\n    jest.useRealTimers();\n  });\n\n  describe(`${service.name} service`, () => {\n    test(`generate a ${service.name} link`, () => {\n      const event: CalendarEvent = {\n        title: \"Birthday party\",\n        start: \"2019-12-29\",\n        duration: [2, \"hour\"],\n      };\n      const link = service(event);\n      expect(link).toMatchSnapshot();\n    });\n\n    test(`generate a ${service.name} link with description`, () => {\n      const event: CalendarEvent = {\n        title: \"Birthday party\",\n        start: \"2019-12-29\",\n        duration: [2, \"hour\"],\n        description: \"Bring gifts!\",\n      };\n      const link = service(event);\n      expect(link).toMatchSnapshot();\n    });\n\n    test(`generate a ${service.name} link with time & timezone`, () => {\n      const event: CalendarEvent = {\n        title: \"Birthday party\",\n        start: \"2019-12-29T12:00:00.000+01:00\",\n        duration: [2, \"hour\"],\n      };\n      const link = service(event);\n      expect(link).toMatchSnapshot();\n    });\n\n    test(`generate an all day ${service.name} link`, () => {\n      const event: CalendarEvent = {\n        title: \"Birthday party\",\n        start: \"2019-12-29\",\n        allDay: true,\n        status: \"CONFIRMED\",\n      };\n      const link = service(event);\n      expect(link).toMatchSnapshot();\n    });\n\n    test(`generate a multi day ${service.name} link`, () => {\n      const event: CalendarEvent = {\n        title: \"Birthday party\",\n        start: \"2019-12-29\",\n        end: \"2020-01-12\",\n        allDay: true,\n      };\n      const link = service(event);\n      expect(link).toMatchSnapshot();\n    });\n\n    test(`generate a recurring ${service.name} link`, () => {\n      const event: CalendarEvent = {\n        title: \"Birthday party\",\n        start: \"2019-12-29\",\n        duration: [2, \"hour\"],\n        rRule: \"FREQ=YEARLY;INTERVAL=1\",\n      };\n      const link = service(event);\n      expect(link).toMatchSnapshot();\n    });\n\n    test(`generate a ${service.name} link with guests`, () => {\n      const event: CalendarEvent = {\n        title: \"Birthday party\",\n        start: \"2019-12-29\",\n        duration: [2, \"hour\"],\n        guests: [\"hello@example.com\", \"another@example.com\"],\n      };\n      const link = service(event);\n      expect(link).toMatchSnapshot();\n    });\n\n    if (service.name === ics.name) {\n      test(`generate a ${service.name} link with uid`, () => {\n        const event: CalendarEvent = {\n          title: \"Birthday party\",\n          start: \"2019-12-29\",\n          duration: [2, \"hour\"],\n          uid: 'abc_123'\n        };\n        const link = service(event);\n        expect(link).toMatchSnapshot();\n      });\n    }\n  });\n}\n"
  },
  {
    "path": "src/index.ts",
    "content": "import dayjs from \"dayjs\";\nimport utc from \"dayjs/plugin/utc\";\n\nimport {\n  CalendarEvent,\n  CalendarEventOrganizer,\n  NormalizedCalendarEvent,\n  Aol,\n  Google,\n  MsTeams,\n  Outlook,\n  Yahoo,\n} from \"./interfaces\";\nimport { TimeFormats } from \"./utils\";\n\ndayjs.extend(utc);\n\nfunction stringify(input: Record<string, any>): string {\n  const params = new URLSearchParams();\n  Object.keys(input)\n    .sort()\n    .forEach((key) => {\n      const value = input[key];\n      if (value != null) {\n        params.append(key, value);\n      }\n    });\n  return params.toString().replace(/\\+/g, \"%20\");\n}\n\nfunction formatTimes(\n  { startTime, endTime }: NormalizedCalendarEvent,\n  dateTimeFormat: keyof typeof TimeFormats\n): { start: string; end: string } {\n  const format = TimeFormats[dateTimeFormat];\n  return { start: startTime.format(format), end: endTime.format(format) };\n}\n\nexport const eventify = (event: CalendarEvent, toUtc: boolean = true): NormalizedCalendarEvent => {\n  const { start, end, duration, ...rest } = event;\n  const startTime = toUtc ? dayjs(start).utc() : dayjs(start);\n  const endTime = end\n    ? toUtc\n      ? dayjs(end).utc()\n      : dayjs(end)\n    : (() => {\n        if (event.allDay) {\n          return startTime.add(1, \"day\");\n        }\n        if (duration && duration.length == 2) {\n          const value = Number(duration[0]);\n          const unit = duration[1];\n          return startTime.add(value, unit);\n        }\n        return startTime;\n      })();\n  return {\n    ...rest,\n    startTime: startTime,\n    endTime: endTime,\n  };\n};\n\nexport const google = (calendarEvent: CalendarEvent): string => {\n  const event = eventify(calendarEvent);\n  const { start, end } = formatTimes(event, event.allDay ? \"allDay\" : \"dateTimeUTC\");\n  const details: Google = {\n    action: \"TEMPLATE\",\n    text: event.title,\n    details: event.description,\n    location: event.location,\n    trp: event.busy,\n    dates: start + \"/\" + end,\n    recur: event.rRule ? \"RRULE:\" + event.rRule : undefined,\n  };\n  if (event.guests && event.guests.length) {\n    details.add = event.guests.join();\n  }\n  return `https://calendar.google.com/calendar/render?${stringify(details)}`;\n};\n\nexport const outlook = (calendarEvent: CalendarEvent): string => {\n  const event = eventify(calendarEvent, false);\n  const { start, end } = formatTimes(event, \"dateTimeLocal\");\n  const details: Outlook = {\n    path: \"/calendar/action/compose\",\n    rru: \"addevent\",\n    startdt: start,\n    enddt: end,\n    subject: event.title,\n    body: event.description,\n    location: event.location,\n    allday: event.allDay || false,\n  };\n  if (event.guests && event.guests.length) {\n    details.to = event.guests.join();\n  }\n  return `https://outlook.live.com/calendar/0/action/compose?${stringify(details)}`;\n};\n\nexport const outlookMobile = (calendarEvent: CalendarEvent): string => {\n  const event = eventify(calendarEvent, false);\n  const { start, end } = formatTimes(event, \"dateTimeLocal\");\n  const details: Outlook = {\n    path: \"/calendar/action/compose\",\n    rru: \"addevent\",\n    startdt: start,\n    enddt: end,\n    subject: event.title,\n    body: event.description,\n    location: event.location,\n    allday: event.allDay || false,\n  };\n  if (event.guests && event.guests.length) {\n    details.to = event.guests.join();\n  }\n  return `https://outlook.live.com/calendar/0/deeplink/compose?${stringify(details)}`;\n};\n\nexport const office365 = (calendarEvent: CalendarEvent): string => {\n  const event = eventify(calendarEvent, false);\n  const { start, end } = formatTimes(event, \"dateTimeLocal\");\n  const details: Outlook = {\n    path: \"/calendar/action/compose\",\n    rru: \"addevent\",\n    startdt: start,\n    enddt: end,\n    subject: event.title,\n    body: event.description,\n    location: event.location,\n    allday: event.allDay || false,\n  };\n  if (event.guests && event.guests.length) {\n    details.to = event.guests.join();\n  }\n  return `https://outlook.office.com/calendar/0/action/compose?${stringify(details)}`;\n};\n\nexport const office365Mobile = (calendarEvent: CalendarEvent): string => {\n  const event = eventify(calendarEvent, false);\n  const { start, end } = formatTimes(event, \"dateTimeLocal\");\n  const details: Outlook = {\n    path: \"/calendar/action/compose\",\n    rru: \"addevent\",\n    startdt: start,\n    enddt: end,\n    subject: event.title,\n    body: event.description,\n    location: event.location,\n    allday: event.allDay || false,\n  };\n  if (event.guests && event.guests.length) {\n    details.to = event.guests.join();\n  }\n  return `https://outlook.office.com/calendar/0/deeplink/compose?${stringify(details)}`;\n};\n\nexport const yahoo = (calendarEvent: CalendarEvent): string => {\n  const event = eventify(calendarEvent);\n  const { start, end } = formatTimes(event, event.allDay ? \"allDay\" : \"dateTimeUTC\");\n  const details: Yahoo = {\n    v: 60,\n    title: event.title,\n    st: start,\n    et: end,\n    desc: event.description,\n    in_loc: event.location,\n    dur: event.allDay ? \"allday\" : false,\n  };\n  return `https://calendar.yahoo.com/?${stringify(details)}`;\n};\n\nexport const aol = (calendarEvent: CalendarEvent): string => {\n    const event = eventify(calendarEvent);\n    const { start, end } = formatTimes(event, event.allDay ? \"allDay\" : \"dateTimeUTC\");\n    const details: Aol = {\n      v: 60,\n      title: event.title,\n      st: start,\n      et: end,\n      desc: event.description,\n      in_loc: event.location,\n      dur: event.allDay ? \"allday\" : false,\n    };\n    return `https://calendar.aol.com/?${stringify(details)}`;\n};\n\n// https://learn.microsoft.com/en-us/microsoftteams/platform/concepts/build-and-test/deep-link-workflow?tabs=teamsjs-v2#configure-deep-link-manually-to-open-a-meeting-scheduling-dialog\nexport const msTeams = (calendarEvent: CalendarEvent): string => {\n  const event = eventify(calendarEvent);\n  const details: MsTeams = {\n    subject: event.title,\n    content: event.description,\n    startTime: event.startTime.toISOString(),\n    endTime: event.endTime.toISOString(),\n  };\n  if (event.guests && event.guests.length) {\n    details.attendees = event.guests.join();\n  }\n  return `https://teams.microsoft.com/l/meeting/new?${stringify(details)}`;\n};\n\nexport const ics = (calendarEvent: CalendarEvent): string => {\n  const event = eventify(calendarEvent);\n  const formattedDescription: string = (event.description || \"\")\n    .replace(/,/gm, \",\")\n    .replace(/;/gm, \";\")\n    .replace(/\\r\\n/gm, \"\\n\")\n    .replace(/\\n/gm, \"\\\\n\")\n    .replace(/(\\\\n)[\\s\\t]+/gm, \"\\\\n\");\n\n  const formattedLocation: string = (event.location || \"\")\n    .replace(/,/gm, \",\")\n    .replace(/;/gm, \";\")\n    .replace(/\\r\\n/gm, \"\\n\")\n    .replace(/\\n/gm, \"\\\\n\")\n    .replace(/(\\\\n)[\\s\\t]+/gm, \"\\\\n\");\n\n  const { start, end } = formatTimes(event, event.allDay ? \"allDay\" : \"dateTimeUTC\");\n  const dateStamp = dayjs(new Date()).utc().format(TimeFormats[\"dateTimeUTC\"]);\n  const calendarChunks = [\n    {\n      key: \"BEGIN\",\n      value: \"VCALENDAR\",\n    },\n    {\n      key: \"VERSION\",\n      value: \"2.0\",\n    },\n    {\n      key: \"PRODID\",\n      value: \"-//AnandChowdhary//calendar-link//EN\"\n    },\n    {\n      key: \"BEGIN\",\n      value: \"VEVENT\",\n    },\n    {\n      key: \"URL\",\n      value: event.url,\n    },\n    {\n      key: \"DTSTART\",\n      value: start,\n    },\n    {\n      key: \"DTEND\",\n      value: end,\n    },\n    {\n      key: \"DTSTAMP\",\n      value: dateStamp,\n    },\n    ...(event.allDay ? [\n      {\n        key: \"X-MICROSOFT-CDO-ALLDAYEVENT\",\n        value: \"TRUE\"\n      },\n      {\n        key: \"X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT\",\n        value: \"TRUE\"\n      }] : []),\n    {\n      key: \"RRULE\",\n      value: event.rRule,\n    },\n    {\n      key: \"SUMMARY\",\n      value: event.title,\n    },\n    {\n      key: \"DESCRIPTION\",\n      value: formattedDescription,\n    },\n    {\n      key: \"LOCATION\",\n      value: formattedLocation,\n    },\n    {\n      key: \"ORGANIZER\",\n      value: event.organizer,\n    },\n    {\n      key: \"STATUS\",\n      value: event.status,\n    },\n    {\n      key: \"UID\",\n      value: event.uid || Math.floor(Math.random() * 100000).toString().replace(\".\", \"\"),\n    },\n    {\n      key: \"END\",\n      value: \"VEVENT\",\n    },\n    {\n      key: \"END\",\n      value: \"VCALENDAR\",\n    },\n  ];\n\n  let calendarUrl: string = \"\";\n\n  calendarChunks.forEach((chunk) => {\n    if (chunk.value) {\n      if (chunk.key == \"ORGANIZER\") {\n        const value = chunk.value as CalendarEventOrganizer;\n        calendarUrl += `${chunk.key};${encodeURIComponent(\n          `CN=${value.name}:MAILTO:${value.email}\\r\\n`\n        )}`;\n      } else {\n        calendarUrl += `${chunk.key}:${encodeURIComponent(`${chunk.value}\\r\\n`)}`;\n      }\n    }\n  });\n\n  return `data:text/calendar;charset=utf8,${calendarUrl}`;\n};\n\nexport { CalendarEvent };\n"
  },
  {
    "path": "src/interfaces.ts",
    "content": "import * as dayjs from \"dayjs\";\n\ninterface CalendarEvent {\n  title: string;\n  start: any;\n  end?: any;\n  duration?: [number, dayjs.UnitType];\n  allDay?: boolean;\n  rRule?: string;\n  description?: string;\n  location?: string;\n  organizer?: CalendarEventOrganizer;\n  busy?: boolean;\n  guests?: string[];\n  url?: string;\n  status?: 'CONFIRMED' | 'TENTATIVE' | 'CANCELLED';\n  uid?: string;\n}\n\ninterface CalendarEventOrganizer {\n  name: string;\n  email: string;\n}\n\ninterface NormalizedCalendarEvent extends Omit<CalendarEvent, \"start\" | \"end\" | \"duration\"> {\n  startTime: dayjs.Dayjs;\n  endTime: dayjs.Dayjs;\n}\n\ninterface Google extends Record<string, string | boolean | number | undefined> {\n  action: string;\n  text: string;\n  dates: string;\n  details?: string;\n  location?: string;\n  trp?: boolean;\n  sprop?: string;\n  add?: string;\n  src?: string;\n  recur?: string;\n}\n\ninterface Outlook extends Record<string, string | boolean | number | undefined> {\n  path: string;\n  rru: string;\n  startdt: string;\n  enddt: string;\n  subject: string;\n  allday?: boolean;\n  body?: string;\n  location?: string;\n  to?: string;\n}\n\ninterface Yahoo extends Record<string, string | boolean | number | undefined> {\n  v: number;\n  title: string;\n  st: string;\n  et: string;\n  desc?: string;\n  in_loc?: string;\n}\n\ninterface Aol extends Record<string, string | boolean | number | undefined> {\n    v: number;\n    title: string;\n    st: string;\n    et: string;\n    desc?: string;\n    in_loc?: string;\n }\n\ninterface MsTeams extends Record<string, string | boolean | number | undefined> {\n  subject?: string;\n  content?: string;\n  startTime?: string;\n  endTime?: string;\n  attendees?: string;\n}\n\nexport { CalendarEvent, CalendarEventOrganizer, NormalizedCalendarEvent, Outlook, Yahoo, Google, Aol, MsTeams };\n"
  },
  {
    "path": "src/utils.ts",
    "content": "export const TimeFormats = {\n  dateTimeLocal: \"YYYY-MM-DD[T]HH:mm:ss\",\n  dateTimeUTC: \"YYYYMMDD[T]HHmmss[Z]\",\n  allDay: \"YYYYMMDD\",\n};\n"
  },
  {
    "path": "tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"moduleResolution\": \"node\",\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"lib\": [\"dom\", \"esnext\"],\n    \"strict\": true,\n    \"sourceMap\": true,\n    \"declaration\": true,\n    \"esModuleInterop\": true,\n    \"allowSyntheticDefaultImports\": true,\n    \"experimentalDecorators\": true,\n    \"emitDecoratorMetadata\": true,\n    \"declarationDir\": \"./dist\",\n    \"outDir\": \"./dist\",\n    \"typeRoots\": [\"node_modules/@types\", \"@types\"]\n  },\n  \"include\": [\"src\", \"tooling\"],\n  \"exclude\": [\"node_modules\"]\n}\n"
  }
]