From 7612dfd60fc9e8c9709e31b1f4e2adb28c548213 Mon Sep 17 00:00:00 2001 From: Clark Winkelmann Date: Fri, 29 Oct 2021 23:17:31 +0200 Subject: [PATCH] Update for Flarum 1.0 and convert to typescript --- composer.json | 2 +- js/{admin.js => admin.ts} | 0 js/dist/admin.js | 2 +- js/dist/admin.js.map | 2 +- js/dist/forum.js | 2 +- js/dist/forum.js.map | 2 +- js/{forum.js => forum.ts} | 0 js/package.json | 8 +- js/shims.d.ts | 15 + js/src/admin/{index.js => index.ts} | 11 +- .../{ContestPage.js => ContestPage.ts} | 62 +- ...{EntryLikesModal.js => EntryLikesModal.ts} | 13 +- ...articipateModal.js => ParticipateModal.ts} | 36 +- .../{PumpkinCanvas.js => PumpkinCanvas.ts} | 55 +- js/src/forum/{index.js => index.ts} | 7 +- js/src/forum/models/{Entry.js => Entry.ts} | 6 +- js/src/forum/states/BrushState.js | 5 - js/src/forum/states/BrushState.ts | 5 + js/tsconfig.json | 18 + js/yarn.lock | 1889 +++++++++-------- resources/less/forum.less | 2 +- resources/locale/en.yml | 2 +- src/Content/Entries.php | 10 +- src/Entry.php | 5 +- src/Serializers/EntrySerializer.php | 2 +- 25 files changed, 1221 insertions(+), 940 deletions(-) rename js/{admin.js => admin.ts} (100%) rename js/{forum.js => forum.ts} (100%) create mode 100644 js/shims.d.ts rename js/src/admin/{index.js => index.ts} (94%) rename js/src/forum/components/{ContestPage.js => ContestPage.ts} (86%) rename js/src/forum/components/{EntryLikesModal.js => EntryLikesModal.ts} (61%) rename js/src/forum/components/{ParticipateModal.js => ParticipateModal.ts} (84%) rename js/src/forum/components/{PumpkinCanvas.js => PumpkinCanvas.ts} (73%) rename js/src/forum/{index.js => index.ts} (83%) rename js/src/forum/models/{Entry.js => Entry.ts} (62%) delete mode 100644 js/src/forum/states/BrushState.js create mode 100644 js/src/forum/states/BrushState.ts create mode 100644 js/tsconfig.json diff --git a/composer.json b/composer.json index e0fd489..bd32e4b 100644 --- a/composer.json +++ b/composer.json @@ -7,7 +7,7 @@ "type": "flarum-extension", "license": "MIT", "require": { - "flarum/core": "^0.1.0-beta.16", + "flarum/core": "^1.0", "ext-json": "*" }, "authors": [ diff --git a/js/admin.js b/js/admin.ts similarity index 100% rename from js/admin.js rename to js/admin.ts diff --git a/js/dist/admin.js b/js/dist/admin.js index 85ed02b..42fe5f5 100644 --- a/js/dist/admin.js +++ b/js/dist/admin.js @@ -1,2 +1,2 @@ -module.exports=function(n){var e={};function t(r){if(e[r])return e[r].exports;var a=e[r]={i:r,l:!1,exports:{}};return n[r].call(a.exports,a,a.exports,t),a.l=!0,a.exports}return t.m=n,t.c=e,t.d=function(n,e,r){t.o(n,e)||Object.defineProperty(n,e,{enumerable:!0,get:r})},t.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},t.t=function(n,e){if(1&e&&(n=t(n)),8&e)return n;if(4&e&&"object"==typeof n&&n&&n.__esModule)return n;var r=Object.create(null);if(t.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:n}),2&e&&"string"!=typeof n)for(var a in n)t.d(r,a,function(e){return n[e]}.bind(null,a));return r},t.n=function(n){var e=n&&n.__esModule?function(){return n.default}:function(){return n};return t.d(e,"a",e),e},t.o=function(n,e){return Object.prototype.hasOwnProperty.call(n,e)},t.p="",t(t.s=18)}({0:function(n,e){n.exports=flarum.core.compat.app},18:function(n,e,t){"use strict";t.r(e);var r=t(0),a=t.n(r);a.a.initializers.add("carving-contest",(function(){a.a.extensionData.for("clarkwinkelmann-carving-contest").registerSetting((function(){return m(".Form-group",[m("label",a.a.translator.trans("clarkwinkelmann-carving-contest.admin.settings.maxEntriesPerUser")),m("input.FormControl",{type:"number",min:0,step:1,bidi:this.setting("carving-contest.maxEntriesPerUser",0)})])})).registerSetting({type:"switch",setting:"carving-contest.colorMode",label:a.a.translator.trans("clarkwinkelmann-carving-contest.admin.settings.colorMode")}).registerSetting((function(){var n=this.setting("carving-contest.colors","simple"),e=!this.setting("carving-contest.colorMode")();return[m(".Form-group.CarvingContest-Subgroup",[m("label",[m("input",{type:"radio",name:"carving-contest-color",checked:"simple"===n(),onchange:function(){return n("simple")},disabled:e})," ",a.a.translator.trans("clarkwinkelmann-carving-contest.admin.colors.simple")]),m("label",[m("input",{type:"radio",name:"carving-contest-color",checked:"all"===n(),onchange:function(){return n("all")},disabled:e})," ",a.a.translator.trans("clarkwinkelmann-carving-contest.admin.colors.all")]),m("label",[m("input",{type:"radio",name:"carving-contest-color",checked:"simple"!==n()&&"all"!==n(),onchange:function(){return n("")},disabled:e})," ",a.a.translator.trans("clarkwinkelmann-carving-contest.admin.colors.custom")]),"simple"!==n()&&"all"!==n()?[m("input.FormControl",{bidi:n,disabled:e}),m(".helpText",a.a.translator.trans("clarkwinkelmann-carving-contest.admin.colors.custom-help"))]:null])]})).registerPermission({icon:"fas fa-spider",label:a.a.translator.trans("clarkwinkelmann-carving-contest.admin.permissions.view"),permission:"carving-contest.view",allowGuest:!0},"view").registerPermission({icon:"fas fa-spider",label:a.a.translator.trans("clarkwinkelmann-carving-contest.admin.permissions.like"),permission:"carving-contest.like"},"reply").registerPermission({icon:"fas fa-spider",label:a.a.translator.trans("clarkwinkelmann-carving-contest.admin.permissions.participate"),permission:"carving-contest.participate"},"reply").registerPermission({icon:"fas fa-spider",label:a.a.translator.trans("clarkwinkelmann-carving-contest.admin.permissions.moderate"),permission:"carving-contest.moderate"},"moderate")}))}}); +module.exports=function(n){var e={};function t(r){if(e[r])return e[r].exports;var a=e[r]={i:r,l:!1,exports:{}};return n[r].call(a.exports,a,a.exports,t),a.l=!0,a.exports}return t.m=n,t.c=e,t.d=function(n,e,r){t.o(n,e)||Object.defineProperty(n,e,{enumerable:!0,get:r})},t.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},t.t=function(n,e){if(1&e&&(n=t(n)),8&e)return n;if(4&e&&"object"==typeof n&&n&&n.__esModule)return n;var r=Object.create(null);if(t.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:n}),2&e&&"string"!=typeof n)for(var a in n)t.d(r,a,function(e){return n[e]}.bind(null,a));return r},t.n=function(n){var e=n&&n.__esModule?function(){return n.default}:function(){return n};return t.d(e,"a",e),e},t.o=function(n,e){return Object.prototype.hasOwnProperty.call(n,e)},t.p="",t(t.s=19)}({1:function(n,e){n.exports=flarum.core.compat["admin/app"]},19:function(n,e,t){"use strict";t.r(e);var r=t(1),a=t.n(r);a.a.initializers.add("carving-contest",(function(){a.a.extensionData.for("clarkwinkelmann-carving-contest").registerSetting((function(){return m(".Form-group",[m("label",a.a.translator.trans("clarkwinkelmann-carving-contest.admin.settings.maxEntriesPerUser")),m("input.FormControl",{type:"number",min:0,step:1,bidi:this.setting("carving-contest.maxEntriesPerUser","0")})])})).registerSetting({type:"switch",setting:"carving-contest.colorMode",label:a.a.translator.trans("clarkwinkelmann-carving-contest.admin.settings.colorMode")}).registerSetting((function(){var n=this.setting("carving-contest.colors","simple"),e=!this.setting("carving-contest.colorMode")();return[m(".Form-group.CarvingContest-Subgroup",[m("label",[m("input",{type:"radio",name:"carving-contest-color",checked:"simple"===n(),onchange:function(){return n("simple")},disabled:e})," ",a.a.translator.trans("clarkwinkelmann-carving-contest.admin.colors.simple")]),m("label",[m("input",{type:"radio",name:"carving-contest-color",checked:"all"===n(),onchange:function(){return n("all")},disabled:e})," ",a.a.translator.trans("clarkwinkelmann-carving-contest.admin.colors.all")]),m("label",[m("input",{type:"radio",name:"carving-contest-color",checked:"simple"!==n()&&"all"!==n(),onchange:function(){return n("")},disabled:e})," ",a.a.translator.trans("clarkwinkelmann-carving-contest.admin.colors.custom")]),"simple"!==n()&&"all"!==n()?[m("input.FormControl",{bidi:n,disabled:e}),m(".helpText",a.a.translator.trans("clarkwinkelmann-carving-contest.admin.colors.custom-help"))]:null])]})).registerPermission({icon:"fas fa-spider",label:a.a.translator.trans("clarkwinkelmann-carving-contest.admin.permissions.view"),permission:"carving-contest.view",allowGuest:!0},"view").registerPermission({icon:"fas fa-spider",label:a.a.translator.trans("clarkwinkelmann-carving-contest.admin.permissions.like"),permission:"carving-contest.like"},"reply").registerPermission({icon:"fas fa-spider",label:a.a.translator.trans("clarkwinkelmann-carving-contest.admin.permissions.participate"),permission:"carving-contest.participate"},"reply").registerPermission({icon:"fas fa-spider",label:a.a.translator.trans("clarkwinkelmann-carving-contest.admin.permissions.moderate"),permission:"carving-contest.moderate"},"moderate")}))}}); //# sourceMappingURL=admin.js.map \ No newline at end of file diff --git a/js/dist/admin.js.map b/js/dist/admin.js.map index bd90046..4745cb3 100644 --- a/js/dist/admin.js.map +++ b/js/dist/admin.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://@clarkwinkelmann/carving-contest/webpack/bootstrap","webpack://@clarkwinkelmann/carving-contest/external \"flarum.core.compat['app']\"","webpack://@clarkwinkelmann/carving-contest/./src/admin/index.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","flarum","core","compat","app","initializers","add","extensionData","registerSetting","translator","trans","type","min","step","bidi","this","setting","label","disabled","checked","onchange","registerPermission","icon","permission","allowGuest"],"mappings":"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","file":"admin.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 18);\n","module.exports = flarum.core.compat['app'];","import app from 'flarum/app';\n\n/* global m */\n\napp.initializers.add('carving-contest', () => {\n app.extensionData.for('clarkwinkelmann-carving-contest')\n .registerSetting(function () {\n return m('.Form-group', [\n m('label', app.translator.trans('clarkwinkelmann-carving-contest.admin.settings.maxEntriesPerUser')),\n m('input.FormControl', {\n type: 'number',\n min: 0,\n step: 1,\n bidi: this.setting('carving-contest.maxEntriesPerUser', 0),\n }),\n ]);\n })\n .registerSetting({\n type: 'switch',\n setting: 'carving-contest.colorMode',\n label: app.translator.trans('clarkwinkelmann-carving-contest.admin.settings.colorMode'),\n })\n .registerSetting(function () {\n const setting = this.setting('carving-contest.colors', 'simple');\n const disabled = !this.setting('carving-contest.colorMode')();\n\n return [\n m('.Form-group.CarvingContest-Subgroup', [\n m('label', [\n m('input', {\n type: 'radio',\n name: 'carving-contest-color',\n checked: setting() === 'simple',\n onchange: () => setting('simple'),\n disabled,\n }),\n ' ',\n app.translator.trans('clarkwinkelmann-carving-contest.admin.colors.simple'),\n ]),\n m('label', [\n m('input', {\n type: 'radio',\n name: 'carving-contest-color',\n checked: setting() === 'all',\n onchange: () => setting('all'),\n disabled,\n }),\n ' ',\n app.translator.trans('clarkwinkelmann-carving-contest.admin.colors.all'),\n ]),\n m('label', [\n m('input', {\n type: 'radio',\n name: 'carving-contest-color',\n checked: setting() !== 'simple' && setting() !== 'all',\n onchange: () => setting(''),\n disabled,\n }),\n ' ',\n app.translator.trans('clarkwinkelmann-carving-contest.admin.colors.custom'),\n ]),\n setting() !== 'simple' && setting() !== 'all' ? [\n m('input.FormControl', {\n bidi: setting,\n disabled,\n }),\n m('.helpText', app.translator.trans('clarkwinkelmann-carving-contest.admin.colors.custom-help')),\n ] : null,\n ]),\n ];\n })\n .registerPermission({\n icon: 'fas fa-spider',\n label: app.translator.trans('clarkwinkelmann-carving-contest.admin.permissions.view'),\n permission: 'carving-contest.view',\n allowGuest: true,\n }, 'view')\n .registerPermission({\n icon: 'fas fa-spider',\n label: app.translator.trans('clarkwinkelmann-carving-contest.admin.permissions.like'),\n permission: 'carving-contest.like',\n }, 'reply')\n .registerPermission({\n icon: 'fas fa-spider',\n label: app.translator.trans('clarkwinkelmann-carving-contest.admin.permissions.participate'),\n permission: 'carving-contest.participate',\n }, 'reply')\n .registerPermission({\n icon: 'fas fa-spider',\n label: app.translator.trans('clarkwinkelmann-carving-contest.admin.permissions.moderate'),\n permission: 'carving-contest.moderate',\n }, 'moderate');\n});\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://@clarkwinkelmann/carving-contest/webpack/bootstrap","webpack://@clarkwinkelmann/carving-contest/external \"flarum.core.compat['admin/app']\"","webpack://@clarkwinkelmann/carving-contest/./src/admin/index.ts"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","flarum","core","compat","app","initializers","add","extensionData","registerSetting","translator","trans","type","min","step","bidi","this","setting","label","disabled","checked","onchange","registerPermission","icon","permission","allowGuest"],"mappings":"2BACE,IAAIA,EAAmB,GAGvB,SAASC,EAAoBC,GAG5B,GAAGF,EAAiBE,GACnB,OAAOF,EAAiBE,GAAUC,QAGnC,IAAIC,EAASJ,EAAiBE,GAAY,CACzCG,EAAGH,EACHI,GAAG,EACHH,QAAS,IAUV,OANAI,EAAQL,GAAUM,KAAKJ,EAAOD,QAASC,EAAQA,EAAOD,QAASF,GAG/DG,EAAOE,GAAI,EAGJF,EAAOD,QA0Df,OArDAF,EAAoBQ,EAAIF,EAGxBN,EAAoBS,EAAIV,EAGxBC,EAAoBU,EAAI,SAASR,EAASS,EAAMC,GAC3CZ,EAAoBa,EAAEX,EAASS,IAClCG,OAAOC,eAAeb,EAASS,EAAM,CAAEK,YAAY,EAAMC,IAAKL,KAKhEZ,EAAoBkB,EAAI,SAAShB,GACX,oBAAXiB,QAA0BA,OAAOC,aAC1CN,OAAOC,eAAeb,EAASiB,OAAOC,YAAa,CAAEC,MAAO,WAE7DP,OAAOC,eAAeb,EAAS,aAAc,CAAEmB,OAAO,KAQvDrB,EAAoBsB,EAAI,SAASD,EAAOE,GAEvC,GADU,EAAPA,IAAUF,EAAQrB,EAAoBqB,IAC/B,EAAPE,EAAU,OAAOF,EACpB,GAAW,EAAPE,GAA8B,iBAAVF,GAAsBA,GAASA,EAAMG,WAAY,OAAOH,EAChF,IAAII,EAAKX,OAAOY,OAAO,MAGvB,GAFA1B,EAAoBkB,EAAEO,GACtBX,OAAOC,eAAeU,EAAI,UAAW,CAAET,YAAY,EAAMK,MAAOA,IACtD,EAAPE,GAA4B,iBAATF,EAAmB,IAAI,IAAIM,KAAON,EAAOrB,EAAoBU,EAAEe,EAAIE,EAAK,SAASA,GAAO,OAAON,EAAMM,IAAQC,KAAK,KAAMD,IAC9I,OAAOF,GAIRzB,EAAoB6B,EAAI,SAAS1B,GAChC,IAAIS,EAAST,GAAUA,EAAOqB,WAC7B,WAAwB,OAAOrB,EAAgB,SAC/C,WAA8B,OAAOA,GAEtC,OADAH,EAAoBU,EAAEE,EAAQ,IAAKA,GAC5BA,GAIRZ,EAAoBa,EAAI,SAASiB,EAAQC,GAAY,OAAOjB,OAAOkB,UAAUC,eAAe1B,KAAKuB,EAAQC,IAGzG/B,EAAoBkC,EAAI,GAIjBlC,EAAoBA,EAAoBmC,EAAI,I,kBClFrDhC,EAAOD,QAAUkC,OAAOC,KAAKC,OAAO,c,2DCGpCC,IAAIC,aAAaC,IAAI,mBAAmB,WACpCF,IAAIG,cAAJ,IAAsB,mCACjBC,iBAAgB,WACb,OAAOnC,EAAE,cAAe,CACpBA,EAAE,QAAS+B,IAAIK,WAAWC,MAAM,qEAChCrC,EAAE,oBAAqB,CACnBsC,KAAM,SACNC,IAAK,EACLC,KAAM,EACNC,KAAMC,KAAKC,QAAQ,oCAAqC,YAInER,gBAAgB,CACbG,KAAM,SACNK,QAAS,4BACTC,MAAOb,IAAIK,WAAWC,MAAM,8DAE/BF,iBAAgB,WACb,IAAMQ,EAAUD,KAAKC,QAAQ,yBAA0B,UACjDE,GAAYH,KAAKC,QAAQ,4BAAbD,GAElB,MAAO,CACH1C,EAAE,sCAAuC,CACrCA,EAAE,QAAS,CACPA,EAAE,QAAS,CACPsC,KAAM,QACNnC,KAAM,wBACN2C,QAAuB,WAAdH,IACTI,SAAU,kBAAMJ,EAAQ,WACxBE,aAEJ,IACAd,IAAIK,WAAWC,MAAM,yDAEzBrC,EAAE,QAAS,CACPA,EAAE,QAAS,CACPsC,KAAM,QACNnC,KAAM,wBACN2C,QAAuB,QAAdH,IACTI,SAAU,kBAAMJ,EAAQ,QACxBE,aAEJ,IACAd,IAAIK,WAAWC,MAAM,sDAEzBrC,EAAE,QAAS,CACPA,EAAE,QAAS,CACPsC,KAAM,QACNnC,KAAM,wBACN2C,QAAuB,WAAdH,KAAwC,QAAdA,IACnCI,SAAU,kBAAMJ,EAAQ,KACxBE,aAEJ,IACAd,IAAIK,WAAWC,MAAM,yDAEX,WAAdM,KAAwC,QAAdA,IAAsB,CAC5C3C,EAAE,oBAAqB,CACnByC,KAAME,EACNE,aAEJ7C,EAAE,YAAa+B,IAAIK,WAAWC,MAAM,8DACpC,WAIfW,mBAAmB,CAChBC,KAAM,gBACNL,MAAOb,IAAIK,WAAWC,MAAM,0DAC5Ba,WAAY,uBACZC,YAAY,GACb,QACFH,mBAAmB,CAChBC,KAAM,gBACNL,MAAOb,IAAIK,WAAWC,MAAM,0DAC5Ba,WAAY,wBACb,SACFF,mBAAmB,CAChBC,KAAM,gBACNL,MAAOb,IAAIK,WAAWC,MAAM,iEAC5Ba,WAAY,+BACb,SACFF,mBAAmB,CAChBC,KAAM,gBACNL,MAAOb,IAAIK,WAAWC,MAAM,8DAC5Ba,WAAY,4BACb","file":"admin.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 19);\n","module.exports = flarum.core.compat['admin/app'];","import app from 'flarum/admin/app';\nimport ExtensionPage from 'flarum/admin/components/ExtensionPage';\n\napp.initializers.add('carving-contest', () => {\n app.extensionData.for('clarkwinkelmann-carving-contest')\n .registerSetting(function (this: ExtensionPage) {\n return m('.Form-group', [\n m('label', app.translator.trans('clarkwinkelmann-carving-contest.admin.settings.maxEntriesPerUser')),\n m('input.FormControl', {\n type: 'number',\n min: 0,\n step: 1,\n bidi: this.setting('carving-contest.maxEntriesPerUser', '0'),\n }),\n ]);\n })\n .registerSetting({\n type: 'switch',\n setting: 'carving-contest.colorMode',\n label: app.translator.trans('clarkwinkelmann-carving-contest.admin.settings.colorMode'),\n })\n .registerSetting(function (this: ExtensionPage) {\n const setting = this.setting('carving-contest.colors', 'simple');\n const disabled = !this.setting('carving-contest.colorMode')();\n\n return [\n m('.Form-group.CarvingContest-Subgroup', [\n m('label', [\n m('input', {\n type: 'radio',\n name: 'carving-contest-color',\n checked: setting() === 'simple',\n onchange: () => setting('simple'),\n disabled,\n }),\n ' ',\n app.translator.trans('clarkwinkelmann-carving-contest.admin.colors.simple'),\n ]),\n m('label', [\n m('input', {\n type: 'radio',\n name: 'carving-contest-color',\n checked: setting() === 'all',\n onchange: () => setting('all'),\n disabled,\n }),\n ' ',\n app.translator.trans('clarkwinkelmann-carving-contest.admin.colors.all'),\n ]),\n m('label', [\n m('input', {\n type: 'radio',\n name: 'carving-contest-color',\n checked: setting() !== 'simple' && setting() !== 'all',\n onchange: () => setting(''),\n disabled,\n }),\n ' ',\n app.translator.trans('clarkwinkelmann-carving-contest.admin.colors.custom'),\n ]),\n setting() !== 'simple' && setting() !== 'all' ? [\n m('input.FormControl', {\n bidi: setting,\n disabled,\n }),\n m('.helpText', app.translator.trans('clarkwinkelmann-carving-contest.admin.colors.custom-help')),\n ] : null,\n ]),\n ];\n })\n .registerPermission({\n icon: 'fas fa-spider',\n label: app.translator.trans('clarkwinkelmann-carving-contest.admin.permissions.view'),\n permission: 'carving-contest.view',\n allowGuest: true,\n }, 'view')\n .registerPermission({\n icon: 'fas fa-spider',\n label: app.translator.trans('clarkwinkelmann-carving-contest.admin.permissions.like'),\n permission: 'carving-contest.like',\n }, 'reply')\n .registerPermission({\n icon: 'fas fa-spider',\n label: app.translator.trans('clarkwinkelmann-carving-contest.admin.permissions.participate'),\n permission: 'carving-contest.participate',\n }, 'reply')\n .registerPermission({\n icon: 'fas fa-spider',\n label: app.translator.trans('clarkwinkelmann-carving-contest.admin.permissions.moderate'),\n permission: 'carving-contest.moderate',\n }, 'moderate');\n});\n"],"sourceRoot":""} \ No newline at end of file diff --git a/js/dist/forum.js b/js/dist/forum.js index c354cc2..de2f8ab 100644 --- a/js/dist/forum.js +++ b/js/dist/forum.js @@ -1,2 +1,2 @@ -module.exports=function(t){var e={};function n(o){if(e[o])return e[o].exports;var r=e[o]={i:o,l:!1,exports:{}};return t[o].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=t,n.c=e,n.d=function(t,e,o){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:o})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var o=Object.create(null);if(n.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var r in t)n.d(o,r,function(e){return t[e]}.bind(null,r));return o},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=17)}([function(t,e){t.exports=flarum.core.compat.app},function(t,e){t.exports=flarum.core.compat["common/components/Button"]},function(t,e){t.exports=flarum.core.compat["common/Model"]},function(t,e){t.exports=flarum.core.compat["common/helpers/username"]},function(t,e){t.exports=flarum.core.compat["common/helpers/icon"]},function(t,e){t.exports=flarum.core.compat["common/components/Link"]},function(t,e){t.exports=flarum.core.compat["common/helpers/avatar"]},function(t,e){t.exports=flarum.core.compat["common/components/Modal"]},function(t,e){t.exports=flarum.core.compat["common/extend"]},function(t,e){t.exports=flarum.core.compat["forum/components/IndexPage"]},function(t,e){t.exports=flarum.core.compat["common/components/LinkButton"]},function(t,e){t.exports=flarum.core.compat["common/components/Page"]},function(t,e){t.exports=flarum.core.compat["common/components/LoadingIndicator"]},function(t,e){t.exports=flarum.core.compat["common/components/Dropdown"]},function(t,e){t.exports=flarum.core.compat["common/helpers/humanTime"]},function(t,e){t.exports=flarum.core.compat["common/helpers/punctuateSeries"]},function(t,e){t.exports=flarum.core.compat["common/utils/extractText"]},function(t,e,n){"use strict";n.r(e);var o=n(8),r=n(0),a=n.n(r),i=n(9),s=n.n(i),c=n(10),u=n.n(c);function l(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}function f(t,e){return(f=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t})(t,e)}function h(t,e){t.prototype=Object.create(e.prototype),t.prototype.constructor=t,f(t,e)}function d(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}var p=n(2),v=n.n(p),g=function(t){function e(){for(var e,n=arguments.length,o=new Array(n),r=0;r0&&(e.data[o]=0,e.data[o+1]=0,e.data[o+2]=0,e.data[o+3]=0);this.previewContext.putImageData(e,0,0)}t&&(this.previewContext.strokeStyle="rgba(0,0,0,0.5)",this.previewContext.lineWidth=3,this.drawWithTool(this.previewContext,t.x,t.y))}},t}(),z=function(){d(this,"color",null),d(this,"shape","circle"),d(this,"width",30)},V="clarkwinkelmann-carving-contest.forum.modal.",X=function(t){function e(){for(var e,n=arguments.length,o=new Array(n),r=0;r4,o=e.sort((function(t){return t===a.a.session.user?-1:1})).slice(0,n?3:4).map((function(t){return m(E.a,{href:a.a.route.user(t)},t===a.a.session.user?a.a.translator.trans("flarum-likes.forum.post.you_text"):O()(t))}));if(n){var r=e.length-o.length;o.push(m("a",{href:"#",onclick:function(e){e.preventDefault(),a.a.modal.show(Y,{entry:t})}},a.a.translator.transChoice("flarum-likes.forum.post.others_link",r,{count:r})))}return m(".Entry-likedBy",[N()("far fa-thumbs-up"),a.a.translator.transChoice("flarum-likes.forum.post.liked_by"+(e[0]===a.a.session.user?"_self":"")+"_text",o.length,{count:o.length,users:T()(o)})])}},n.participateButton=function(){var t=this;return a.a.session.user?a.a.session.user.attribute("carvingContestCanParticipate")?k.a.component({className:"Button Button--primary",onclick:function(){a.a.modal.show(X,{onsave:function(){a.a.modal.close(),t.refresh()}})}},a.a.translator.trans(G+"participate")):a.a.session.user.attribute("carvingContestCouldParticipate")?k.a.component({className:"Button Button--primary",disabled:!0},a.a.translator.trans(G+"already-participated")):null:null},n.view=function(){var t=this;if(null===this.entries)return m(".container",m("p",a.a.translator.trans(G+"loading")));var e={"-likesCount":a.a.translator.trans(G+"sort.mostLikes"),likesCount:a.a.translator.trans(G+"sort.fewerLikes"),"-createdAt":a.a.translator.trans(G+"sort.mostRecent"),createdAt:a.a.translator.trans(G+"sort.leastRecent")};return m(".container",[m("h2",a.a.translator.trans(G+"title")),this.participateButton()," ",M.a.component({buttonClassName:"Button",label:e[this.sort]},Object.keys(e).map((function(n){var o=e[n],r=t.sort===n;return k.a.component({icon:!r||"fas fa-check",onclick:function(){t.sort=n,t.refresh()},active:r},o)})))," ",k.a.component({icon:"fas fa-sync",className:"Button",onclick:function(){t.refresh()}},a.a.translator.trans(G+"refresh")),m("div",this.entries.map((function(e){return m(".CarvingContestEntry",{key:e.id()},[m(U,{mode:a.a.forum.attribute("carvingContestColorMode")?"color":"carve",image:e.image()}),m("h3.CarvingContestEntry--name",e.name()),m("p",[R()(e.user()),O()(e.user())," - ",S()(e.createdAt())]),a.a.forum.attribute("carvingContestCanModerate")?k.a.component({className:"Button Button--icon CarvingContestEntry--delete",icon:"fas fa-trash",onclick:function(){confirm(q()(a.a.translator.trans(G+"delete-confirmation",{name:e.name(),user:e.user()})))&&e.delete().then((function(){t.refresh()}))}}):null,m(".CarvingContestEntry--vote",[t.likeButton(e),t.whoLiked(e)])])}))),this.loading?x.a.component():this.moreResults?k.a.component({className:"Button",onclick:this.loadMore.bind(this)},a.a.translator.trans(G+"load-more")):null])},e}(C.a);a.a.initializers.add("carving-contest",(function(){a.a.store.models["carving-contest-entries"]=g,a.a.routes.carvingContest={path:"/carving-contest",component:H},Object(o.extend)(s.a.prototype,"navItems",(function(t){a.a.forum.attribute("carvingContestCanView")&&t.add("carving-contest",u.a.component({icon:"fas fa-spider",href:a.a.route("carvingContest")},a.a.translator.trans("clarkwinkelmann-carving-contest.forum.nav.contest")))}))}))}]); +module.exports=function(t){var e={};function n(o){if(e[o])return e[o].exports;var a=e[o]={i:o,l:!1,exports:{}};return t[o].call(a.exports,a,a.exports,n),a.l=!0,a.exports}return n.m=t,n.c=e,n.d=function(t,e,o){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:o})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var o=Object.create(null);if(n.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var a in t)n.d(o,a,function(e){return t[e]}.bind(null,a));return o},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=18)}([function(t,e){t.exports=flarum.core.compat["forum/app"]},,function(t,e){t.exports=flarum.core.compat["common/components/Button"]},function(t,e){t.exports=flarum.core.compat["common/Model"]},function(t,e){t.exports=flarum.core.compat["common/helpers/username"]},function(t,e){t.exports=flarum.core.compat["common/helpers/icon"]},function(t,e){t.exports=flarum.core.compat["common/components/Link"]},function(t,e){t.exports=flarum.core.compat["common/helpers/avatar"]},function(t,e){t.exports=flarum.core.compat["common/components/Modal"]},function(t,e){t.exports=flarum.core.compat["common/extend"]},function(t,e){t.exports=flarum.core.compat["forum/components/IndexPage"]},function(t,e){t.exports=flarum.core.compat["common/components/LinkButton"]},function(t,e){t.exports=flarum.core.compat["common/components/Page"]},function(t,e){t.exports=flarum.core.compat["common/components/LoadingIndicator"]},function(t,e){t.exports=flarum.core.compat["common/components/Dropdown"]},function(t,e){t.exports=flarum.core.compat["common/helpers/humanTime"]},function(t,e){t.exports=flarum.core.compat["common/helpers/punctuateSeries"]},function(t,e){t.exports=flarum.core.compat["common/utils/extractText"]},function(t,e,n){"use strict";n.r(e);var o=n(9),a=n(0),r=n.n(a),s=n(10),i=n.n(s),c=n(11),u=n.n(c);function l(t,e){return(l=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t})(t,e)}function h(t,e){t.prototype=Object.create(e.prototype),t.prototype.constructor=t,l(t,e)}var d=n(3),f=n.n(d),p=function(t){function e(){for(var e,n=arguments.length,o=new Array(n),a=0;a0&&(e.data[o]=0,e.data[o+1]=0,e.data[o+2]=0,e.data[o+3]=0);this.previewContext.putImageData(e,0,0)}t&&(this.previewContext.strokeStyle="rgba(0,0,0,0.5)",this.previewContext.lineWidth=3,this.drawWithTool(this.previewContext,t.x,t.y))}},t}(),W=function(){this.color=null,this.shape="circle",this.width=30},U="clarkwinkelmann-carving-contest.forum.modal.",z=function(t){function e(){for(var e,n=arguments.length,o=new Array(n),a=0;a4,o=e.sort((function(t){return t===r.a.session.user?-1:1})).slice(0,n?3:4).map((function(t){return m(M.a,{href:r.a.route.user(t)},t===r.a.session.user?r.a.translator.trans("flarum-likes.forum.post.you_text"):_()(t))}));if(n){var a=e.length-o.length;o.push(m("a",{href:"#",onclick:function(e){e.preventDefault(),r.a.modal.show(V,{entry:t})}},r.a.translator.trans("flarum-likes.forum.post.others_link",{count:a})))}return m(".Entry-likedBy",[N()("far fa-thumbs-up"),r.a.translator.trans("flarum-likes.forum.post.liked_by"+(e[0]===r.a.session.user?"_self":"")+"_text",{count:o.length,users:j()(o)})])}},n.participateButton=function(){var t=this;return r.a.session.user?r.a.session.user.attribute("carvingContestCanParticipate")?C.a.component({className:"Button Button--primary",onclick:function(){r.a.modal.show(z,{onsave:function(){r.a.modal.close(),t.refresh()}})}},r.a.translator.trans(X+"participate")):r.a.session.user.attribute("carvingContestCouldParticipate")?C.a.component({className:"Button Button--primary",disabled:!0},r.a.translator.trans(X+"already-participated")):null:null},n.view=function(){var t=this;if(null===this.entries)return m(".container",m("p",r.a.translator.trans(X+"loading")));var e={"-likesCount":r.a.translator.trans(X+"sort.mostLikes"),likesCount:r.a.translator.trans(X+"sort.fewerLikes"),"-createdAt":r.a.translator.trans(X+"sort.mostRecent"),createdAt:r.a.translator.trans(X+"sort.leastRecent")};return m(".container",[m("h2",r.a.translator.trans(X+"title")),this.participateButton()," ",x.a.component({buttonClassName:"Button",label:e[this.sort]},Object.keys(e).map((function(n){var o=e[n],a=t.sort===n;return C.a.component({icon:!a||"fas fa-check",onclick:function(){t.sort=n,t.refresh()},active:a},o)})))," ",C.a.component({icon:"fas fa-sync",className:"Button",onclick:function(){t.refresh()}},r.a.translator.trans(X+"refresh")),m("div",this.entries.map((function(e){return m(".CarvingContestEntry",{key:e.id()},[m(F,{mode:r.a.forum.attribute("carvingContestColorMode")?"color":"carve",image:e.image()}),m("h3.CarvingContestEntry--name",e.name()),m("p",[L()(e.user()),_()(e.user())," - ",P()(e.createdAt())]),r.a.forum.attribute("carvingContestCanModerate")?C.a.component({className:"Button Button--icon CarvingContestEntry--delete",icon:"fas fa-trash",onclick:function(){confirm(D()(r.a.translator.trans(X+"delete-confirmation",{name:e.name(),user:e.user()})))&&e.delete().then((function(){t.refresh()}))}}):null,m(".CarvingContestEntry--vote",[t.likeButton(e),t.whoLiked(e)])])}))),this.loading?k.a.component():this.moreResults?C.a.component({className:"Button",onclick:this.loadMore.bind(this)},r.a.translator.trans(X+"load-more")):null])},e}(g.a);r.a.initializers.add("carving-contest",(function(){r.a.store.models["carving-contest-entries"]=p,r.a.routes.carvingContest={path:"/carving-contest",component:Y},Object(o.extend)(i.a.prototype,"navItems",(function(t){r.a.forum.attribute("carvingContestCanView")&&t.add("carving-contest",u.a.component({icon:"fas fa-spider",href:r.a.route("carvingContest")},r.a.translator.trans("clarkwinkelmann-carving-contest.forum.nav.contest")))}))}))}]); //# sourceMappingURL=forum.js.map \ No newline at end of file diff --git a/js/dist/forum.js.map b/js/dist/forum.js.map index e07c8c2..84e8466 100644 --- a/js/dist/forum.js.map +++ b/js/dist/forum.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://@clarkwinkelmann/carving-contest/webpack/bootstrap","webpack://@clarkwinkelmann/carving-contest/external \"flarum.core.compat['app']\"","webpack://@clarkwinkelmann/carving-contest/external \"flarum.core.compat['common/components/Button']\"","webpack://@clarkwinkelmann/carving-contest/external \"flarum.core.compat['common/Model']\"","webpack://@clarkwinkelmann/carving-contest/external \"flarum.core.compat['common/helpers/username']\"","webpack://@clarkwinkelmann/carving-contest/external \"flarum.core.compat['common/helpers/icon']\"","webpack://@clarkwinkelmann/carving-contest/external \"flarum.core.compat['common/components/Link']\"","webpack://@clarkwinkelmann/carving-contest/external \"flarum.core.compat['common/helpers/avatar']\"","webpack://@clarkwinkelmann/carving-contest/external \"flarum.core.compat['common/components/Modal']\"","webpack://@clarkwinkelmann/carving-contest/external \"flarum.core.compat['common/extend']\"","webpack://@clarkwinkelmann/carving-contest/external \"flarum.core.compat['forum/components/IndexPage']\"","webpack://@clarkwinkelmann/carving-contest/external \"flarum.core.compat['common/components/LinkButton']\"","webpack://@clarkwinkelmann/carving-contest/external \"flarum.core.compat['common/components/Page']\"","webpack://@clarkwinkelmann/carving-contest/external \"flarum.core.compat['common/components/LoadingIndicator']\"","webpack://@clarkwinkelmann/carving-contest/external \"flarum.core.compat['common/components/Dropdown']\"","webpack://@clarkwinkelmann/carving-contest/external \"flarum.core.compat['common/helpers/humanTime']\"","webpack://@clarkwinkelmann/carving-contest/external \"flarum.core.compat['common/helpers/punctuateSeries']\"","webpack://@clarkwinkelmann/carving-contest/external \"flarum.core.compat['common/utils/extractText']\"","webpack://@clarkwinkelmann/carving-contest/./node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","webpack://@clarkwinkelmann/carving-contest/./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","webpack://@clarkwinkelmann/carving-contest/./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","webpack://@clarkwinkelmann/carving-contest/./node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://@clarkwinkelmann/carving-contest/./src/forum/models/Entry.js","webpack://@clarkwinkelmann/carving-contest/./src/forum/components/PumpkinCanvas.js","webpack://@clarkwinkelmann/carving-contest/./src/forum/states/BrushState.js","webpack://@clarkwinkelmann/carving-contest/./src/forum/components/ParticipateModal.js","webpack://@clarkwinkelmann/carving-contest/./src/forum/components/EntryLikesModal.js","webpack://@clarkwinkelmann/carving-contest/./src/forum/components/ContestPage.js","webpack://@clarkwinkelmann/carving-contest/./src/forum/index.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","flarum","core","compat","_assertThisInitialized","self","ReferenceError","_setPrototypeOf","setPrototypeOf","__proto__","_inheritsLoose","subClass","superClass","constructor","_defineProperty","obj","configurable","writable","Entry","Model","attribute","transformDate","hasOne","hasMany","apiEndpoint","this","exists","data","id","PumpkinCanvas","oninit","vnode","attrs","brush","previewContext","imageSourceCanvas","document","createElement","width","height","imageSourceContext","getContext","image","Image","src","app","forum","onload","drawImage","updatePreview","drawCanvas","drawContext","startingImage","onerror","err","console","error","onmouseup","drawEnabled","oncreate","addEventListener","dom","event","mouseMove","querySelector","onremove","removeEventListener","view","rect","target","getBoundingClientRect","x","clientX","left","y","clientY","top","fillStyle","color","drawWithTool","onchange","canvas","toDataURL","context","fill","beginPath","shape","arc","Math","PI","stroke","toolPosition","clearRect","imageSourceData","getImageData","drawData","length","putImageData","strokeStyle","lineWidth","BrushState","translationPrefix","ParticipateModal","className","title","translator","trans","checkIfDisabled","previouslyDisabled","disabled","redraw","colorChoice","colorOptions","colors","type","split","map","style","backgroundColor","onclick","colorTools","content","Button","component","icon","step","min","max","parseInt","loading","store","createRecord","save","then","onsave","Modal","PostLikesModal","entry","likes","user","Link","href","route","avatar","username","ContestPage","moreResults","entries","sort","refresh","loadResults","offset","preloadedEntries","preloadedApiDocument","Promise","resolve","find","page","results","parseResults","loadMore","push","apply","payload","links","next","likeButton","canLike","isLiked","session","some","relationships","like","splice","unshift","whoLiked","overLimit","names","a","slice","limit","count","e","preventDefault","modal","show","EntryLikesModal","transChoice","users","punctuateSeries","participateButton","close","sortOptions","Dropdown","buttonClassName","label","keys","active","humanTime","createdAt","confirm","extractText","LoadingIndicator","Page","initializers","add","models","routes","carvingContest","path","extend","IndexPage","items","LinkButton"],"mappings":"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","file":"forum.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 17);\n","module.exports = flarum.core.compat['app'];","module.exports = flarum.core.compat['common/components/Button'];","module.exports = flarum.core.compat['common/Model'];","module.exports = flarum.core.compat['common/helpers/username'];","module.exports = flarum.core.compat['common/helpers/icon'];","module.exports = flarum.core.compat['common/components/Link'];","module.exports = flarum.core.compat['common/helpers/avatar'];","module.exports = flarum.core.compat['common/components/Modal'];","module.exports = flarum.core.compat['common/extend'];","module.exports = flarum.core.compat['forum/components/IndexPage'];","module.exports = flarum.core.compat['common/components/LinkButton'];","module.exports = flarum.core.compat['common/components/Page'];","module.exports = flarum.core.compat['common/components/LoadingIndicator'];","module.exports = flarum.core.compat['common/components/Dropdown'];","module.exports = flarum.core.compat['common/helpers/humanTime'];","module.exports = flarum.core.compat['common/helpers/punctuateSeries'];","module.exports = flarum.core.compat['common/utils/extractText'];","export default function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}","export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n setPrototypeOf(subClass, superClass);\n}","export default function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}","import Model from 'flarum/common/Model';\n\nexport default class Entry extends Model {\n name = Model.attribute('name');\n image = Model.attribute('image');\n createdAt = Model.attribute('createdAt', Model.transformDate);\n canLike = Model.attribute('canLike');\n\n user = Model.hasOne('user');\n likes = Model.hasMany('likes');\n\n apiEndpoint() {\n return '/carving-contest/entries' + (this.exists ? '/' + this.data.id : '');\n }\n}\n","import app from 'flarum/app';\n\n/* global m */\n\nconst IMAGE_WIDTH = 426;\nconst IMAGE_HEIGHT = 426;\n\nexport default class PumpkinCanvas {\n oninit(vnode) {\n this.mode = vnode.attrs.mode;\n this.brush = vnode.attrs.brush;\n\n this.previewContext = null;\n\n this.imageSourceCanvas = document.createElement('canvas');\n this.imageSourceCanvas.width = IMAGE_WIDTH;\n this.imageSourceCanvas.height = IMAGE_HEIGHT;\n this.imageSourceContext = this.imageSourceCanvas.getContext('2d');\n const image = new Image();\n image.src = app.forum.attribute('baseUrl') + '/assets/extensions/clarkwinkelmann-carving-contest/pumpkin.jpg';\n image.onload = () => {\n this.imageSourceContext.drawImage(image, 0, 0);\n\n this.updatePreview();\n };\n\n this.drawCanvas = document.createElement('canvas');\n this.drawCanvas.width = IMAGE_WIDTH;\n this.drawCanvas.height = IMAGE_HEIGHT;\n this.drawContext = this.drawCanvas.getContext('2d');\n\n const startingImage = vnode.attrs.image;\n if (startingImage) {\n const image = new Image();\n image.src = startingImage;\n image.onload = () => {\n this.drawContext.drawImage(image, 0, 0);\n\n this.updatePreview();\n };\n image.onerror = err => {\n console.error('Error loading image', err);\n };\n }\n\n this.onmouseup = () => {\n this.drawEnabled = false;\n };\n }\n\n oncreate(vnode) {\n document.addEventListener('mouseup', this.onmouseup);\n\n vnode.dom.addEventListener('mousedown', event => {\n this.drawEnabled = true;\n\n this.mouseMove(vnode, event);\n });\n vnode.dom.addEventListener('mousemove', this.mouseMove.bind(this, vnode));\n vnode.dom.addEventListener('mouseleave', () => {\n // To remove the tool from preview\n this.updatePreview();\n });\n\n this.previewContext = vnode.dom.querySelector('canvas').getContext('2d');\n\n this.updatePreview();\n }\n\n onremove() {\n document.removeEventListener('mouseup', this.onmouseup);\n }\n\n view() {\n return m('.CarvingContestPumpkin', m('canvas', {\n width: IMAGE_WIDTH,\n height: IMAGE_HEIGHT,\n }));\n }\n\n mouseMove(vnode, event) {\n const rect = event.target.getBoundingClientRect();\n const x = event.clientX - rect.left;\n const y = event.clientY - rect.top;\n\n if (this.drawEnabled && this.brush) {\n if (this.mode === 'color') {\n this.drawContext.fillStyle = this.brush.color;\n } else {\n this.drawContext.fillStyle = '#000';\n }\n this.drawWithTool(this.drawContext, x, y, true);\n\n vnode.attrs.onchange(this.drawContext.canvas.toDataURL('image/png'));\n }\n\n this.updatePreview({\n x,\n y,\n });\n }\n\n drawWithTool(context, x, y, fill = false) {\n if (!this.brush) {\n return;\n }\n\n const width = this.brush.width;\n\n context.beginPath();\n\n switch (this.brush.shape) {\n case 'circle':\n context.arc(x, y, width / 2, 0, 2 * Math.PI);\n break;\n case 'square':\n context.rect(x - (width / 2), y - (width / 2), width, width);\n break;\n }\n\n if (fill) {\n context.fill();\n } else {\n context.stroke();\n }\n }\n\n updatePreview(toolPosition = null) {\n if (!this.previewContext) {\n return;\n }\n\n this.previewContext.clearRect(0, 0, IMAGE_WIDTH, IMAGE_HEIGHT);\n\n if (this.mode === 'color') {\n // In paint mode, we draw the two images on top of another\n this.previewContext.drawImage(this.imageSourceCanvas, 0, 0);\n this.previewContext.drawImage(this.drawCanvas, 0, 0);\n } else {\n // In carve mode, we subtract the drawing from the source\n const imageSourceData = this.imageSourceContext.getImageData(0, 0, IMAGE_WIDTH, IMAGE_HEIGHT);\n const drawData = this.drawContext.getImageData(0, 0, IMAGE_WIDTH, IMAGE_HEIGHT);\n\n for (let i = 0; i < imageSourceData.data.length; i += 4) {\n // If the pixel in that area has an alpha value greater than 0, we create a hole in the image data\n // Returning 0 for every index will give rgba(0,0,0,0)\n if (drawData.data[i + 3] > 0) {\n imageSourceData.data[i] = 0;\n imageSourceData.data[i + 1] = 0;\n imageSourceData.data[i + 2] = 0;\n imageSourceData.data[i + 3] = 0;\n }\n }\n\n this.previewContext.putImageData(imageSourceData, 0, 0);\n }\n\n if (toolPosition) {\n this.previewContext.strokeStyle = 'rgba(0,0,0,0.5)';\n this.previewContext.lineWidth = 3;\n this.drawWithTool(this.previewContext, toolPosition.x, toolPosition.y);\n }\n }\n}\n","export default class BrushState {\n color = null;\n shape = 'circle';\n width = 30;\n}\n","import app from 'flarum/app';\nimport Modal from 'flarum/common/components/Modal';\nimport Button from 'flarum/common/components/Button';\nimport PumpkinCanvas from './PumpkinCanvas';\nimport BrushState from '../states/BrushState';\n\nconst translationPrefix = 'clarkwinkelmann-carving-contest.forum.modal.';\n\n/* global m */\n\nexport default class ParticipateModal extends Modal {\n brush = new BrushState();\n name = '';\n image = '';\n disabled = true;\n loading = false;\n\n className() {\n return 'Modal--large';\n }\n\n title() {\n return app.translator.trans(translationPrefix + 'title');\n }\n\n checkIfDisabled() {\n const previouslyDisabled = this.disabled;\n\n this.disabled = this.name === '' || this.image === '';\n\n // Handle disabled state redraw when the image changes (because we don't redraw every time it changes)\n if (previouslyDisabled !== this.disabled) {\n m.redraw();\n }\n }\n\n colorChoice() {\n const colors = app.forum.attribute('carvingContestColors');\n\n if (colors === 'all') {\n return m('input', {\n type: 'color',\n value: this.brush.color,\n onchange: event => {\n this.brush.color = event.target.value;\n },\n });\n }\n\n let colorOptions;\n\n if (colors === 'simple') {\n colorOptions = [\n '#f32501', // Red\n '#ff8d12', // Orange\n '#ffe884', // Yellow\n '#94ae3f', // Green\n '#084f93', // Blue\n '#000000', // Black\n ];\n } else {\n colorOptions = app.forum.attribute('carvingContestColors').split(',');\n }\n\n return m('div', colorOptions.map(color => m('.CarvingContest-ColorChoice', {\n style: {\n backgroundColor: color,\n },\n onclick: () => {\n this.brush.color = color;\n },\n className: this.brush.color === color ? 'selected' : '',\n })));\n }\n\n colorTools() {\n if (!app.forum.attribute('carvingContestColorMode')) {\n return null;\n }\n\n return m('.CarvingContestTools', [\n this.colorChoice(),\n ]);\n }\n\n content() {\n return m('.Modal-body', [\n m('.Form-group', [\n this.colorTools(),\n m('.CarvingContestTools', [\n Button.component({\n disabled: this.brush.shape === 'circle',\n icon: 'fas fa-circle',\n className: 'Button',\n onclick: () => {\n this.brush.shape = 'circle';\n },\n }, app.translator.trans(translationPrefix + 'tools.circle')),\n Button.component({\n disabled: this.brush.shape === 'square',\n icon: 'fas fa-square',\n className: 'Button',\n onclick: () => {\n this.brush.shape = 'square';\n },\n }, app.translator.trans(translationPrefix + 'tools.square')),\n m('input', {\n type: 'range',\n step: 2,\n min: 10,\n max: 50,\n value: this.brush.width,\n onchange: event => {\n this.brush.width = parseInt(event.target.value);\n },\n }),\n ]),\n m(PumpkinCanvas, {\n mode: app.forum.attribute('carvingContestColorMode') ? 'color' : 'carve',\n brush: this.brush,\n image: this.image,\n onchange: value => {\n this.image = value;\n\n this.checkIfDisabled();\n },\n }),\n ]),\n m('.Form-group', [\n m('label', app.translator.trans(translationPrefix + 'name')),\n m('input[type=text].FormControl', {\n value: this.name,\n onchange: event => {\n this.name = event.target.value;\n\n this.checkIfDisabled();\n },\n }),\n ]),\n m('.Form-group', [\n Button.component({\n loading: this.loading,\n disabled: this.disabled,\n className: 'Button Button--primary',\n onclick: () => {\n app.store.createRecord('carving-contest-entries').save({\n name: this.name,\n image: this.image,\n }).then(() => {\n this.attrs.onsave();\n });\n },\n }, app.translator.trans(translationPrefix + 'submit')),\n ]),\n ]);\n }\n}\n","import app from 'flarum/app';\nimport Modal from 'flarum/common/components/Modal';\nimport Link from 'flarum/common/components/Link';\nimport avatar from 'flarum/common/helpers/avatar';\nimport username from 'flarum/common/helpers/username';\n\n/* global m */\n\nexport default class PostLikesModal extends Modal {\n className() {\n return 'EntryLikesModal Modal--small';\n }\n\n title() {\n return app.translator.trans('clarkwinkelmann-carving-contest.forum.likes_modal.title');\n }\n\n content() {\n return m('.Modal-body', m('ul.EntryLikesModal-list', this.attrs.entry.likes().map(user => m('li', m(Link, {\n href: app.route.user(user),\n }, [\n avatar(user),\n ' ',\n username(user),\n ])))));\n }\n}\n","import app from 'flarum/app';\nimport Page from 'flarum/common/components/Page';\nimport Button from 'flarum/common/components/Button';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport Dropdown from 'flarum/common/components/Dropdown';\nimport Link from 'flarum/common/components/Link';\nimport humanTime from 'flarum/common/helpers/humanTime';\nimport avatar from 'flarum/common/helpers/avatar';\nimport username from 'flarum/common/helpers/username';\nimport icon from 'flarum/common/helpers/icon';\nimport punctuateSeries from 'flarum/common/helpers/punctuateSeries';\nimport extractText from 'flarum/common/utils/extractText';\nimport ParticipateModal from './ParticipateModal';\nimport PumpkinCanvas from './PumpkinCanvas';\nimport EntryLikesModal from './EntryLikesModal';\n\n/* global m */\n\nconst translationPrefix = 'clarkwinkelmann-carving-contest.forum.page.';\n\nexport default class ContestPage extends Page {\n oninit(vnode) {\n super.oninit(vnode);\n\n this.loading = true;\n this.moreResults = false;\n this.entries = [];\n this.sort = '-createdAt';\n\n this.refresh();\n }\n\n loadResults(offset) {\n const preloadedEntries = app.preloadedApiDocument();\n\n if (preloadedEntries) {\n return Promise.resolve(preloadedEntries);\n } else {\n return app.store.find('carving-contest/entries', {\n page: {\n offset,\n },\n sort: this.sort,\n });\n }\n }\n\n refresh() {\n this.loading = true;\n this.entries = null;\n\n return this.loadResults().then(\n results => {\n this.entries = [];\n this.parseResults(results);\n },\n () => {\n this.loading = false;\n m.redraw();\n }\n );\n }\n\n loadMore() {\n this.loading = true;\n\n this.loadResults(this.entries.length)\n .then(this.parseResults.bind(this));\n }\n\n parseResults(results) {\n [].push.apply(this.entries, results);\n\n this.loading = false;\n this.moreResults = !!results.payload.links.next;\n\n m.redraw();\n }\n\n likeButton(entry) {\n if (!entry.canLike()) {\n return null;\n }\n\n const likes = entry.likes();\n const isLiked = app.session.user && likes && likes.some(user => user === app.session.user);\n\n return Button.component({\n className: 'Button Button--block' + (isLiked ? ' Button--primary Button-already-liked' : ''),\n onclick: () => {\n entry.save({\n isLiked: !isLiked,\n });\n\n // We've saved the fact that we do or don't like the entry, but in order\n // to provide instantaneous feedback to the user, we'll need to add or\n // remove the like from the relationship data manually.\n const data = entry.data.relationships.likes.data;\n data.some((like, i) => {\n if (like.id === app.session.user.id()) {\n data.splice(i, 1);\n return true;\n }\n });\n\n if (!isLiked) {\n data.unshift({type: 'users', id: app.session.user.id()});\n }\n }\n }, isLiked ? [\n m('span.already-liked', [\n icon('far fa-thumbs-up'),\n ' ',\n app.translator.trans(translationPrefix + 'already-liked'),\n ]),\n m('span.remove-like', [\n icon('far fa-thumbs-down'),\n ' ',\n app.translator.trans(translationPrefix + 'unlike'),\n ])\n ] : [\n icon('far fa-thumbs-up'),\n ' ',\n app.translator.trans(translationPrefix + 'like'),\n ]);\n }\n\n whoLiked(entry) {\n const likes = entry.likes();\n\n if (!likes || !likes.length) {\n return;\n }\n\n const limit = 4;\n const overLimit = likes.length > limit;\n\n // Construct a list of names of users who have liked this post. Make sure the\n // current user is first in the list, and cap a maximum of 4 items.\n const names = likes.sort(a => a === app.session.user ? -1 : 1)\n .slice(0, overLimit ? limit - 1 : limit)\n .map(user => m(Link, {\n href: app.route.user(user),\n }, user === app.session.user ? app.translator.trans('flarum-likes.forum.post.you_text') : username(user)));\n\n // If there are more users that we've run out of room to display, add a \"x\n // others\" name to the end of the list. Clicking on it will display a modal\n // with a full list of names.\n if (overLimit) {\n const count = likes.length - names.length;\n\n names.push(m('a', {\n href: '#',\n onclick: e => {\n e.preventDefault();\n app.modal.show(EntryLikesModal, {\n entry,\n });\n },\n }, app.translator.transChoice('flarum-likes.forum.post.others_link', count, {count})));\n }\n\n return m('.Entry-likedBy', [\n icon('far fa-thumbs-up'),\n app.translator.transChoice('flarum-likes.forum.post.liked_by' + (likes[0] === app.session.user ? '_self' : '') + '_text', names.length, {\n count: names.length,\n users: punctuateSeries(names)\n }),\n ]);\n }\n\n participateButton() {\n if (!app.session.user) {\n return null;\n }\n\n if (app.session.user.attribute('carvingContestCanParticipate')) {\n return Button.component({\n className: 'Button Button--primary',\n onclick: () => {\n app.modal.show(ParticipateModal, {\n onsave: () => {\n app.modal.close();\n this.refresh();\n },\n });\n },\n }, app.translator.trans(translationPrefix + 'participate'));\n }\n\n if (app.session.user.attribute('carvingContestCouldParticipate')) {\n return Button.component({\n className: 'Button Button--primary',\n disabled: true,\n }, app.translator.trans(translationPrefix + 'already-participated'));\n }\n\n return null;\n }\n\n view() {\n if (this.entries === null) {\n return m('.container', m('p', app.translator.trans(translationPrefix + 'loading')));\n }\n\n const sortOptions = {\n '-likesCount': app.translator.trans(translationPrefix + 'sort.mostLikes'),\n 'likesCount': app.translator.trans(translationPrefix + 'sort.fewerLikes'),\n '-createdAt': app.translator.trans(translationPrefix + 'sort.mostRecent'),\n 'createdAt': app.translator.trans(translationPrefix + 'sort.leastRecent'),\n };\n\n return m('.container', [\n m('h2', app.translator.trans(translationPrefix + 'title')),\n this.participateButton(),\n ' ',\n Dropdown.component({\n buttonClassName: 'Button',\n label: sortOptions[this.sort],\n }, Object.keys(sortOptions).map(value => {\n const label = sortOptions[value];\n const active = this.sort === value;\n\n return Button.component({\n icon: active ? 'fas fa-check' : true,\n onclick: () => {\n this.sort = value;\n this.refresh();\n },\n active,\n }, label);\n })),\n ' ',\n Button.component({\n icon: 'fas fa-sync',\n className: 'Button',\n onclick: () => {\n this.refresh();\n },\n }, app.translator.trans(translationPrefix + 'refresh')),\n m('div', this.entries.map(entry => m('.CarvingContestEntry', {\n key: entry.id(), // Without this, canvas are re-used, causing incorrect images to be shown when one is deleted\n }, [\n m(PumpkinCanvas, {\n mode: app.forum.attribute('carvingContestColorMode') ? 'color' : 'carve',\n image: entry.image(),\n }),\n m('h3.CarvingContestEntry--name', entry.name()),\n m('p', [\n avatar(entry.user()),\n username(entry.user()),\n ' - ',\n humanTime(entry.createdAt()),\n ]),\n app.forum.attribute('carvingContestCanModerate') ? Button.component({\n className: 'Button Button--icon CarvingContestEntry--delete',\n icon: 'fas fa-trash',\n onclick: () => {\n if (!confirm(extractText(app.translator.trans(translationPrefix + 'delete-confirmation', {\n name: entry.name(),\n user: entry.user(),\n })))) {\n return;\n }\n\n entry.delete().then(() => {\n this.refresh();\n });\n },\n }) : null,\n m('.CarvingContestEntry--vote', [\n this.likeButton(entry),\n this.whoLiked(entry),\n ]),\n ]))),\n this.loading ? LoadingIndicator.component() : (this.moreResults ? Button.component({\n className: 'Button',\n onclick: this.loadMore.bind(this),\n }, app.translator.trans(translationPrefix + 'load-more')) : null),\n ]);\n }\n}\n","import {extend} from 'flarum/common/extend';\nimport app from 'flarum/app';\nimport IndexPage from 'flarum/forum/components/IndexPage';\nimport LinkButton from 'flarum/common/components/LinkButton';\nimport Entry from './models/Entry';\nimport ContestPage from './components/ContestPage';\n\n/* global m */\n\napp.initializers.add('carving-contest', () => {\n app.store.models['carving-contest-entries'] = Entry;\n\n app.routes.carvingContest = {\n path: '/carving-contest',\n component: ContestPage,\n };\n\n extend(IndexPage.prototype, 'navItems', function (items) {\n if (!app.forum.attribute('carvingContestCanView')) {\n return;\n }\n\n items.add('carving-contest', LinkButton.component({\n icon: 'fas fa-spider',\n href: app.route('carvingContest'),\n }, app.translator.trans('clarkwinkelmann-carving-contest.forum.nav.contest')));\n });\n});\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://@clarkwinkelmann/carving-contest/webpack/bootstrap","webpack://@clarkwinkelmann/carving-contest/external \"flarum.core.compat['forum/app']\"","webpack://@clarkwinkelmann/carving-contest/external \"flarum.core.compat['common/components/Button']\"","webpack://@clarkwinkelmann/carving-contest/external \"flarum.core.compat['common/Model']\"","webpack://@clarkwinkelmann/carving-contest/external \"flarum.core.compat['common/helpers/username']\"","webpack://@clarkwinkelmann/carving-contest/external \"flarum.core.compat['common/helpers/icon']\"","webpack://@clarkwinkelmann/carving-contest/external \"flarum.core.compat['common/components/Link']\"","webpack://@clarkwinkelmann/carving-contest/external \"flarum.core.compat['common/helpers/avatar']\"","webpack://@clarkwinkelmann/carving-contest/external \"flarum.core.compat['common/components/Modal']\"","webpack://@clarkwinkelmann/carving-contest/external \"flarum.core.compat['common/extend']\"","webpack://@clarkwinkelmann/carving-contest/external \"flarum.core.compat['forum/components/IndexPage']\"","webpack://@clarkwinkelmann/carving-contest/external \"flarum.core.compat['common/components/LinkButton']\"","webpack://@clarkwinkelmann/carving-contest/external \"flarum.core.compat['common/components/Page']\"","webpack://@clarkwinkelmann/carving-contest/external \"flarum.core.compat['common/components/LoadingIndicator']\"","webpack://@clarkwinkelmann/carving-contest/external \"flarum.core.compat['common/components/Dropdown']\"","webpack://@clarkwinkelmann/carving-contest/external \"flarum.core.compat['common/helpers/humanTime']\"","webpack://@clarkwinkelmann/carving-contest/external \"flarum.core.compat['common/helpers/punctuateSeries']\"","webpack://@clarkwinkelmann/carving-contest/external \"flarum.core.compat['common/utils/extractText']\"","webpack://@clarkwinkelmann/carving-contest/./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","webpack://@clarkwinkelmann/carving-contest/./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","webpack://@clarkwinkelmann/carving-contest/./src/forum/models/Entry.ts","webpack://@clarkwinkelmann/carving-contest/./src/forum/components/PumpkinCanvas.ts","webpack://@clarkwinkelmann/carving-contest/./src/forum/states/BrushState.ts","webpack://@clarkwinkelmann/carving-contest/./src/forum/components/ParticipateModal.ts","webpack://@clarkwinkelmann/carving-contest/./src/forum/components/EntryLikesModal.ts","webpack://@clarkwinkelmann/carving-contest/./src/forum/components/ContestPage.ts","webpack://@clarkwinkelmann/carving-contest/./src/forum/index.ts"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","flarum","core","compat","_setPrototypeOf","setPrototypeOf","__proto__","_inheritsLoose","subClass","superClass","constructor","Entry","Model","attribute","image","createdAt","transformDate","canLike","user","hasOne","likes","hasMany","apiEndpoint","this","exists","data","id","PumpkinCanvas","brush","previewContext","imageSourceCanvas","imageSourceContext","drawCanvas","drawContext","onmouseup","drawEnabled","oninit","vnode","attrs","document","createElement","width","height","getContext","Image","src","app","forum","onload","drawImage","updatePreview","startingImage","onerror","err","console","error","oncreate","addEventListener","dom","event","mouseMove","querySelector","onremove","removeEventListener","view","rect","target","getBoundingClientRect","x","clientX","left","y","clientY","top","color","fillStyle","drawWithTool","onchange","canvas","toDataURL","context","fill","beginPath","shape","arc","Math","PI","stroke","toolPosition","clearRect","imageSourceData","getImageData","drawData","length","putImageData","strokeStyle","lineWidth","BrushState","translationPrefix","ParticipateModal","disabled","loading","className","title","translator","trans","checkIfDisabled","previouslyDisabled","redraw","colorChoice","colorOptions","colors","type","split","map","style","backgroundColor","onclick","colorTools","content","Button","component","icon","step","min","max","parseInt","store","createRecord","save","then","onsave","Modal","PostLikesModal","entry","Link","href","route","avatar","username","ContestPage","moreResults","entries","sort","refresh","loadResults","offset","preloadedEntries","preloadedApiDocument","Promise","resolve","find","page","results","parseResults","loadMore","push","apply","payload","links","next","likeButton","isLiked","session","some","relationships","like","splice","unshift","whoLiked","overLimit","names","a","slice","limit","count","preventDefault","modal","show","EntryLikesModal","users","punctuateSeries","participateButton","close","sortOptions","Dropdown","buttonClassName","label","keys","active","humanTime","confirm","extractText","LoadingIndicator","Page","initializers","add","models","routes","carvingContest","path","extend","IndexPage","items","LinkButton"],"mappings":"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","file":"forum.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 18);\n","module.exports = flarum.core.compat['forum/app'];","module.exports = flarum.core.compat['common/components/Button'];","module.exports = flarum.core.compat['common/Model'];","module.exports = flarum.core.compat['common/helpers/username'];","module.exports = flarum.core.compat['common/helpers/icon'];","module.exports = flarum.core.compat['common/components/Link'];","module.exports = flarum.core.compat['common/helpers/avatar'];","module.exports = flarum.core.compat['common/components/Modal'];","module.exports = flarum.core.compat['common/extend'];","module.exports = flarum.core.compat['forum/components/IndexPage'];","module.exports = flarum.core.compat['common/components/LinkButton'];","module.exports = flarum.core.compat['common/components/Page'];","module.exports = flarum.core.compat['common/components/LoadingIndicator'];","module.exports = flarum.core.compat['common/components/Dropdown'];","module.exports = flarum.core.compat['common/helpers/humanTime'];","module.exports = flarum.core.compat['common/helpers/punctuateSeries'];","module.exports = flarum.core.compat['common/utils/extractText'];","export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n setPrototypeOf(subClass, superClass);\n}","import Model from 'flarum/common/Model';\nimport User from 'flarum/common/models/User';\n\nexport default class Entry extends Model {\n name = Model.attribute('name');\n image = Model.attribute('image');\n createdAt = Model.attribute('createdAt', Model.transformDate);\n canLike = Model.attribute('canLike');\n\n user = Model.hasOne('user') as any as (() => User);\n likes = Model.hasMany('likes') as any as (() => User[] | false);\n\n apiEndpoint() {\n // @ts-ignore Flarum typings do not include .id\n return '/carving-contest/entries' + (this.exists ? '/' + this.data.id : '');\n }\n}\n","import {ClassComponent, Vnode, VnodeDOM} from 'mithril';\nimport app from 'flarum/forum/app';\nimport BrushState from '../states/BrushState';\n\ninterface PumpkinCanvasAttrs {\n mode: 'color' | 'carve'\n brush?: BrushState\n image?: string\n onchange?: (value: string) => void\n}\n\nconst IMAGE_WIDTH = 426;\nconst IMAGE_HEIGHT = 426;\n\nexport default class PumpkinCanvas implements ClassComponent {\n mode!: 'color' | 'carve'\n brush?: BrushState\n previewContext: CanvasRenderingContext2D | null = null\n imageSourceCanvas!: HTMLCanvasElement\n imageSourceContext!: CanvasRenderingContext2D\n drawCanvas!: HTMLCanvasElement\n drawContext!: CanvasRenderingContext2D\n onmouseup!: () => void\n drawEnabled: boolean = false\n\n oninit(vnode: Vnode) {\n this.mode = vnode.attrs.mode;\n this.brush = vnode.attrs.brush;\n\n this.imageSourceCanvas = document.createElement('canvas');\n this.imageSourceCanvas.width = IMAGE_WIDTH;\n this.imageSourceCanvas.height = IMAGE_HEIGHT;\n this.imageSourceContext = this.imageSourceCanvas.getContext('2d')!;\n const image = new Image();\n image.src = app.forum.attribute('baseUrl') + '/assets/extensions/clarkwinkelmann-carving-contest/pumpkin.jpg';\n image.onload = () => {\n this.imageSourceContext.drawImage(image, 0, 0);\n\n this.updatePreview();\n };\n\n this.drawCanvas = document.createElement('canvas');\n this.drawCanvas.width = IMAGE_WIDTH;\n this.drawCanvas.height = IMAGE_HEIGHT;\n this.drawContext = this.drawCanvas.getContext('2d')!;\n\n const startingImage = vnode.attrs.image;\n if (startingImage) {\n const image = new Image();\n image.src = startingImage;\n image.onload = () => {\n this.drawContext.drawImage(image, 0, 0);\n\n this.updatePreview();\n };\n image.onerror = err => {\n console.error('Error loading image', err);\n };\n }\n\n this.onmouseup = () => {\n this.drawEnabled = false;\n };\n }\n\n oncreate(vnode: VnodeDOM) {\n document.addEventListener('mouseup', this.onmouseup);\n\n vnode.dom.addEventListener('mousedown', event => {\n this.drawEnabled = true;\n\n this.mouseMove(vnode, event as MouseEvent);\n });\n vnode.dom.addEventListener('mousemove', this.mouseMove.bind(this, vnode) as any);\n vnode.dom.addEventListener('mouseleave', () => {\n // To remove the tool from preview\n this.updatePreview();\n });\n\n this.previewContext = vnode.dom.querySelector('canvas')!.getContext('2d');\n\n this.updatePreview();\n }\n\n onremove() {\n document.removeEventListener('mouseup', this.onmouseup);\n }\n\n view() {\n return m('.CarvingContestPumpkin', m('canvas', {\n width: IMAGE_WIDTH,\n height: IMAGE_HEIGHT,\n }));\n }\n\n mouseMove(vnode: VnodeDOM, event: MouseEvent) {\n const rect = (event.target as HTMLElement).getBoundingClientRect();\n const x = event.clientX - rect.left;\n const y = event.clientY - rect.top;\n\n if (this.drawEnabled && this.brush) {\n if (this.mode === 'color' && this.brush.color) {\n this.drawContext.fillStyle = this.brush.color;\n } else {\n this.drawContext.fillStyle = '#000';\n }\n this.drawWithTool(this.drawContext, x, y, true);\n\n if (vnode.attrs.onchange) {\n vnode.attrs.onchange(this.drawContext.canvas.toDataURL('image/png'));\n }\n }\n\n this.updatePreview({\n x,\n y,\n });\n }\n\n drawWithTool(context: CanvasRenderingContext2D, x: number, y: number, fill: boolean = false) {\n if (!this.brush) {\n return;\n }\n\n const width = this.brush.width;\n\n context.beginPath();\n\n switch (this.brush.shape) {\n case 'circle':\n context.arc(x, y, width / 2, 0, 2 * Math.PI);\n break;\n case 'square':\n context.rect(x - (width / 2), y - (width / 2), width, width);\n break;\n }\n\n if (fill) {\n context.fill();\n } else {\n context.stroke();\n }\n }\n\n updatePreview(toolPosition: { x: number, y: number } | null = null) {\n if (!this.previewContext) {\n return;\n }\n\n this.previewContext.clearRect(0, 0, IMAGE_WIDTH, IMAGE_HEIGHT);\n\n if (this.mode === 'color') {\n // In paint mode, we draw the two images on top of another\n this.previewContext.drawImage(this.imageSourceCanvas, 0, 0);\n this.previewContext.drawImage(this.drawCanvas, 0, 0);\n } else {\n // In carve mode, we subtract the drawing from the source\n const imageSourceData = this.imageSourceContext.getImageData(0, 0, IMAGE_WIDTH, IMAGE_HEIGHT);\n const drawData = this.drawContext.getImageData(0, 0, IMAGE_WIDTH, IMAGE_HEIGHT);\n\n for (let i = 0; i < imageSourceData.data.length; i += 4) {\n // If the pixel in that area has an alpha value greater than 0, we create a hole in the image data\n // Returning 0 for every index will give rgba(0,0,0,0)\n if (drawData.data[i + 3] > 0) {\n imageSourceData.data[i] = 0;\n imageSourceData.data[i + 1] = 0;\n imageSourceData.data[i + 2] = 0;\n imageSourceData.data[i + 3] = 0;\n }\n }\n\n this.previewContext.putImageData(imageSourceData, 0, 0);\n }\n\n if (toolPosition) {\n this.previewContext.strokeStyle = 'rgba(0,0,0,0.5)';\n this.previewContext.lineWidth = 3;\n this.drawWithTool(this.previewContext, toolPosition.x, toolPosition.y);\n }\n }\n}\n","export default class BrushState {\n color: string | null = null;\n shape: 'circle' | 'square' = 'circle';\n width: number = 30;\n}\n","import app from 'flarum/forum/app';\nimport Modal from 'flarum/common/components/Modal';\nimport Button from 'flarum/common/components/Button';\nimport PumpkinCanvas from './PumpkinCanvas';\nimport BrushState from '../states/BrushState';\n\ninterface ParticipateModalAttrs {\n onsave: () => void\n}\n\nconst translationPrefix = 'clarkwinkelmann-carving-contest.forum.modal.';\n\n// @ts-ignore Modal.view causing typescript errors\nexport default class ParticipateModal extends Modal {\n // We cannot type-hint through extend at this time so we code it here\n attrs!: ParticipateModalAttrs\n\n brush: BrushState = new BrushState()\n name: string = ''\n image: string = ''\n disabled: boolean = true\n loading: boolean = false\n\n className() {\n return 'Modal--large';\n }\n\n title() {\n return app.translator.trans(translationPrefix + 'title');\n }\n\n checkIfDisabled() {\n const previouslyDisabled = this.disabled;\n\n this.disabled = this.name === '' || this.image === '';\n\n // Handle disabled state redraw when the image changes (because we don't redraw every time it changes)\n if (previouslyDisabled !== this.disabled) {\n m.redraw();\n }\n }\n\n colorChoice() {\n const colors = app.forum.attribute('carvingContestColors');\n\n if (colors === 'all') {\n return m('input', {\n type: 'color',\n value: this.brush.color,\n onchange: (event: Event) => {\n this.brush.color = (event.target as HTMLInputElement).value;\n },\n });\n }\n\n let colorOptions: string[];\n\n if (colors === 'simple') {\n colorOptions = [\n '#f32501', // Red\n '#ff8d12', // Orange\n '#ffe884', // Yellow\n '#94ae3f', // Green\n '#084f93', // Blue\n '#000000', // Black\n ];\n } else {\n colorOptions = app.forum.attribute('carvingContestColors').split(',');\n }\n\n return m('div', colorOptions.map(color => m('.CarvingContest-ColorChoice', {\n style: {\n backgroundColor: color,\n },\n onclick: () => {\n this.brush.color = color;\n },\n className: this.brush.color === color ? 'selected' : '',\n })));\n }\n\n colorTools() {\n if (!app.forum.attribute('carvingContestColorMode')) {\n return null;\n }\n\n return m('.CarvingContestTools', [\n this.colorChoice(),\n ]);\n }\n\n content() {\n return m('.Modal-body', [\n m('.Form-group', [\n this.colorTools(),\n m('.CarvingContestTools', [\n Button.component({\n disabled: this.brush.shape === 'circle',\n icon: 'fas fa-circle',\n className: 'Button',\n onclick: () => {\n this.brush.shape = 'circle';\n },\n }, app.translator.trans(translationPrefix + 'tools.circle')),\n Button.component({\n disabled: this.brush.shape === 'square',\n icon: 'fas fa-square',\n className: 'Button',\n onclick: () => {\n this.brush.shape = 'square';\n },\n }, app.translator.trans(translationPrefix + 'tools.square')),\n m('input', {\n type: 'range',\n step: 2,\n min: 10,\n max: 50,\n value: this.brush.width,\n onchange: (event: Event) => {\n this.brush.width = parseInt((event.target as HTMLInputElement).value);\n },\n }),\n ]),\n m(PumpkinCanvas, {\n mode: app.forum.attribute('carvingContestColorMode') ? 'color' : 'carve',\n brush: this.brush,\n image: this.image,\n onchange: value => {\n this.image = value;\n\n this.checkIfDisabled();\n },\n }),\n ]),\n m('.Form-group', [\n m('label', app.translator.trans(translationPrefix + 'name')),\n m('input[type=text].FormControl', {\n value: this.name,\n onchange: (event: Event) => {\n this.name = (event.target as HTMLInputElement).value;\n\n this.checkIfDisabled();\n },\n }),\n ]),\n m('.Form-group', [\n Button.component({\n loading: this.loading,\n disabled: this.disabled,\n className: 'Button Button--primary',\n onclick: () => {\n app.store.createRecord('carving-contest-entries').save({\n name: this.name,\n image: this.image,\n }).then(() => {\n this.attrs.onsave();\n });\n },\n }, app.translator.trans(translationPrefix + 'submit')),\n ]),\n ]);\n }\n}\n","import app from 'flarum/forum/app';\nimport Modal from 'flarum/common/components/Modal';\nimport Link from 'flarum/common/components/Link';\nimport avatar from 'flarum/common/helpers/avatar';\nimport username from 'flarum/common/helpers/username';\nimport Entry from '../models/Entry';\n\ninterface ModalAttrs {\n entry: Entry\n}\n\n// @ts-ignore Modal.view causing typescript errors\nexport default class PostLikesModal extends Modal {\n // We cannot type-hint through extend at this time so we code it here\n attrs!: ModalAttrs\n\n className() {\n return 'EntryLikesModal Modal--small';\n }\n\n title() {\n return app.translator.trans('clarkwinkelmann-carving-contest.forum.likes_modal.title');\n }\n\n content() {\n return m('.Modal-body', m('ul.EntryLikesModal-list', (this.attrs.entry.likes() || []).map(user => m('li', m(Link, {\n href: app.route.user(user),\n }, [\n avatar(user),\n ' ',\n username(user),\n ])))));\n }\n}\n","import {Vnode} from 'mithril';\nimport app from 'flarum/forum/app';\nimport Page from 'flarum/common/components/Page';\nimport Button from 'flarum/common/components/Button';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport Dropdown from 'flarum/common/components/Dropdown';\nimport Link from 'flarum/common/components/Link';\nimport humanTime from 'flarum/common/helpers/humanTime';\nimport avatar from 'flarum/common/helpers/avatar';\nimport username from 'flarum/common/helpers/username';\nimport icon from 'flarum/common/helpers/icon';\nimport punctuateSeries from 'flarum/common/helpers/punctuateSeries';\nimport extractText from 'flarum/common/utils/extractText';\nimport ParticipateModal from './ParticipateModal';\nimport PumpkinCanvas from './PumpkinCanvas';\nimport EntryLikesModal from './EntryLikesModal';\nimport Entry from '../models/Entry';\n\ninterface SortOptions {\n '-likesCount': string\n 'likesCount': string\n '-createdAt': string\n 'createdAt': string\n}\n\nconst translationPrefix = 'clarkwinkelmann-carving-contest.forum.page.';\n\nexport default class ContestPage extends Page {\n loading: boolean = true\n moreResults: boolean = false\n entries: Entry[] | null = null\n sort: keyof SortOptions = '-createdAt'\n\n oninit(vnode: Vnode) {\n super.oninit(vnode);\n\n this.refresh();\n }\n\n loadResults(offset: number) {\n const preloadedEntries = app.preloadedApiDocument();\n\n if (preloadedEntries) {\n return Promise.resolve(preloadedEntries);\n } else {\n return app.store.find('carving-contest/entries', {\n page: {\n offset,\n },\n sort: this.sort,\n });\n }\n }\n\n refresh() {\n this.loading = true;\n this.entries = null;\n\n return this.loadResults(0).then(\n results => {\n this.entries = [];\n this.parseResults(results);\n },\n () => {\n this.loading = false;\n m.redraw();\n }\n );\n }\n\n loadMore() {\n this.loading = true;\n\n this.loadResults(this.entries!.length)\n .then(this.parseResults.bind(this));\n }\n\n parseResults(results: any) {\n [].push.apply(this.entries, results);\n\n this.loading = false;\n this.moreResults = !!results.payload.links.next;\n\n m.redraw();\n }\n\n likeButton(entry: Entry) {\n if (!entry.canLike()) {\n return null;\n }\n\n const likes = entry.likes();\n const isLiked = app.session.user && likes && likes.some(user => user === app.session.user);\n\n return Button.component({\n className: 'Button Button--block' + (isLiked ? ' Button--primary Button-already-liked' : ''),\n onclick: () => {\n entry.save({\n isLiked: !isLiked,\n });\n\n // We've saved the fact that we do or don't like the entry, but in order\n // to provide instantaneous feedback to the user, we'll need to add or\n // remove the like from the relationship data manually.\n const data = (entry.data as any).relationships.likes.data as { type: string, id: string }[];\n data.some((like, i) => {\n if (like.id === app.session.user.id()) {\n data.splice(i, 1);\n return true;\n }\n\n return false;\n });\n\n if (!isLiked) {\n data.unshift({type: 'users', id: app.session.user.id()});\n }\n }\n }, (isLiked ? [\n m('span.already-liked', [\n icon('far fa-thumbs-up'),\n ' ',\n app.translator.trans(translationPrefix + 'already-liked'),\n ]),\n m('span.remove-like', [\n icon('far fa-thumbs-down'),\n ' ',\n app.translator.trans(translationPrefix + 'unlike'),\n ])\n ] : [\n icon('far fa-thumbs-up'),\n ' ',\n app.translator.trans(translationPrefix + 'like'),\n ]) as any);\n }\n\n whoLiked(entry: Entry) {\n const likes = entry.likes();\n\n if (!likes || !likes.length) {\n return;\n }\n\n const limit = 4;\n const overLimit = likes.length > limit;\n\n // Construct a list of names of users who have liked this post. Make sure the\n // current user is first in the list, and cap a maximum of 4 items.\n const names = likes.sort(a => a === app.session.user ? -1 : 1)\n .slice(0, overLimit ? limit - 1 : limit)\n .map(user => m(Link, {\n href: app.route.user(user),\n }, user === app.session.user ? app.translator.trans('flarum-likes.forum.post.you_text') : username(user)));\n\n // If there are more users that we've run out of room to display, add a \"x\n // others\" name to the end of the list. Clicking on it will display a modal\n // with a full list of names.\n if (overLimit) {\n const count = likes.length - names.length;\n\n names.push(m('a', {\n href: '#',\n onclick: (event: Event) => {\n event.preventDefault();\n app.modal.show(EntryLikesModal, {\n entry,\n });\n },\n }, app.translator.trans('flarum-likes.forum.post.others_link', {count})));\n }\n\n return m('.Entry-likedBy', [\n icon('far fa-thumbs-up'),\n app.translator.trans('flarum-likes.forum.post.liked_by' + (likes[0] === app.session.user ? '_self' : '') + '_text', {\n count: names.length,\n users: punctuateSeries(names),\n }),\n ]);\n }\n\n participateButton() {\n if (!app.session.user) {\n return null;\n }\n\n if (app.session.user.attribute('carvingContestCanParticipate')) {\n return Button.component({\n className: 'Button Button--primary',\n onclick: () => {\n app.modal.show(ParticipateModal, {\n onsave: () => {\n app.modal.close();\n this.refresh();\n },\n });\n },\n }, app.translator.trans(translationPrefix + 'participate'));\n }\n\n if (app.session.user.attribute('carvingContestCouldParticipate')) {\n return Button.component({\n className: 'Button Button--primary',\n disabled: true,\n }, app.translator.trans(translationPrefix + 'already-participated'));\n }\n\n return null;\n }\n\n view() {\n if (this.entries === null) {\n return m('.container', m('p', app.translator.trans(translationPrefix + 'loading')));\n }\n\n const sortOptions: SortOptions = {\n '-likesCount': app.translator.trans(translationPrefix + 'sort.mostLikes'),\n 'likesCount': app.translator.trans(translationPrefix + 'sort.fewerLikes'),\n '-createdAt': app.translator.trans(translationPrefix + 'sort.mostRecent'),\n 'createdAt': app.translator.trans(translationPrefix + 'sort.leastRecent'),\n };\n\n return m('.container', [\n m('h2', app.translator.trans(translationPrefix + 'title')),\n this.participateButton(),\n ' ',\n Dropdown.component({\n buttonClassName: 'Button',\n label: sortOptions[this.sort],\n }, (Object.keys(sortOptions) as (keyof SortOptions)[]).map(value => {\n const label = sortOptions[value];\n const active = this.sort === value;\n\n return Button.component({\n icon: active ? 'fas fa-check' : true,\n onclick: () => {\n this.sort = value;\n this.refresh();\n },\n active,\n }, label as any);\n }) as any),\n ' ',\n Button.component({\n icon: 'fas fa-sync',\n className: 'Button',\n onclick: () => {\n this.refresh();\n },\n }, app.translator.trans(translationPrefix + 'refresh')),\n m('div', this.entries.map(entry => m('.CarvingContestEntry', {\n key: entry.id(), // Without this, canvas are re-used, causing incorrect images to be shown when one is deleted\n }, [\n m(PumpkinCanvas, {\n mode: app.forum.attribute('carvingContestColorMode') ? 'color' : 'carve',\n image: entry.image(),\n }),\n m('h3.CarvingContestEntry--name', entry.name()),\n m('p', [\n avatar(entry.user()),\n username(entry.user()),\n ' - ',\n humanTime(entry.createdAt()),\n ]),\n app.forum.attribute('carvingContestCanModerate') ? Button.component({\n className: 'Button Button--icon CarvingContestEntry--delete',\n icon: 'fas fa-trash',\n onclick: () => {\n if (!confirm(extractText(app.translator.trans(translationPrefix + 'delete-confirmation', {\n name: entry.name(),\n user: entry.user(),\n })))) {\n return;\n }\n\n // @ts-ignore Flarum typings expect delete() parameters\n entry.delete().then(() => {\n this.refresh();\n });\n },\n }) : null,\n m('.CarvingContestEntry--vote', [\n this.likeButton(entry),\n this.whoLiked(entry),\n ]),\n ]))),\n this.loading ? LoadingIndicator.component() : (this.moreResults ? Button.component({\n className: 'Button',\n onclick: this.loadMore.bind(this),\n }, app.translator.trans(translationPrefix + 'load-more')) : null),\n ]);\n }\n}\n","import {extend} from 'flarum/common/extend';\nimport app from 'flarum/forum/app';\nimport IndexPage from 'flarum/forum/components/IndexPage';\nimport LinkButton from 'flarum/common/components/LinkButton';\nimport ItemList from 'flarum/common/utils/ItemList';\nimport Entry from './models/Entry';\nimport ContestPage from './components/ContestPage';\n\napp.initializers.add('carving-contest', () => {\n app.store.models['carving-contest-entries'] = Entry;\n\n app.routes.carvingContest = {\n path: '/carving-contest',\n component: ContestPage,\n };\n\n extend(IndexPage.prototype, 'navItems', function (items: ItemList) {\n if (!app.forum.attribute('carvingContestCanView')) {\n return;\n }\n\n items.add('carving-contest', LinkButton.component({\n icon: 'fas fa-spider',\n href: app.route('carvingContest'),\n }, app.translator.trans('clarkwinkelmann-carving-contest.forum.nav.contest')));\n });\n});\n"],"sourceRoot":""} \ No newline at end of file diff --git a/js/forum.js b/js/forum.ts similarity index 100% rename from js/forum.js rename to js/forum.ts diff --git a/js/package.json b/js/package.json index d4c9e92..c32aa04 100644 --- a/js/package.json +++ b/js/package.json @@ -2,10 +2,10 @@ "name": "@clarkwinkelmann/carving-contest", "private": true, "dependencies": { - "flarum": "^0.1.0-beta.16", - "flarum-webpack-config": "^0.1.0-beta.10", - "webpack": "^4.0.0", - "webpack-cli": "^3.0.7" + "flarum-tsconfig": "^1.0", + "flarum-webpack-config": "^1.0", + "webpack": "^4.0", + "webpack-cli": "^3.0" }, "scripts": { "dev": "webpack --mode development --watch", diff --git a/js/shims.d.ts b/js/shims.d.ts new file mode 100644 index 0000000..d4fa838 --- /dev/null +++ b/js/shims.d.ts @@ -0,0 +1,15 @@ +import Mithril from 'mithril'; + +declare global { + const m: Mithril.Static; +} + +import User from 'flarum/common/models/User'; + +declare module 'flarum/forum/ForumApplication' { + export default interface ForumApplication { + route: { + user(user: User): string, + } + } +} diff --git a/js/src/admin/index.js b/js/src/admin/index.ts similarity index 94% rename from js/src/admin/index.js rename to js/src/admin/index.ts index a1daeb7..b40ce5a 100644 --- a/js/src/admin/index.js +++ b/js/src/admin/index.ts @@ -1,17 +1,16 @@ -import app from 'flarum/app'; - -/* global m */ +import app from 'flarum/admin/app'; +import ExtensionPage from 'flarum/admin/components/ExtensionPage'; app.initializers.add('carving-contest', () => { app.extensionData.for('clarkwinkelmann-carving-contest') - .registerSetting(function () { + .registerSetting(function (this: ExtensionPage) { return m('.Form-group', [ m('label', app.translator.trans('clarkwinkelmann-carving-contest.admin.settings.maxEntriesPerUser')), m('input.FormControl', { type: 'number', min: 0, step: 1, - bidi: this.setting('carving-contest.maxEntriesPerUser', 0), + bidi: this.setting('carving-contest.maxEntriesPerUser', '0'), }), ]); }) @@ -20,7 +19,7 @@ app.initializers.add('carving-contest', () => { setting: 'carving-contest.colorMode', label: app.translator.trans('clarkwinkelmann-carving-contest.admin.settings.colorMode'), }) - .registerSetting(function () { + .registerSetting(function (this: ExtensionPage) { const setting = this.setting('carving-contest.colors', 'simple'); const disabled = !this.setting('carving-contest.colorMode')(); diff --git a/js/src/forum/components/ContestPage.js b/js/src/forum/components/ContestPage.ts similarity index 86% rename from js/src/forum/components/ContestPage.js rename to js/src/forum/components/ContestPage.ts index b6f3bb2..926f0f1 100644 --- a/js/src/forum/components/ContestPage.js +++ b/js/src/forum/components/ContestPage.ts @@ -1,4 +1,5 @@ -import app from 'flarum/app'; +import {Vnode} from 'mithril'; +import app from 'flarum/forum/app'; import Page from 'flarum/common/components/Page'; import Button from 'flarum/common/components/Button'; import LoadingIndicator from 'flarum/common/components/LoadingIndicator'; @@ -13,24 +14,30 @@ import extractText from 'flarum/common/utils/extractText'; import ParticipateModal from './ParticipateModal'; import PumpkinCanvas from './PumpkinCanvas'; import EntryLikesModal from './EntryLikesModal'; +import Entry from '../models/Entry'; -/* global m */ +interface SortOptions { + '-likesCount': string + 'likesCount': string + '-createdAt': string + 'createdAt': string +} const translationPrefix = 'clarkwinkelmann-carving-contest.forum.page.'; export default class ContestPage extends Page { - oninit(vnode) { - super.oninit(vnode); + loading: boolean = true + moreResults: boolean = false + entries: Entry[] | null = null + sort: keyof SortOptions = '-createdAt' - this.loading = true; - this.moreResults = false; - this.entries = []; - this.sort = '-createdAt'; + oninit(vnode: Vnode) { + super.oninit(vnode); this.refresh(); } - loadResults(offset) { + loadResults(offset: number) { const preloadedEntries = app.preloadedApiDocument(); if (preloadedEntries) { @@ -49,7 +56,7 @@ export default class ContestPage extends Page { this.loading = true; this.entries = null; - return this.loadResults().then( + return this.loadResults(0).then( results => { this.entries = []; this.parseResults(results); @@ -64,11 +71,11 @@ export default class ContestPage extends Page { loadMore() { this.loading = true; - this.loadResults(this.entries.length) + this.loadResults(this.entries!.length) .then(this.parseResults.bind(this)); } - parseResults(results) { + parseResults(results: any) { [].push.apply(this.entries, results); this.loading = false; @@ -77,7 +84,7 @@ export default class ContestPage extends Page { m.redraw(); } - likeButton(entry) { + likeButton(entry: Entry) { if (!entry.canLike()) { return null; } @@ -95,19 +102,21 @@ export default class ContestPage extends Page { // We've saved the fact that we do or don't like the entry, but in order // to provide instantaneous feedback to the user, we'll need to add or // remove the like from the relationship data manually. - const data = entry.data.relationships.likes.data; + const data = (entry.data as any).relationships.likes.data as { type: string, id: string }[]; data.some((like, i) => { if (like.id === app.session.user.id()) { data.splice(i, 1); return true; } + + return false; }); if (!isLiked) { data.unshift({type: 'users', id: app.session.user.id()}); } } - }, isLiked ? [ + }, (isLiked ? [ m('span.already-liked', [ icon('far fa-thumbs-up'), ' ', @@ -122,10 +131,10 @@ export default class ContestPage extends Page { icon('far fa-thumbs-up'), ' ', app.translator.trans(translationPrefix + 'like'), - ]); + ]) as any); } - whoLiked(entry) { + whoLiked(entry: Entry) { const likes = entry.likes(); if (!likes || !likes.length) { @@ -151,20 +160,20 @@ export default class ContestPage extends Page { names.push(m('a', { href: '#', - onclick: e => { - e.preventDefault(); + onclick: (event: Event) => { + event.preventDefault(); app.modal.show(EntryLikesModal, { entry, }); }, - }, app.translator.transChoice('flarum-likes.forum.post.others_link', count, {count}))); + }, app.translator.trans('flarum-likes.forum.post.others_link', {count}))); } return m('.Entry-likedBy', [ icon('far fa-thumbs-up'), - app.translator.transChoice('flarum-likes.forum.post.liked_by' + (likes[0] === app.session.user ? '_self' : '') + '_text', names.length, { + app.translator.trans('flarum-likes.forum.post.liked_by' + (likes[0] === app.session.user ? '_self' : '') + '_text', { count: names.length, - users: punctuateSeries(names) + users: punctuateSeries(names), }), ]); } @@ -203,7 +212,7 @@ export default class ContestPage extends Page { return m('.container', m('p', app.translator.trans(translationPrefix + 'loading'))); } - const sortOptions = { + const sortOptions: SortOptions = { '-likesCount': app.translator.trans(translationPrefix + 'sort.mostLikes'), 'likesCount': app.translator.trans(translationPrefix + 'sort.fewerLikes'), '-createdAt': app.translator.trans(translationPrefix + 'sort.mostRecent'), @@ -217,7 +226,7 @@ export default class ContestPage extends Page { Dropdown.component({ buttonClassName: 'Button', label: sortOptions[this.sort], - }, Object.keys(sortOptions).map(value => { + }, (Object.keys(sortOptions) as (keyof SortOptions)[]).map(value => { const label = sortOptions[value]; const active = this.sort === value; @@ -228,8 +237,8 @@ export default class ContestPage extends Page { this.refresh(); }, active, - }, label); - })), + }, label as any); + }) as any), ' ', Button.component({ icon: 'fas fa-sync', @@ -263,6 +272,7 @@ export default class ContestPage extends Page { return; } + // @ts-ignore Flarum typings expect delete() parameters entry.delete().then(() => { this.refresh(); }); diff --git a/js/src/forum/components/EntryLikesModal.js b/js/src/forum/components/EntryLikesModal.ts similarity index 61% rename from js/src/forum/components/EntryLikesModal.js rename to js/src/forum/components/EntryLikesModal.ts index 6306095..20370c1 100644 --- a/js/src/forum/components/EntryLikesModal.js +++ b/js/src/forum/components/EntryLikesModal.ts @@ -1,12 +1,19 @@ -import app from 'flarum/app'; +import app from 'flarum/forum/app'; import Modal from 'flarum/common/components/Modal'; import Link from 'flarum/common/components/Link'; import avatar from 'flarum/common/helpers/avatar'; import username from 'flarum/common/helpers/username'; +import Entry from '../models/Entry'; -/* global m */ +interface ModalAttrs { + entry: Entry +} +// @ts-ignore Modal.view causing typescript errors export default class PostLikesModal extends Modal { + // We cannot type-hint through extend at this time so we code it here + attrs!: ModalAttrs + className() { return 'EntryLikesModal Modal--small'; } @@ -16,7 +23,7 @@ export default class PostLikesModal extends Modal { } content() { - return m('.Modal-body', m('ul.EntryLikesModal-list', this.attrs.entry.likes().map(user => m('li', m(Link, { + return m('.Modal-body', m('ul.EntryLikesModal-list', (this.attrs.entry.likes() || []).map(user => m('li', m(Link, { href: app.route.user(user), }, [ avatar(user), diff --git a/js/src/forum/components/ParticipateModal.js b/js/src/forum/components/ParticipateModal.ts similarity index 84% rename from js/src/forum/components/ParticipateModal.js rename to js/src/forum/components/ParticipateModal.ts index cc5c2f3..c314c94 100644 --- a/js/src/forum/components/ParticipateModal.js +++ b/js/src/forum/components/ParticipateModal.ts @@ -1,19 +1,25 @@ -import app from 'flarum/app'; +import app from 'flarum/forum/app'; import Modal from 'flarum/common/components/Modal'; import Button from 'flarum/common/components/Button'; import PumpkinCanvas from './PumpkinCanvas'; import BrushState from '../states/BrushState'; -const translationPrefix = 'clarkwinkelmann-carving-contest.forum.modal.'; +interface ParticipateModalAttrs { + onsave: () => void +} -/* global m */ +const translationPrefix = 'clarkwinkelmann-carving-contest.forum.modal.'; +// @ts-ignore Modal.view causing typescript errors export default class ParticipateModal extends Modal { - brush = new BrushState(); - name = ''; - image = ''; - disabled = true; - loading = false; + // We cannot type-hint through extend at this time so we code it here + attrs!: ParticipateModalAttrs + + brush: BrushState = new BrushState() + name: string = '' + image: string = '' + disabled: boolean = true + loading: boolean = false className() { return 'Modal--large'; @@ -41,13 +47,13 @@ export default class ParticipateModal extends Modal { return m('input', { type: 'color', value: this.brush.color, - onchange: event => { - this.brush.color = event.target.value; + onchange: (event: Event) => { + this.brush.color = (event.target as HTMLInputElement).value; }, }); } - let colorOptions; + let colorOptions: string[]; if (colors === 'simple') { colorOptions = [ @@ -110,8 +116,8 @@ export default class ParticipateModal extends Modal { min: 10, max: 50, value: this.brush.width, - onchange: event => { - this.brush.width = parseInt(event.target.value); + onchange: (event: Event) => { + this.brush.width = parseInt((event.target as HTMLInputElement).value); }, }), ]), @@ -130,8 +136,8 @@ export default class ParticipateModal extends Modal { m('label', app.translator.trans(translationPrefix + 'name')), m('input[type=text].FormControl', { value: this.name, - onchange: event => { - this.name = event.target.value; + onchange: (event: Event) => { + this.name = (event.target as HTMLInputElement).value; this.checkIfDisabled(); }, diff --git a/js/src/forum/components/PumpkinCanvas.js b/js/src/forum/components/PumpkinCanvas.ts similarity index 73% rename from js/src/forum/components/PumpkinCanvas.js rename to js/src/forum/components/PumpkinCanvas.ts index 0d222b9..3d9aa52 100644 --- a/js/src/forum/components/PumpkinCanvas.js +++ b/js/src/forum/components/PumpkinCanvas.ts @@ -1,21 +1,36 @@ -import app from 'flarum/app'; - -/* global m */ +import {ClassComponent, Vnode, VnodeDOM} from 'mithril'; +import app from 'flarum/forum/app'; +import BrushState from '../states/BrushState'; + +interface PumpkinCanvasAttrs { + mode: 'color' | 'carve' + brush?: BrushState + image?: string + onchange?: (value: string) => void +} const IMAGE_WIDTH = 426; const IMAGE_HEIGHT = 426; -export default class PumpkinCanvas { - oninit(vnode) { +export default class PumpkinCanvas implements ClassComponent { + mode!: 'color' | 'carve' + brush?: BrushState + previewContext: CanvasRenderingContext2D | null = null + imageSourceCanvas!: HTMLCanvasElement + imageSourceContext!: CanvasRenderingContext2D + drawCanvas!: HTMLCanvasElement + drawContext!: CanvasRenderingContext2D + onmouseup!: () => void + drawEnabled: boolean = false + + oninit(vnode: Vnode) { this.mode = vnode.attrs.mode; this.brush = vnode.attrs.brush; - this.previewContext = null; - this.imageSourceCanvas = document.createElement('canvas'); this.imageSourceCanvas.width = IMAGE_WIDTH; this.imageSourceCanvas.height = IMAGE_HEIGHT; - this.imageSourceContext = this.imageSourceCanvas.getContext('2d'); + this.imageSourceContext = this.imageSourceCanvas.getContext('2d')!; const image = new Image(); image.src = app.forum.attribute('baseUrl') + '/assets/extensions/clarkwinkelmann-carving-contest/pumpkin.jpg'; image.onload = () => { @@ -27,7 +42,7 @@ export default class PumpkinCanvas { this.drawCanvas = document.createElement('canvas'); this.drawCanvas.width = IMAGE_WIDTH; this.drawCanvas.height = IMAGE_HEIGHT; - this.drawContext = this.drawCanvas.getContext('2d'); + this.drawContext = this.drawCanvas.getContext('2d')!; const startingImage = vnode.attrs.image; if (startingImage) { @@ -48,21 +63,21 @@ export default class PumpkinCanvas { }; } - oncreate(vnode) { + oncreate(vnode: VnodeDOM) { document.addEventListener('mouseup', this.onmouseup); vnode.dom.addEventListener('mousedown', event => { this.drawEnabled = true; - this.mouseMove(vnode, event); + this.mouseMove(vnode, event as MouseEvent); }); - vnode.dom.addEventListener('mousemove', this.mouseMove.bind(this, vnode)); + vnode.dom.addEventListener('mousemove', this.mouseMove.bind(this, vnode) as any); vnode.dom.addEventListener('mouseleave', () => { // To remove the tool from preview this.updatePreview(); }); - this.previewContext = vnode.dom.querySelector('canvas').getContext('2d'); + this.previewContext = vnode.dom.querySelector('canvas')!.getContext('2d'); this.updatePreview(); } @@ -78,20 +93,22 @@ export default class PumpkinCanvas { })); } - mouseMove(vnode, event) { - const rect = event.target.getBoundingClientRect(); + mouseMove(vnode: VnodeDOM, event: MouseEvent) { + const rect = (event.target as HTMLElement).getBoundingClientRect(); const x = event.clientX - rect.left; const y = event.clientY - rect.top; if (this.drawEnabled && this.brush) { - if (this.mode === 'color') { + if (this.mode === 'color' && this.brush.color) { this.drawContext.fillStyle = this.brush.color; } else { this.drawContext.fillStyle = '#000'; } this.drawWithTool(this.drawContext, x, y, true); - vnode.attrs.onchange(this.drawContext.canvas.toDataURL('image/png')); + if (vnode.attrs.onchange) { + vnode.attrs.onchange(this.drawContext.canvas.toDataURL('image/png')); + } } this.updatePreview({ @@ -100,7 +117,7 @@ export default class PumpkinCanvas { }); } - drawWithTool(context, x, y, fill = false) { + drawWithTool(context: CanvasRenderingContext2D, x: number, y: number, fill: boolean = false) { if (!this.brush) { return; } @@ -125,7 +142,7 @@ export default class PumpkinCanvas { } } - updatePreview(toolPosition = null) { + updatePreview(toolPosition: { x: number, y: number } | null = null) { if (!this.previewContext) { return; } diff --git a/js/src/forum/index.js b/js/src/forum/index.ts similarity index 83% rename from js/src/forum/index.js rename to js/src/forum/index.ts index ba07882..cc22664 100644 --- a/js/src/forum/index.js +++ b/js/src/forum/index.ts @@ -1,12 +1,11 @@ import {extend} from 'flarum/common/extend'; -import app from 'flarum/app'; +import app from 'flarum/forum/app'; import IndexPage from 'flarum/forum/components/IndexPage'; import LinkButton from 'flarum/common/components/LinkButton'; +import ItemList from 'flarum/common/utils/ItemList'; import Entry from './models/Entry'; import ContestPage from './components/ContestPage'; -/* global m */ - app.initializers.add('carving-contest', () => { app.store.models['carving-contest-entries'] = Entry; @@ -15,7 +14,7 @@ app.initializers.add('carving-contest', () => { component: ContestPage, }; - extend(IndexPage.prototype, 'navItems', function (items) { + extend(IndexPage.prototype, 'navItems', function (items: ItemList) { if (!app.forum.attribute('carvingContestCanView')) { return; } diff --git a/js/src/forum/models/Entry.js b/js/src/forum/models/Entry.ts similarity index 62% rename from js/src/forum/models/Entry.js rename to js/src/forum/models/Entry.ts index 724d6df..e1633fd 100644 --- a/js/src/forum/models/Entry.js +++ b/js/src/forum/models/Entry.ts @@ -1,4 +1,5 @@ import Model from 'flarum/common/Model'; +import User from 'flarum/common/models/User'; export default class Entry extends Model { name = Model.attribute('name'); @@ -6,10 +7,11 @@ export default class Entry extends Model { createdAt = Model.attribute('createdAt', Model.transformDate); canLike = Model.attribute('canLike'); - user = Model.hasOne('user'); - likes = Model.hasMany('likes'); + user = Model.hasOne('user') as any as (() => User); + likes = Model.hasMany('likes') as any as (() => User[] | false); apiEndpoint() { + // @ts-ignore Flarum typings do not include .id return '/carving-contest/entries' + (this.exists ? '/' + this.data.id : ''); } } diff --git a/js/src/forum/states/BrushState.js b/js/src/forum/states/BrushState.js deleted file mode 100644 index 71b87c0..0000000 --- a/js/src/forum/states/BrushState.js +++ /dev/null @@ -1,5 +0,0 @@ -export default class BrushState { - color = null; - shape = 'circle'; - width = 30; -} diff --git a/js/src/forum/states/BrushState.ts b/js/src/forum/states/BrushState.ts new file mode 100644 index 0000000..43ba31b --- /dev/null +++ b/js/src/forum/states/BrushState.ts @@ -0,0 +1,5 @@ +export default class BrushState { + color: string | null = null; + shape: 'circle' | 'square' = 'circle'; + width: number = 30; +} diff --git a/js/tsconfig.json b/js/tsconfig.json new file mode 100644 index 0000000..d5687e3 --- /dev/null +++ b/js/tsconfig.json @@ -0,0 +1,18 @@ +{ + "extends": "flarum-tsconfig", + "include": [ + "src/**/*" + ], + "files": [ + "shims.d.ts" + ], + "compilerOptions": { + "declarationDir": "./dist-typings", + "baseUrl": ".", + "paths": { + "flarum/*": [ + "../vendor/flarum/core/js/dist-typings/*" + ] + } + } +} diff --git a/js/yarn.lock b/js/yarn.lock index 4449c30..db0b9f4 100644 --- a/js/yarn.lock +++ b/js/yarn.lock @@ -2,32 +2,32 @@ # yarn lockfile v1 -"@babel/code-frame@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.13.tgz#dcfc826beef65e75c50e21d3837d7d95798dd658" - integrity sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g== - dependencies: - "@babel/highlight" "^7.12.13" - -"@babel/compat-data@^7.13.0", "@babel/compat-data@^7.13.12", "@babel/compat-data@^7.13.8": - version "7.13.12" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.13.12.tgz#a8a5ccac19c200f9dd49624cac6e19d7be1236a1" - integrity sha512-3eJJ841uKxeV8dcN/2yGEUy+RfgQspPEgQat85umsE1rotuquQ2AbIub4S6j7c50a2d+4myc+zSlnXeIHrOnhQ== - -"@babel/core@^7.0.0": - version "7.13.14" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.13.14.tgz#8e46ebbaca460a63497c797e574038ab04ae6d06" - integrity sha512-wZso/vyF4ki0l0znlgM4inxbdrUvCb+cVz8grxDq+6C9k6qbqoIJteQOKicaKjCipU3ISV+XedCqpL2RJJVehA== - dependencies: - "@babel/code-frame" "^7.12.13" - "@babel/generator" "^7.13.9" - "@babel/helper-compilation-targets" "^7.13.13" - "@babel/helper-module-transforms" "^7.13.14" - "@babel/helpers" "^7.13.10" - "@babel/parser" "^7.13.13" - "@babel/template" "^7.12.13" - "@babel/traverse" "^7.13.13" - "@babel/types" "^7.13.14" +"@babel/code-frame@^7.14.5", "@babel/code-frame@^7.15.8": + version "7.15.8" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.15.8.tgz#45990c47adadb00c03677baa89221f7cc23d2503" + integrity sha512-2IAnmn8zbvC/jKYhq5Ki9I+DwjlrtMPUCH/CpHvqI4dNnlwHwsxoIhlc8WcYY5LSYknXQtAlFYuHfqAFCvQ4Wg== + dependencies: + "@babel/highlight" "^7.14.5" + +"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.15.0": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.15.0.tgz#2dbaf8b85334796cafbb0f5793a90a2fc010b176" + integrity sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA== + +"@babel/core@^7.14.3": + version "7.15.8" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.15.8.tgz#195b9f2bffe995d2c6c159e72fe525b4114e8c10" + integrity sha512-3UG9dsxvYBMYwRv+gS41WKHno4K60/9GPy1CJaH6xy3Elq8CTtvtjT5R5jmNhXfCYLX2mTw+7/aq5ak/gOE0og== + dependencies: + "@babel/code-frame" "^7.15.8" + "@babel/generator" "^7.15.8" + "@babel/helper-compilation-targets" "^7.15.4" + "@babel/helper-module-transforms" "^7.15.8" + "@babel/helpers" "^7.15.4" + "@babel/parser" "^7.15.8" + "@babel/template" "^7.15.4" + "@babel/traverse" "^7.15.4" + "@babel/types" "^7.15.6" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" @@ -35,63 +35,64 @@ semver "^6.3.0" source-map "^0.5.0" -"@babel/generator@^7.13.9": - version "7.13.9" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.13.9.tgz#3a7aa96f9efb8e2be42d38d80e2ceb4c64d8de39" - integrity sha512-mHOOmY0Axl/JCTkxTU6Lf5sWOg/v8nUa+Xkt4zMTftX0wqmb6Sh7J8gvcehBw7q0AhrhAR+FDacKjCZ2X8K+Sw== +"@babel/generator@^7.15.4", "@babel/generator@^7.15.8": + version "7.15.8" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.15.8.tgz#fa56be6b596952ceb231048cf84ee499a19c0cd1" + integrity sha512-ECmAKstXbp1cvpTTZciZCgfOt6iN64lR0d+euv3UZisU5awfRawOvg07Utn/qBGuH4bRIEZKrA/4LzZyXhZr8g== dependencies: - "@babel/types" "^7.13.0" + "@babel/types" "^7.15.6" jsesc "^2.5.1" source-map "^0.5.0" -"@babel/helper-annotate-as-pure@^7.10.4", "@babel/helper-annotate-as-pure@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz#0f58e86dfc4bb3b1fcd7db806570e177d439b6ab" - integrity sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw== +"@babel/helper-annotate-as-pure@^7.14.5", "@babel/helper-annotate-as-pure@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.15.4.tgz#3d0e43b00c5e49fdb6c57e421601a7a658d5f835" + integrity sha512-QwrtdNvUNsPCj2lfNQacsGSQvGX8ee1ttrBrcozUP2Sv/jylewBP/8QFe6ZkBsC8T/GYWonNAWJV4aRR9AL2DA== dependencies: - "@babel/types" "^7.12.13" + "@babel/types" "^7.15.4" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.12.13.tgz#6bc20361c88b0a74d05137a65cac8d3cbf6f61fc" - integrity sha512-CZOv9tGphhDRlVjVkAgm8Nhklm9RzSmWpX2my+t7Ua/KT616pEzXsQCjinzvkRvHWJ9itO4f296efroX23XCMA== +"@babel/helper-builder-binary-assignment-operator-visitor@^7.14.5": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.15.4.tgz#21ad815f609b84ee0e3058676c33cf6d1670525f" + integrity sha512-P8o7JP2Mzi0SdC6eWr1zF+AEYvrsZa7GSY1lTayjF5XJhVH0kjLYUZPvTMflP7tBgZoe9gIhTa60QwFpqh/E0Q== dependencies: - "@babel/helper-explode-assignable-expression" "^7.12.13" - "@babel/types" "^7.12.13" + "@babel/helper-explode-assignable-expression" "^7.15.4" + "@babel/types" "^7.15.4" -"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.13.10", "@babel/helper-compilation-targets@^7.13.13", "@babel/helper-compilation-targets@^7.13.8": - version "7.13.13" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.13.tgz#2b2972a0926474853f41e4adbc69338f520600e5" - integrity sha512-q1kcdHNZehBwD9jYPh3WyXcsFERi39X4I59I3NadciWtNDyZ6x+GboOxncFK0kXlKIv6BJm5acncehXWUjWQMQ== +"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.4.tgz#cf6d94f30fbefc139123e27dd6b02f65aeedb7b9" + integrity sha512-rMWPCirulnPSe4d+gwdWXLfAXTTBj8M3guAf5xFQJ0nvFY7tfNAFnWdqaHegHlgDZOCT4qvhF3BYlSJag8yhqQ== dependencies: - "@babel/compat-data" "^7.13.12" - "@babel/helper-validator-option" "^7.12.17" - browserslist "^4.14.5" + "@babel/compat-data" "^7.15.0" + "@babel/helper-validator-option" "^7.14.5" + browserslist "^4.16.6" semver "^6.3.0" -"@babel/helper-create-class-features-plugin@^7.13.0": - version "7.13.11" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.13.11.tgz#30d30a005bca2c953f5653fc25091a492177f4f6" - integrity sha512-ays0I7XYq9xbjCSvT+EvysLgfc3tOkwCULHjrnscGT3A9qD4sk3wXnJ3of0MAWsWGjdinFvajHU2smYuqXKMrw== +"@babel/helper-create-class-features-plugin@^7.14.5", "@babel/helper-create-class-features-plugin@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.15.4.tgz#7f977c17bd12a5fba363cb19bea090394bf37d2e" + integrity sha512-7ZmzFi+DwJx6A7mHRwbuucEYpyBwmh2Ca0RvI6z2+WLZYCqV0JOaLb+u0zbtmDicebgKBZgqbYfLaKNqSgv5Pw== dependencies: - "@babel/helper-function-name" "^7.12.13" - "@babel/helper-member-expression-to-functions" "^7.13.0" - "@babel/helper-optimise-call-expression" "^7.12.13" - "@babel/helper-replace-supers" "^7.13.0" - "@babel/helper-split-export-declaration" "^7.12.13" + "@babel/helper-annotate-as-pure" "^7.15.4" + "@babel/helper-function-name" "^7.15.4" + "@babel/helper-member-expression-to-functions" "^7.15.4" + "@babel/helper-optimise-call-expression" "^7.15.4" + "@babel/helper-replace-supers" "^7.15.4" + "@babel/helper-split-export-declaration" "^7.15.4" -"@babel/helper-create-regexp-features-plugin@^7.12.13": - version "7.12.17" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.17.tgz#a2ac87e9e319269ac655b8d4415e94d38d663cb7" - integrity sha512-p2VGmBu9oefLZ2nQpgnEnG0ZlRPvL8gAGvPUMQwUdaE8k49rOMuZpOwdQoy5qJf6K8jL3bcAMhVUlHAjIgJHUg== +"@babel/helper-create-regexp-features-plugin@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz#c7d5ac5e9cf621c26057722fb7a8a4c5889358c4" + integrity sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A== dependencies: - "@babel/helper-annotate-as-pure" "^7.12.13" + "@babel/helper-annotate-as-pure" "^7.14.5" regexpu-core "^4.7.1" -"@babel/helper-define-polyfill-provider@^0.1.5": - version "0.1.5" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.1.5.tgz#3c2f91b7971b9fc11fe779c945c014065dea340e" - integrity sha512-nXuzCSwlJ/WKr8qxzW816gwyT6VZgiJG17zR40fou70yfAcqjoNyTLl/DQ+FExw5Hx5KNqshmN8Ldl/r2N7cTg== +"@babel/helper-define-polyfill-provider@^0.2.2": + version "0.2.3" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.3.tgz#0525edec5094653a282688d34d846e4c75e9c0b6" + integrity sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew== dependencies: "@babel/helper-compilation-targets" "^7.13.0" "@babel/helper-module-imports" "^7.12.13" @@ -102,277 +103,295 @@ resolve "^1.14.2" semver "^6.1.2" -"@babel/helper-explode-assignable-expression@^7.12.13": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.13.0.tgz#17b5c59ff473d9f956f40ef570cf3a76ca12657f" - integrity sha512-qS0peLTDP8kOisG1blKbaoBg/o9OSa1qoumMjTK5pM+KDTtpxpsiubnCGP34vK8BXGcb2M9eigwgvoJryrzwWA== - dependencies: - "@babel/types" "^7.13.0" - -"@babel/helper-function-name@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz#93ad656db3c3c2232559fd7b2c3dbdcbe0eb377a" - integrity sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA== - dependencies: - "@babel/helper-get-function-arity" "^7.12.13" - "@babel/template" "^7.12.13" - "@babel/types" "^7.12.13" - -"@babel/helper-get-function-arity@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz#bc63451d403a3b3082b97e1d8b3fe5bd4091e583" - integrity sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg== - dependencies: - "@babel/types" "^7.12.13" - -"@babel/helper-hoist-variables@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.0.tgz#5d5882e855b5c5eda91e0cadc26c6e7a2c8593d8" - integrity sha512-0kBzvXiIKfsCA0y6cFEIJf4OdzfpRuNk4+YTeHZpGGc666SATFKTz6sRncwFnQk7/ugJ4dSrCj6iJuvW4Qwr2g== +"@babel/helper-explode-assignable-expression@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.15.4.tgz#f9aec9d219f271eaf92b9f561598ca6b2682600c" + integrity sha512-J14f/vq8+hdC2KoWLIQSsGrC9EFBKE4NFts8pfMpymfApds+fPqR30AOUWc4tyr56h9l/GA1Sxv2q3dLZWbQ/g== dependencies: - "@babel/traverse" "^7.13.0" - "@babel/types" "^7.13.0" - -"@babel/helper-member-expression-to-functions@^7.13.0", "@babel/helper-member-expression-to-functions@^7.13.12": - version "7.13.12" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz#dfe368f26d426a07299d8d6513821768216e6d72" - integrity sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw== - dependencies: - "@babel/types" "^7.13.12" - -"@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.13.12": - version "7.13.12" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz#c6a369a6f3621cb25da014078684da9196b61977" - integrity sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA== + "@babel/types" "^7.15.4" + +"@babel/helper-function-name@^7.14.5", "@babel/helper-function-name@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.15.4.tgz#845744dafc4381a4a5fb6afa6c3d36f98a787ebc" + integrity sha512-Z91cOMM4DseLIGOnog+Z8OI6YseR9bua+HpvLAQ2XayUGU+neTtX+97caALaLdyu53I/fjhbeCnWnRH1O3jFOw== dependencies: - "@babel/types" "^7.13.12" + "@babel/helper-get-function-arity" "^7.15.4" + "@babel/template" "^7.15.4" + "@babel/types" "^7.15.4" -"@babel/helper-module-transforms@^7.13.0", "@babel/helper-module-transforms@^7.13.14": - version "7.13.14" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.13.14.tgz#e600652ba48ccb1641775413cb32cfa4e8b495ef" - integrity sha512-QuU/OJ0iAOSIatyVZmfqB0lbkVP0kDRiKj34xy+QNsnVZi/PA6BoSoreeqnxxa9EHFAIL0R9XOaAR/G9WlIy5g== +"@babel/helper-get-function-arity@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.15.4.tgz#098818934a137fce78b536a3e015864be1e2879b" + integrity sha512-1/AlxSF92CmGZzHnC515hm4SirTxtpDnLEJ0UyEMgTMZN+6bxXKg04dKhiRx5Enel+SUA1G1t5Ed/yQia0efrA== dependencies: - "@babel/helper-module-imports" "^7.13.12" - "@babel/helper-replace-supers" "^7.13.12" - "@babel/helper-simple-access" "^7.13.12" - "@babel/helper-split-export-declaration" "^7.12.13" - "@babel/helper-validator-identifier" "^7.12.11" - "@babel/template" "^7.12.13" - "@babel/traverse" "^7.13.13" - "@babel/types" "^7.13.14" + "@babel/types" "^7.15.4" + +"@babel/helper-hoist-variables@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.15.4.tgz#09993a3259c0e918f99d104261dfdfc033f178df" + integrity sha512-VTy085egb3jUGVK9ycIxQiPbquesq0HUQ+tPO0uv5mPEBZipk+5FkRKiWq5apuyTE9FUrjENB0rCf8y+n+UuhA== + dependencies: + "@babel/types" "^7.15.4" -"@babel/helper-optimise-call-expression@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz#5c02d171b4c8615b1e7163f888c1c81c30a2aaea" - integrity sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA== - dependencies: - "@babel/types" "^7.12.13" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz#806526ce125aed03373bc416a828321e3a6a33af" - integrity sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ== - -"@babel/helper-remap-async-to-generator@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.13.0.tgz#376a760d9f7b4b2077a9dd05aa9c3927cadb2209" - integrity sha512-pUQpFBE9JvC9lrQbpX0TmeNIy5s7GnZjna2lhhcHC7DzgBs6fWn722Y5cfwgrtrqc7NAJwMvOa0mKhq6XaE4jg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.12.13" - "@babel/helper-wrap-function" "^7.13.0" - "@babel/types" "^7.13.0" - -"@babel/helper-replace-supers@^7.12.13", "@babel/helper-replace-supers@^7.13.0", "@babel/helper-replace-supers@^7.13.12": - version "7.13.12" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.13.12.tgz#6442f4c1ad912502481a564a7386de0c77ff3804" - integrity sha512-Gz1eiX+4yDO8mT+heB94aLVNCL+rbuT2xy4YfyNqu8F+OI6vMvJK891qGBTqL9Uc8wxEvRW92Id6G7sDen3fFw== - dependencies: - "@babel/helper-member-expression-to-functions" "^7.13.12" - "@babel/helper-optimise-call-expression" "^7.12.13" - "@babel/traverse" "^7.13.0" - "@babel/types" "^7.13.12" - -"@babel/helper-simple-access@^7.12.13", "@babel/helper-simple-access@^7.13.12": - version "7.13.12" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz#dd6c538afb61819d205a012c31792a39c7a5eaf6" - integrity sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA== - dependencies: - "@babel/types" "^7.13.12" - -"@babel/helper-skip-transparent-expression-wrappers@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz#462dc63a7e435ade8468385c63d2b84cce4b3cbf" - integrity sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA== - dependencies: - "@babel/types" "^7.12.1" - -"@babel/helper-split-export-declaration@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz#e9430be00baf3e88b0e13e6f9d4eaf2136372b05" - integrity sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg== - dependencies: - "@babel/types" "^7.12.13" - -"@babel/helper-validator-identifier@^7.12.11": - version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed" - integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw== - -"@babel/helper-validator-option@^7.12.17": - version "7.12.17" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz#d1fbf012e1a79b7eebbfdc6d270baaf8d9eb9831" - integrity sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw== - -"@babel/helper-wrap-function@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.13.0.tgz#bdb5c66fda8526ec235ab894ad53a1235c79fcc4" - integrity sha512-1UX9F7K3BS42fI6qd2A4BjKzgGjToscyZTdp1DjknHLCIvpgne6918io+aL5LXFcER/8QWiwpoY902pVEqgTXA== - dependencies: - "@babel/helper-function-name" "^7.12.13" - "@babel/template" "^7.12.13" - "@babel/traverse" "^7.13.0" - "@babel/types" "^7.13.0" - -"@babel/helpers@^7.13.10": - version "7.13.10" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.13.10.tgz#fd8e2ba7488533cdeac45cc158e9ebca5e3c7df8" - integrity sha512-4VO883+MWPDUVRF3PhiLBUFHoX/bsLTGFpFK/HqvvfBZz2D57u9XzPVNFVBTc0PW/CWR9BXTOKt8NF4DInUHcQ== - dependencies: - "@babel/template" "^7.12.13" - "@babel/traverse" "^7.13.0" - "@babel/types" "^7.13.0" - -"@babel/highlight@^7.12.13": - version "7.13.10" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.13.10.tgz#a8b2a66148f5b27d666b15d81774347a731d52d1" - integrity sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg== - dependencies: - "@babel/helper-validator-identifier" "^7.12.11" +"@babel/helper-member-expression-to-functions@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.4.tgz#bfd34dc9bba9824a4658b0317ec2fd571a51e6ef" + integrity sha512-cokOMkxC/BTyNP1AlY25HuBWM32iCEsLPI4BHDpJCHHm1FU2E7dKWWIXJgQgSFiu4lp8q3bL1BIKwqkSUviqtA== + dependencies: + "@babel/types" "^7.15.4" + +"@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.14.5", "@babel/helper-module-imports@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.15.4.tgz#e18007d230632dea19b47853b984476e7b4e103f" + integrity sha512-jeAHZbzUwdW/xHgHQ3QmWR4Jg6j15q4w/gCfwZvtqOxoo5DKtLHk8Bsf4c5RZRC7NmLEs+ohkdq8jFefuvIxAA== + dependencies: + "@babel/types" "^7.15.4" + +"@babel/helper-module-transforms@^7.14.5", "@babel/helper-module-transforms@^7.15.4", "@babel/helper-module-transforms@^7.15.8": + version "7.15.8" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.15.8.tgz#d8c0e75a87a52e374a8f25f855174786a09498b2" + integrity sha512-DfAfA6PfpG8t4S6npwzLvTUpp0sS7JrcuaMiy1Y5645laRJIp/LiLGIBbQKaXSInK8tiGNI7FL7L8UvB8gdUZg== + dependencies: + "@babel/helper-module-imports" "^7.15.4" + "@babel/helper-replace-supers" "^7.15.4" + "@babel/helper-simple-access" "^7.15.4" + "@babel/helper-split-export-declaration" "^7.15.4" + "@babel/helper-validator-identifier" "^7.15.7" + "@babel/template" "^7.15.4" + "@babel/traverse" "^7.15.4" + "@babel/types" "^7.15.6" + +"@babel/helper-optimise-call-expression@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.15.4.tgz#f310a5121a3b9cc52d9ab19122bd729822dee171" + integrity sha512-E/z9rfbAOt1vDW1DR7k4SzhzotVV5+qMciWV6LaG1g4jeFrkDlJedjtV4h0i4Q/ITnUu+Pk08M7fczsB9GXBDw== + dependencies: + "@babel/types" "^7.15.4" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz#5ac822ce97eec46741ab70a517971e443a70c5a9" + integrity sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ== + +"@babel/helper-remap-async-to-generator@^7.14.5", "@babel/helper-remap-async-to-generator@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.15.4.tgz#2637c0731e4c90fbf58ac58b50b2b5a192fc970f" + integrity sha512-v53MxgvMK/HCwckJ1bZrq6dNKlmwlyRNYM6ypaRTdXWGOE2c1/SCa6dL/HimhPulGhZKw9W0QhREM583F/t0vQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.15.4" + "@babel/helper-wrap-function" "^7.15.4" + "@babel/types" "^7.15.4" + +"@babel/helper-replace-supers@^7.14.5", "@babel/helper-replace-supers@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.15.4.tgz#52a8ab26ba918c7f6dee28628b07071ac7b7347a" + integrity sha512-/ztT6khaXF37MS47fufrKvIsiQkx1LBRvSJNzRqmbyeZnTwU9qBxXYLaaT/6KaxfKhjs2Wy8kG8ZdsFUuWBjzw== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.15.4" + "@babel/helper-optimise-call-expression" "^7.15.4" + "@babel/traverse" "^7.15.4" + "@babel/types" "^7.15.4" + +"@babel/helper-simple-access@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.15.4.tgz#ac368905abf1de8e9781434b635d8f8674bcc13b" + integrity sha512-UzazrDoIVOZZcTeHHEPYrr1MvTR/K+wgLg6MY6e1CJyaRhbibftF6fR2KU2sFRtI/nERUZR9fBd6aKgBlIBaPg== + dependencies: + "@babel/types" "^7.15.4" + +"@babel/helper-skip-transparent-expression-wrappers@^7.14.5", "@babel/helper-skip-transparent-expression-wrappers@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.15.4.tgz#707dbdba1f4ad0fa34f9114fc8197aec7d5da2eb" + integrity sha512-BMRLsdh+D1/aap19TycS4eD1qELGrCBJwzaY9IE8LrpJtJb+H7rQkPIdsfgnMtLBA6DJls7X9z93Z4U8h7xw0A== + dependencies: + "@babel/types" "^7.15.4" + +"@babel/helper-split-export-declaration@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.15.4.tgz#aecab92dcdbef6a10aa3b62ab204b085f776e257" + integrity sha512-HsFqhLDZ08DxCpBdEVtKmywj6PQbwnF6HHybur0MAnkAKnlS6uHkwnmRIkElB2Owpfb4xL4NwDmDLFubueDXsw== + dependencies: + "@babel/types" "^7.15.4" + +"@babel/helper-validator-identifier@^7.14.5", "@babel/helper-validator-identifier@^7.14.9", "@babel/helper-validator-identifier@^7.15.7": + version "7.15.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz#220df993bfe904a4a6b02ab4f3385a5ebf6e2389" + integrity sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w== + +"@babel/helper-validator-option@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz#6e72a1fff18d5dfcb878e1e62f1a021c4b72d5a3" + integrity sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow== + +"@babel/helper-wrap-function@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.15.4.tgz#6f754b2446cfaf3d612523e6ab8d79c27c3a3de7" + integrity sha512-Y2o+H/hRV5W8QhIfTpRIBwl57y8PrZt6JM3V8FOo5qarjshHItyH5lXlpMfBfmBefOqSCpKZs/6Dxqp0E/U+uw== + dependencies: + "@babel/helper-function-name" "^7.15.4" + "@babel/template" "^7.15.4" + "@babel/traverse" "^7.15.4" + "@babel/types" "^7.15.4" + +"@babel/helpers@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.15.4.tgz#5f40f02050a3027121a3cf48d497c05c555eaf43" + integrity sha512-V45u6dqEJ3w2rlryYYXf6i9rQ5YMNu4FLS6ngs8ikblhu2VdR1AqAd6aJjBzmf2Qzh6KOLqKHxEN9+TFbAkAVQ== + dependencies: + "@babel/template" "^7.15.4" + "@babel/traverse" "^7.15.4" + "@babel/types" "^7.15.4" + +"@babel/highlight@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.5.tgz#6861a52f03966405001f6aa534a01a24d99e8cd9" + integrity sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg== + dependencies: + "@babel/helper-validator-identifier" "^7.14.5" chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.12.13", "@babel/parser@^7.13.13": - version "7.13.13" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.13.13.tgz#42f03862f4aed50461e543270916b47dd501f0df" - integrity sha512-OhsyMrqygfk5v8HmWwOzlYjJrtLaFhF34MrfG/Z73DgYCI6ojNUTUp2TYbtnjo8PegeJp12eamsNettCQjKjVw== +"@babel/parser@^7.15.4", "@babel/parser@^7.15.8": + version "7.15.8" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.15.8.tgz#7bacdcbe71bdc3ff936d510c15dcea7cf0b99016" + integrity sha512-BRYa3wcQnjS/nqI8Ac94pYYpJfojHVvVXJ97+IDCImX4Jc8W8Xv1+47enbruk+q1etOpsQNwnfFcNGw+gtPGxA== -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.13.12": - version "7.13.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.13.12.tgz#a3484d84d0b549f3fc916b99ee4783f26fabad2a" - integrity sha512-d0u3zWKcoZf379fOeJdr1a5WPDny4aOFZ6hlfKivgK0LY7ZxNfoaHL2fWwdGtHyVvra38FC+HVYkO+byfSA8AQ== +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.15.4.tgz#dbdeabb1e80f622d9f0b583efb2999605e0a567e" + integrity sha512-eBnpsl9tlhPhpI10kU06JHnrYXwg3+V6CaP2idsCXNef0aeslpqyITXQ74Vfk5uHgY7IG7XP0yIH8b42KSzHog== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" - "@babel/plugin-proposal-optional-chaining" "^7.13.12" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.15.4" + "@babel/plugin-proposal-optional-chaining" "^7.14.5" -"@babel/plugin-proposal-async-generator-functions@^7.13.8": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.13.8.tgz#87aacb574b3bc4b5603f6fe41458d72a5a2ec4b1" - integrity sha512-rPBnhj+WgoSmgq+4gQUtXx/vOcU+UYtjy1AA/aeD61Hwj410fwYyqfUcRP3lR8ucgliVJL/G7sXcNUecC75IXA== +"@babel/plugin-proposal-async-generator-functions@^7.15.8": + version "7.15.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.15.8.tgz#a3100f785fab4357987c4223ab1b02b599048403" + integrity sha512-2Z5F2R2ibINTc63mY7FLqGfEbmofrHU9FitJW1Q7aPaKFhiPvSq6QEt/BoWN5oME3GVyjcRuNNSRbb9LC0CSWA== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-remap-async-to-generator" "^7.13.0" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-remap-async-to-generator" "^7.15.4" "@babel/plugin-syntax-async-generators" "^7.8.4" -"@babel/plugin-proposal-class-properties@^7.0.0", "@babel/plugin-proposal-class-properties@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.13.0.tgz#146376000b94efd001e57a40a88a525afaab9f37" - integrity sha512-KnTDjFNC1g+45ka0myZNvSBFLhNCLN+GeGYLDEA8Oq7MZ6yMgfLoIRh86GRT0FjtJhZw8JyUskP9uvj5pHM9Zg== +"@babel/plugin-proposal-class-properties@^7.13.0", "@babel/plugin-proposal-class-properties@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.14.5.tgz#40d1ee140c5b1e31a350f4f5eed945096559b42e" + integrity sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg== dependencies: - "@babel/helper-create-class-features-plugin" "^7.13.0" - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-create-class-features-plugin" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-proposal-dynamic-import@^7.13.8": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.13.8.tgz#876a1f6966e1dec332e8c9451afda3bebcdf2e1d" - integrity sha512-ONWKj0H6+wIRCkZi9zSbZtE/r73uOhMVHh256ys0UzfM7I3d4n+spZNWjOnJv2gzopumP2Wxi186vI8N0Y2JyQ== +"@babel/plugin-proposal-class-static-block@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.15.4.tgz#3e7ca6128453c089e8b477a99f970c63fc1cb8d7" + integrity sha512-M682XWrrLNk3chXCjoPUQWOyYsB93B9z3mRyjtqqYJWDf2mfCdIYgDrA11cgNVhAQieaq6F2fn2f3wI0U4aTjA== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-create-class-features-plugin" "^7.15.4" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + +"@babel/plugin-proposal-dynamic-import@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.5.tgz#0c6617df461c0c1f8fff3b47cd59772360101d2c" + integrity sha512-ExjiNYc3HDN5PXJx+bwC50GIx/KKanX2HiggnIUAYedbARdImiCU4RhhHfdf0Kd7JNXGpsBBBCOm+bBVy3Gb0g== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-dynamic-import" "^7.8.3" -"@babel/plugin-proposal-export-namespace-from@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.13.tgz#393be47a4acd03fa2af6e3cde9b06e33de1b446d" - integrity sha512-INAgtFo4OnLN3Y/j0VwAgw3HDXcDtX+C/erMvWzuV9v71r7urb6iyMXu7eM9IgLr1ElLlOkaHjJ0SbCmdOQ3Iw== +"@babel/plugin-proposal-export-namespace-from@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.5.tgz#dbad244310ce6ccd083072167d8cea83a52faf76" + integrity sha512-g5POA32bXPMmSBu5Dx/iZGLGnKmKPc5AiY7qfZgurzrCYgIztDlHFbznSNCoQuv57YQLnQfaDi7dxCtLDIdXdA== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" -"@babel/plugin-proposal-json-strings@^7.13.8": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.13.8.tgz#bf1fb362547075afda3634ed31571c5901afef7b" - integrity sha512-w4zOPKUFPX1mgvTmL/fcEqy34hrQ1CRcGxdphBc6snDnnqJ47EZDIyop6IwXzAC8G916hsIuXB2ZMBCExC5k7Q== +"@babel/plugin-proposal-json-strings@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.5.tgz#38de60db362e83a3d8c944ac858ddf9f0c2239eb" + integrity sha512-NSq2fczJYKVRIsUJyNxrVUMhB27zb7N7pOFGQOhBKJrChbGcgEAqyZrmZswkPk18VMurEeJAaICbfm57vUeTbQ== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-json-strings" "^7.8.3" -"@babel/plugin-proposal-logical-assignment-operators@^7.13.8": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.13.8.tgz#93fa78d63857c40ce3c8c3315220fd00bfbb4e1a" - integrity sha512-aul6znYB4N4HGweImqKn59Su9RS8lbUIqxtXTOcAGtNIDczoEFv+l1EhmX8rUBp3G1jMjKJm8m0jXVp63ZpS4A== +"@babel/plugin-proposal-logical-assignment-operators@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.5.tgz#6e6229c2a99b02ab2915f82571e0cc646a40c738" + integrity sha512-YGn2AvZAo9TwyhlLvCCWxD90Xq8xJ4aSgaX3G5D/8DW94L8aaT+dS5cSP+Z06+rCJERGSr9GxMBZ601xoc2taw== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" -"@babel/plugin-proposal-nullish-coalescing-operator@^7.13.8": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.13.8.tgz#3730a31dafd3c10d8ccd10648ed80a2ac5472ef3" - integrity sha512-iePlDPBn//UhxExyS9KyeYU7RM9WScAG+D3Hhno0PLJebAEpDZMocbDe64eqynhNAnwz/vZoL/q/QB2T1OH39A== +"@babel/plugin-proposal-nullish-coalescing-operator@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz#ee38589ce00e2cc59b299ec3ea406fcd3a0fdaf6" + integrity sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" -"@babel/plugin-proposal-numeric-separator@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.13.tgz#bd9da3188e787b5120b4f9d465a8261ce67ed1db" - integrity sha512-O1jFia9R8BUCl3ZGB7eitaAPu62TXJRHn7rh+ojNERCFyqRwJMTmhz+tJ+k0CwI6CLjX/ee4qW74FSqlq9I35w== +"@babel/plugin-proposal-numeric-separator@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.5.tgz#83631bf33d9a51df184c2102a069ac0c58c05f18" + integrity sha512-yiclALKe0vyZRZE0pS6RXgjUOt87GWv6FYa5zqj15PvhOGFO69R5DusPlgK/1K5dVnCtegTiWu9UaBSrLLJJBg== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-proposal-object-rest-spread@^7.13.8": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.13.8.tgz#5d210a4d727d6ce3b18f9de82cc99a3964eed60a" - integrity sha512-DhB2EuB1Ih7S3/IRX5AFVgZ16k3EzfRbq97CxAVI1KSYcW+lexV8VZb7G7L8zuPVSdQMRn0kiBpf/Yzu9ZKH0g== +"@babel/plugin-proposal-object-rest-spread@^7.15.6": + version "7.15.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.15.6.tgz#ef68050c8703d07b25af402cb96cf7f34a68ed11" + integrity sha512-qtOHo7A1Vt+O23qEAX+GdBpqaIuD3i9VRrWgCJeq7WO6H2d14EK3q11urj5Te2MAeK97nMiIdRpwd/ST4JFbNg== dependencies: - "@babel/compat-data" "^7.13.8" - "@babel/helper-compilation-targets" "^7.13.8" - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/compat-data" "^7.15.0" + "@babel/helper-compilation-targets" "^7.15.4" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.13.0" + "@babel/plugin-transform-parameters" "^7.15.4" -"@babel/plugin-proposal-optional-catch-binding@^7.13.8": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.13.8.tgz#3ad6bd5901506ea996fc31bdcf3ccfa2bed71107" - integrity sha512-0wS/4DUF1CuTmGo+NiaHfHcVSeSLj5S3e6RivPTg/2k3wOv3jO35tZ6/ZWsQhQMvdgI7CwphjQa/ccarLymHVA== +"@babel/plugin-proposal-optional-catch-binding@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.5.tgz#939dd6eddeff3a67fdf7b3f044b5347262598c3c" + integrity sha512-3Oyiixm0ur7bzO5ybNcZFlmVsygSIQgdOa7cTfOYCMY+wEPAYhZAJxi3mixKFCTCKUhQXuCTtQ1MzrpL3WT8ZQ== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-proposal-optional-chaining@^7.13.12": - version "7.13.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.13.12.tgz#ba9feb601d422e0adea6760c2bd6bbb7bfec4866" - integrity sha512-fcEdKOkIB7Tf4IxrgEVeFC4zeJSTr78no9wTdBuZZbqF64kzllU0ybo2zrzm7gUQfxGhBgq4E39oRs8Zx/RMYQ== +"@babel/plugin-proposal-optional-chaining@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz#fa83651e60a360e3f13797eef00b8d519695b603" + integrity sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5" "@babel/plugin-syntax-optional-chaining" "^7.8.3" -"@babel/plugin-proposal-private-methods@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.13.0.tgz#04bd4c6d40f6e6bbfa2f57e2d8094bad900ef787" - integrity sha512-MXyyKQd9inhx1kDYPkFRVOBXQ20ES8Pto3T7UZ92xj2mY0EVD8oAVzeyYuVfy/mxAdTSIayOvg+aVzcHV2bn6Q== +"@babel/plugin-proposal-private-methods@^7.13.0", "@babel/plugin-proposal-private-methods@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.14.5.tgz#37446495996b2945f30f5be5b60d5e2aa4f5792d" + integrity sha512-838DkdUA1u+QTCplatfq4B7+1lnDa/+QMI89x5WZHBcnNv+47N8QEj2k9I2MUU9xIv8XJ4XvPCviM/Dj7Uwt9g== dependencies: - "@babel/helper-create-class-features-plugin" "^7.13.0" - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-create-class-features-plugin" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-proposal-unicode-property-regex@^7.12.13", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.13.tgz#bebde51339be829c17aaaaced18641deb62b39ba" - integrity sha512-XyJmZidNfofEkqFV5VC/bLabGmO5QzenPO/YOfGuEbgU+2sSwMmio3YLb4WtBgcmmdwZHyVyv8on77IUjQ5Gvg== +"@babel/plugin-proposal-private-property-in-object@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.15.4.tgz#55c5e3b4d0261fd44fe637e3f624cfb0f484e3e5" + integrity sha512-X0UTixkLf0PCCffxgu5/1RQyGGbgZuKoI+vXP4iSbJSYwPb7hu06omsFGBvQ9lJEvwgrxHdS8B5nbfcd8GyUNA== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-annotate-as-pure" "^7.15.4" + "@babel/helper-create-class-features-plugin" "^7.15.4" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + +"@babel/plugin-proposal-unicode-property-regex@^7.14.5", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.14.5.tgz#0f95ee0e757a5d647f378daa0eca7e93faa8bbe8" + integrity sha512-6axIeOU5LnY471KenAB9vI8I5j7NQ2d652hIYwVyRfgaZT5UpiqFKCuVXCDMSrU+3VFafnu2c5m3lrWIlr6A5Q== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" @@ -388,6 +407,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.12.13" +"@babel/plugin-syntax-class-static-block@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" + integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-dynamic-import@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" @@ -409,12 +435,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-jsx@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.13.tgz#044fb81ebad6698fe62c478875575bcbb9b70f15" - integrity sha512-d4HM23Q1K7oq/SLNmG6mRt85l2csmQ0cHRaxRXjKW0YFdEXqlZ5kzFQKH5Uc3rDJECgu+yCRgPkG04Mm98R/1g== +"@babel/plugin-syntax-jsx@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.14.5.tgz#000e2e25d8673cce49300517a3eda44c263e4201" + integrity sha512-ohuFIsOMXJnbOMRfX7/w7LocdR6R7whhuRD4ax8IipLcLPlZGJKkBxgHp++U4N/vKyU16/YDQr2f5seajD3jIw== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-logical-assignment-operators@^7.10.4": version "7.10.4" @@ -458,338 +484,364 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-top-level-await@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz#c5f0fa6e249f5b739727f923540cf7a806130178" - integrity sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ== +"@babel/plugin-syntax-private-property-in-object@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" + integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-arrow-functions@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.13.0.tgz#10a59bebad52d637a027afa692e8d5ceff5e3dae" - integrity sha512-96lgJagobeVmazXFaDrbmCLQxBysKu7U6Do3mLsx27gf5Dk85ezysrs2BZUpXD703U/Su1xTBDxxar2oa4jAGg== +"@babel/plugin-syntax-top-level-await@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" + integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-async-to-generator@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.13.0.tgz#8e112bf6771b82bf1e974e5e26806c5c99aa516f" - integrity sha512-3j6E004Dx0K3eGmhxVJxwwI89CTJrce7lg3UrtFuDAVQ/2+SJ/h/aSFOeE6/n0WB1GsOffsJp6MnPQNQ8nmwhg== +"@babel/plugin-syntax-typescript@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.14.5.tgz#b82c6ce471b165b5ce420cf92914d6fb46225716" + integrity sha512-u6OXzDaIXjEstBRRoBCQ/uKQKlbuaeE5in0RvWdA4pN6AhqxTIwUsnHPU1CFZA/amYObMsuWhYfRl3Ch90HD0Q== dependencies: - "@babel/helper-module-imports" "^7.12.13" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-remap-async-to-generator" "^7.13.0" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-block-scoped-functions@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.13.tgz#a9bf1836f2a39b4eb6cf09967739de29ea4bf4c4" - integrity sha512-zNyFqbc3kI/fVpqwfqkg6RvBgFpC4J18aKKMmv7KdQ/1GgREapSJAykLMVNwfRGO3BtHj3YQZl8kxCXPcVMVeg== +"@babel/plugin-transform-arrow-functions@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.14.5.tgz#f7187d9588a768dd080bf4c9ffe117ea62f7862a" + integrity sha512-KOnO0l4+tD5IfOdi4x8C1XmEIRWUjNRV8wc6K2vz/3e8yAOoZZvsRXRRIF/yo/MAOFb4QjtAw9xSxMXbSMRy8A== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-block-scoping@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.13.tgz#f36e55076d06f41dfd78557ea039c1b581642e61" - integrity sha512-Pxwe0iqWJX4fOOM2kEZeUuAxHMWb9nK+9oh5d11bsLoB0xMg+mkDpt0eYuDZB7ETrY9bbcVlKUGTOGWy7BHsMQ== +"@babel/plugin-transform-async-to-generator@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.14.5.tgz#72c789084d8f2094acb945633943ef8443d39e67" + integrity sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-module-imports" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-remap-async-to-generator" "^7.14.5" -"@babel/plugin-transform-classes@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.13.0.tgz#0265155075c42918bf4d3a4053134176ad9b533b" - integrity sha512-9BtHCPUARyVH1oXGcSJD3YpsqRLROJx5ZNP6tN5vnk17N0SVf9WCtf8Nuh1CFmgByKKAIMstitKduoCmsaDK5g== +"@babel/plugin-transform-block-scoped-functions@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.14.5.tgz#e48641d999d4bc157a67ef336aeb54bc44fd3ad4" + integrity sha512-dtqWqdWZ5NqBX3KzsVCWfQI3A53Ft5pWFCT2eCVUftWZgjc5DpDponbIF1+c+7cSGk2wN0YK7HGL/ezfRbpKBQ== dependencies: - "@babel/helper-annotate-as-pure" "^7.12.13" - "@babel/helper-function-name" "^7.12.13" - "@babel/helper-optimise-call-expression" "^7.12.13" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-replace-supers" "^7.13.0" - "@babel/helper-split-export-declaration" "^7.12.13" + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-block-scoping@^7.15.3": + version "7.15.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.15.3.tgz#94c81a6e2fc230bcce6ef537ac96a1e4d2b3afaf" + integrity sha512-nBAzfZwZb4DkaGtOes1Up1nOAp9TDRRFw4XBzBBSG9QK7KVFmYzgj9o9sbPv7TX5ofL4Auq4wZnxCoPnI/lz2Q== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-classes@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.15.4.tgz#50aee17aaf7f332ae44e3bce4c2e10534d5d3bf1" + integrity sha512-Yjvhex8GzBmmPQUvpXRPWQ9WnxXgAFuZSrqOK/eJlOGIXwvv8H3UEdUigl1gb/bnjTrln+e8bkZUYCBt/xYlBg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.15.4" + "@babel/helper-function-name" "^7.15.4" + "@babel/helper-optimise-call-expression" "^7.15.4" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-replace-supers" "^7.15.4" + "@babel/helper-split-export-declaration" "^7.15.4" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.13.0.tgz#845c6e8b9bb55376b1fa0b92ef0bdc8ea06644ed" - integrity sha512-RRqTYTeZkZAz8WbieLTvKUEUxZlUTdmL5KGMyZj7FnMfLNKV4+r5549aORG/mgojRmFlQMJDUupwAMiF2Q7OUg== +"@babel/plugin-transform-computed-properties@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.14.5.tgz#1b9d78987420d11223d41195461cc43b974b204f" + integrity sha512-pWM+E4283UxaVzLb8UBXv4EIxMovU4zxT1OPnpHJcmnvyY9QbPPTKZfEj31EUvG3/EQRbYAGaYEUZ4yWOBC2xg== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-destructuring@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.13.0.tgz#c5dce270014d4e1ebb1d806116694c12b7028963" - integrity sha512-zym5em7tePoNT9s964c0/KU3JPPnuq7VhIxPRefJ4/s82cD+q1mgKfuGRDMCPL0HTyKz4dISuQlCusfgCJ86HA== +"@babel/plugin-transform-destructuring@^7.14.7": + version "7.14.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.7.tgz#0ad58ed37e23e22084d109f185260835e5557576" + integrity sha512-0mDE99nK+kVh3xlc5vKwB6wnP9ecuSj+zQCa/n0voENtP/zymdT4HH6QEb65wjjcbqr1Jb/7z9Qp7TF5FtwYGw== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-dotall-regex@^7.12.13", "@babel/plugin-transform-dotall-regex@^7.4.4": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.13.tgz#3f1601cc29905bfcb67f53910f197aeafebb25ad" - integrity sha512-foDrozE65ZFdUC2OfgeOCrEPTxdB3yjqxpXh8CH+ipd9CHd4s/iq81kcUpyH8ACGNEPdFqbtzfgzbT/ZGlbDeQ== +"@babel/plugin-transform-dotall-regex@^7.14.5", "@babel/plugin-transform-dotall-regex@^7.4.4": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.14.5.tgz#2f6bf76e46bdf8043b4e7e16cf24532629ba0c7a" + integrity sha512-loGlnBdj02MDsFaHhAIJzh7euK89lBrGIdM9EAtHFo6xKygCUGuuWe07o1oZVk287amtW1n0808sQM99aZt3gw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-create-regexp-features-plugin" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-duplicate-keys@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.13.tgz#6f06b87a8b803fd928e54b81c258f0a0033904de" - integrity sha512-NfADJiiHdhLBW3pulJlJI2NB0t4cci4WTZ8FtdIuNc2+8pslXdPtRRAEWqUY+m9kNOk2eRYbTAOipAxlrOcwwQ== +"@babel/plugin-transform-duplicate-keys@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.14.5.tgz#365a4844881bdf1501e3a9f0270e7f0f91177954" + integrity sha512-iJjbI53huKbPDAsJ8EmVmvCKeeq21bAze4fu9GBQtSLqfvzj2oRuHVx4ZkDwEhg1htQ+5OBZh/Ab0XDf5iBZ7A== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-exponentiation-operator@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.13.tgz#4d52390b9a273e651e4aba6aee49ef40e80cd0a1" - integrity sha512-fbUelkM1apvqez/yYx1/oICVnGo2KM5s63mhGylrmXUxK/IAXSIf87QIxVfZldWf4QsOafY6vV3bX8aMHSvNrA== +"@babel/plugin-transform-exponentiation-operator@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.14.5.tgz#5154b8dd6a3dfe6d90923d61724bd3deeb90b493" + integrity sha512-jFazJhMBc9D27o9jDnIE5ZErI0R0m7PbKXVq77FFvqFbzvTMuv8jaAwLZ5PviOLSFttqKIW0/wxNSDbjLk0tYA== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-for-of@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.13.0.tgz#c799f881a8091ac26b54867a845c3e97d2696062" - integrity sha512-IHKT00mwUVYE0zzbkDgNRP6SRzvfGCYsOxIRz8KsiaaHCcT9BWIkO+H9QRJseHBLOGBZkHUdHiqj6r0POsdytg== +"@babel/plugin-transform-for-of@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.15.4.tgz#25c62cce2718cfb29715f416e75d5263fb36a8c2" + integrity sha512-DRTY9fA751AFBDh2oxydvVm4SYevs5ILTWLs6xKXps4Re/KG5nfUkr+TdHCrRWB8C69TlzVgA9b3RmGWmgN9LA== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-function-name@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.13.tgz#bb024452f9aaed861d374c8e7a24252ce3a50051" - integrity sha512-6K7gZycG0cmIwwF7uMK/ZqeCikCGVBdyP2J5SKNCXO5EOHcqi+z7Jwf8AmyDNcBgxET8DrEtCt/mPKPyAzXyqQ== +"@babel/plugin-transform-function-name@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.14.5.tgz#e81c65ecb900746d7f31802f6bed1f52d915d6f2" + integrity sha512-vbO6kv0fIzZ1GpmGQuvbwwm+O4Cbm2NrPzwlup9+/3fdkuzo1YqOZcXw26+YUJB84Ja7j9yURWposEHLYwxUfQ== dependencies: - "@babel/helper-function-name" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-function-name" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-literals@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.13.tgz#2ca45bafe4a820197cf315794a4d26560fe4bdb9" - integrity sha512-FW+WPjSR7hiUxMcKqyNjP05tQ2kmBCdpEpZHY1ARm96tGQCCBvXKnpjILtDplUnJ/eHZ0lALLM+d2lMFSpYJrQ== +"@babel/plugin-transform-literals@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.14.5.tgz#41d06c7ff5d4d09e3cf4587bd3ecf3930c730f78" + integrity sha512-ql33+epql2F49bi8aHXxvLURHkxJbSmMKl9J5yHqg4PLtdE6Uc48CH1GS6TQvZ86eoB/ApZXwm7jlA+B3kra7A== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-member-expression-literals@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.13.tgz#5ffa66cd59b9e191314c9f1f803b938e8c081e40" - integrity sha512-kxLkOsg8yir4YeEPHLuO2tXP9R/gTjpuTOjshqSpELUN3ZAg2jfDnKUvzzJxObun38sw3wm4Uu69sX/zA7iRvg== +"@babel/plugin-transform-member-expression-literals@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.14.5.tgz#b39cd5212a2bf235a617d320ec2b48bcc091b8a7" + integrity sha512-WkNXxH1VXVTKarWFqmso83xl+2V3Eo28YY5utIkbsmXoItO8Q3aZxN4BTS2k0hz9dGUloHK26mJMyQEYfkn/+Q== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-modules-amd@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.13.0.tgz#19f511d60e3d8753cc5a6d4e775d3a5184866cc3" - integrity sha512-EKy/E2NHhY/6Vw5d1k3rgoobftcNUmp9fGjb9XZwQLtTctsRBOTRO7RHHxfIky1ogMN5BxN7p9uMA3SzPfotMQ== +"@babel/plugin-transform-modules-amd@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.5.tgz#4fd9ce7e3411cb8b83848480b7041d83004858f7" + integrity sha512-3lpOU8Vxmp3roC4vzFpSdEpGUWSMsHFreTWOMMLzel2gNGfHE5UWIh/LN6ghHs2xurUp4jRFYMUIZhuFbody1g== dependencies: - "@babel/helper-module-transforms" "^7.13.0" - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-module-transforms" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-commonjs@^7.13.8": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.13.8.tgz#7b01ad7c2dcf2275b06fa1781e00d13d420b3e1b" - integrity sha512-9QiOx4MEGglfYZ4XOnU79OHr6vIWUakIj9b4mioN8eQIoEh+pf5p/zEB36JpDFWA12nNMiRf7bfoRvl9Rn79Bw== +"@babel/plugin-transform-modules-commonjs@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.15.4.tgz#8201101240eabb5a76c08ef61b2954f767b6b4c1" + integrity sha512-qg4DPhwG8hKp4BbVDvX1s8cohM8a6Bvptu4l6Iingq5rW+yRUAhe/YRup/YcW2zCOlrysEWVhftIcKzrEZv3sA== dependencies: - "@babel/helper-module-transforms" "^7.13.0" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-simple-access" "^7.12.13" + "@babel/helper-module-transforms" "^7.15.4" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-simple-access" "^7.15.4" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-systemjs@^7.13.8": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.13.8.tgz#6d066ee2bff3c7b3d60bf28dec169ad993831ae3" - integrity sha512-hwqctPYjhM6cWvVIlOIe27jCIBgHCsdH2xCJVAYQm7V5yTMoilbVMi9f6wKg0rpQAOn6ZG4AOyvCqFF/hUh6+A== +"@babel/plugin-transform-modules-systemjs@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.15.4.tgz#b42890c7349a78c827719f1d2d0cd38c7d268132" + integrity sha512-fJUnlQrl/mezMneR72CKCgtOoahqGJNVKpompKwzv3BrEXdlPspTcyxrZ1XmDTIr9PpULrgEQo3qNKp6dW7ssw== dependencies: - "@babel/helper-hoist-variables" "^7.13.0" - "@babel/helper-module-transforms" "^7.13.0" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-validator-identifier" "^7.12.11" + "@babel/helper-hoist-variables" "^7.15.4" + "@babel/helper-module-transforms" "^7.15.4" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-validator-identifier" "^7.14.9" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-umd@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.13.0.tgz#8a3d96a97d199705b9fd021580082af81c06e70b" - integrity sha512-D/ILzAh6uyvkWjKKyFE/W0FzWwasv6vPTSqPcjxFqn6QpX3u8DjRVliq4F2BamO2Wee/om06Vyy+vPkNrd4wxw== +"@babel/plugin-transform-modules-umd@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.5.tgz#fb662dfee697cce274a7cda525190a79096aa6e0" + integrity sha512-RfPGoagSngC06LsGUYyM9QWSXZ8MysEjDJTAea1lqRjNECE3y0qIJF/qbvJxc4oA4s99HumIMdXOrd+TdKaAAA== dependencies: - "@babel/helper-module-transforms" "^7.13.0" - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-module-transforms" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-named-capturing-groups-regex@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.13.tgz#2213725a5f5bbbe364b50c3ba5998c9599c5c9d9" - integrity sha512-Xsm8P2hr5hAxyYblrfACXpQKdQbx4m2df9/ZZSQ8MAhsadw06+jW7s9zsSw6he+mJZXRlVMyEnVktJo4zjk1WA== +"@babel/plugin-transform-named-capturing-groups-regex@^7.14.9": + version "7.14.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.9.tgz#c68f5c5d12d2ebaba3762e57c2c4f6347a46e7b2" + integrity sha512-l666wCVYO75mlAtGFfyFwnWmIXQm3kSH0C3IRnJqWcZbWkoihyAdDhFm2ZWaxWTqvBvhVFfJjMRQ0ez4oN1yYA== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.12.13" + "@babel/helper-create-regexp-features-plugin" "^7.14.5" -"@babel/plugin-transform-new-target@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.13.tgz#e22d8c3af24b150dd528cbd6e685e799bf1c351c" - integrity sha512-/KY2hbLxrG5GTQ9zzZSc3xWiOy379pIETEhbtzwZcw9rvuaVV4Fqy7BYGYOWZnaoXIQYbbJ0ziXLa/sKcGCYEQ== +"@babel/plugin-transform-new-target@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.14.5.tgz#31bdae8b925dc84076ebfcd2a9940143aed7dbf8" + integrity sha512-Nx054zovz6IIRWEB49RDRuXGI4Gy0GMgqG0cII9L3MxqgXz/+rgII+RU58qpo4g7tNEx1jG7rRVH4ihZoP4esQ== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-object-assign@^7.0.0": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.12.13.tgz#d9b9200a69e03403a813e44a933ad9f4bddfd050" - integrity sha512-4QxDMc0lAOkIBSfCrnSGbAJ+4epDBF2XXwcLXuBcG1xl9u7LrktNVD4+LwhL47XuKVPQ7R25e/WdcV+h97HyZA== +"@babel/plugin-transform-object-assign@^7.12.13": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.14.5.tgz#62537d54b6d85de04f4df48bfdba2eebff17b760" + integrity sha512-lvhjk4UN9xJJYB1mI5KC0/o1D5EcJXdbhVe+4fSk08D6ZN+iuAIs7LJC+71h8av9Ew4+uRq9452v9R93SFmQlQ== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-object-super@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.13.tgz#b4416a2d63b8f7be314f3d349bd55a9c1b5171f7" - integrity sha512-JzYIcj3XtYspZDV8j9ulnoMPZZnF/Cj0LUxPOjR89BdBVx+zYJI9MdMIlUZjbXDX+6YVeS6I3e8op+qQ3BYBoQ== +"@babel/plugin-transform-object-super@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.14.5.tgz#d0b5faeac9e98597a161a9cf78c527ed934cdc45" + integrity sha512-MKfOBWzK0pZIrav9z/hkRqIk/2bTv9qvxHzPQc12RcVkMOzpIKnFCNYJip00ssKWYkd8Sf5g0Wr7pqJ+cmtuFg== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - "@babel/helper-replace-supers" "^7.12.13" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-replace-supers" "^7.14.5" -"@babel/plugin-transform-parameters@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.13.0.tgz#8fa7603e3097f9c0b7ca1a4821bc2fb52e9e5007" - integrity sha512-Jt8k/h/mIwE2JFEOb3lURoY5C85ETcYPnbuAJ96zRBzh1XHtQZfs62ChZ6EP22QlC8c7Xqr9q+e1SU5qttwwjw== +"@babel/plugin-transform-parameters@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.15.4.tgz#5f2285cc3160bf48c8502432716b48504d29ed62" + integrity sha512-9WB/GUTO6lvJU3XQsSr6J/WKvBC2hcs4Pew8YxZagi6GkTdniyqp8On5kqdK8MN0LMeu0mGbhPN+O049NV/9FQ== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-property-literals@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.13.tgz#4e6a9e37864d8f1b3bc0e2dce7bf8857db8b1a81" - integrity sha512-nqVigwVan+lR+g8Fj8Exl0UQX2kymtjcWfMOYM1vTYEKujeyv2SkMgazf2qNcK7l4SDiKyTA/nHCPqL4e2zo1A== +"@babel/plugin-transform-property-literals@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.14.5.tgz#0ddbaa1f83db3606f1cdf4846fa1dfb473458b34" + integrity sha512-r1uilDthkgXW8Z1vJz2dKYLV1tuw2xsbrp3MrZmD99Wh9vsfKoob+JTgri5VUb/JqyKRXotlOtwgu4stIYCmnw== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-react-display-name@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.12.13.tgz#c28effd771b276f4647411c9733dbb2d2da954bd" - integrity sha512-MprESJzI9O5VnJZrL7gg1MpdqmiFcUv41Jc7SahxYsNP2kDkFqClxxTZq+1Qv4AFCamm+GXMRDQINNn+qrxmiA== +"@babel/plugin-transform-react-display-name@^7.14.5": + version "7.15.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.15.1.tgz#6aaac6099f1fcf6589d35ae6be1b6e10c8c602b9" + integrity sha512-yQZ/i/pUCJAHI/LbtZr413S3VT26qNrEm0M5RRxQJA947/YNYwbZbBaXGDrq6CG5QsZycI1VIP6d7pQaBfP+8Q== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-react-jsx-development@^7.12.17": - version "7.12.17" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.12.17.tgz#f510c0fa7cd7234153539f9a362ced41a5ca1447" - integrity sha512-BPjYV86SVuOaudFhsJR1zjgxxOhJDt6JHNoD48DxWEIxUCAMjV1ys6DYw4SDYZh0b1QsS2vfIA9t/ZsQGsDOUQ== +"@babel/plugin-transform-react-jsx-development@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.14.5.tgz#1a6c73e2f7ed2c42eebc3d2ad60b0c7494fcb9af" + integrity sha512-rdwG/9jC6QybWxVe2UVOa7q6cnTpw8JRRHOxntG/h6g/guAOe6AhtQHJuJh5FwmnXIT1bdm5vC2/5huV8ZOorQ== dependencies: - "@babel/plugin-transform-react-jsx" "^7.12.17" + "@babel/plugin-transform-react-jsx" "^7.14.5" -"@babel/plugin-transform-react-jsx@^7.0.0", "@babel/plugin-transform-react-jsx@^7.12.17", "@babel/plugin-transform-react-jsx@^7.13.12": - version "7.13.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.13.12.tgz#1df5dfaf0f4b784b43e96da6f28d630e775f68b3" - integrity sha512-jcEI2UqIcpCqB5U5DRxIl0tQEProI2gcu+g8VTIqxLO5Iidojb4d77q+fwGseCvd8af/lJ9masp4QWzBXFE2xA== +"@babel/plugin-transform-react-jsx@^7.14.3", "@babel/plugin-transform-react-jsx@^7.14.5": + version "7.14.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.14.9.tgz#3314b2163033abac5200a869c4de242cd50a914c" + integrity sha512-30PeETvS+AeD1f58i1OVyoDlVYQhap/K20ZrMjLmmzmC2AYR/G43D4sdJAaDAqCD3MYpSWbmrz3kES158QSLjw== dependencies: - "@babel/helper-annotate-as-pure" "^7.12.13" - "@babel/helper-module-imports" "^7.13.12" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/plugin-syntax-jsx" "^7.12.13" - "@babel/types" "^7.13.12" + "@babel/helper-annotate-as-pure" "^7.14.5" + "@babel/helper-module-imports" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-jsx" "^7.14.5" + "@babel/types" "^7.14.9" -"@babel/plugin-transform-react-pure-annotations@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.12.1.tgz#05d46f0ab4d1339ac59adf20a1462c91b37a1a42" - integrity sha512-RqeaHiwZtphSIUZ5I85PEH19LOSzxfuEazoY7/pWASCAIBuATQzpSVD+eT6MebeeZT2F4eSL0u4vw6n4Nm0Mjg== +"@babel/plugin-transform-react-pure-annotations@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.14.5.tgz#18de612b84021e3a9802cbc212c9d9f46d0d11fc" + integrity sha512-3X4HpBJimNxW4rhUy/SONPyNQHp5YRr0HhJdT2OH1BRp0of7u3Dkirc7x9FRJMKMqTBI079VZ1hzv7Ouuz///g== dependencies: - "@babel/helper-annotate-as-pure" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-annotate-as-pure" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-regenerator@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.13.tgz#b628bcc9c85260ac1aeb05b45bde25210194a2f5" - integrity sha512-lxb2ZAvSLyJ2PEe47hoGWPmW22v7CtSl9jW8mingV4H2sEX/JOcrAj2nPuGWi56ERUm2bUpjKzONAuT6HCn2EA== +"@babel/plugin-transform-regenerator@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.14.5.tgz#9676fd5707ed28f522727c5b3c0aa8544440b04f" + integrity sha512-NVIY1W3ITDP5xQl50NgTKlZ0GrotKtLna08/uGY6ErQt6VEQZXla86x/CTddm5gZdcr+5GSsvMeTmWA5Ii6pkg== dependencies: regenerator-transform "^0.14.2" -"@babel/plugin-transform-reserved-words@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.13.tgz#7d9988d4f06e0fe697ea1d9803188aa18b472695" - integrity sha512-xhUPzDXxZN1QfiOy/I5tyye+TRz6lA7z6xaT4CLOjPRMVg1ldRf0LHw0TDBpYL4vG78556WuHdyO9oi5UmzZBg== +"@babel/plugin-transform-reserved-words@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.14.5.tgz#c44589b661cfdbef8d4300dcc7469dffa92f8304" + integrity sha512-cv4F2rv1nD4qdexOGsRQXJrOcyb5CrgjUH9PKrrtyhSDBNWGxd0UIitjyJiWagS+EbUGjG++22mGH1Pub8D6Vg== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-runtime@^7.0.0": - version "7.13.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.13.10.tgz#a1e40d22e2bf570c591c9c7e5ab42d6bf1e419e1" - integrity sha512-Y5k8ipgfvz5d/76tx7JYbKQTcgFSU6VgJ3kKQv4zGTKr+a9T/KBvfRvGtSFgKDQGt/DBykQixV0vNWKIdzWErA== +"@babel/plugin-transform-runtime@^7.14.3": + version "7.15.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.15.8.tgz#9d15b1e94e1c7f6344f65a8d573597d93c6cd886" + integrity sha512-+6zsde91jMzzvkzuEA3k63zCw+tm/GvuuabkpisgbDMTPQsIMHllE3XczJFFtEHLjjhKQFZmGQVRdELetlWpVw== dependencies: - "@babel/helper-module-imports" "^7.12.13" - "@babel/helper-plugin-utils" "^7.13.0" - babel-plugin-polyfill-corejs2 "^0.1.4" - babel-plugin-polyfill-corejs3 "^0.1.3" - babel-plugin-polyfill-regenerator "^0.1.2" + "@babel/helper-module-imports" "^7.15.4" + "@babel/helper-plugin-utils" "^7.14.5" + babel-plugin-polyfill-corejs2 "^0.2.2" + babel-plugin-polyfill-corejs3 "^0.2.5" + babel-plugin-polyfill-regenerator "^0.2.2" semver "^6.3.0" -"@babel/plugin-transform-shorthand-properties@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.13.tgz#db755732b70c539d504c6390d9ce90fe64aff7ad" - integrity sha512-xpL49pqPnLtf0tVluuqvzWIgLEhuPpZzvs2yabUHSKRNlN7ScYU7aMlmavOeyXJZKgZKQRBlh8rHbKiJDraTSw== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-transform-spread@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.13.0.tgz#84887710e273c1815ace7ae459f6f42a5d31d5fd" - integrity sha512-V6vkiXijjzYeFmQTr3dBxPtZYLPcUfY34DebOU27jIl2M/Y8Egm52Hw82CSjjPqd54GTlJs5x+CR7HeNr24ckg== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" - -"@babel/plugin-transform-sticky-regex@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.13.tgz#760ffd936face73f860ae646fb86ee82f3d06d1f" - integrity sha512-Jc3JSaaWT8+fr7GRvQP02fKDsYk4K/lYwWq38r/UGfaxo89ajud321NH28KRQ7xy1Ybc0VUE5Pz8psjNNDUglg== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-transform-template-literals@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.13.0.tgz#a36049127977ad94438dee7443598d1cefdf409d" - integrity sha512-d67umW6nlfmr1iehCcBv69eSUSySk1EsIS8aTDX4Xo9qajAh6mYtcl4kJrBkGXuxZPEgVr7RVfAvNW6YQkd4Mw== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - -"@babel/plugin-transform-typeof-symbol@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.13.tgz#785dd67a1f2ea579d9c2be722de8c84cb85f5a7f" - integrity sha512-eKv/LmUJpMnu4npgfvs3LiHhJua5fo/CysENxa45YCQXZwKnGCQKAg87bvoqSW1fFT+HA32l03Qxsm8ouTY3ZQ== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-transform-unicode-escapes@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.13.tgz#840ced3b816d3b5127dd1d12dcedc5dead1a5e74" - integrity sha512-0bHEkdwJ/sN/ikBHfSmOXPypN/beiGqjo+o4/5K+vxEFNPRPdImhviPakMKG4x96l85emoa0Z6cDflsdBusZbw== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-transform-unicode-regex@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.13.tgz#b52521685804e155b1202e83fc188d34bb70f5ac" - integrity sha512-mDRzSNY7/zopwisPZ5kM9XKCfhchqIYwAKRERtEnhYscZB79VRekuRSoYbN0+KVe3y8+q1h6A4svXtP7N+UoCA== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/preset-env@^7.0.0": - version "7.13.12" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.13.12.tgz#6dff470478290582ac282fb77780eadf32480237" - integrity sha512-JzElc6jk3Ko6zuZgBtjOd01pf9yYDEIH8BcqVuYIuOkzOwDesoa/Nz4gIo4lBG6K861KTV9TvIgmFuT6ytOaAA== - dependencies: - "@babel/compat-data" "^7.13.12" - "@babel/helper-compilation-targets" "^7.13.10" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-validator-option" "^7.12.17" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.13.12" - "@babel/plugin-proposal-async-generator-functions" "^7.13.8" - "@babel/plugin-proposal-class-properties" "^7.13.0" - "@babel/plugin-proposal-dynamic-import" "^7.13.8" - "@babel/plugin-proposal-export-namespace-from" "^7.12.13" - "@babel/plugin-proposal-json-strings" "^7.13.8" - "@babel/plugin-proposal-logical-assignment-operators" "^7.13.8" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.13.8" - "@babel/plugin-proposal-numeric-separator" "^7.12.13" - "@babel/plugin-proposal-object-rest-spread" "^7.13.8" - "@babel/plugin-proposal-optional-catch-binding" "^7.13.8" - "@babel/plugin-proposal-optional-chaining" "^7.13.12" - "@babel/plugin-proposal-private-methods" "^7.13.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.12.13" +"@babel/plugin-transform-shorthand-properties@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.14.5.tgz#97f13855f1409338d8cadcbaca670ad79e091a58" + integrity sha512-xLucks6T1VmGsTB+GWK5Pl9Jl5+nRXD1uoFdA5TSO6xtiNjtXTjKkmPdFXVLGlK5A2/or/wQMKfmQ2Y0XJfn5g== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-spread@^7.15.8": + version "7.15.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.15.8.tgz#79d5aa27f68d700449b2da07691dfa32d2f6d468" + integrity sha512-/daZ8s2tNaRekl9YJa9X4bzjpeRZLt122cpgFnQPLGUe61PH8zMEBmYqKkW5xF5JUEh5buEGXJoQpqBmIbpmEQ== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.15.4" + +"@babel/plugin-transform-sticky-regex@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.14.5.tgz#5b617542675e8b7761294381f3c28c633f40aeb9" + integrity sha512-Z7F7GyvEMzIIbwnziAZmnSNpdijdr4dWt+FJNBnBLz5mwDFkqIXU9wmBcWWad3QeJF5hMTkRe4dAq2sUZiG+8A== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-template-literals@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.14.5.tgz#a5f2bc233937d8453885dc736bdd8d9ffabf3d93" + integrity sha512-22btZeURqiepOfuy/VkFr+zStqlujWaarpMErvay7goJS6BWwdd6BY9zQyDLDa4x2S3VugxFb162IZ4m/S/+Gg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-typeof-symbol@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.14.5.tgz#39af2739e989a2bd291bf6b53f16981423d457d4" + integrity sha512-lXzLD30ffCWseTbMQzrvDWqljvZlHkXU+CnseMhkMNqU1sASnCsz3tSzAaH3vCUXb9PHeUb90ZT1BdFTm1xxJw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-typescript@^7.15.0": + version "7.15.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.15.8.tgz#ff0e6a47de9b2d58652123ab5a879b2ff20665d8" + integrity sha512-ZXIkJpbaf6/EsmjeTbiJN/yMxWPFWvlr7sEG1P95Xb4S4IBcrf2n7s/fItIhsAmOf8oSh3VJPDppO6ExfAfKRQ== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.15.4" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-typescript" "^7.14.5" + +"@babel/plugin-transform-unicode-escapes@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.14.5.tgz#9d4bd2a681e3c5d7acf4f57fa9e51175d91d0c6b" + integrity sha512-crTo4jATEOjxj7bt9lbYXcBAM3LZaUrbP2uUdxb6WIorLmjNKSpHfIybgY4B8SRpbf8tEVIWH3Vtm7ayCrKocA== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-unicode-regex@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.14.5.tgz#4cd09b6c8425dd81255c7ceb3fb1836e7414382e" + integrity sha512-UygduJpC5kHeCiRw/xDVzC+wj8VaYSoKl5JNVmbP7MadpNinAm3SvZCxZ42H37KZBKztz46YC73i9yV34d0Tzw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/preset-env@^7.14.2": + version "7.15.8" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.15.8.tgz#f527ce5bcb121cd199f6b502bf23e420b3ff8dba" + integrity sha512-rCC0wH8husJgY4FPbHsiYyiLxSY8oMDJH7Rl6RQMknbN9oDDHhM9RDFvnGM2MgkbUJzSQB4gtuwygY5mCqGSsA== + dependencies: + "@babel/compat-data" "^7.15.0" + "@babel/helper-compilation-targets" "^7.15.4" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-validator-option" "^7.14.5" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.15.4" + "@babel/plugin-proposal-async-generator-functions" "^7.15.8" + "@babel/plugin-proposal-class-properties" "^7.14.5" + "@babel/plugin-proposal-class-static-block" "^7.15.4" + "@babel/plugin-proposal-dynamic-import" "^7.14.5" + "@babel/plugin-proposal-export-namespace-from" "^7.14.5" + "@babel/plugin-proposal-json-strings" "^7.14.5" + "@babel/plugin-proposal-logical-assignment-operators" "^7.14.5" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.14.5" + "@babel/plugin-proposal-numeric-separator" "^7.14.5" + "@babel/plugin-proposal-object-rest-spread" "^7.15.6" + "@babel/plugin-proposal-optional-catch-binding" "^7.14.5" + "@babel/plugin-proposal-optional-chaining" "^7.14.5" + "@babel/plugin-proposal-private-methods" "^7.14.5" + "@babel/plugin-proposal-private-property-in-object" "^7.15.4" + "@babel/plugin-proposal-unicode-property-regex" "^7.14.5" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-class-properties" "^7.12.13" + "@babel/plugin-syntax-class-static-block" "^7.14.5" "@babel/plugin-syntax-dynamic-import" "^7.8.3" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" "@babel/plugin-syntax-json-strings" "^7.8.3" @@ -799,51 +851,52 @@ "@babel/plugin-syntax-object-rest-spread" "^7.8.3" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-syntax-top-level-await" "^7.12.13" - "@babel/plugin-transform-arrow-functions" "^7.13.0" - "@babel/plugin-transform-async-to-generator" "^7.13.0" - "@babel/plugin-transform-block-scoped-functions" "^7.12.13" - "@babel/plugin-transform-block-scoping" "^7.12.13" - "@babel/plugin-transform-classes" "^7.13.0" - "@babel/plugin-transform-computed-properties" "^7.13.0" - "@babel/plugin-transform-destructuring" "^7.13.0" - "@babel/plugin-transform-dotall-regex" "^7.12.13" - "@babel/plugin-transform-duplicate-keys" "^7.12.13" - "@babel/plugin-transform-exponentiation-operator" "^7.12.13" - "@babel/plugin-transform-for-of" "^7.13.0" - "@babel/plugin-transform-function-name" "^7.12.13" - "@babel/plugin-transform-literals" "^7.12.13" - "@babel/plugin-transform-member-expression-literals" "^7.12.13" - "@babel/plugin-transform-modules-amd" "^7.13.0" - "@babel/plugin-transform-modules-commonjs" "^7.13.8" - "@babel/plugin-transform-modules-systemjs" "^7.13.8" - "@babel/plugin-transform-modules-umd" "^7.13.0" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.12.13" - "@babel/plugin-transform-new-target" "^7.12.13" - "@babel/plugin-transform-object-super" "^7.12.13" - "@babel/plugin-transform-parameters" "^7.13.0" - "@babel/plugin-transform-property-literals" "^7.12.13" - "@babel/plugin-transform-regenerator" "^7.12.13" - "@babel/plugin-transform-reserved-words" "^7.12.13" - "@babel/plugin-transform-shorthand-properties" "^7.12.13" - "@babel/plugin-transform-spread" "^7.13.0" - "@babel/plugin-transform-sticky-regex" "^7.12.13" - "@babel/plugin-transform-template-literals" "^7.13.0" - "@babel/plugin-transform-typeof-symbol" "^7.12.13" - "@babel/plugin-transform-unicode-escapes" "^7.12.13" - "@babel/plugin-transform-unicode-regex" "^7.12.13" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-syntax-top-level-await" "^7.14.5" + "@babel/plugin-transform-arrow-functions" "^7.14.5" + "@babel/plugin-transform-async-to-generator" "^7.14.5" + "@babel/plugin-transform-block-scoped-functions" "^7.14.5" + "@babel/plugin-transform-block-scoping" "^7.15.3" + "@babel/plugin-transform-classes" "^7.15.4" + "@babel/plugin-transform-computed-properties" "^7.14.5" + "@babel/plugin-transform-destructuring" "^7.14.7" + "@babel/plugin-transform-dotall-regex" "^7.14.5" + "@babel/plugin-transform-duplicate-keys" "^7.14.5" + "@babel/plugin-transform-exponentiation-operator" "^7.14.5" + "@babel/plugin-transform-for-of" "^7.15.4" + "@babel/plugin-transform-function-name" "^7.14.5" + "@babel/plugin-transform-literals" "^7.14.5" + "@babel/plugin-transform-member-expression-literals" "^7.14.5" + "@babel/plugin-transform-modules-amd" "^7.14.5" + "@babel/plugin-transform-modules-commonjs" "^7.15.4" + "@babel/plugin-transform-modules-systemjs" "^7.15.4" + "@babel/plugin-transform-modules-umd" "^7.14.5" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.14.9" + "@babel/plugin-transform-new-target" "^7.14.5" + "@babel/plugin-transform-object-super" "^7.14.5" + "@babel/plugin-transform-parameters" "^7.15.4" + "@babel/plugin-transform-property-literals" "^7.14.5" + "@babel/plugin-transform-regenerator" "^7.14.5" + "@babel/plugin-transform-reserved-words" "^7.14.5" + "@babel/plugin-transform-shorthand-properties" "^7.14.5" + "@babel/plugin-transform-spread" "^7.15.8" + "@babel/plugin-transform-sticky-regex" "^7.14.5" + "@babel/plugin-transform-template-literals" "^7.14.5" + "@babel/plugin-transform-typeof-symbol" "^7.14.5" + "@babel/plugin-transform-unicode-escapes" "^7.14.5" + "@babel/plugin-transform-unicode-regex" "^7.14.5" "@babel/preset-modules" "^0.1.4" - "@babel/types" "^7.13.12" - babel-plugin-polyfill-corejs2 "^0.1.4" - babel-plugin-polyfill-corejs3 "^0.1.3" - babel-plugin-polyfill-regenerator "^0.1.2" - core-js-compat "^3.9.0" + "@babel/types" "^7.15.6" + babel-plugin-polyfill-corejs2 "^0.2.2" + babel-plugin-polyfill-corejs3 "^0.2.5" + babel-plugin-polyfill-regenerator "^0.2.2" + core-js-compat "^3.16.0" semver "^6.3.0" "@babel/preset-modules@^0.1.4": - version "0.1.4" - resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.4.tgz#362f2b68c662842970fdb5e254ffc8fc1c2e415e" - integrity sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg== + version "0.1.5" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.5.tgz#ef939d6e7f268827e1841638dc6ff95515e115d9" + integrity sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" @@ -851,61 +904,97 @@ "@babel/types" "^7.4.4" esutils "^2.0.2" -"@babel/preset-react@^7.0.0": - version "7.13.13" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.13.13.tgz#fa6895a96c50763fe693f9148568458d5a839761" - integrity sha512-gx+tDLIE06sRjKJkVtpZ/t3mzCDOnPG+ggHZG9lffUbX8+wC739x20YQc9V35Do6ZAxaUc/HhVHIiOzz5MvDmA== +"@babel/preset-react@^7.13.13": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.14.5.tgz#0fbb769513f899c2c56f3a882fa79673c2d4ab3c" + integrity sha512-XFxBkjyObLvBaAvkx1Ie95Iaq4S/GUEIrejyrntQ/VCMKUYvKLoyKxOBzJ2kjA3b6rC9/KL6KXfDC2GqvLiNqQ== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-validator-option" "^7.12.17" - "@babel/plugin-transform-react-display-name" "^7.12.13" - "@babel/plugin-transform-react-jsx" "^7.13.12" - "@babel/plugin-transform-react-jsx-development" "^7.12.17" - "@babel/plugin-transform-react-pure-annotations" "^7.12.1" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-validator-option" "^7.14.5" + "@babel/plugin-transform-react-display-name" "^7.14.5" + "@babel/plugin-transform-react-jsx" "^7.14.5" + "@babel/plugin-transform-react-jsx-development" "^7.14.5" + "@babel/plugin-transform-react-pure-annotations" "^7.14.5" + +"@babel/preset-typescript@^7.13.0": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.15.0.tgz#e8fca638a1a0f64f14e1119f7fe4500277840945" + integrity sha512-lt0Y/8V3y06Wq/8H/u0WakrqciZ7Fz7mwPDHWUJAXlABL5hiUG42BNlRXiELNjeWjO5rWmnNKlx+yzJvxezHow== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-validator-option" "^7.14.5" + "@babel/plugin-transform-typescript" "^7.15.0" -"@babel/runtime@^7.0.0", "@babel/runtime@^7.8.4": - version "7.13.10" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.13.10.tgz#47d42a57b6095f4468da440388fdbad8bebf0d7d" - integrity sha512-4QPkjJq6Ns3V/RgpEahRk+AGfL0eO6RHHtTWoNNr5mO49G6B5+X6d6THgWEAvTrznU5xYpbAlVKRYcsCgh/Akw== +"@babel/runtime@^7.14.0", "@babel/runtime@^7.8.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.15.4.tgz#fd17d16bfdf878e6dd02d19753a39fa8a8d9c84a" + integrity sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw== dependencies: regenerator-runtime "^0.13.4" -"@babel/template@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.12.13.tgz#530265be8a2589dbb37523844c5bcb55947fb327" - integrity sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA== - dependencies: - "@babel/code-frame" "^7.12.13" - "@babel/parser" "^7.12.13" - "@babel/types" "^7.12.13" - -"@babel/traverse@^7.13.0", "@babel/traverse@^7.13.13": - version "7.13.13" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.13.13.tgz#39aa9c21aab69f74d948a486dd28a2dbdbf5114d" - integrity sha512-CblEcwmXKR6eP43oQGG++0QMTtCjAsa3frUuzHoiIJWpaIIi8dwMyEFUJoXRLxagGqCK+jALRwIO+o3R9p/uUg== - dependencies: - "@babel/code-frame" "^7.12.13" - "@babel/generator" "^7.13.9" - "@babel/helper-function-name" "^7.12.13" - "@babel/helper-split-export-declaration" "^7.12.13" - "@babel/parser" "^7.13.13" - "@babel/types" "^7.13.13" +"@babel/template@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.15.4.tgz#51898d35dcf3faa670c4ee6afcfd517ee139f194" + integrity sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg== + dependencies: + "@babel/code-frame" "^7.14.5" + "@babel/parser" "^7.15.4" + "@babel/types" "^7.15.4" + +"@babel/traverse@^7.13.0", "@babel/traverse@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.15.4.tgz#ff8510367a144bfbff552d9e18e28f3e2889c22d" + integrity sha512-W6lQD8l4rUbQR/vYgSuCAE75ADyyQvOpFVsvPPdkhf6lATXAsQIG9YdtOcu8BB1dZ0LKu+Zo3c1wEcbKeuhdlA== + dependencies: + "@babel/code-frame" "^7.14.5" + "@babel/generator" "^7.15.4" + "@babel/helper-function-name" "^7.15.4" + "@babel/helper-hoist-variables" "^7.15.4" + "@babel/helper-split-export-declaration" "^7.15.4" + "@babel/parser" "^7.15.4" + "@babel/types" "^7.15.4" debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.12.1", "@babel/types@^7.12.13", "@babel/types@^7.13.0", "@babel/types@^7.13.12", "@babel/types@^7.13.13", "@babel/types@^7.13.14", "@babel/types@^7.4.4": - version "7.13.14" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.13.14.tgz#c35a4abb15c7cd45a2746d78ab328e362cbace0d" - integrity sha512-A2aa3QTkWoyqsZZFl56MLUsfmh7O0gN41IPvXAE/++8ojpbz12SszD7JEGYVdn4f9Kt4amIei07swF1h4AqmmQ== +"@babel/types@^7.14.9", "@babel/types@^7.15.4", "@babel/types@^7.15.6", "@babel/types@^7.4.4": + version "7.15.6" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.15.6.tgz#99abdc48218b2881c058dd0a7ab05b99c9be758f" + integrity sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig== dependencies: - "@babel/helper-validator-identifier" "^7.12.11" - lodash "^4.17.19" + "@babel/helper-validator-identifier" "^7.14.9" to-fast-properties "^2.0.0" +"@polka/url@^1.0.0-next.20": + version "1.0.0-next.21" + resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.21.tgz#5de5a2385a35309427f6011992b544514d559aa1" + integrity sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g== + +"@types/jquery@^3.5.5": + version "3.5.8" + resolved "https://registry.yarnpkg.com/@types/jquery/-/jquery-3.5.8.tgz#83bfbcdf4e625c5471590f92703c06aadb052a09" + integrity sha512-cXk6NwqjDYg+UI9p2l3x0YmPa4m7RrXqmbK4IpVVpRJiYXU/QTo+UZrn54qfE1+9Gao4qpYqUnxm5ZCy2FTXAw== + dependencies: + "@types/sizzle" "*" + "@types/json-schema@^7.0.5": - version "7.0.7" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad" - integrity sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA== + version "7.0.9" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d" + integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ== + +"@types/mithril@^2.0.7": + version "2.0.8" + resolved "https://registry.yarnpkg.com/@types/mithril/-/mithril-2.0.8.tgz#b7b6f58bdc7b244802f5ff919805e947d8e45b4e" + integrity sha512-QzVV70DqUhWfLFpMFDBI9rRxtzeUUpbhiFDpUJYSV92AePgl+Qfficgv2MOb1Ceb+lBOQU8+L+Hjf2UielQjEw== + +"@types/sizzle@*": + version "2.3.3" + resolved "https://registry.yarnpkg.com/@types/sizzle/-/sizzle-2.3.3.tgz#ff5e2f1902969d305225a047c8a0fd5c915cebef" + integrity sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ== + +"@types/throttle-debounce@^2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@types/throttle-debounce/-/throttle-debounce-2.1.0.tgz#1c3df624bfc4b62f992d3012b84c56d41eab3776" + integrity sha512-5eQEtSCoESnh2FsiLTxE121IiE60hnMqcb435fShf4bpLRjEu1Eoekht23y6zXS9Ts3l+Szu3TARnTsA0GkOkQ== "@webassemblyjs/ast@1.9.0": version "1.9.0" @@ -1062,11 +1151,21 @@ resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== +acorn-walk@^8.0.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" + integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== + acorn@^6.4.1: version "6.4.2" resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== +acorn@^8.0.4: + version "8.5.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.5.0.tgz#4512ccb99b3698c752591e9bb4472e38ad43cee2" + integrity sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q== + ajv-errors@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" @@ -1099,6 +1198,13 @@ ansi-styles@^3.2.0, ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" +ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + anymatch@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" @@ -1107,10 +1213,10 @@ anymatch@^2.0.0: micromatch "^3.1.4" normalize-path "^2.1.1" -anymatch@~3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" - integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== +anymatch@~3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== dependencies: normalize-path "^3.0.0" picomatch "^2.0.4" @@ -1173,10 +1279,10 @@ atob@^2.1.2: resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== -babel-loader@^8.0.0: - version "8.2.2" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.2.2.tgz#9363ce84c10c9a40e6c753748e1441b60c8a0b81" - integrity sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g== +babel-loader@^8.2.2: + version "8.2.3" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.2.3.tgz#8986b40f1a64cacfcb4b8429320085ef68b1342d" + integrity sha512-n4Zeta8NC3QAsuyiizu0GkmRcQ6clkV9WFUnUf1iXP//IeSKbWjofW3UHyZVwlOB4y039YQKefawyTn64Zwbuw== dependencies: find-cache-dir "^3.3.1" loader-utils "^1.4.0" @@ -1190,34 +1296,34 @@ babel-plugin-dynamic-import-node@^2.3.3: dependencies: object.assign "^4.1.0" -babel-plugin-polyfill-corejs2@^0.1.4: - version "0.1.10" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.1.10.tgz#a2c5c245f56c0cac3dbddbf0726a46b24f0f81d1" - integrity sha512-DO95wD4g0A8KRaHKi0D51NdGXzvpqVLnLu5BTvDlpqUEpTmeEtypgC1xqesORaWmiUOQI14UHKlzNd9iZ2G3ZA== +babel-plugin-polyfill-corejs2@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.2.tgz#e9124785e6fd94f94b618a7954e5693053bf5327" + integrity sha512-kISrENsJ0z5dNPq5eRvcctITNHYXWOA4DUZRFYCz3jYCcvTb/A546LIddmoGNMVYg2U38OyFeNosQwI9ENTqIQ== dependencies: - "@babel/compat-data" "^7.13.0" - "@babel/helper-define-polyfill-provider" "^0.1.5" + "@babel/compat-data" "^7.13.11" + "@babel/helper-define-polyfill-provider" "^0.2.2" semver "^6.1.1" -babel-plugin-polyfill-corejs3@^0.1.3: - version "0.1.7" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.1.7.tgz#80449d9d6f2274912e05d9e182b54816904befd0" - integrity sha512-u+gbS9bbPhZWEeyy1oR/YaaSpod/KDT07arZHb80aTpl8H5ZBq+uN1nN9/xtX7jQyfLdPfoqI4Rue/MQSWJquw== +babel-plugin-polyfill-corejs3@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.5.tgz#2779846a16a1652244ae268b1e906ada107faf92" + integrity sha512-ninF5MQNwAX9Z7c9ED+H2pGt1mXdP4TqzlHKyPIYmJIYz0N+++uwdM7RnJukklhzJ54Q84vA4ZJkgs7lu5vqcw== dependencies: - "@babel/helper-define-polyfill-provider" "^0.1.5" - core-js-compat "^3.8.1" + "@babel/helper-define-polyfill-provider" "^0.2.2" + core-js-compat "^3.16.2" -babel-plugin-polyfill-regenerator@^0.1.2: - version "0.1.6" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.1.6.tgz#0fe06a026fe0faa628ccc8ba3302da0a6ce02f3f" - integrity sha512-OUrYG9iKPKz8NxswXbRAdSwF0GhRdIEMTloQATJi4bDuFqrXaXcCUT/VGNrr8pBcjMh1RxZ7Xt9cytVJTJfvMg== +babel-plugin-polyfill-regenerator@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.2.tgz#b310c8d642acada348c1fa3b3e6ce0e851bee077" + integrity sha512-Goy5ghsc21HgPDFtzRkSirpZVW35meGoTmTOb2bxqdl60ghub4xOidgNTHaZfQ2FaxQsKmwvXtOAkcIS4SMBWg== dependencies: - "@babel/helper-define-polyfill-provider" "^0.1.5" + "@babel/helper-define-polyfill-provider" "^0.2.2" 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= + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== base64-js@^1.0.2: version "1.5.1" @@ -1371,21 +1477,21 @@ browserify-zlib@^0.2.0: dependencies: pako "~1.0.5" -browserslist@^4.14.5, browserslist@^4.16.3: - version "4.16.3" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.3.tgz#340aa46940d7db878748567c5dea24a48ddf3717" - integrity sha512-vIyhWmIkULaq04Gt93txdh+j02yX/JzlyhLYbV3YQCn/zvES3JnY7TifHHvvr1w5hTDluNKMkV05cs4vy8Q7sw== +browserslist@^4.16.6, browserslist@^4.17.5: + version "4.17.5" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.17.5.tgz#c827bbe172a4c22b123f5e337533ceebadfdd559" + integrity sha512-I3ekeB92mmpctWBoLXe0d5wPS2cBuRvvW0JyyJHMrk9/HmP2ZjrTboNAZ8iuGqaEIlKguljbQY32OkOJIRrgoA== dependencies: - caniuse-lite "^1.0.30001181" - colorette "^1.2.1" - electron-to-chromium "^1.3.649" + caniuse-lite "^1.0.30001271" + electron-to-chromium "^1.3.878" escalade "^3.1.1" - node-releases "^1.1.70" + node-releases "^2.0.1" + picocolors "^1.0.0" buffer-from@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" - integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== buffer-xor@^1.0.3: version "1.0.3" @@ -1455,10 +1561,10 @@ camelcase@^5.0.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -caniuse-lite@^1.0.30001181: - version "1.0.30001207" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001207.tgz#364d47d35a3007e528f69adb6fecb07c2bb2cc50" - integrity sha512-UPQZdmAsyp2qfCTiMU/zqGSWOYaY9F9LL61V8f+8MrubsaDGpaHD9HRV/EWZGULZn0Hxu48SKzI5DgFwTvHuYw== +caniuse-lite@^1.0.30001271: + version "1.0.30001272" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001272.tgz#8e9790ff995e9eb6e1f4c45cd07ddaa87cddbb14" + integrity sha512-DV1j9Oot5dydyH1v28g25KoVm7l8MTxazwuiH3utWiAS6iL/9Nh//TGwqFEeqqN8nnWYQ8HHhUq+o4QPt9kvYw== chalk@^2.0.0, chalk@^2.4.2: version "2.4.2" @@ -1469,6 +1575,14 @@ chalk@^2.0.0, chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" +chalk@^4.1.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + chokidar@^2.1.8: version "2.1.8" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" @@ -1489,19 +1603,19 @@ chokidar@^2.1.8: fsevents "^1.2.7" chokidar@^3.4.1: - version "3.5.1" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" - integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw== + version "3.5.2" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.2.tgz#dba3976fcadb016f66fd365021d91600d01c1e75" + integrity sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ== dependencies: - anymatch "~3.1.1" + anymatch "~3.1.2" braces "~3.0.2" - glob-parent "~5.1.0" + glob-parent "~5.1.2" is-binary-path "~2.1.0" is-glob "~4.0.1" normalize-path "~3.0.0" - readdirp "~3.5.0" + readdirp "~3.6.0" optionalDependencies: - fsevents "~2.3.1" + fsevents "~2.3.2" chownr@^1.1.1: version "1.1.4" @@ -1509,11 +1623,9 @@ chownr@^1.1.1: integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== chrome-trace-event@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4" - integrity sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ== - dependencies: - tslib "^1.9.0" + version "1.0.3" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" + integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: version "1.0.4" @@ -1557,21 +1669,33 @@ color-convert@^1.9.0: dependencies: color-name "1.1.3" +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + color-name@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= -colorette@^1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" - integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== commander@^2.20.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== +commander@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" + integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== + commondir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" @@ -1608,9 +1732,9 @@ constants-browserify@^1.0.0: integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= convert-source-map@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" - integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== + version "1.8.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" + integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== dependencies: safe-buffer "~5.1.1" @@ -1631,18 +1755,18 @@ copy-descriptor@^0.1.0: resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= -core-js-compat@^3.8.1, core-js-compat@^3.9.0: - version "3.10.0" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.10.0.tgz#3600dc72869673c110215ee7a005a8609dea0fe1" - integrity sha512-9yVewub2MXNYyGvuLnMHcN1k9RkvB7/ofktpeKTIaASyB88YYqGzUnu0ywMMhJrDHOMiTjSHWGzR+i7Wb9Z1kQ== +core-js-compat@^3.16.0, core-js-compat@^3.16.2: + version "3.19.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.19.0.tgz#b3b93f93c8721b3ed52b91f12f964cc410967f8b" + integrity sha512-R09rKZ56ccGBebjTLZHvzDxhz93YPT37gBm6qUhnwj3Kt7aCjjZWD1injyNbyeFHxNKfeZBSyds6O9n3MKq1sw== dependencies: - browserslist "^4.16.3" + browserslist "^4.17.5" semver "7.0.0" core-util-is@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== create-ecdh@^4.0.0: version "4.0.4" @@ -1708,6 +1832,11 @@ cyclist@^1.0.1: resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= +dayjs@^1.10.4: + version "1.10.7" + resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.10.7.tgz#2cf5f91add28116748440866a0a1d26f3a6ce468" + integrity sha512-P6twpd70BcPK34K26uJ1KT3wlhpuOAPoMwJzpsIWUxHZ7wpmbdZL/hQqBDfz7hGurYSa5PhzdhDHtt319hL3ig== + debug@^2.2.0, debug@^2.3.3: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" @@ -1716,9 +1845,9 @@ debug@^2.2.0, debug@^2.3.3: ms "2.0.0" debug@^4.1.0, debug@^4.1.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" - integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== + version "4.3.2" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" + integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== dependencies: ms "2.1.2" @@ -1788,6 +1917,11 @@ domain-browser@^1.1.1: resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== +duplexer@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" + integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== + duplexify@^3.4.2, duplexify@^3.6.0: version "3.7.1" resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" @@ -1798,10 +1932,10 @@ duplexify@^3.4.2, duplexify@^3.6.0: readable-stream "^2.0.0" stream-shift "^1.0.0" -electron-to-chromium@^1.3.649: - version "1.3.707" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.707.tgz#71386d0ceca6727835c33ba31f507f6824d18c35" - integrity sha512-BqddgxNPrcWnbDdJw7SzXVzPmp+oiyjVrc7tkQVaznPGSS9SKZatw6qxoP857M+HbOyyqJQwYQtsuFIMSTNSZA== +electron-to-chromium@^1.3.878: + version "1.3.884" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.884.tgz#0cd8c3a80271fd84a81f284c60fb3c9ecb33c166" + integrity sha512-kOaCAa+biA98PwH5BpCkeUeTL6mCeg8p3Q3OhqzPyqhu/5QUnWAN2wr/3IK8xMQxIV76kfoQpP+Bn/wij/jXrg== elliptic@^6.5.3: version "6.5.4" @@ -1880,9 +2014,9 @@ estraverse@^4.1.1: integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== estraverse@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" - integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== esutils@^2.0.2: version "2.0.3" @@ -1998,9 +2132,9 @@ find-cache-dir@^2.1.0: pkg-dir "^3.0.0" find-cache-dir@^3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880" - integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ== + version "3.3.2" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b" + integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== dependencies: commondir "^1.0.1" make-dir "^3.0.2" @@ -2031,25 +2165,34 @@ findup-sync@^3.0.0: micromatch "^3.0.4" resolve-dir "^1.0.1" -flarum-webpack-config@^0.1.0-beta.10: - version "0.1.0-beta.10" - resolved "https://registry.yarnpkg.com/flarum-webpack-config/-/flarum-webpack-config-0.1.0-beta.10.tgz#8271be87f076cfb27fb76afa5fdf5ed9d03c069e" - integrity sha512-Iri/5sGBW4ebUQIZw9thR3LdS/avhdlgqgOxy2so1Abh6IyVNjaHInPgHNJSCMxbvfQJz4K3kcsbIpjwi3YB+g== - dependencies: - "@babel/core" "^7.0.0" - "@babel/plugin-proposal-class-properties" "^7.0.0" - "@babel/plugin-transform-object-assign" "^7.0.0" - "@babel/plugin-transform-react-jsx" "^7.0.0" - "@babel/plugin-transform-runtime" "^7.0.0" - "@babel/preset-env" "^7.0.0" - "@babel/preset-react" "^7.0.0" - "@babel/runtime" "^7.0.0" - babel-loader "^8.0.0" - -flarum@^0.1.0-beta.16: - version "0.1.0-beta.16" - resolved "https://registry.yarnpkg.com/flarum/-/flarum-0.1.0-beta.16.tgz#6571adfd6632ea25794ab5270a9bd8ac2f38e1d3" - integrity sha512-uovm+6J8TO35dfbTSRtHRH6tz71W4dnEDfB63NOKHIhOz8oRh65qyWpXtlBOjv9f1cFMkMcjGHbWetb5lAIEnQ== +flarum-tsconfig@^1.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/flarum-tsconfig/-/flarum-tsconfig-1.0.2.tgz#1dda4d867a1dddc627c2afbc74af12d602371ecd" + integrity sha512-RUaN7D6noLK9vY1F86NIc+IlIP1YAA3bJ4jGR5pIm8UxvLBLW8qrAHzIosuQJgvnge7VgTA5c2LoNefUK/9EiQ== + dependencies: + "@types/jquery" "^3.5.5" + "@types/mithril" "^2.0.7" + "@types/throttle-debounce" "^2.1.0" + dayjs "^1.10.4" + +flarum-webpack-config@^1.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/flarum-webpack-config/-/flarum-webpack-config-1.0.0.tgz#daf76829d1a71d1af61b5ab6c98e6c61aa6f1b1a" + integrity sha512-T+olIRaIVetPJMP8xlbMnp7tzT/d/ZWI6Mr7twRBdsKbKO7dpKS2+fjnKL6QqNYgOLElT/TWrRSbTp7EiL1yXA== + dependencies: + "@babel/core" "^7.14.3" + "@babel/plugin-proposal-class-properties" "^7.13.0" + "@babel/plugin-proposal-private-methods" "^7.13.0" + "@babel/plugin-transform-object-assign" "^7.12.13" + "@babel/plugin-transform-react-jsx" "^7.14.3" + "@babel/plugin-transform-runtime" "^7.14.3" + "@babel/preset-env" "^7.14.2" + "@babel/preset-react" "^7.13.13" + "@babel/preset-typescript" "^7.13.0" + "@babel/runtime" "^7.14.0" + babel-loader "^8.2.2" + typescript "^4.3.2" + webpack-bundle-analyzer "^4.4.2" flush-write-stream@^1.0.0: version "1.1.1" @@ -2102,7 +2245,7 @@ fsevents@^1.2.7: bindings "^1.5.0" nan "^2.12.1" -fsevents@~2.3.1: +fsevents@~2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== @@ -2144,7 +2287,7 @@ glob-parent@^3.1.0: is-glob "^3.1.0" path-dirname "^1.0.0" -glob-parent@~5.1.0: +glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== @@ -2152,9 +2295,9 @@ glob-parent@~5.1.0: is-glob "^4.0.1" glob@^7.1.3, glob@^7.1.4: - version "7.1.6" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" - integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + version "7.2.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" + integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" @@ -2205,15 +2348,27 @@ globals@^11.1.0: integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2: - version "4.2.6" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" - integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== + version "4.2.8" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a" + integrity sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg== + +gzip-size@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-6.0.0.tgz#065367fd50c239c0671cbcbad5be3e2eeb10e462" + integrity sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q== + dependencies: + duplexer "^0.1.2" has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + has-symbols@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" @@ -2390,9 +2545,9 @@ is-buffer@^1.1.5: integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== 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== + version "2.8.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.0.tgz#0321336c3d0925e497fd97f5d95cb114a5ccd548" + integrity sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw== dependencies: has "^1.0.3" @@ -2458,9 +2613,9 @@ is-glob@^3.1.0: is-extglob "^2.1.0" is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" - integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: is-extglob "^2.1.1" @@ -2612,7 +2767,7 @@ lodash.debounce@^4.0.8: resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= -lodash@^4.17.19: +lodash@^4.17.20: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -2703,6 +2858,11 @@ miller-rabin@^4.0.0: bn.js "^4.0.0" brorand "^1.0.1" +mime@^2.3.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.5.2.tgz#6e3dc6cc2b9510643830e5f19d5cb753da5eeabe" + integrity sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg== + minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" @@ -2779,9 +2939,9 @@ ms@2.1.2: integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== nan@^2.12.1: - version "2.14.2" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" - integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== + version "2.15.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.15.0.tgz#3f34a473ff18e15c1b5626b62903b5ad6e665fee" + integrity sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ== nanomatch@^1.2.9: version "1.2.13" @@ -2839,10 +2999,10 @@ node-libs-browser@^2.2.1: util "^0.11.0" vm-browserify "^1.0.1" -node-releases@^1.1.70: - version "1.1.71" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.71.tgz#cb1334b179896b1c89ecfdd4b725fb7bbdfc7dbb" - integrity sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg== +node-releases@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.1.tgz#3d1d395f204f1f2f29a54358b9fb678765ad2fc5" + integrity sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA== normalize-path@^2.1.1: version "2.1.1" @@ -2906,6 +3066,11 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0: dependencies: wrappy "1" +opener@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" + integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== + os-browserify@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" @@ -3003,14 +3168,14 @@ path-key@^2.0.1: integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= 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== + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== pbkdf2@^3.0.3: - version "3.1.1" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.1.tgz#cb8724b0fada984596856d1a6ebafd3584654b94" - integrity sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg== + version "3.1.2" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" + integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== dependencies: create-hash "^1.1.2" create-hmac "^1.1.4" @@ -3018,10 +3183,15 @@ pbkdf2@^3.0.3: safe-buffer "^5.0.1" sha.js "^2.4.8" +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + picomatch@^2.0.4, picomatch@^2.2.1: - version "2.2.2" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" - integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== + version "2.3.0" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" + integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== pify@^4.0.1: version "4.0.1" @@ -3175,29 +3345,29 @@ readdirp@^2.2.1: micromatch "^3.1.10" readable-stream "^2.0.2" -readdirp@~3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" - integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== dependencies: picomatch "^2.2.1" -regenerate-unicode-properties@^8.2.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" - integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA== +regenerate-unicode-properties@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-9.0.0.tgz#54d09c7115e1f53dc2314a974b32c1c344efe326" + integrity sha512-3E12UeNSPfjrgwjkR81m5J7Aw/T55Tu7nUyZVQYCKEOs+2dkxEY+DpPtZzO4YruuiPb7NkYLVcyJC4+zCbk5pA== dependencies: - regenerate "^1.4.0" + regenerate "^1.4.2" -regenerate@^1.4.0: +regenerate@^1.4.2: version "1.4.2" resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== regenerator-runtime@^0.13.4: - version "0.13.7" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" - integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== + version "0.13.9" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" + integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== regenerator-transform@^0.14.2: version "0.14.5" @@ -3215,26 +3385,26 @@ regex-not@^1.0.0, regex-not@^1.0.2: safe-regex "^1.1.0" regexpu-core@^4.7.1: - version "4.7.1" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.1.tgz#2dea5a9a07233298fbf0db91fa9abc4c6e0f8ad6" - integrity sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ== - dependencies: - regenerate "^1.4.0" - regenerate-unicode-properties "^8.2.0" - regjsgen "^0.5.1" - regjsparser "^0.6.4" - unicode-match-property-ecmascript "^1.0.4" - unicode-match-property-value-ecmascript "^1.2.0" - -regjsgen@^0.5.1: + version "4.8.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.8.0.tgz#e5605ba361b67b1718478501327502f4479a98f0" + integrity sha512-1F6bYsoYiz6is+oz70NWur2Vlh9KWtswuRuzJOfeYUrfPX2o8n74AnUVaOGDbUqVGO9fNHu48/pjJO4sNVwsOg== + dependencies: + regenerate "^1.4.2" + regenerate-unicode-properties "^9.0.0" + regjsgen "^0.5.2" + regjsparser "^0.7.0" + unicode-match-property-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript "^2.0.0" + +regjsgen@^0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== -regjsparser@^0.6.4: - version "0.6.9" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.9.tgz#b489eef7c9a2ce43727627011429cf833a7183e6" - integrity sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ== +regjsparser@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.7.0.tgz#a6b667b54c885e18b52554cb4960ef71187e9968" + integrity sha512-A4pcaORqmNMDVwUjWoTzuhwMGpP+NykpfqAsEgI1FSH/EzC7lrN5TMd+kN8YCovX+jMpu8eaqXgXPCa0g8FQNQ== dependencies: jsesc "~0.5.0" @@ -3244,9 +3414,9 @@ remove-trailing-separator@^1.0.1: integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= repeat-element@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" - integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== + version "1.1.4" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9" + integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ== repeat-string@^1.6.1: version "1.6.1" @@ -3425,6 +3595,15 @@ shebang-regex@^1.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= +sirv@^1.0.7: + version "1.0.18" + resolved "https://registry.yarnpkg.com/sirv/-/sirv-1.0.18.tgz#105fab52fb656ce8a2bebbf36b11052005952899" + integrity sha512-f2AOPogZmXgJ9Ma2M22ZEhc1dNtRIzcEkiflMFeVTRq+OViOZMvH1IPMVOwrKaxpSaHioBJiDR0SluRqGa7atA== + dependencies: + "@polka/url" "^1.0.0-next.20" + mime "^2.3.1" + totalist "^1.0.0" + snapdragon-node@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" @@ -3472,9 +3651,9 @@ source-map-resolve@^0.5.0: urix "^0.1.0" source-map-support@~0.5.12: - version "0.5.19" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" - integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== + version "0.5.20" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.20.tgz#12166089f8f5e5e8c56926b377633392dd2cb6c9" + integrity sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw== dependencies: buffer-from "^1.0.0" source-map "^0.6.0" @@ -3502,9 +3681,9 @@ split-string@^3.0.1, split-string@^3.0.2: extend-shallow "^3.0.0" ssri@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8" - integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA== + version "6.0.2" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.2.tgz#157939134f20464e7301ddba3e90ffa8f7728ac5" + integrity sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q== dependencies: figgy-pudding "^3.5.1" @@ -3592,6 +3771,13 @@ supports-color@^6.1.0: dependencies: has-flag "^3.0.0" +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + tapable@^1.0.0, tapable@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" @@ -3678,10 +3864,10 @@ to-regex@^3.0.1, to-regex@^3.0.2: regex-not "^1.0.2" safe-regex "^1.1.0" -tslib@^1.9.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== +totalist@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/totalist/-/totalist-1.1.0.tgz#a4d65a3e546517701e3e5c37a47a70ac97fe56df" + integrity sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g== tty-browserify@0.0.0: version "0.0.0" @@ -3693,28 +3879,33 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= -unicode-canonical-property-names-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" - integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== +typescript@^4.3.2: + version "4.4.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.4.4.tgz#2cd01a1a1f160704d3101fd5a58ff0f9fcb8030c" + integrity sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA== -unicode-match-property-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" - integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== +unicode-canonical-property-names-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" + integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== + +unicode-match-property-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" + integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== dependencies: - unicode-canonical-property-names-ecmascript "^1.0.4" - unicode-property-aliases-ecmascript "^1.0.4" + unicode-canonical-property-names-ecmascript "^2.0.0" + unicode-property-aliases-ecmascript "^2.0.0" -unicode-match-property-value-ecmascript@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" - integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== +unicode-match-property-value-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz#1a01aa57247c14c568b89775a54938788189a714" + integrity sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw== -unicode-property-aliases-ecmascript@^1.0.4: - version "1.1.0" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" - integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== +unicode-property-aliases-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz#0a36cb9a585c4f6abd51ad1deddb285c165297c8" + integrity sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ== union-value@^1.0.0: version "1.0.1" @@ -3825,7 +4016,22 @@ watchpack@^1.7.4: chokidar "^3.4.1" watchpack-chokidar2 "^2.0.1" -webpack-cli@^3.0.7: +webpack-bundle-analyzer@^4.4.2: + version "4.5.0" + resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.5.0.tgz#1b0eea2947e73528754a6f9af3e91b2b6e0f79d5" + integrity sha512-GUMZlM3SKwS8Z+CKeIFx7CVoHn3dXFcUAjT/dcZQQmfSZGvitPfMob2ipjai7ovFFqPvTqkEZ/leL4O0YOdAYQ== + dependencies: + acorn "^8.0.4" + acorn-walk "^8.0.0" + chalk "^4.1.0" + commander "^7.2.0" + gzip-size "^6.0.0" + lodash "^4.17.20" + opener "^1.5.2" + sirv "^1.0.7" + ws "^7.3.1" + +webpack-cli@^3.0: version "3.3.12" resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.12.tgz#94e9ada081453cd0aa609c99e500012fd3ad2d4a" integrity sha512-NVWBaz9k839ZH/sinurM+HcDvJOTXwSjYp1ku+5XKeOC03z8v5QitnK/x+lAxGXFyhdayoIf/GOpv85z3/xPag== @@ -3850,7 +4056,7 @@ webpack-sources@^1.4.0, webpack-sources@^1.4.1: source-list-map "^2.0.0" source-map "~0.6.1" -webpack@^4.0.0: +webpack@^4.0: version "4.46.0" resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.46.0.tgz#bf9b4404ea20a073605e0a011d188d77cb6ad542" integrity sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q== @@ -3912,15 +4118,20 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= +ws@^7.3.1: + version "7.5.5" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.5.tgz#8b4bc4af518cfabd0473ae4f99144287b33eb881" + integrity sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w== + xtend@^4.0.0, xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== y18n@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.1.tgz#8db2b83c31c5d75099bb890b23f3094891e247d4" - integrity sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ== + version "4.0.3" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" + integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== yallist@^3.0.2: version "3.1.1" diff --git a/resources/less/forum.less b/resources/less/forum.less index 8fdb0ed..72eb7d7 100644 --- a/resources/less/forum.less +++ b/resources/less/forum.less @@ -33,7 +33,7 @@ background: white; box-shadow: 0 0 5px rgba(0, 0, 0, 0.5); border-radius: 10px; - margin: 10px; + margin: 8px; padding: 15px; .CarvingContestPumpkin { diff --git a/resources/locale/en.yml b/resources/locale/en.yml index 9446745..43be578 100644 --- a/resources/locale/en.yml +++ b/resources/locale/en.yml @@ -23,7 +23,7 @@ clarkwinkelmann-carving-contest: you_text: => core.ref.you others_link: => core.ref.some_others liked_by_self_text: "{users} like this." - liked_by_text: "{users} likes this.|{users} like this." + liked_by_text: "{count, plural, one {{users} likes this.} other {{users} like this.}}" modal: title: Participate diff --git a/src/Content/Entries.php b/src/Content/Entries.php index 42f6e59..9dc4259 100644 --- a/src/Content/Entries.php +++ b/src/Content/Entries.php @@ -2,11 +2,9 @@ namespace ClarkWinkelmann\CarvingContest\Content; -use ClarkWinkelmann\CarvingContest\Controllers\EntryIndexController; use Flarum\Api\Client; use Flarum\Frontend\Document; use Flarum\Http\Exception\RouteNotFoundException; -use Flarum\User\User; use Psr\Http\Message\ServerRequestInterface; class Entries @@ -20,16 +18,14 @@ public function __construct(Client $api) public function __invoke(Document $document, ServerRequestInterface $request) { - $apiDocument = $this->getApiDocument($request->getAttribute('actor')); + $apiDocument = $this->getApiDocument($request); $document->payload['apiDocument'] = $apiDocument; - - return $document; } - protected function getApiDocument(User $actor) + protected function getApiDocument(ServerRequestInterface $request) { - $response = $this->api->send(EntryIndexController::class, $actor); + $response = $this->api->withParentRequest($request)->get('/carving-contest/entries'); if ($response->getStatusCode() === 403) { throw new RouteNotFoundException(); diff --git a/src/Entry.php b/src/Entry.php index 05dfd2f..22c2358 100644 --- a/src/Entry.php +++ b/src/Entry.php @@ -5,6 +5,7 @@ use Carbon\Carbon; use Flarum\Database\AbstractModel; use Flarum\User\User; +use Illuminate\Database\Eloquent\Relations; /** * @property int $id @@ -27,12 +28,12 @@ class Entry extends AbstractModel 'created_at' => 'datetime', ]; - public function user() + public function user(): Relations\BelongsTo { return $this->belongsTo(User::class); } - public function likes() + public function likes(): Relations\BelongsToMany { return $this->belongsToMany(User::class, 'carving_contest_likes'); } diff --git a/src/Serializers/EntrySerializer.php b/src/Serializers/EntrySerializer.php index 6358e6d..1d82a06 100644 --- a/src/Serializers/EntrySerializer.php +++ b/src/Serializers/EntrySerializer.php @@ -14,7 +14,7 @@ class EntrySerializer extends AbstractSerializer * @param Entry $entry * @return array */ - protected function getDefaultAttributes($entry) + protected function getDefaultAttributes($entry): array { return [ 'name' => $entry->name,