From c81fb4a38cd6eb329d2ba1d0d8e18937f0145a6f Mon Sep 17 00:00:00 2001 From: dhruvik7 Date: Sun, 14 Feb 2021 16:57:43 -0500 Subject: [PATCH] Initial --- .gitignore | 11 ++ README.md | 7 ++ images/example.png | Bin 0 -> 4551 bytes main.ts | 121 ++++++++++++++++++++ manifest.json | 10 ++ package.json | 23 ++++ rollup.config.js | 19 ++++ styles.css | 0 tsconfig.json | 22 ++++ versions.json | 3 + yarn.lock | 267 +++++++++++++++++++++++++++++++++++++++++++++ 11 files changed, 483 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 images/example.png create mode 100644 main.ts create mode 100644 manifest.json create mode 100644 package.json create mode 100644 rollup.config.js create mode 100644 styles.css create mode 100644 tsconfig.json create mode 100644 versions.json create mode 100644 yarn.lock diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e7b7242 --- /dev/null +++ b/.gitignore @@ -0,0 +1,11 @@ +# Intellij +*.iml +.idea + +# npm +node_modules +package-lock.json + +# build +main.js +*.js.map \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..cdbfa6d --- /dev/null +++ b/README.md @@ -0,0 +1,7 @@ +## Obsidian Daily Stats + +This is a daily word count plugin for Obsidian (https://obsidian.md). You can see today's word count in the bottom right corner of your screen, and also see the historical logs. + +This plugin was inspired by liamcain's [Calender](https://github.com/liamcain/obsidian-calendar-plugin) and lukeleppan's [Better Word Count](https://github.com/lukeleppan/better-word-count). + +![Example](./images/example.png) \ No newline at end of file diff --git a/images/example.png b/images/example.png new file mode 100644 index 0000000000000000000000000000000000000000..7d7b4233cc385e2fb1604b6888cf458a84e0414e GIT binary patch literal 4551 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 + todaysWordCount: Record; +} + +const DEFAULT_SETTINGS: DailyStatsSettings = { + dayCounts: {}, + todaysWordCount: {} +} + +export default class DailyStats extends Plugin { + settings: DailyStatsSettings; + statusBarEl: HTMLElement; + currentWordCount: number; + today: string; + + async onload() { + await this.loadSettings(); + + this.statusBarEl = this.addStatusBarItem(); + this.updateDate(); + if (this.today in this.settings.dayCounts) { + this.updateCounts(); + } else { + this.currentWordCount = 0; + } + + this.registerEvent( + this.app.workspace.on("quit", this.onunload, this) + ); + + this.registerEvent( + this.app.workspace.on("quick-preview", this.onQuickPreview, this) + ); + + this.registerInterval( + window.setInterval(() => { + this.statusBarEl.setText(this.currentWordCount + " words today "); + }, 200) + ); + + this.registerInterval(window.setInterval(() => { + this.updateDate(); + this.saveSettings(); + }, 1000)); + } + + async onunload() { + await this.saveSettings(); + } + + //Credit: better-word-count by Luke Leppan (https://github.com/lukeleppan/better-word-count) + onQuickPreview(file: TFile, contents: string) { + const leaf = this.app.workspace.activeLeaf; + + if (leaf && leaf.view.getViewType() === "markdown") { + this.updateWordCount(contents, file.name); + } + } + + //Credit: better-word-count by Luke Leppan (https://github.com/lukeleppan/better-word-count) + getWordCount(text: string) { + let words: number = 0; + + const matches = text.match( + /[a-zA-Z0-9_\u0392-\u03c9\u00c0-\u00ff\u0600-\u06ff]+|[\u4e00-\u9fff\u3400-\u4dbf\uf900-\ufaff\u3040-\u309f\uac00-\ud7af]+/gm + ); + + if (matches) { + for (let i = 0; i < matches.length; i++) { + if (matches[i].charCodeAt(0) > 19968) { + words += matches[i].length; + } else { + words += 1; + } + } + } + + return words; + } + + updateWordCount(contents: string, filename: string) { + const curr = this.getWordCount(contents); + if (this.today in this.settings.dayCounts) { + if (filename in this.settings.todaysWordCount) {//updating existing file + this.settings.todaysWordCount[filename].current = curr; + } else {//created new file during session + this.settings.todaysWordCount[filename] = { initial: curr, current: curr }; + } + } else {//new day, flush the cache + this.settings.todaysWordCount = {}; + this.settings.todaysWordCount[filename] = { initial: curr, current: curr }; + } + this.updateCounts(); + } + + updateDate() { + const d = new Date(); + this.today = d.getFullYear() + "/" + d.getMonth() + "/" + d.getDate(); + } + + updateCounts() { + this.currentWordCount = Object.values(this.settings.todaysWordCount).map((wordCount) => Math.max(0, wordCount.current - wordCount.initial)).reduce((a, b) => a + b, 0); + this.settings.dayCounts[this.today] = this.currentWordCount; + } + + async loadSettings() { + this.settings = Object.assign({}, DEFAULT_SETTINGS, await this.loadData()); + } + + async saveSettings() { + await this.saveData(this.settings); + } +} \ No newline at end of file diff --git a/manifest.json b/manifest.json new file mode 100644 index 0000000..ed24bb9 --- /dev/null +++ b/manifest.json @@ -0,0 +1,10 @@ +{ + "id": "obsidian-daily-stats", + "name": "Daily Stats", + "version": "1.0.0", + "minAppVersion": "0.9.12", + "description": "Track your daily word count across all notes in your vault.", + "author": "Dhruvik Parikh", + "authorUrl": "https://github.com/dhruvik7", + "isDesktopOnly": false +} \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..977a1fe --- /dev/null +++ b/package.json @@ -0,0 +1,23 @@ +{ + "name": "obsidian-daily-stats", + "version": "1.0.0", + "description": "This is an Obsidian.md plugin that lets you view your daily word count.", + "main": "main.js", + "scripts": { + "dev": "rollup --config rollup.config.js -w", + "build": "rollup --config rollup.config.js" + }, + "keywords": [], + "author": "", + "license": "MIT", + "devDependencies": { + "@rollup/plugin-commonjs": "^15.1.0", + "@rollup/plugin-node-resolve": "^9.0.0", + "@rollup/plugin-typescript": "^6.0.0", + "@types/node": "^14.14.2", + "obsidian": "https://github.com/obsidianmd/obsidian-api/tarball/master", + "rollup": "^2.32.1", + "tslib": "^2.0.3", + "typescript": "^4.0.3" + } +} \ No newline at end of file diff --git a/rollup.config.js b/rollup.config.js new file mode 100644 index 0000000..4f6107e --- /dev/null +++ b/rollup.config.js @@ -0,0 +1,19 @@ +import typescript from '@rollup/plugin-typescript'; +import {nodeResolve} from '@rollup/plugin-node-resolve'; +import commonjs from '@rollup/plugin-commonjs'; + +export default { + input: 'main.ts', + output: { + dir: '.', + sourcemap: 'inline', + format: 'cjs', + exports: 'default' + }, + external: ['obsidian'], + plugins: [ + typescript(), + nodeResolve({browser: true}), + commonjs(), + ] +}; \ No newline at end of file diff --git a/styles.css b/styles.css new file mode 100644 index 0000000..e69de29 diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..09cf7ec --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "baseUrl": ".", + "inlineSourceMap": true, + "inlineSources": true, + "module": "ESNext", + "target": "es6", + "allowJs": true, + "noImplicitAny": true, + "moduleResolution": "node", + "importHelpers": true, + "lib": [ + "dom", + "es5", + "scripthost", + "es2015" + ] + }, + "include": [ + "**/*.ts" + ] +} diff --git a/versions.json b/versions.json new file mode 100644 index 0000000..63c644e --- /dev/null +++ b/versions.json @@ -0,0 +1,3 @@ +{ + "1.0.0": "0.9.7" +} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000..7171d66 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,267 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@rollup/plugin-commonjs@^15.1.0": + version "15.1.0" + resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-15.1.0.tgz#1e7d076c4f1b2abf7e65248570e555defc37c238" + integrity sha512-xCQqz4z/o0h2syQ7d9LskIMvBSH4PX5PjYdpSSvgS+pQik3WahkQVNWg3D8XJeYjZoVWnIUQYDghuEMRGrmQYQ== + dependencies: + "@rollup/pluginutils" "^3.1.0" + commondir "^1.0.1" + estree-walker "^2.0.1" + glob "^7.1.6" + is-reference "^1.2.1" + magic-string "^0.25.7" + resolve "^1.17.0" + +"@rollup/plugin-node-resolve@^9.0.0": + version "9.0.0" + resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-9.0.0.tgz#39bd0034ce9126b39c1699695f440b4b7d2b62e6" + integrity sha512-gPz+utFHLRrd41WMP13Jq5mqqzHL3OXrfj3/MkSyB6UBIcuNt9j60GCbarzMzdf1VHFpOxfQh/ez7wyadLMqkg== + dependencies: + "@rollup/pluginutils" "^3.1.0" + "@types/resolve" "1.17.1" + builtin-modules "^3.1.0" + deepmerge "^4.2.2" + is-module "^1.0.0" + resolve "^1.17.0" + +"@rollup/plugin-typescript@^6.0.0": + version "6.1.0" + resolved "https://registry.yarnpkg.com/@rollup/plugin-typescript/-/plugin-typescript-6.1.0.tgz#289e7f0ea12fd659bd13ad59dda73b9055538b83" + integrity sha512-hJxaiE6WyNOsK+fZpbFh9CUijZYqPQuAOWO5khaGTUkM8DYNNyA2TDlgamecE+qLOG1G1+CwbWMAx3rbqpp6xQ== + dependencies: + "@rollup/pluginutils" "^3.1.0" + resolve "^1.17.0" + +"@rollup/pluginutils@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b" + integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== + dependencies: + "@types/estree" "0.0.39" + estree-walker "^1.0.1" + picomatch "^2.2.2" + +"@types/codemirror@0.0.98": + version "0.0.98" + resolved "https://registry.yarnpkg.com/@types/codemirror/-/codemirror-0.0.98.tgz#b35c7a4ab1fc1684b08a4e3eb65240020556ebfb" + integrity sha512-cbty5LPayy2vNSeuUdjNA9tggG+go5vAxmnLDRWpiZI5a+RDBi9dlozy4/jW/7P/gletbBWbQREEa7A81YxstA== + dependencies: + "@types/tern" "*" + +"@types/estree@*": + version "0.0.46" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.46.tgz#0fb6bfbbeabd7a30880504993369c4bf1deab1fe" + integrity sha512-laIjwTQaD+5DukBZaygQ79K1Z0jb1bPEMRrkXSLjtCcZm+abyp5YbrqpSLzD42FwWW6gK/aS4NYpJ804nG2brg== + +"@types/estree@0.0.39": + version "0.0.39" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" + integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== + +"@types/node@*", "@types/node@^14.14.2": + version "14.14.27" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.27.tgz#c7127f8da0498993e13b1a42faf1303d3110d2f2" + integrity sha512-Ecfmo4YDQPwuqTCl1yBxLV5ihKfRlkBmzUEDcfIRvDxOTGQEeikr317Ln7Gcv0tjA8dVgKI3rniqW2G1OyKDng== + +"@types/resolve@1.17.1": + version "1.17.1" + resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.17.1.tgz#3afd6ad8967c77e4376c598a82ddd58f46ec45d6" + integrity sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw== + dependencies: + "@types/node" "*" + +"@types/tern@*": + version "0.23.3" + resolved "https://registry.yarnpkg.com/@types/tern/-/tern-0.23.3.tgz#4b54538f04a88c9ff79de1f6f94f575a7f339460" + integrity sha512-imDtS4TAoTcXk0g7u4kkWqedB3E4qpjXzCpD2LU5M5NAXHzCDsypyvXSaG7mM8DKYkCRa7tFp4tS/lp/Wo7Q3w== + dependencies: + "@types/estree" "*" + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +builtin-modules@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.2.0.tgz#45d5db99e7ee5e6bc4f362e008bf917ab5049887" + integrity sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA== + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +deepmerge@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" + integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== + +estree-walker@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" + integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== + +estree-walker@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" + integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +fsevents@~2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +glob@^7.1.6: + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +is-core-module@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a" + integrity sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ== + dependencies: + has "^1.0.3" + +is-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" + integrity sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE= + +is-reference@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-1.2.1.tgz#8b2dac0b371f4bc994fdeaba9eb542d03002d0b7" + integrity sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ== + dependencies: + "@types/estree" "*" + +magic-string@^0.25.7: + version "0.25.7" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051" + integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA== + dependencies: + sourcemap-codec "^1.4.4" + +minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +"obsidian@https://github.com/obsidianmd/obsidian-api/tarball/master": + version "0.11.0" + resolved "https://github.com/obsidianmd/obsidian-api/tarball/master#db65643b00c41a37a61e87b43cfe1f4c867e188c" + dependencies: + "@types/codemirror" "0.0.98" + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-parse@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + +picomatch@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" + integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== + +resolve@^1.17.0: + version "1.20.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" + integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== + dependencies: + is-core-module "^2.2.0" + path-parse "^1.0.6" + +rollup@^2.32.1: + version "2.39.0" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.39.0.tgz#be4f98c9e421793a8fec82c854fb567c35e22ab6" + integrity sha512-+WR3bttcq7zE+BntH09UxaW3bQo3vItuYeLsyk4dL2tuwbeSKJuvwiawyhEnvRdRgrII0Uzk00FpctHO/zB1kw== + optionalDependencies: + fsevents "~2.3.1" + +sourcemap-codec@^1.4.4: + version "1.4.8" + resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" + integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== + +tslib@^2.0.3: + version "2.1.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.1.0.tgz#da60860f1c2ecaa5703ab7d39bc05b6bf988b97a" + integrity sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A== + +typescript@^4.0.3: + version "4.1.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.1.5.tgz#123a3b214aaff3be32926f0d8f1f6e704eb89a72" + integrity sha512-6OSu9PTIzmn9TCDiovULTnET6BgXtDYL4Gg4szY+cGsc3JP1dQL8qvE8kShTRx1NIw4Q9IBHlwODjkjWEtMUyA== + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=