From d4d38eef45ef6c1dca0799bdd29d21876a997f46 Mon Sep 17 00:00:00 2001 From: Gianni Carafa Date: Tue, 26 Dec 2023 19:10:38 +0100 Subject: [PATCH 01/95] moved to new setup --- client-new/.browserslistrc | 4 + client-new/.editorconfig | 5 + client-new/.eslintrc.js | 14 + client-new/.gitignore | 22 + client-new/README.md | 69 + client-new/index.html | 17 + client-new/package.json | 36 + client-new/public/favicon.ico | Bin 0 -> 15406 bytes client-new/src/App.vue | 7 + client-new/src/assets/logo.png | Bin 0 -> 11955 bytes client-new/src/assets/logo.svg | 6 + client-new/src/components/HelloWorld.vue | 75 + client-new/src/layouts/default/AppBar.vue | 13 + client-new/src/layouts/default/Default.vue | 12 + client-new/src/layouts/default/View.vue | 9 + client-new/src/main.ts | 20 + client-new/src/plugins/index.ts | 18 + client-new/src/plugins/vuetify.ts | 26 + client-new/src/router/index.ts | 26 + client-new/src/styles/settings.scss | 10 + client-new/src/views/Home.vue | 7 + client-new/src/vite-env.d.ts | 7 + client-new/tsconfig.json | 25 + client-new/tsconfig.node.json | 9 + client-new/vite.config.ts | 44 + client-new/yarn.lock | 1698 +++++++++++++++++ .env.template => server/.env.template | 0 .env.test => server/.env.test | 0 VERSION => server/VERSION | 0 config.yaml => server/config.yaml | 0 package.json => server/package.json | 4 +- {src => server/src}/addons/cloudflare.ts | 0 {src => server/src}/addons/kuberoCouchDB.ts | 0 .../src}/addons/kuberoElasticsearch.ts | 0 {src => server/src}/addons/kuberoKafka.ts | 0 {src => server/src}/addons/kuberoMail.ts | 0 {src => server/src}/addons/kuberoMemcached.ts | 0 {src => server/src}/addons/kuberoMongoDB.ts | 0 {src => server/src}/addons/kuberoMysql.ts | 0 .../src}/addons/kuberoPostgresql.ts | 0 {src => server/src}/addons/kuberoRabbitMQ.ts | 0 {src => server/src}/addons/kuberoRedis.ts | 0 {src => server/src}/addons/minio.ts | 0 {src => server/src}/addons/mongoDB.ts | 0 {src => server/src}/addons/mongoDBCluster.ts | 0 {src => server/src}/addons/plugin.ts | 0 {src => server/src}/addons/postgresCluster.ts | 0 {src => server/src}/addons/redis.ts | 0 {src => server/src}/addons/redisCluster.ts | 0 {src => server/src}/configure.ts | 0 {src => server/src}/git/bitbucket.ts | 0 {src => server/src}/git/gitea.ts | 0 {src => server/src}/git/github.ts | 0 {src => server/src}/git/gitlab.ts | 0 {src => server/src}/git/gogs.ts | 0 {src => server/src}/git/repo.test.ts | 0 {src => server/src}/git/repo.ts | 0 {src => server/src}/git/types.ts | 0 {src => server/src}/index.ts | 2 +- {src => server/src}/kubero.ts | 0 {src => server/src}/modules/addons.test.ts | 0 {src => server/src}/modules/addons.ts | 0 {src => server/src}/modules/application.ts | 0 {src => server/src}/modules/auth.test.ts | 0 {src => server/src}/modules/auth.ts | 0 {src => server/src}/modules/config.ts | 0 {src => server/src}/modules/kubectl.test.ts | 0 {src => server/src}/modules/kubectl.ts | 0 {src => server/src}/modules/pipeline.ts | 0 {src => server/src}/modules/settings.ts | 0 {src => server/src}/routes/addons.test.ts | 0 {src => server/src}/routes/addons.ts | 0 {src => server/src}/routes/apps.ts | 0 {src => server/src}/routes/auth.ts | 0 {src => server/src}/routes/config.ts | 0 {src => server/src}/routes/logs.ts | 0 {src => server/src}/routes/pipelines.ts | 0 {src => server/src}/routes/repo.ts | 0 {src => server/src}/routes/security.ts | 0 {src => server/src}/routes/services.ts | 0 {src => server/src}/routes/settings.ts | 0 {src => server/src}/socket.ts | 0 {src => server/src}/types.ts | 0 swagger.js => server/swagger.js | 0 swagger.json => server/swagger.json | 0 tsconfig.json => server/tsconfig.json | 2 +- yarn.lock => server/yarn.lock | 0 87 files changed, 2183 insertions(+), 4 deletions(-) create mode 100644 client-new/.browserslistrc create mode 100644 client-new/.editorconfig create mode 100644 client-new/.eslintrc.js create mode 100644 client-new/.gitignore create mode 100644 client-new/README.md create mode 100644 client-new/index.html create mode 100644 client-new/package.json create mode 100644 client-new/public/favicon.ico create mode 100644 client-new/src/App.vue create mode 100644 client-new/src/assets/logo.png create mode 100644 client-new/src/assets/logo.svg create mode 100644 client-new/src/components/HelloWorld.vue create mode 100644 client-new/src/layouts/default/AppBar.vue create mode 100644 client-new/src/layouts/default/Default.vue create mode 100644 client-new/src/layouts/default/View.vue create mode 100644 client-new/src/main.ts create mode 100644 client-new/src/plugins/index.ts create mode 100644 client-new/src/plugins/vuetify.ts create mode 100644 client-new/src/router/index.ts create mode 100644 client-new/src/styles/settings.scss create mode 100644 client-new/src/views/Home.vue create mode 100644 client-new/src/vite-env.d.ts create mode 100644 client-new/tsconfig.json create mode 100644 client-new/tsconfig.node.json create mode 100644 client-new/vite.config.ts create mode 100644 client-new/yarn.lock rename .env.template => server/.env.template (100%) rename .env.test => server/.env.test (100%) rename VERSION => server/VERSION (100%) rename config.yaml => server/config.yaml (100%) rename package.json => server/package.json (94%) rename {src => server/src}/addons/cloudflare.ts (100%) rename {src => server/src}/addons/kuberoCouchDB.ts (100%) rename {src => server/src}/addons/kuberoElasticsearch.ts (100%) rename {src => server/src}/addons/kuberoKafka.ts (100%) rename {src => server/src}/addons/kuberoMail.ts (100%) rename {src => server/src}/addons/kuberoMemcached.ts (100%) rename {src => server/src}/addons/kuberoMongoDB.ts (100%) rename {src => server/src}/addons/kuberoMysql.ts (100%) rename {src => server/src}/addons/kuberoPostgresql.ts (100%) rename {src => server/src}/addons/kuberoRabbitMQ.ts (100%) rename {src => server/src}/addons/kuberoRedis.ts (100%) rename {src => server/src}/addons/minio.ts (100%) rename {src => server/src}/addons/mongoDB.ts (100%) rename {src => server/src}/addons/mongoDBCluster.ts (100%) rename {src => server/src}/addons/plugin.ts (100%) rename {src => server/src}/addons/postgresCluster.ts (100%) rename {src => server/src}/addons/redis.ts (100%) rename {src => server/src}/addons/redisCluster.ts (100%) rename {src => server/src}/configure.ts (100%) rename {src => server/src}/git/bitbucket.ts (100%) rename {src => server/src}/git/gitea.ts (100%) rename {src => server/src}/git/github.ts (100%) rename {src => server/src}/git/gitlab.ts (100%) rename {src => server/src}/git/gogs.ts (100%) rename {src => server/src}/git/repo.test.ts (100%) rename {src => server/src}/git/repo.ts (100%) rename {src => server/src}/git/types.ts (100%) rename {src => server/src}/index.ts (91%) rename {src => server/src}/kubero.ts (100%) rename {src => server/src}/modules/addons.test.ts (100%) rename {src => server/src}/modules/addons.ts (100%) rename {src => server/src}/modules/application.ts (100%) rename {src => server/src}/modules/auth.test.ts (100%) rename {src => server/src}/modules/auth.ts (100%) rename {src => server/src}/modules/config.ts (100%) rename {src => server/src}/modules/kubectl.test.ts (100%) rename {src => server/src}/modules/kubectl.ts (100%) rename {src => server/src}/modules/pipeline.ts (100%) rename {src => server/src}/modules/settings.ts (100%) rename {src => server/src}/routes/addons.test.ts (100%) rename {src => server/src}/routes/addons.ts (100%) rename {src => server/src}/routes/apps.ts (100%) rename {src => server/src}/routes/auth.ts (100%) rename {src => server/src}/routes/config.ts (100%) rename {src => server/src}/routes/logs.ts (100%) rename {src => server/src}/routes/pipelines.ts (100%) rename {src => server/src}/routes/repo.ts (100%) rename {src => server/src}/routes/security.ts (100%) rename {src => server/src}/routes/services.ts (100%) rename {src => server/src}/routes/settings.ts (100%) rename {src => server/src}/socket.ts (100%) rename {src => server/src}/types.ts (100%) rename swagger.js => server/swagger.js (100%) rename swagger.json => server/swagger.json (100%) rename tsconfig.json => server/tsconfig.json (99%) rename yarn.lock => server/yarn.lock (100%) diff --git a/client-new/.browserslistrc b/client-new/.browserslistrc new file mode 100644 index 000000000..dc3bc09a2 --- /dev/null +++ b/client-new/.browserslistrc @@ -0,0 +1,4 @@ +> 1% +last 2 versions +not dead +not ie 11 diff --git a/client-new/.editorconfig b/client-new/.editorconfig new file mode 100644 index 000000000..7053c49a0 --- /dev/null +++ b/client-new/.editorconfig @@ -0,0 +1,5 @@ +[*.{js,jsx,ts,tsx,vue}] +indent_style = space +indent_size = 2 +trim_trailing_whitespace = true +insert_final_newline = true diff --git a/client-new/.eslintrc.js b/client-new/.eslintrc.js new file mode 100644 index 000000000..5f3949bd8 --- /dev/null +++ b/client-new/.eslintrc.js @@ -0,0 +1,14 @@ +module.exports = { + root: true, + env: { + node: true, + }, + extends: [ + 'plugin:vue/vue3-essential', + 'eslint:recommended', + '@vue/eslint-config-typescript', + ], + rules: { + 'vue/multi-word-component-names': 'off', + }, +} diff --git a/client-new/.gitignore b/client-new/.gitignore new file mode 100644 index 000000000..11f5d7142 --- /dev/null +++ b/client-new/.gitignore @@ -0,0 +1,22 @@ +.DS_Store +node_modules +/dist + +# local env files +.env.local +.env.*.local + +# Log files +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* + +# Editor directories and files +.idea +.vscode +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/client-new/README.md b/client-new/README.md new file mode 100644 index 000000000..cea000b0d --- /dev/null +++ b/client-new/README.md @@ -0,0 +1,69 @@ +# base + +## Project setup + +``` +# yarn +yarn + +# npm +npm install + +# pnpm +pnpm install + +# bun +bun install +``` + +### Compiles and hot-reloads for development + +``` +# yarn +yarn dev + +# npm +npm run dev + +# pnpm +pnpm dev + +# bun +pnpm run dev +``` + +### Compiles and minifies for production + +``` +# yarn +yarn build + +# npm +npm run build + +# pnpm +pnpm build + +# bun +pnpm run build +``` + +### Lints and fixes files + +``` +# yarn +yarn lint + +# npm +npm run lint + +# pnpm +pnpm lint + +# bun +pnpm run lint +``` + +### Customize configuration + +See [Configuration Reference](https://vitejs.dev/config/). diff --git a/client-new/index.html b/client-new/index.html new file mode 100644 index 000000000..6338ad0aa --- /dev/null +++ b/client-new/index.html @@ -0,0 +1,17 @@ + + + + + + + + + Kubero + + + +
+ + + + diff --git a/client-new/package.json b/client-new/package.json new file mode 100644 index 000000000..4e110ed5e --- /dev/null +++ b/client-new/package.json @@ -0,0 +1,36 @@ +{ + "name": "client-new", + "version": "0.0.0", + "private": true, + "scripts": { + "dev": "vite", + "watch": "vue-tsc --noEmit && vite build --watch", + "build": "vue-tsc --noEmit && vite build", + "preview": "vite preview", + "lint": "eslint . --fix --ignore-path .gitignore" + }, + "dependencies": { + "@mdi/font": "7.0.96", + "core-js": "^3.29.0", + "roboto-fontface": "*", + "vue": "^3.3.0", + "vue-router": "^4.2.0", + "vuetify": "^3.4.0", + + "axios": "^1.6.2" + }, + "devDependencies": { + "@babel/types": "^7.21.4", + "@types/node": "^18.15.0", + "@vitejs/plugin-vue": "^4.0.0", + "@vue/eslint-config-typescript": "^11.0.0", + "eslint": "^8.22.0", + "eslint-plugin-vue": "^9.3.0", + "sass": "^1.60.0", + "typescript": "^5.0.0", + "unplugin-fonts": "^1.0.3", + "vite": "^4.2.0", + "vite-plugin-vuetify": "^1.0.0", + "vue-tsc": "^1.2.0" + } +} diff --git a/client-new/public/favicon.ico b/client-new/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..54993ec3e0021456e7c19d0026ec1dde0c3a4e14 GIT binary patch literal 15406 zcmeI2S$9>%63370`T@KT_noJ^eDulZ`%!%KT|`8Q3^ECdTm&Hm1O#MKnZ?DB@noLo z;Ur{ENXR^pxo-U`*~fi0d!L*npjqDCYn|+!-rd#R)&H)luBu4nt;jzj@4OSy=a$Ha zZ$~2UMf z^yC*vXJ(dEpFJn}d%u*1YuBW=uuz7Zn&d@&y>w=0OI7+A$=v#J0?+ck*dEx)OZDb`bGEbmC|pINyAT9WxTsvntuMp zca7b-d6K(x=kofte=0L$WAg0x-*w)Z(v_W~>vBTjys7UHBU6z7<`(L38?<>APWpiJgo3n1Li+v5+hpdmc z$!KevGep93c5GY*s;bR4C^~p3kcJ;^Y#8)CWumuN7{{+2b$qKjb4Hqfy(LXIf7bU5 zv-yJBucbbA@1D&8e6FQmN^RBVVIL|_pO(7Imv!zp<7=o@y9b+#wPEjpC5I+;g=^%e z)3^BWk!72(p;5r!YGruGp1?(g+LsR9pl9x9pW9jQiAK$i3mT6z!dRTo z*@+2R@|g)(r9X6@Q*gScWrvk;lpZ$d2&y{)~!5sDnZ8em6X`oMSi-+cfXf^ zcfw={YhhmQZ+U5HCaZe#^JSpAS_W%t)uu0%jwes0?cuVWo&AZw9OGUBpU2eB&)bl1iV0?McD=HJlcF)7_9eg0){Jv4wtM@4iaw&+9;DWnX`=iGa zw2mP9oF7V6dipDKDBOQw8DmPHeTD{isC>QG6ztn)@`Jmem)}8S`PFl0<8H;;xC_=^ zxUejj6g%t@WvspZmAU!RT5lbD3Etgh0olHylj>9#te1AG{fZ79GFk4O2lv)way?c0 zskTEFRcBGjoTx zxN3?ty<_U$ynO5C~i-hGSz;(PO((^~3?zb5tlsc!(E6~1eHPw+O@8A6dyhu_op)leBP6NeafdcAs&vew7;y} z{La+lH%(=(%#SrM%*>j=4Q=x$TxhDYk9(XaDYz^d7 z#LEg!;=GD~2!6qr*QGfDRqBVq_nnvaMe_0W+;V>NH6Bovo*_dG4GH_n9<}}UFl8)3 zYf|$cf?_hx%%MB4dyH?AoC#t~#Yc`v)<)%s_OCphE@K^?@jb@hU4G(3%4;Y-^0mns z@Xc9t{N`Yt+!o{tIV$9f6sVswD7PZnKCkwTeZwbApye1T7SR>6n(qTfk(bCj&J*#x zp~fb~Y1HC%wdXHbtd=$j`c3JV9y?}niPtt~;#cT1&08W~f{r!a>+z90a$vQm=}BFq zqfc9I-HPu480TC-->|g~*})z&-(ro;5R1ZI2#S@wGFQa}a?JFa>N9kT=>V+{D#Rlk zTp>5e3uA4_nwlTZ|M4y09D-r&G2+P0iU}||+SZmdE^TwsIl-q%#Rdf|kYg9Sb4S;G zQyQ;bxA-XkV?Pi(f-dLQUBH_Yrvx*can1*49GYM=hAnmWoY^+S4vEXeR1T0III8PM zN2P)ZcsbtLWpPC4kqgke5-%Q!wI*WO%`fFEdI%eceI-`6uo8=1oSU~Z;l_K`wr$3X zxk=4M)OD=6Xdhxe*mLCdVIw(t5$E-X;YdRO3 zi5M*7Q8+8a;p22Y>or?M@lEa{wibDmZ4Vz>yp%C(&Yw5@fkAX}gW6)L#JJ!+?J3Af zbT=`6@;`{tF-})buG)vS7LNv_%$fPR%UDN;<$eauKh=745Eve;tqbIZn-(^Wv!^C+ z)Q(=w#ADlw2DYzhyha3T97aV2|}72hm6Tc&E;AxelG= z&`$PbzT9V!3Fsj5fY1qcCwFWY9h-fc(EMSiAfJ=b{WHIjtAWgP3UUdXW=L~quwA%! z^b{1v_3`5Tf?&)1nR84w7JGosM(_C*u;So`@8qZ?*k2ymmu##z`3=mFyN7N!`^9H5 z$Q+aTZwSvDT_5KSe-JW-vtV~O&H2NA0aM5l?o=Bc=Z*JQ{vw;~?zVC_VSkV*Z+z@c hg2!;3ukQ{X@-pOQh=C9Te@6^xdQezG4y>C4{{!J-e!Tzy literal 0 HcmV?d00001 diff --git a/client-new/src/App.vue b/client-new/src/App.vue new file mode 100644 index 000000000..61d085113 --- /dev/null +++ b/client-new/src/App.vue @@ -0,0 +1,7 @@ + + + diff --git a/client-new/src/assets/logo.png b/client-new/src/assets/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..a5f23ae7bff64954cf3537377a9f99306baf083d GIT binary patch literal 11955 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 + + + + + diff --git a/client-new/src/components/HelloWorld.vue b/client-new/src/components/HelloWorld.vue new file mode 100644 index 000000000..2927e2714 --- /dev/null +++ b/client-new/src/components/HelloWorld.vue @@ -0,0 +1,75 @@ + + + diff --git a/client-new/src/layouts/default/AppBar.vue b/client-new/src/layouts/default/AppBar.vue new file mode 100644 index 000000000..da031498e --- /dev/null +++ b/client-new/src/layouts/default/AppBar.vue @@ -0,0 +1,13 @@ + + + diff --git a/client-new/src/layouts/default/Default.vue b/client-new/src/layouts/default/Default.vue new file mode 100644 index 000000000..e642631a0 --- /dev/null +++ b/client-new/src/layouts/default/Default.vue @@ -0,0 +1,12 @@ + + + diff --git a/client-new/src/layouts/default/View.vue b/client-new/src/layouts/default/View.vue new file mode 100644 index 000000000..8e9e4143c --- /dev/null +++ b/client-new/src/layouts/default/View.vue @@ -0,0 +1,9 @@ + + + diff --git a/client-new/src/main.ts b/client-new/src/main.ts new file mode 100644 index 000000000..c8fc17224 --- /dev/null +++ b/client-new/src/main.ts @@ -0,0 +1,20 @@ +/** + * main.ts + * + * Bootstraps Vuetify and other plugins then mounts the App` + */ + +// Plugins +import { registerPlugins } from '@/plugins' + +// Components +import App from './App.vue' + +// Composables +import { createApp } from 'vue' + +const app = createApp(App) + +registerPlugins(app) + +app.mount('#app') diff --git a/client-new/src/plugins/index.ts b/client-new/src/plugins/index.ts new file mode 100644 index 000000000..d3c748a31 --- /dev/null +++ b/client-new/src/plugins/index.ts @@ -0,0 +1,18 @@ +/** + * plugins/index.ts + * + * Automatically included in `./src/main.ts` + */ + +// Plugins +import vuetify from './vuetify' +import router from '../router' + +// Types +import type { App } from 'vue' + +export function registerPlugins (app: App) { + app + .use(vuetify) + .use(router) +} diff --git a/client-new/src/plugins/vuetify.ts b/client-new/src/plugins/vuetify.ts new file mode 100644 index 000000000..c276519a4 --- /dev/null +++ b/client-new/src/plugins/vuetify.ts @@ -0,0 +1,26 @@ +/** + * plugins/vuetify.ts + * + * Framework documentation: https://vuetifyjs.com` + */ + +// Styles +import '@mdi/font/css/materialdesignicons.css' +import 'vuetify/styles' + +// Composables +import { createVuetify } from 'vuetify' + +// https://vuetifyjs.com/en/introduction/why-vuetify/#feature-guides +export default createVuetify({ + theme: { + themes: { + light: { + colors: { + primary: '#1867C0', + secondary: '#5CBBF6', + }, + }, + }, + }, +}) diff --git a/client-new/src/router/index.ts b/client-new/src/router/index.ts new file mode 100644 index 000000000..b14008a75 --- /dev/null +++ b/client-new/src/router/index.ts @@ -0,0 +1,26 @@ +// Composables +import { createRouter, createWebHistory } from 'vue-router' + +const routes = [ + { + path: '/', + component: () => import('@/layouts/default/Default.vue'), + children: [ + { + path: '', + name: 'Home', + // route level code-splitting + // this generates a separate chunk (Home-[hash].js) for this route + // which is lazy-loaded when the route is visited. + component: () => import('@/views/Home.vue'), + }, + ], + }, +] + +const router = createRouter({ + history: createWebHistory(process.env.BASE_URL), + routes, +}) + +export default router diff --git a/client-new/src/styles/settings.scss b/client-new/src/styles/settings.scss new file mode 100644 index 000000000..3e36a279b --- /dev/null +++ b/client-new/src/styles/settings.scss @@ -0,0 +1,10 @@ +/** + * src/styles/settings.scss + * + * Configures SASS variables and Vuetify overwrites + */ + +// https://vuetifyjs.com/features/sass-variables/` +// @use 'vuetify/settings' with ( +// $color-pack: false +// ); diff --git a/client-new/src/views/Home.vue b/client-new/src/views/Home.vue new file mode 100644 index 000000000..7646ab78c --- /dev/null +++ b/client-new/src/views/Home.vue @@ -0,0 +1,7 @@ + + + diff --git a/client-new/src/vite-env.d.ts b/client-new/src/vite-env.d.ts new file mode 100644 index 000000000..323c78a6c --- /dev/null +++ b/client-new/src/vite-env.d.ts @@ -0,0 +1,7 @@ +/// + +declare module '*.vue' { + import type { DefineComponent } from 'vue' + const component: DefineComponent<{}, {}, any> + export default component +} diff --git a/client-new/tsconfig.json b/client-new/tsconfig.json new file mode 100644 index 000000000..aa6f0fdde --- /dev/null +++ b/client-new/tsconfig.json @@ -0,0 +1,25 @@ +{ + "compilerOptions": { + "baseUrl": ".", + "target": "ESNext", + "useDefineForClassFields": true, + "module": "ESNext", + "moduleResolution": "Node", + "strict": true, + "jsx": "preserve", + "resolveJsonModule": true, + "isolatedModules": true, + "esModuleInterop": true, + "lib": ["ESNext", "DOM"], + "skipLibCheck": true, + "noEmit": true, + "paths": { + "@/*": [ + "src/*" + ] + } + }, + "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"], + "references": [{ "path": "./tsconfig.node.json" }], + "exclude": ["node_modules"] +} diff --git a/client-new/tsconfig.node.json b/client-new/tsconfig.node.json new file mode 100644 index 000000000..9d31e2aed --- /dev/null +++ b/client-new/tsconfig.node.json @@ -0,0 +1,9 @@ +{ + "compilerOptions": { + "composite": true, + "module": "ESNext", + "moduleResolution": "Node", + "allowSyntheticDefaultImports": true + }, + "include": ["vite.config.ts"] +} diff --git a/client-new/vite.config.ts b/client-new/vite.config.ts new file mode 100644 index 000000000..484c0364d --- /dev/null +++ b/client-new/vite.config.ts @@ -0,0 +1,44 @@ +// Plugins +import vue from '@vitejs/plugin-vue' +import vuetify, { transformAssetUrls } from 'vite-plugin-vuetify' +import ViteFonts from 'unplugin-fonts/vite' + +// Utilities +import { defineConfig } from 'vite' +import { fileURLToPath, URL } from 'node:url' + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [ + vue({ + template: { transformAssetUrls }, + }), + // https://github.com/vuetifyjs/vuetify-loader/tree/master/packages/vite-plugin#readme + vuetify({ + autoImport: true, + styles: { + configFile: 'src/styles/settings.scss', + }, + }), + ViteFonts({ + google: { + families: [ + { + name: 'Roboto', + styles: 'wght@100;300;400;500;700;900', + }, + ], + }, + }), + ], + define: { 'process.env': {} }, + resolve: { + alias: { + '@': fileURLToPath(new URL('./src', import.meta.url)), + }, + extensions: ['.js', '.json', '.jsx', '.mjs', '.ts', '.tsx', '.vue'], + }, + server: { + port: 3000, + }, +}) diff --git a/client-new/yarn.lock b/client-new/yarn.lock new file mode 100644 index 000000000..28864d4e3 --- /dev/null +++ b/client-new/yarn.lock @@ -0,0 +1,1698 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@aashutoshrathi/word-wrap@^1.2.3": + version "1.2.6" + resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" + integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== + +"@babel/helper-string-parser@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz#9478c707febcbbe1ddb38a3d91a2e054ae622d83" + integrity sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ== + +"@babel/helper-validator-identifier@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" + integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== + +"@babel/parser@^7.23.5": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.6.tgz#ba1c9e512bda72a47e285ae42aff9d2a635a9e3b" + integrity sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ== + +"@babel/types@^7.21.4": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.6.tgz#be33fdb151e1f5a56877d704492c240fc71c7ccd" + integrity sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg== + dependencies: + "@babel/helper-string-parser" "^7.23.4" + "@babel/helper-validator-identifier" "^7.22.20" + to-fast-properties "^2.0.0" + +"@esbuild/android-arm64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz#984b4f9c8d0377443cc2dfcef266d02244593622" + integrity sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ== + +"@esbuild/android-arm@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.18.20.tgz#fedb265bc3a589c84cc11f810804f234947c3682" + integrity sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw== + +"@esbuild/android-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.18.20.tgz#35cf419c4cfc8babe8893d296cd990e9e9f756f2" + integrity sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg== + +"@esbuild/darwin-arm64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz#08172cbeccf95fbc383399a7f39cfbddaeb0d7c1" + integrity sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA== + +"@esbuild/darwin-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz#d70d5790d8bf475556b67d0f8b7c5bdff053d85d" + integrity sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ== + +"@esbuild/freebsd-arm64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz#98755cd12707f93f210e2494d6a4b51b96977f54" + integrity sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw== + +"@esbuild/freebsd-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz#c1eb2bff03915f87c29cece4c1a7fa1f423b066e" + integrity sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ== + +"@esbuild/linux-arm64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz#bad4238bd8f4fc25b5a021280c770ab5fc3a02a0" + integrity sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA== + +"@esbuild/linux-arm@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz#3e617c61f33508a27150ee417543c8ab5acc73b0" + integrity sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg== + +"@esbuild/linux-ia32@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz#699391cccba9aee6019b7f9892eb99219f1570a7" + integrity sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA== + +"@esbuild/linux-loong64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz#e6fccb7aac178dd2ffb9860465ac89d7f23b977d" + integrity sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg== + +"@esbuild/linux-mips64el@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz#eeff3a937de9c2310de30622a957ad1bd9183231" + integrity sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ== + +"@esbuild/linux-ppc64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz#2f7156bde20b01527993e6881435ad79ba9599fb" + integrity sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA== + +"@esbuild/linux-riscv64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz#6628389f210123d8b4743045af8caa7d4ddfc7a6" + integrity sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A== + +"@esbuild/linux-s390x@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz#255e81fb289b101026131858ab99fba63dcf0071" + integrity sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ== + +"@esbuild/linux-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz#c7690b3417af318a9b6f96df3031a8865176d338" + integrity sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w== + +"@esbuild/netbsd-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz#30e8cd8a3dded63975e2df2438ca109601ebe0d1" + integrity sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A== + +"@esbuild/openbsd-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz#7812af31b205055874c8082ea9cf9ab0da6217ae" + integrity sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg== + +"@esbuild/sunos-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz#d5c275c3b4e73c9b0ecd38d1ca62c020f887ab9d" + integrity sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ== + +"@esbuild/win32-arm64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz#73bc7f5a9f8a77805f357fab97f290d0e4820ac9" + integrity sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg== + +"@esbuild/win32-ia32@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz#ec93cbf0ef1085cc12e71e0d661d20569ff42102" + integrity sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g== + +"@esbuild/win32-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz#786c5f41f043b07afb1af37683d7c33668858f6d" + integrity sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ== + +"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" + integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== + dependencies: + eslint-visitor-keys "^3.3.0" + +"@eslint-community/regexpp@^4.4.0", "@eslint-community/regexpp@^4.6.1": + version "4.10.0" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63" + integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== + +"@eslint/eslintrc@^2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad" + integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.6.0" + globals "^13.19.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + +"@eslint/js@8.56.0": + version "8.56.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.56.0.tgz#ef20350fec605a7f7035a01764731b2de0f3782b" + integrity sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A== + +"@humanwhocodes/config-array@^0.11.13": + version "0.11.13" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.13.tgz#075dc9684f40a531d9b26b0822153c1e832ee297" + integrity sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ== + dependencies: + "@humanwhocodes/object-schema" "^2.0.1" + debug "^4.1.1" + minimatch "^3.0.5" + +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + +"@humanwhocodes/object-schema@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz#e5211452df060fa8522b55c7b3c0c4d1981cb044" + integrity sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw== + +"@jridgewell/sourcemap-codec@^1.4.15": + version "1.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@mdi/font@7.0.96": + version "7.0.96" + resolved "https://registry.yarnpkg.com/@mdi/font/-/font-7.0.96.tgz#9853c222623072f5575b4039c8c195ea929b61fc" + integrity sha512-rzlxTfR64hqY8yiBzDjmANfcd8rv+T5C0Yedv/TWk2QyAQYdc66e0kaN1ipmnYU3RukHRTRcBARHzzm+tIhL7w== + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@types/json-schema@^7.0.9": + version "7.0.15" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" + integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== + +"@types/node@^18.15.0": + version "18.19.3" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.3.tgz#e4723c4cb385641d61b983f6fe0b716abd5f8fc0" + integrity sha512-k5fggr14DwAytoA/t8rPrIz++lXK7/DqckthCmoZOKNsEbJkId4Z//BqgApXBUGrGddrigYa1oqheo/7YmW4rg== + dependencies: + undici-types "~5.26.4" + +"@types/semver@^7.3.12": + version "7.5.6" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.6.tgz#c65b2bfce1bec346582c07724e3f8c1017a20339" + integrity sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A== + +"@typescript-eslint/eslint-plugin@^5.59.1": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz#aeef0328d172b9e37d9bab6dbc13b87ed88977db" + integrity sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag== + dependencies: + "@eslint-community/regexpp" "^4.4.0" + "@typescript-eslint/scope-manager" "5.62.0" + "@typescript-eslint/type-utils" "5.62.0" + "@typescript-eslint/utils" "5.62.0" + debug "^4.3.4" + graphemer "^1.4.0" + ignore "^5.2.0" + natural-compare-lite "^1.4.0" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/parser@^5.59.1": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.62.0.tgz#1b63d082d849a2fcae8a569248fbe2ee1b8a56c7" + integrity sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA== + dependencies: + "@typescript-eslint/scope-manager" "5.62.0" + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/typescript-estree" "5.62.0" + debug "^4.3.4" + +"@typescript-eslint/scope-manager@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz#d9457ccc6a0b8d6b37d0eb252a23022478c5460c" + integrity sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w== + dependencies: + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/visitor-keys" "5.62.0" + +"@typescript-eslint/type-utils@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz#286f0389c41681376cdad96b309cedd17d70346a" + integrity sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew== + dependencies: + "@typescript-eslint/typescript-estree" "5.62.0" + "@typescript-eslint/utils" "5.62.0" + debug "^4.3.4" + tsutils "^3.21.0" + +"@typescript-eslint/types@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f" + integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== + +"@typescript-eslint/typescript-estree@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz#7d17794b77fabcac615d6a48fb143330d962eb9b" + integrity sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA== + dependencies: + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/visitor-keys" "5.62.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/utils@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.62.0.tgz#141e809c71636e4a75daa39faed2fb5f4b10df86" + integrity sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@types/json-schema" "^7.0.9" + "@types/semver" "^7.3.12" + "@typescript-eslint/scope-manager" "5.62.0" + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/typescript-estree" "5.62.0" + eslint-scope "^5.1.1" + semver "^7.3.7" + +"@typescript-eslint/visitor-keys@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz#2174011917ce582875954ffe2f6912d5931e353e" + integrity sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw== + dependencies: + "@typescript-eslint/types" "5.62.0" + eslint-visitor-keys "^3.3.0" + +"@ungap/structured-clone@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" + integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== + +"@vitejs/plugin-vue@^4.0.0": + version "4.6.0" + resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue/-/plugin-vue-4.6.0.tgz#6e1011303f8224e04d339756f1fa398ba79fc0b3" + integrity sha512-XHuyFdAikWRmHuAd89FOyUGIjrBU5KlxJtyi2hVeR9ySGFxQwE0bl5xAQju/ArMq5azdBivY4d+D2yPKwoYWUg== + +"@volar/language-core@1.11.1", "@volar/language-core@~1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@volar/language-core/-/language-core-1.11.1.tgz#ecdf12ea8dc35fb8549e517991abcbf449a5ad4f" + integrity sha512-dOcNn3i9GgZAcJt43wuaEykSluAuOkQgzni1cuxLxTV0nJKanQztp7FxyswdRILaKH+P2XZMPRp2S4MV/pElCw== + dependencies: + "@volar/source-map" "1.11.1" + +"@volar/source-map@1.11.1", "@volar/source-map@~1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@volar/source-map/-/source-map-1.11.1.tgz#535b0328d9e2b7a91dff846cab4058e191f4452f" + integrity sha512-hJnOnwZ4+WT5iupLRnuzbULZ42L7BWWPMmruzwtLhJfpDVoZLjNBxHDi2sY2bgZXCKlpU5XcsMFoYrsQmPhfZg== + dependencies: + muggle-string "^0.3.1" + +"@volar/typescript@~1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@volar/typescript/-/typescript-1.11.1.tgz#ba86c6f326d88e249c7f5cfe4b765be3946fd627" + integrity sha512-iU+t2mas/4lYierSnoFOeRFQUhAEMgsFuQxoxvwn5EdQopw43j+J27a4lt9LMInx1gLJBC6qL14WYGlgymaSMQ== + dependencies: + "@volar/language-core" "1.11.1" + path-browserify "^1.0.1" + +"@vue/compiler-core@3.3.13": + version "3.3.13" + resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.3.13.tgz#b3d5f8f84caee5de3f31d95cb568d899fd19c599" + integrity sha512-bwi9HShGu7uaZLOErZgsH2+ojsEdsjerbf2cMXPwmvcgZfVPZ2BVZzCVnwZBxTAYd6Mzbmf6izcUNDkWnBBQ6A== + dependencies: + "@babel/parser" "^7.23.5" + "@vue/shared" "3.3.13" + estree-walker "^2.0.2" + source-map-js "^1.0.2" + +"@vue/compiler-dom@3.3.13", "@vue/compiler-dom@^3.3.0": + version "3.3.13" + resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.3.13.tgz#d029e222e545e7ab00be35aafd3abed167f962bf" + integrity sha512-EYRDpbLadGtNL0Gph+HoKiYqXLqZ0xSSpR5Dvnu/Ep7ggaCbjRDIus1MMxTS2Qm0koXED4xSlvTZaTnI8cYAsw== + dependencies: + "@vue/compiler-core" "3.3.13" + "@vue/shared" "3.3.13" + +"@vue/compiler-sfc@3.3.13": + version "3.3.13" + resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.3.13.tgz#7b397acefd5c0c3808701d2855be88c4be60155c" + integrity sha512-DQVmHEy/EKIgggvnGRLx21hSqnr1smUS9Aq8tfxiiot8UR0/pXKHN9k78/qQ7etyQTFj5em5nruODON7dBeumw== + dependencies: + "@babel/parser" "^7.23.5" + "@vue/compiler-core" "3.3.13" + "@vue/compiler-dom" "3.3.13" + "@vue/compiler-ssr" "3.3.13" + "@vue/reactivity-transform" "3.3.13" + "@vue/shared" "3.3.13" + estree-walker "^2.0.2" + magic-string "^0.30.5" + postcss "^8.4.32" + source-map-js "^1.0.2" + +"@vue/compiler-ssr@3.3.13": + version "3.3.13" + resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.3.13.tgz#ad8748abff8d738ac9c6a3c47be42020f0fbaa63" + integrity sha512-d/P3bCeUGmkJNS1QUZSAvoCIW4fkOKK3l2deE7zrp0ypJEy+En2AcypIkqvcFQOcw3F0zt2VfMvNsA9JmExTaw== + dependencies: + "@vue/compiler-dom" "3.3.13" + "@vue/shared" "3.3.13" + +"@vue/devtools-api@^6.5.0": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@vue/devtools-api/-/devtools-api-6.5.1.tgz#7f71f31e40973eeee65b9a64382b13593fdbd697" + integrity sha512-+KpckaAQyfbvshdDW5xQylLni1asvNSGme1JFs8I1+/H5pHEhqUKMEQD/qn3Nx5+/nycBq11qAEi8lk+LXI2dA== + +"@vue/eslint-config-typescript@^11.0.0": + version "11.0.3" + resolved "https://registry.yarnpkg.com/@vue/eslint-config-typescript/-/eslint-config-typescript-11.0.3.tgz#c720efa657d102cd2945bc54b4a79f35d57f6307" + integrity sha512-dkt6W0PX6H/4Xuxg/BlFj5xHvksjpSlVjtkQCpaYJBIEuKj2hOVU7r+TIe+ysCwRYFz/lGqvklntRkCAibsbPw== + dependencies: + "@typescript-eslint/eslint-plugin" "^5.59.1" + "@typescript-eslint/parser" "^5.59.1" + vue-eslint-parser "^9.1.1" + +"@vue/language-core@1.8.26": + version "1.8.26" + resolved "https://registry.yarnpkg.com/@vue/language-core/-/language-core-1.8.26.tgz#7edb6b51a6ed57b618928500c3cbda9757a9f5f0" + integrity sha512-9cmza/Y2YTiOnKZ0Mi9zsNn7Irw+aKirP+5LLWVSNaL3fjKJjW1cD3HGBckasY2RuVh4YycvdA9/Q6EBpVd/7Q== + dependencies: + "@volar/language-core" "~1.11.1" + "@volar/source-map" "~1.11.1" + "@vue/compiler-dom" "^3.3.0" + "@vue/shared" "^3.3.0" + computeds "^0.0.1" + minimatch "^9.0.3" + muggle-string "^0.3.1" + path-browserify "^1.0.1" + vue-template-compiler "^2.7.14" + +"@vue/reactivity-transform@3.3.13": + version "3.3.13" + resolved "https://registry.yarnpkg.com/@vue/reactivity-transform/-/reactivity-transform-3.3.13.tgz#dc8e9be961865dc666e367e1aaaea0716afa5c90" + integrity sha512-oWnydGH0bBauhXvh5KXUy61xr9gKaMbtsMHk40IK9M4gMuKPJ342tKFarY0eQ6jef8906m35q37wwA8DMZOm5Q== + dependencies: + "@babel/parser" "^7.23.5" + "@vue/compiler-core" "3.3.13" + "@vue/shared" "3.3.13" + estree-walker "^2.0.2" + magic-string "^0.30.5" + +"@vue/reactivity@3.3.13": + version "3.3.13" + resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.3.13.tgz#9b1dff3b523a69997b66cba2f86f83839e8285fb" + integrity sha512-fjzCxceMahHhi4AxUBzQqqVhuA21RJ0COaWTbIBl1PruGW1CeY97louZzLi4smpYx+CHfFPPU/CS8NybbGvPKQ== + dependencies: + "@vue/shared" "3.3.13" + +"@vue/runtime-core@3.3.13": + version "3.3.13" + resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.3.13.tgz#e8414218e8c7db94acfcec6fd12044704adda9cf" + integrity sha512-1TzA5TvGuh2zUwMJgdfvrBABWZ7y8kBwBhm7BXk8rvdx2SsgcGfz2ruv2GzuGZNvL1aKnK8CQMV/jFOrxNQUMA== + dependencies: + "@vue/reactivity" "3.3.13" + "@vue/shared" "3.3.13" + +"@vue/runtime-dom@3.3.13": + version "3.3.13" + resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.3.13.tgz#36b42b479d5a394972f305ca8e95c5f648bf55ef" + integrity sha512-JJkpE8R/hJKXqVTgUoODwS5wqKtOsmJPEqmp90PDVGygtJ4C0PtOkcEYXwhiVEmef6xeXcIlrT3Yo5aQ4qkHhQ== + dependencies: + "@vue/runtime-core" "3.3.13" + "@vue/shared" "3.3.13" + csstype "^3.1.3" + +"@vue/server-renderer@3.3.13": + version "3.3.13" + resolved "https://registry.yarnpkg.com/@vue/server-renderer/-/server-renderer-3.3.13.tgz#fccdd0787798173be8929f40f23161c17b60ed36" + integrity sha512-vSnN+nuf6iSqTL3Qgx/9A+BT+0Zf/VJOgF5uMZrKjYPs38GMYyAU1coDyBNHauehXDaP+zl73VhwWv0vBRBHcg== + dependencies: + "@vue/compiler-ssr" "3.3.13" + "@vue/shared" "3.3.13" + +"@vue/shared@3.3.13", "@vue/shared@^3.3.0": + version "3.3.13" + resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.3.13.tgz#4cb73cda958d77ffd389c8640cf7d93a10ac676f" + integrity sha512-/zYUwiHD8j7gKx2argXEMCUXVST6q/21DFU0sTfNX0URJroCe3b1UF6vLJ3lQDfLNIiiRl2ONp7Nh5UVWS6QnA== + +"@vuetify/loader-shared@^1.7.1": + version "1.7.1" + resolved "https://registry.yarnpkg.com/@vuetify/loader-shared/-/loader-shared-1.7.1.tgz#0f63a3d41b6df29a2db1ff438aa1819b237c37a3" + integrity sha512-kLUvuAed6RCvkeeTNJzuy14pqnkur8lTuner7v7pNE/kVhPR97TuyXwBSBMR1cJeiLiOfu6SF5XlCYbXByEx1g== + dependencies: + find-cache-dir "^3.3.2" + upath "^2.0.1" + +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn@^8.11.2, acorn@^8.9.0: + version "8.11.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.2.tgz#ca0d78b51895be5390a5903c5b3bdcdaf78ae40b" + integrity sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w== + +ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +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@~3.1.2: + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +axios@^1.6.2: + version "1.6.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.2.tgz#de67d42c755b571d3e698df1b6504cde9b0ee9f2" + integrity sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A== + dependencies: + follow-redirects "^1.15.0" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +boolbase@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + +braces@^3.0.2, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +chalk@^4.0.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@>=3.0.0 <4.0.0", chokidar@^3.5.3: + version "3.5.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +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.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== + +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== + +computeds@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/computeds/-/computeds-0.0.1.tgz#215b08a4ba3e08a11ff6eee5d6d8d7166a97ce2e" + integrity sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +core-js@^3.29.0: + version "3.34.0" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.34.0.tgz#5705e6ad5982678612e96987d05b27c6c7c274a5" + integrity sha512-aDdvlDder8QmY91H88GzNi9EtQi2TjvQhpCX6B1v/dAZHU1AuLgHvRh54RiOerpEhEW46Tkf+vgAViB/CWC0ag== + +cross-spawn@^7.0.2: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + +csstype@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" + integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== + +de-indent@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d" + integrity sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg== + +debug@^4.1.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +deep-is@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +esbuild@^0.18.10: + version "0.18.20" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.18.20.tgz#4709f5a34801b43b799ab7d6d82f7284a9b7a7a6" + integrity sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA== + optionalDependencies: + "@esbuild/android-arm" "0.18.20" + "@esbuild/android-arm64" "0.18.20" + "@esbuild/android-x64" "0.18.20" + "@esbuild/darwin-arm64" "0.18.20" + "@esbuild/darwin-x64" "0.18.20" + "@esbuild/freebsd-arm64" "0.18.20" + "@esbuild/freebsd-x64" "0.18.20" + "@esbuild/linux-arm" "0.18.20" + "@esbuild/linux-arm64" "0.18.20" + "@esbuild/linux-ia32" "0.18.20" + "@esbuild/linux-loong64" "0.18.20" + "@esbuild/linux-mips64el" "0.18.20" + "@esbuild/linux-ppc64" "0.18.20" + "@esbuild/linux-riscv64" "0.18.20" + "@esbuild/linux-s390x" "0.18.20" + "@esbuild/linux-x64" "0.18.20" + "@esbuild/netbsd-x64" "0.18.20" + "@esbuild/openbsd-x64" "0.18.20" + "@esbuild/sunos-x64" "0.18.20" + "@esbuild/win32-arm64" "0.18.20" + "@esbuild/win32-ia32" "0.18.20" + "@esbuild/win32-x64" "0.18.20" + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +eslint-plugin-vue@^9.3.0: + version "9.19.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-9.19.2.tgz#7ab83a001a1ac8bccae013c5b9cb5d2c644fb376" + integrity sha512-CPDqTOG2K4Ni2o4J5wixkLVNwgctKXFu6oBpVJlpNq7f38lh9I80pRTouZSJ2MAebPJlINU/KTFSXyQfBUlymA== + dependencies: + "@eslint-community/eslint-utils" "^4.4.0" + natural-compare "^1.4.0" + nth-check "^2.1.1" + postcss-selector-parser "^6.0.13" + semver "^7.5.4" + vue-eslint-parser "^9.3.1" + xml-name-validator "^4.0.0" + +eslint-scope@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +eslint-scope@^7.1.1, eslint-scope@^7.2.2: + version "7.2.2" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" + integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: + version "3.4.3" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" + integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== + +eslint@^8.22.0: + version "8.56.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.56.0.tgz#4957ce8da409dc0809f99ab07a1b94832ab74b15" + integrity sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.6.1" + "@eslint/eslintrc" "^2.1.4" + "@eslint/js" "8.56.0" + "@humanwhocodes/config-array" "^0.11.13" + "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" + "@ungap/structured-clone" "^1.2.0" + ajv "^6.12.4" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + doctrine "^3.0.0" + escape-string-regexp "^4.0.0" + eslint-scope "^7.2.2" + eslint-visitor-keys "^3.4.3" + espree "^9.6.1" + esquery "^1.4.2" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + find-up "^5.0.0" + glob-parent "^6.0.2" + globals "^13.19.0" + graphemer "^1.4.0" + ignore "^5.2.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + is-path-inside "^3.0.3" + js-yaml "^4.1.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.3" + strip-ansi "^6.0.1" + text-table "^0.2.0" + +espree@^9.3.1, espree@^9.6.0, espree@^9.6.1: + version "9.6.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" + integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== + dependencies: + acorn "^8.9.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.4.1" + +esquery@^1.4.0, esquery@^1.4.2: + version "1.5.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" + integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +estree-walker@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" + integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-glob@^3.2.12, fast-glob@^3.2.9: + version "3.3.2" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" + integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + +fastq@^1.6.0: + version "1.16.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.16.0.tgz#83b9a9375692db77a822df081edb6a9cf6839320" + integrity sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA== + dependencies: + reusify "^1.0.4" + +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +find-cache-dir@^3.3.2: + 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" + pkg-dir "^4.1.0" + +find-up@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +flat-cache@^3.0.4: + version "3.2.0" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" + integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== + dependencies: + flatted "^3.2.9" + keyv "^4.5.3" + rimraf "^3.0.2" + +flatted@^3.2.9: + version "3.2.9" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf" + integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ== + +follow-redirects@^1.15.0: + version "1.15.3" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.3.tgz#fe2f3ef2690afce7e82ed0b44db08165b207123a" + integrity sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q== + +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + +glob-parent@^5.1.2, 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== + dependencies: + is-glob "^4.0.1" + +glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob@^7.1.3: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^13.19.0: + version "13.24.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" + integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== + dependencies: + type-fest "^0.20.2" + +globby@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + +graphemer@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" + integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== + +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== + +he@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +ignore@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.0.tgz#67418ae40d34d6999c95ff56016759c718c82f78" + integrity sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg== + +immutable@^4.0.0: + version "4.3.4" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.4.tgz#2e07b33837b4bb7662f288c244d1ced1ef65a78f" + integrity sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA== + +import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: + 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" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-path-inside@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== + +keyv@^4.5.3: + version "4.5.4" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== + dependencies: + json-buffer "3.0.1" + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +magic-string@^0.30.5: + version "0.30.5" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.5.tgz#1994d980bd1c8835dc6e78db7cbd4ae4f24746f9" + integrity sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA== + dependencies: + "@jridgewell/sourcemap-codec" "^1.4.15" + +make-dir@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +micromatch@^4.0.4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^9.0.3: + version "9.0.3" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" + integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== + dependencies: + brace-expansion "^2.0.1" + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +muggle-string@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/muggle-string/-/muggle-string-0.3.1.tgz#e524312eb1728c63dd0b2ac49e3282e6ed85963a" + integrity sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg== + +nanoid@^3.3.7: + version "3.3.7" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" + integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== + +natural-compare-lite@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" + integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +nth-check@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" + integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== + dependencies: + boolbase "^1.0.0" + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +optionator@^0.9.3: + version "0.9.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" + integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== + dependencies: + "@aashutoshrathi/word-wrap" "^1.2.3" + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + +p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +path-browserify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" + integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +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, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pkg-dir@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +postcss-selector-parser@^6.0.13: + version "6.0.14" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.14.tgz#9d45f1afbebedae6811a17f49d09754f2ad153b3" + integrity sha512-65xXYsT40i9GyWzlHQ5ShZoK7JZdySeOozi/tz2EezDo6c04q6+ckYMeoY7idaie1qp2dT5KoYQ2yky6JuoHnA== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + +postcss@^8.4.27, postcss@^8.4.32: + version "8.4.32" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.32.tgz#1dac6ac51ab19adb21b8b34fd2d93a86440ef6c9" + integrity sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw== + dependencies: + nanoid "^3.3.7" + picocolors "^1.0.0" + source-map-js "^1.0.2" + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + +punycode@^2.1.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +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" + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +roboto-fontface@*: + version "0.10.0" + resolved "https://registry.yarnpkg.com/roboto-fontface/-/roboto-fontface-0.10.0.tgz#7eee40cfa18b1f7e4e605eaf1a2740afb6fd71b0" + integrity sha512-OlwfYEgA2RdboZohpldlvJ1xngOins5d7ejqnIBWr9KaMxsnBqotpptRXTyfNRLnFpqzX6sTDt+X+a+6udnU8g== + +rollup@^3.27.1: + version "3.29.4" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.29.4.tgz#4d70c0f9834146df8705bfb69a9a19c9e1109981" + integrity sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw== + optionalDependencies: + fsevents "~2.3.2" + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +sass@^1.60.0: + version "1.69.5" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.69.5.tgz#23e18d1c757a35f2e52cc81871060b9ad653dfde" + integrity sha512-qg2+UCJibLr2LCVOt3OlPhr/dqVHWOa9XtZf2OjbLs/T4VPSJ00udtgJxH3neXZm+QqX8B+3cU7RaLqp1iVfcQ== + dependencies: + chokidar ">=3.0.0 <4.0.0" + immutable "^4.0.0" + source-map-js ">=0.6.2 <2.0.0" + +semver@^6.0.0: + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + +semver@^7.3.6, semver@^7.3.7, semver@^7.5.4: + version "7.5.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" + integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== + dependencies: + lru-cache "^6.0.0" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" + integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== + +strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +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" + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +tslib@^1.8.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tsutils@^3.21.0: + version "3.21.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== + dependencies: + tslib "^1.8.1" + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +typescript@^5.0.0: + version "5.3.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.3.tgz#b3ce6ba258e72e6305ba66f5c9b452aaee3ffe37" + integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw== + +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== + +unplugin-fonts@^1.0.3: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unplugin-fonts/-/unplugin-fonts-1.1.1.tgz#cd6600d2a048d8237a010b53c9c4dfb1ea73d80f" + integrity sha512-/Aw/rL9D2aslGGM0vi+2R2aG508RSwawLnnBuo+JDSqYc4cHJO1R1phllhN6GysEhBp/6a4B6+vSFPVapWyAAw== + dependencies: + fast-glob "^3.2.12" + unplugin "^1.3.1" + +unplugin@^1.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/unplugin/-/unplugin-1.5.1.tgz#806688376fa3dcca4d2fa2c5d27cf6cd0370fbef" + integrity sha512-0QkvG13z6RD+1L1FoibQqnvTwVBXvS4XSPwAyinVgoOCl2jAgwzdUKmEj05o4Lt8xwQI85Hb6mSyYkcAGwZPew== + dependencies: + acorn "^8.11.2" + chokidar "^3.5.3" + webpack-sources "^3.2.3" + webpack-virtual-modules "^0.6.0" + +upath@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/upath/-/upath-2.0.1.tgz#50c73dea68d6f6b990f51d279ce6081665d61a8b" + integrity sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w== + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +util-deprecate@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +vite-plugin-vuetify@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/vite-plugin-vuetify/-/vite-plugin-vuetify-1.0.2.tgz#d1777c63aa1b3a308756461b3d0299fd101ee8f4" + integrity sha512-MubIcKD33O8wtgQXlbEXE7ccTEpHZ8nPpe77y9Wy3my2MWw/PgehP9VqTp92BLqr0R1dSL970Lynvisx3UxBFw== + dependencies: + "@vuetify/loader-shared" "^1.7.1" + debug "^4.3.3" + upath "^2.0.1" + +vite@^4.2.0: + version "4.5.1" + resolved "https://registry.yarnpkg.com/vite/-/vite-4.5.1.tgz#3370986e1ed5dbabbf35a6c2e1fb1e18555b968a" + integrity sha512-AXXFaAJ8yebyqzoNB9fu2pHoo/nWX+xZlaRwoeYUxEqBO+Zj4msE5G+BhGBll9lYEKv9Hfks52PAF2X7qDYXQA== + dependencies: + esbuild "^0.18.10" + postcss "^8.4.27" + rollup "^3.27.1" + optionalDependencies: + fsevents "~2.3.2" + +vue-eslint-parser@^9.1.1, vue-eslint-parser@^9.3.1: + version "9.3.2" + resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-9.3.2.tgz#6f9638e55703f1c77875a19026347548d93fd499" + integrity sha512-q7tWyCVaV9f8iQyIA5Mkj/S6AoJ9KBN8IeUSf3XEmBrOtxOZnfTg5s4KClbZBCK3GtnT/+RyCLZyDHuZwTuBjg== + dependencies: + debug "^4.3.4" + eslint-scope "^7.1.1" + eslint-visitor-keys "^3.3.0" + espree "^9.3.1" + esquery "^1.4.0" + lodash "^4.17.21" + semver "^7.3.6" + +vue-router@^4.2.0: + version "4.2.5" + resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-4.2.5.tgz#b9e3e08f1bd9ea363fdd173032620bc50cf0e98a" + integrity sha512-DIUpKcyg4+PTQKfFPX88UWhlagBEBEfJ5A8XDXRJLUnZOvcpMF8o/dnL90vpVkGaPbjvXazV/rC1qBKrZlFugw== + dependencies: + "@vue/devtools-api" "^6.5.0" + +vue-template-compiler@^2.7.14: + version "2.7.16" + resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.7.16.tgz#c81b2d47753264c77ac03b9966a46637482bb03b" + integrity sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ== + dependencies: + de-indent "^1.0.2" + he "^1.2.0" + +vue-tsc@^1.2.0: + version "1.8.26" + resolved "https://registry.yarnpkg.com/vue-tsc/-/vue-tsc-1.8.26.tgz#f66abd1dab4e4593590b2b7d4ede0a696882feec" + integrity sha512-jMEJ4aqU/l1hdgmeExH5h1TFoN+hbho0A2ZAhHy53/947DGm7Qj/bpB85VpECOCwV00h7JYNVnvoD2ceOorB4Q== + dependencies: + "@volar/typescript" "~1.11.1" + "@vue/language-core" "1.8.26" + semver "^7.5.4" + +vue@^3.3.0: + version "3.3.13" + resolved "https://registry.yarnpkg.com/vue/-/vue-3.3.13.tgz#f03098fa1b4e7cc88c133bef92260b55e3767002" + integrity sha512-LDnUpQvDgsfc0u/YgtAgTMXJlJQqjkxW1PVcOnJA5cshPleULDjHi7U45pl2VJYazSSvLH8UKcid/kzH8I0a0Q== + dependencies: + "@vue/compiler-dom" "3.3.13" + "@vue/compiler-sfc" "3.3.13" + "@vue/runtime-dom" "3.3.13" + "@vue/server-renderer" "3.3.13" + "@vue/shared" "3.3.13" + +vuetify@^3.4.0: + version "3.4.8" + resolved "https://registry.yarnpkg.com/vuetify/-/vuetify-3.4.8.tgz#df5b17f8450b0ca79bbef33be0bcd4359bfcabe7" + integrity sha512-fx/cVZNYU1Pk1LWevbCCKU5pv2ew/8EWkLhF75LHSzgU6b0skzQaIq6Gr/qSXbUDAPuJz7zqqGbFD6CSNYsY0w== + +webpack-sources@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" + integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== + +webpack-virtual-modules@^0.6.0: + version "0.6.1" + resolved "https://registry.yarnpkg.com/webpack-virtual-modules/-/webpack-virtual-modules-0.6.1.tgz#ac6fdb9c5adb8caecd82ec241c9631b7a3681b6f" + integrity sha512-poXpCylU7ExuvZK8z+On3kX+S8o/2dQ/SVYueKA0D4WEMXROXgY8Ez50/bQEUmvoSMMrWcrJqCHuhAbsiwg7Dg== + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +xml-name-validator@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-4.0.0.tgz#79a006e2e63149a8600f15430f0a4725d1524835" + integrity sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== diff --git a/.env.template b/server/.env.template similarity index 100% rename from .env.template rename to server/.env.template diff --git a/.env.test b/server/.env.test similarity index 100% rename from .env.test rename to server/.env.test diff --git a/VERSION b/server/VERSION similarity index 100% rename from VERSION rename to server/VERSION diff --git a/config.yaml b/server/config.yaml similarity index 100% rename from config.yaml rename to server/config.yaml diff --git a/package.json b/server/package.json similarity index 94% rename from package.json rename to server/package.json index ee4dec492..f55fc05ce 100644 --- a/package.json +++ b/server/package.json @@ -6,11 +6,11 @@ "author": "Gianni Carafa", "scripts": { "install": "npx tsc", - "build": "npx tsc", + "build": "npx tsc -t es2022 ", "start": "node dist/index.js", "swaggerwatch": "npx swagger-ui-watcher swagger.json", "swaggergen": "node ./swagger.js", - "dev": "concurrently \"npx tsc --watch\" \"nodemon -q --ext 'ts,json' dist/index.js\"", + "dev": "concurrently \"npx tsc -t es2022 --watch\" \"nodemon -q --ext 'ts,json' dist/index.js\"", "debug": "concurrently \"npx tsc --watch\" \"nodemon -q dist/index.js\"", "test": "ENV_FILE=.env.test jest" }, diff --git a/src/addons/cloudflare.ts b/server/src/addons/cloudflare.ts similarity index 100% rename from src/addons/cloudflare.ts rename to server/src/addons/cloudflare.ts diff --git a/src/addons/kuberoCouchDB.ts b/server/src/addons/kuberoCouchDB.ts similarity index 100% rename from src/addons/kuberoCouchDB.ts rename to server/src/addons/kuberoCouchDB.ts diff --git a/src/addons/kuberoElasticsearch.ts b/server/src/addons/kuberoElasticsearch.ts similarity index 100% rename from src/addons/kuberoElasticsearch.ts rename to server/src/addons/kuberoElasticsearch.ts diff --git a/src/addons/kuberoKafka.ts b/server/src/addons/kuberoKafka.ts similarity index 100% rename from src/addons/kuberoKafka.ts rename to server/src/addons/kuberoKafka.ts diff --git a/src/addons/kuberoMail.ts b/server/src/addons/kuberoMail.ts similarity index 100% rename from src/addons/kuberoMail.ts rename to server/src/addons/kuberoMail.ts diff --git a/src/addons/kuberoMemcached.ts b/server/src/addons/kuberoMemcached.ts similarity index 100% rename from src/addons/kuberoMemcached.ts rename to server/src/addons/kuberoMemcached.ts diff --git a/src/addons/kuberoMongoDB.ts b/server/src/addons/kuberoMongoDB.ts similarity index 100% rename from src/addons/kuberoMongoDB.ts rename to server/src/addons/kuberoMongoDB.ts diff --git a/src/addons/kuberoMysql.ts b/server/src/addons/kuberoMysql.ts similarity index 100% rename from src/addons/kuberoMysql.ts rename to server/src/addons/kuberoMysql.ts diff --git a/src/addons/kuberoPostgresql.ts b/server/src/addons/kuberoPostgresql.ts similarity index 100% rename from src/addons/kuberoPostgresql.ts rename to server/src/addons/kuberoPostgresql.ts diff --git a/src/addons/kuberoRabbitMQ.ts b/server/src/addons/kuberoRabbitMQ.ts similarity index 100% rename from src/addons/kuberoRabbitMQ.ts rename to server/src/addons/kuberoRabbitMQ.ts diff --git a/src/addons/kuberoRedis.ts b/server/src/addons/kuberoRedis.ts similarity index 100% rename from src/addons/kuberoRedis.ts rename to server/src/addons/kuberoRedis.ts diff --git a/src/addons/minio.ts b/server/src/addons/minio.ts similarity index 100% rename from src/addons/minio.ts rename to server/src/addons/minio.ts diff --git a/src/addons/mongoDB.ts b/server/src/addons/mongoDB.ts similarity index 100% rename from src/addons/mongoDB.ts rename to server/src/addons/mongoDB.ts diff --git a/src/addons/mongoDBCluster.ts b/server/src/addons/mongoDBCluster.ts similarity index 100% rename from src/addons/mongoDBCluster.ts rename to server/src/addons/mongoDBCluster.ts diff --git a/src/addons/plugin.ts b/server/src/addons/plugin.ts similarity index 100% rename from src/addons/plugin.ts rename to server/src/addons/plugin.ts diff --git a/src/addons/postgresCluster.ts b/server/src/addons/postgresCluster.ts similarity index 100% rename from src/addons/postgresCluster.ts rename to server/src/addons/postgresCluster.ts diff --git a/src/addons/redis.ts b/server/src/addons/redis.ts similarity index 100% rename from src/addons/redis.ts rename to server/src/addons/redis.ts diff --git a/src/addons/redisCluster.ts b/server/src/addons/redisCluster.ts similarity index 100% rename from src/addons/redisCluster.ts rename to server/src/addons/redisCluster.ts diff --git a/src/configure.ts b/server/src/configure.ts similarity index 100% rename from src/configure.ts rename to server/src/configure.ts diff --git a/src/git/bitbucket.ts b/server/src/git/bitbucket.ts similarity index 100% rename from src/git/bitbucket.ts rename to server/src/git/bitbucket.ts diff --git a/src/git/gitea.ts b/server/src/git/gitea.ts similarity index 100% rename from src/git/gitea.ts rename to server/src/git/gitea.ts diff --git a/src/git/github.ts b/server/src/git/github.ts similarity index 100% rename from src/git/github.ts rename to server/src/git/github.ts diff --git a/src/git/gitlab.ts b/server/src/git/gitlab.ts similarity index 100% rename from src/git/gitlab.ts rename to server/src/git/gitlab.ts diff --git a/src/git/gogs.ts b/server/src/git/gogs.ts similarity index 100% rename from src/git/gogs.ts rename to server/src/git/gogs.ts diff --git a/src/git/repo.test.ts b/server/src/git/repo.test.ts similarity index 100% rename from src/git/repo.test.ts rename to server/src/git/repo.test.ts diff --git a/src/git/repo.ts b/server/src/git/repo.ts similarity index 100% rename from src/git/repo.ts rename to server/src/git/repo.ts diff --git a/src/git/types.ts b/server/src/git/types.ts similarity index 100% rename from src/git/types.ts rename to server/src/git/types.ts diff --git a/src/index.ts b/server/src/index.ts similarity index 91% rename from src/index.ts rename to server/src/index.ts index e270677ef..0faa6d4f1 100644 --- a/src/index.ts +++ b/server/src/index.ts @@ -19,7 +19,7 @@ configure(app, server); const maxAge = process.env.NODE_ENV === 'development' ? '1s' : '1h'; -const publicPath = resolve(__dirname, '../client/dist'); +const publicPath = resolve(__dirname, '../../../client-new/dist'); const staticConf = { maxAge: maxAge, etag: true }; app.use(history()); diff --git a/src/kubero.ts b/server/src/kubero.ts similarity index 100% rename from src/kubero.ts rename to server/src/kubero.ts diff --git a/src/modules/addons.test.ts b/server/src/modules/addons.test.ts similarity index 100% rename from src/modules/addons.test.ts rename to server/src/modules/addons.test.ts diff --git a/src/modules/addons.ts b/server/src/modules/addons.ts similarity index 100% rename from src/modules/addons.ts rename to server/src/modules/addons.ts diff --git a/src/modules/application.ts b/server/src/modules/application.ts similarity index 100% rename from src/modules/application.ts rename to server/src/modules/application.ts diff --git a/src/modules/auth.test.ts b/server/src/modules/auth.test.ts similarity index 100% rename from src/modules/auth.test.ts rename to server/src/modules/auth.test.ts diff --git a/src/modules/auth.ts b/server/src/modules/auth.ts similarity index 100% rename from src/modules/auth.ts rename to server/src/modules/auth.ts diff --git a/src/modules/config.ts b/server/src/modules/config.ts similarity index 100% rename from src/modules/config.ts rename to server/src/modules/config.ts diff --git a/src/modules/kubectl.test.ts b/server/src/modules/kubectl.test.ts similarity index 100% rename from src/modules/kubectl.test.ts rename to server/src/modules/kubectl.test.ts diff --git a/src/modules/kubectl.ts b/server/src/modules/kubectl.ts similarity index 100% rename from src/modules/kubectl.ts rename to server/src/modules/kubectl.ts diff --git a/src/modules/pipeline.ts b/server/src/modules/pipeline.ts similarity index 100% rename from src/modules/pipeline.ts rename to server/src/modules/pipeline.ts diff --git a/src/modules/settings.ts b/server/src/modules/settings.ts similarity index 100% rename from src/modules/settings.ts rename to server/src/modules/settings.ts diff --git a/src/routes/addons.test.ts b/server/src/routes/addons.test.ts similarity index 100% rename from src/routes/addons.test.ts rename to server/src/routes/addons.test.ts diff --git a/src/routes/addons.ts b/server/src/routes/addons.ts similarity index 100% rename from src/routes/addons.ts rename to server/src/routes/addons.ts diff --git a/src/routes/apps.ts b/server/src/routes/apps.ts similarity index 100% rename from src/routes/apps.ts rename to server/src/routes/apps.ts diff --git a/src/routes/auth.ts b/server/src/routes/auth.ts similarity index 100% rename from src/routes/auth.ts rename to server/src/routes/auth.ts diff --git a/src/routes/config.ts b/server/src/routes/config.ts similarity index 100% rename from src/routes/config.ts rename to server/src/routes/config.ts diff --git a/src/routes/logs.ts b/server/src/routes/logs.ts similarity index 100% rename from src/routes/logs.ts rename to server/src/routes/logs.ts diff --git a/src/routes/pipelines.ts b/server/src/routes/pipelines.ts similarity index 100% rename from src/routes/pipelines.ts rename to server/src/routes/pipelines.ts diff --git a/src/routes/repo.ts b/server/src/routes/repo.ts similarity index 100% rename from src/routes/repo.ts rename to server/src/routes/repo.ts diff --git a/src/routes/security.ts b/server/src/routes/security.ts similarity index 100% rename from src/routes/security.ts rename to server/src/routes/security.ts diff --git a/src/routes/services.ts b/server/src/routes/services.ts similarity index 100% rename from src/routes/services.ts rename to server/src/routes/services.ts diff --git a/src/routes/settings.ts b/server/src/routes/settings.ts similarity index 100% rename from src/routes/settings.ts rename to server/src/routes/settings.ts diff --git a/src/socket.ts b/server/src/socket.ts similarity index 100% rename from src/socket.ts rename to server/src/socket.ts diff --git a/src/types.ts b/server/src/types.ts similarity index 100% rename from src/types.ts rename to server/src/types.ts diff --git a/swagger.js b/server/swagger.js similarity index 100% rename from swagger.js rename to server/swagger.js diff --git a/swagger.json b/server/swagger.json similarity index 100% rename from swagger.json rename to server/swagger.json diff --git a/tsconfig.json b/server/tsconfig.json similarity index 99% rename from tsconfig.json rename to server/tsconfig.json index e6b37e1cf..c4f6ba4e2 100644 --- a/tsconfig.json +++ b/server/tsconfig.json @@ -12,7 +12,7 @@ // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ /* Language and Environment */ - "target": "es2016", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ + "target": "es2022", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ // "jsx": "preserve", /* Specify what JSX code is generated. */ // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */ diff --git a/yarn.lock b/server/yarn.lock similarity index 100% rename from yarn.lock rename to server/yarn.lock From 4830d4025e3ab22973a8f0ebaa55710bac1c277c Mon Sep 17 00:00:00 2001 From: Gianni Carafa Date: Tue, 26 Dec 2023 19:20:44 +0100 Subject: [PATCH 02/95] add robots.txt --- client-new/public/robots.txt | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 client-new/public/robots.txt diff --git a/client-new/public/robots.txt b/client-new/public/robots.txt new file mode 100644 index 000000000..77470cb39 --- /dev/null +++ b/client-new/public/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Disallow: / \ No newline at end of file From 7c4a7c4d2af6a465ff51e75d9feeb43d6d425cd0 Mon Sep 17 00:00:00 2001 From: Gianni Carafa Date: Wed, 27 Dec 2023 18:23:05 +0100 Subject: [PATCH 03/95] (WIP) mostly migrated to Vue3 and Vuetify 3, 16 Bugs open, no SocketIO --- client-new/package.json | 10 +- client-new/src/assets/img/addons/CouchDB.png | Bin 0 -> 9990 bytes .../src/assets/img/addons/Elasticsearch.png | Bin 0 -> 11837 bytes client-new/src/assets/img/addons/Haraka.png | Bin 0 -> 11323 bytes .../src/assets/img/addons/HarakaTxt.png | Bin 0 -> 7455 bytes client-new/src/assets/img/addons/Kafka.png | Bin 0 -> 32807 bytes client-new/src/assets/img/addons/MariaDB.png | Bin 0 -> 74022 bytes .../src/assets/img/addons/Mariadb_full.png | Bin 0 -> 24875 bytes .../src/assets/img/addons/Memcached.png | Bin 0 -> 20539 bytes client-new/src/assets/img/addons/Minio.png | Bin 0 -> 97841 bytes client-new/src/assets/img/addons/MongoDB.png | Bin 0 -> 20073 bytes .../src/assets/img/addons/MongoDBCluster.png | Bin 0 -> 20073 bytes .../src/assets/img/addons/Mongodb_full.png | Bin 0 -> 11545 bytes client-new/src/assets/img/addons/MySQL.png | Bin 0 -> 10212 bytes .../img/addons/PerconaServerMongoDB.png | Bin 0 -> 20073 bytes .../src/assets/img/addons/PostgresCluster.png | Bin 0 -> 21759 bytes client-new/src/assets/img/addons/RabbitMQ.png | Bin 0 -> 2521 bytes client-new/src/assets/img/addons/RabbitMQ.svg | 1 + client-new/src/assets/img/addons/Redis.png | Bin 0 -> 5810 bytes .../src/assets/img/addons/RedisCluster.png | Bin 0 -> 5810 bytes .../src/assets/img/addons/cloudflare.svg | 1 + .../src/assets/img/addons/postgresql.png | Bin 0 -> 21759 bytes .../src/assets/img/addons/redis-cluster.png | Bin 0 -> 5810 bytes client-new/src/assets/img/empty.svg | 7 + client-new/src/assets/img/icons/connected.svg | 4 + .../src/assets/img/icons/disconnected.svg | 4 + client-new/src/assets/img/icons/discord.svg | 1 + client-new/src/assets/img/icons/gitea.svg | 3 + client-new/src/assets/img/icons/gogs.svg | 1 + client-new/src/assets/img/icons/onedev.svg | 23 + client-new/src/components/addons/list.vue | 183 ++ client-new/src/components/appfooter.vue | 20 + client-new/src/components/apps/addons.vue | 377 ++++ client-new/src/components/apps/detail.vue | 185 ++ client-new/src/components/apps/events.vue | 182 ++ client-new/src/components/apps/logs.vue | 141 ++ client-new/src/components/apps/logstab.vue | 69 + client-new/src/components/apps/new.vue | 1977 +++++++++++++++++ .../src/components/apps/vulnerabilities.vue | 401 ++++ client-new/src/components/breadcrumbs.vue | 32 + client-new/src/components/events/view.vue | 138 ++ client-new/src/components/login.vue | 133 ++ .../src/components/pipelines/appcard.vue | 358 +++ .../src/components/pipelines/detail.vue | 189 ++ client-new/src/components/pipelines/list.vue | 242 ++ client-new/src/components/pipelines/new.vue | 666 ++++++ .../src/components/pipelines/prcard.vue | 150 ++ client-new/src/components/services/list.vue | 292 +++ client-new/src/components/settings/form.vue | 381 ++++ client-new/src/layouts/default/AppBar.vue | 83 +- client-new/src/layouts/default/Default.vue | 7 +- client-new/src/layouts/default/NavDrawer.vue | 133 ++ client-new/src/layouts/default/View.vue | 8 +- client-new/src/plugins/index.ts | 8 + client-new/src/plugins/vuetify.ts | 25 +- client-new/src/views/Addons.vue | 0 client-new/src/views/Events.vue | 0 client-new/src/views/Pipeline.vue | 7 + client-new/src/views/Settings.vue | 0 client-new/src/views/Templates.vue | 0 client-new/yarn.lock | 36 + 61 files changed, 6462 insertions(+), 16 deletions(-) create mode 100644 client-new/src/assets/img/addons/CouchDB.png create mode 100644 client-new/src/assets/img/addons/Elasticsearch.png create mode 100644 client-new/src/assets/img/addons/Haraka.png create mode 100644 client-new/src/assets/img/addons/HarakaTxt.png create mode 100644 client-new/src/assets/img/addons/Kafka.png create mode 100644 client-new/src/assets/img/addons/MariaDB.png create mode 100644 client-new/src/assets/img/addons/Mariadb_full.png create mode 100644 client-new/src/assets/img/addons/Memcached.png create mode 100644 client-new/src/assets/img/addons/Minio.png create mode 100644 client-new/src/assets/img/addons/MongoDB.png create mode 100644 client-new/src/assets/img/addons/MongoDBCluster.png create mode 100644 client-new/src/assets/img/addons/Mongodb_full.png create mode 100644 client-new/src/assets/img/addons/MySQL.png create mode 100644 client-new/src/assets/img/addons/PerconaServerMongoDB.png create mode 100644 client-new/src/assets/img/addons/PostgresCluster.png create mode 100644 client-new/src/assets/img/addons/RabbitMQ.png create mode 100644 client-new/src/assets/img/addons/RabbitMQ.svg create mode 100644 client-new/src/assets/img/addons/Redis.png create mode 100644 client-new/src/assets/img/addons/RedisCluster.png create mode 100644 client-new/src/assets/img/addons/cloudflare.svg create mode 100644 client-new/src/assets/img/addons/postgresql.png create mode 100644 client-new/src/assets/img/addons/redis-cluster.png create mode 100644 client-new/src/assets/img/empty.svg create mode 100644 client-new/src/assets/img/icons/connected.svg create mode 100644 client-new/src/assets/img/icons/disconnected.svg create mode 100644 client-new/src/assets/img/icons/discord.svg create mode 100644 client-new/src/assets/img/icons/gitea.svg create mode 100644 client-new/src/assets/img/icons/gogs.svg create mode 100644 client-new/src/assets/img/icons/onedev.svg create mode 100644 client-new/src/components/addons/list.vue create mode 100644 client-new/src/components/appfooter.vue create mode 100644 client-new/src/components/apps/addons.vue create mode 100644 client-new/src/components/apps/detail.vue create mode 100644 client-new/src/components/apps/events.vue create mode 100644 client-new/src/components/apps/logs.vue create mode 100644 client-new/src/components/apps/logstab.vue create mode 100644 client-new/src/components/apps/new.vue create mode 100644 client-new/src/components/apps/vulnerabilities.vue create mode 100644 client-new/src/components/breadcrumbs.vue create mode 100644 client-new/src/components/events/view.vue create mode 100644 client-new/src/components/login.vue create mode 100644 client-new/src/components/pipelines/appcard.vue create mode 100644 client-new/src/components/pipelines/detail.vue create mode 100644 client-new/src/components/pipelines/list.vue create mode 100644 client-new/src/components/pipelines/new.vue create mode 100644 client-new/src/components/pipelines/prcard.vue create mode 100644 client-new/src/components/services/list.vue create mode 100644 client-new/src/components/settings/form.vue create mode 100644 client-new/src/layouts/default/NavDrawer.vue create mode 100644 client-new/src/views/Addons.vue create mode 100644 client-new/src/views/Events.vue create mode 100644 client-new/src/views/Pipeline.vue create mode 100644 client-new/src/views/Settings.vue create mode 100644 client-new/src/views/Templates.vue diff --git a/client-new/package.json b/client-new/package.json index 4e110ed5e..9a7eea275 100644 --- a/client-new/package.json +++ b/client-new/package.json @@ -11,16 +11,20 @@ }, "dependencies": { "@mdi/font": "7.0.96", + "axios": "^1.6.2", "core-js": "^3.29.0", + "lodash": "^4.17.21", + "lodash-es": "^4.17.21", "roboto-fontface": "*", "vue": "^3.3.0", "vue-router": "^4.2.0", - "vuetify": "^3.4.0", - - "axios": "^1.6.2" + "vue-socket.io-extended": "^4.2.0", + "vuetify": "^3.4.0" }, "devDependencies": { "@babel/types": "^7.21.4", + "@types/lodash.get": "^4.4.9", + "@types/lodash.set": "^4.3.9", "@types/node": "^18.15.0", "@vitejs/plugin-vue": "^4.0.0", "@vue/eslint-config-typescript": "^11.0.0", diff --git a/client-new/src/assets/img/addons/CouchDB.png b/client-new/src/assets/img/addons/CouchDB.png new file mode 100644 index 0000000000000000000000000000000000000000..be359cffe1a1f92d0621d38e010080770ad39096 GIT binary patch literal 9990 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 literal 0 HcmV?d00001 diff --git a/client-new/src/assets/img/addons/Haraka.png b/client-new/src/assets/img/addons/Haraka.png new file mode 100644 index 0000000000000000000000000000000000000000..bdfb83611bd84980fddc75bdb5fa5547dcb5578e GIT binary patch literal 11323 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 literal 0 HcmV?d00001 diff --git a/client-new/src/assets/img/addons/MariaDB.png b/client-new/src/assets/img/addons/MariaDB.png new file mode 100644 index 0000000000000000000000000000000000000000..9c8a81376ab16a8800dea3880b177f91306d4434 GIT binary patch literal 74022 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%0DdzOwX$1x1*UQ`#{@oPA@}Kdc$xrJnylcq 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 literal 0 HcmV?d00001 diff --git a/client-new/src/assets/img/addons/Memcached.png b/client-new/src/assets/img/addons/Memcached.png new file mode 100644 index 0000000000000000000000000000000000000000..032e3d678cb1e3db5a2b5556b20f07406dd0521e GIT binary patch literal 20539 zcmW(+Wk6fa5>0S-cbDSD9f~`pEe^%qT?zz;;!?b5krsDSpt!pf4T0iCf)k3qd@p}C zxp(j0$4fr)a^q;&X?Tec^)H zht1p2Gk8~i@wa8~8JTKDOYAiC)VWkBBFUw3{Zk-x2PDZQL+^m$v_DJ5jhCD2WBrafQkT&-ka<6Y_ObI$2%(e zxVZ^z!0+=VXa{tmkJ3g+BCRqvR7Z7wTMhhgxK}{_i-@oa`LtkpFnMn`(j%LA-3dev(jcNfmnLW)w)hL@}Y1LGhOZAUOFO4Rc zpcADq{bCs>kPgOfRThREDMROwek?yT4EzCydIBArpeJE;m2t zxTo sIfu`&p?EkbETX5i~q~3PYlkEQ_gXm#_ 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

Ek^( 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 literal 0 HcmV?d00001 diff --git a/client-new/src/assets/img/addons/MongoDB.png b/client-new/src/assets/img/addons/MongoDB.png new file mode 100644 index 0000000000000000000000000000000000000000..393a3ed1624392af703b64565de97becf838799b GIT binary patch literal 20073 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 literal 0 HcmV?d00001 diff --git a/client-new/src/assets/img/addons/MongoDBCluster.png b/client-new/src/assets/img/addons/MongoDBCluster.png new file mode 100644 index 0000000000000000000000000000000000000000..393a3ed1624392af703b64565de97becf838799b GIT binary patch literal 20073 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 literal 0 HcmV?d00001 diff --git a/client-new/src/assets/img/addons/Mongodb_full.png b/client-new/src/assets/img/addons/Mongodb_full.png new file mode 100644 index 0000000000000000000000000000000000000000..74eba7b1477f02f729a65efaeb6cc58d17a780da GIT binary patch literal 11545 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 M@)~lDFw2Pl14nsY>i_@% literal 0 HcmV?d00001 diff --git a/client-new/src/assets/img/addons/PerconaServerMongoDB.png b/client-new/src/assets/img/addons/PerconaServerMongoDB.png new file mode 100644 index 0000000000000000000000000000000000000000..393a3ed1624392af703b64565de97becf838799b GIT binary patch literal 20073 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 literal 0 HcmV?d00001 diff --git a/client-new/src/assets/img/addons/PostgresCluster.png b/client-new/src/assets/img/addons/PostgresCluster.png new file mode 100644 index 0000000000000000000000000000000000000000..810e410754248a8b6cfca6c8354b74b7de243930 GIT binary patch literal 21759 zcmV(sLG8YYP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00007 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 \ No newline at end of file diff --git a/client-new/src/assets/img/addons/Redis.png b/client-new/src/assets/img/addons/Redis.png new file mode 100644 index 0000000000000000000000000000000000000000..a434679c6c1fee4e0207930b23753a212892a3fc GIT binary patch literal 5810 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 literal 0 HcmV?d00001 diff --git a/client-new/src/assets/img/addons/RedisCluster.png b/client-new/src/assets/img/addons/RedisCluster.png new file mode 100644 index 0000000000000000000000000000000000000000..a434679c6c1fee4e0207930b23753a212892a3fc GIT binary patch literal 5810 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 literal 0 HcmV?d00001 diff --git a/client-new/src/assets/img/addons/cloudflare.svg b/client-new/src/assets/img/addons/cloudflare.svg new file mode 100644 index 000000000..201593dd9 --- /dev/null +++ b/client-new/src/assets/img/addons/cloudflare.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/client-new/src/assets/img/addons/postgresql.png b/client-new/src/assets/img/addons/postgresql.png new file mode 100644 index 0000000000000000000000000000000000000000..810e410754248a8b6cfca6c8354b74b7de243930 GIT binary patch literal 21759 zcmV(sLG8YYP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00007 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 literal 0 HcmV?d00001 diff --git a/client-new/src/assets/img/empty.svg b/client-new/src/assets/img/empty.svg new file mode 100644 index 000000000..906a8a5de --- /dev/null +++ b/client-new/src/assets/img/empty.svg @@ -0,0 +1,7 @@ + \ No newline at end of file diff --git a/client-new/src/assets/img/icons/connected.svg b/client-new/src/assets/img/icons/connected.svg new file mode 100644 index 000000000..11e33e471 --- /dev/null +++ b/client-new/src/assets/img/icons/connected.svg @@ -0,0 +1,4 @@ + + + + diff --git a/client-new/src/assets/img/icons/disconnected.svg b/client-new/src/assets/img/icons/disconnected.svg new file mode 100644 index 000000000..1de2371ed --- /dev/null +++ b/client-new/src/assets/img/icons/disconnected.svg @@ -0,0 +1,4 @@ + + + + diff --git a/client-new/src/assets/img/icons/discord.svg b/client-new/src/assets/img/icons/discord.svg new file mode 100644 index 000000000..4b7477340 --- /dev/null +++ b/client-new/src/assets/img/icons/discord.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/client-new/src/assets/img/icons/gitea.svg b/client-new/src/assets/img/icons/gitea.svg new file mode 100644 index 000000000..61f7c81b3 --- /dev/null +++ b/client-new/src/assets/img/icons/gitea.svg @@ -0,0 +1,3 @@ + + + diff --git a/client-new/src/assets/img/icons/gogs.svg b/client-new/src/assets/img/icons/gogs.svg new file mode 100644 index 000000000..b1ff153b9 --- /dev/null +++ b/client-new/src/assets/img/icons/gogs.svg @@ -0,0 +1 @@ + diff --git a/client-new/src/assets/img/icons/onedev.svg b/client-new/src/assets/img/icons/onedev.svg new file mode 100644 index 000000000..dd823159a --- /dev/null +++ b/client-new/src/assets/img/icons/onedev.svg @@ -0,0 +1,23 @@ + \ No newline at end of file diff --git a/client-new/src/components/addons/list.vue b/client-new/src/components/addons/list.vue new file mode 100644 index 000000000..b14e4d13b --- /dev/null +++ b/client-new/src/components/addons/list.vue @@ -0,0 +1,183 @@ + + + + + \ No newline at end of file diff --git a/client-new/src/components/appfooter.vue b/client-new/src/components/appfooter.vue new file mode 100644 index 000000000..21d011316 --- /dev/null +++ b/client-new/src/components/appfooter.vue @@ -0,0 +1,20 @@ + + \ No newline at end of file diff --git a/client-new/src/components/apps/addons.vue b/client-new/src/components/apps/addons.vue new file mode 100644 index 000000000..81f897d78 --- /dev/null +++ b/client-new/src/components/apps/addons.vue @@ -0,0 +1,377 @@ + + + + \ No newline at end of file diff --git a/client-new/src/components/apps/detail.vue b/client-new/src/components/apps/detail.vue new file mode 100644 index 000000000..18c552723 --- /dev/null +++ b/client-new/src/components/apps/detail.vue @@ -0,0 +1,185 @@ + + + + + \ No newline at end of file diff --git a/client-new/src/components/apps/events.vue b/client-new/src/components/apps/events.vue new file mode 100644 index 000000000..e5bf271b8 --- /dev/null +++ b/client-new/src/components/apps/events.vue @@ -0,0 +1,182 @@ + + + + + \ No newline at end of file diff --git a/client-new/src/components/apps/logs.vue b/client-new/src/components/apps/logs.vue new file mode 100644 index 000000000..e9cb1af8b --- /dev/null +++ b/client-new/src/components/apps/logs.vue @@ -0,0 +1,141 @@ + + + + + + \ No newline at end of file diff --git a/client-new/src/components/apps/logstab.vue b/client-new/src/components/apps/logstab.vue new file mode 100644 index 000000000..a192d07bb --- /dev/null +++ b/client-new/src/components/apps/logstab.vue @@ -0,0 +1,69 @@ + + + + + \ No newline at end of file diff --git a/client-new/src/components/apps/new.vue b/client-new/src/components/apps/new.vue new file mode 100644 index 000000000..71e0e6fe2 --- /dev/null +++ b/client-new/src/components/apps/new.vue @@ -0,0 +1,1977 @@ + + + + + + diff --git a/client-new/src/components/apps/vulnerabilities.vue b/client-new/src/components/apps/vulnerabilities.vue new file mode 100644 index 000000000..31e639c0e --- /dev/null +++ b/client-new/src/components/apps/vulnerabilities.vue @@ -0,0 +1,401 @@ + + + + + \ No newline at end of file diff --git a/client-new/src/components/breadcrumbs.vue b/client-new/src/components/breadcrumbs.vue new file mode 100644 index 000000000..4e0130e62 --- /dev/null +++ b/client-new/src/components/breadcrumbs.vue @@ -0,0 +1,32 @@ + + + + + + \ No newline at end of file diff --git a/client-new/src/components/events/view.vue b/client-new/src/components/events/view.vue new file mode 100644 index 000000000..3b38e9bb3 --- /dev/null +++ b/client-new/src/components/events/view.vue @@ -0,0 +1,138 @@ + + + + + + + \ No newline at end of file diff --git a/client-new/src/components/login.vue b/client-new/src/components/login.vue new file mode 100644 index 000000000..05aefd1b8 --- /dev/null +++ b/client-new/src/components/login.vue @@ -0,0 +1,133 @@ + + + \ No newline at end of file diff --git a/client-new/src/components/pipelines/appcard.vue b/client-new/src/components/pipelines/appcard.vue new file mode 100644 index 000000000..cabd0db41 --- /dev/null +++ b/client-new/src/components/pipelines/appcard.vue @@ -0,0 +1,358 @@ + + + + + + + \ No newline at end of file diff --git a/client-new/src/components/pipelines/detail.vue b/client-new/src/components/pipelines/detail.vue new file mode 100644 index 000000000..1f31927f3 --- /dev/null +++ b/client-new/src/components/pipelines/detail.vue @@ -0,0 +1,189 @@ + + + \ No newline at end of file diff --git a/client-new/src/components/pipelines/list.vue b/client-new/src/components/pipelines/list.vue new file mode 100644 index 000000000..423a37a67 --- /dev/null +++ b/client-new/src/components/pipelines/list.vue @@ -0,0 +1,242 @@ + + + + + \ No newline at end of file diff --git a/client-new/src/components/pipelines/new.vue b/client-new/src/components/pipelines/new.vue new file mode 100644 index 000000000..fd9b04308 --- /dev/null +++ b/client-new/src/components/pipelines/new.vue @@ -0,0 +1,666 @@ + + + + + \ No newline at end of file diff --git a/client-new/src/components/pipelines/prcard.vue b/client-new/src/components/pipelines/prcard.vue new file mode 100644 index 000000000..5ca511d24 --- /dev/null +++ b/client-new/src/components/pipelines/prcard.vue @@ -0,0 +1,150 @@ + + + + + + \ No newline at end of file diff --git a/client-new/src/components/services/list.vue b/client-new/src/components/services/list.vue new file mode 100644 index 000000000..053709e9a --- /dev/null +++ b/client-new/src/components/services/list.vue @@ -0,0 +1,292 @@ + + + + + \ No newline at end of file diff --git a/client-new/src/components/settings/form.vue b/client-new/src/components/settings/form.vue new file mode 100644 index 000000000..79dd7295d --- /dev/null +++ b/client-new/src/components/settings/form.vue @@ -0,0 +1,381 @@ + + + + + \ No newline at end of file diff --git a/client-new/src/layouts/default/AppBar.vue b/client-new/src/layouts/default/AppBar.vue index da031498e..e4d16f16f 100644 --- a/client-new/src/layouts/default/AppBar.vue +++ b/client-new/src/layouts/default/AppBar.vue @@ -1,13 +1,82 @@ + + + + \ No newline at end of file diff --git a/client-new/src/layouts/default/Default.vue b/client-new/src/layouts/default/Default.vue index e642631a0..9da3b7ca2 100644 --- a/client-new/src/layouts/default/Default.vue +++ b/client-new/src/layouts/default/Default.vue @@ -1,12 +1,13 @@ diff --git a/client-new/src/layouts/default/NavDrawer.vue b/client-new/src/layouts/default/NavDrawer.vue new file mode 100644 index 000000000..3dca4dd8c --- /dev/null +++ b/client-new/src/layouts/default/NavDrawer.vue @@ -0,0 +1,133 @@ + + + diff --git a/client-new/src/layouts/default/View.vue b/client-new/src/layouts/default/View.vue index 8e9e4143c..d7d28bbbb 100644 --- a/client-new/src/layouts/default/View.vue +++ b/client-new/src/layouts/default/View.vue @@ -4,6 +4,10 @@ - diff --git a/client-new/src/plugins/index.ts b/client-new/src/plugins/index.ts index d3c748a31..a65503e57 100644 --- a/client-new/src/plugins/index.ts +++ b/client-new/src/plugins/index.ts @@ -4,6 +4,13 @@ * Automatically included in `./src/main.ts` */ + +import VueSocketIOExt from 'vue-socket.io-extended'; +import io from 'socket.io-client'; + +const socket = io(); + + // Plugins import vuetify from './vuetify' import router from '../router' @@ -13,6 +20,7 @@ import type { App } from 'vue' export function registerPlugins (app: App) { app + .use(VueSocketIOExt, socket) .use(vuetify) .use(router) } diff --git a/client-new/src/plugins/vuetify.ts b/client-new/src/plugins/vuetify.ts index c276519a4..c2f7256d6 100644 --- a/client-new/src/plugins/vuetify.ts +++ b/client-new/src/plugins/vuetify.ts @@ -8,6 +8,7 @@ import '@mdi/font/css/materialdesignicons.css' import 'vuetify/styles' + // Composables import { createVuetify } from 'vuetify' @@ -15,10 +16,32 @@ import { createVuetify } from 'vuetify' export default createVuetify({ theme: { themes: { + dark: { + colors: { + primary: '#8560A9', + secondary: '#5CBBF6', + //secondary: colors.grey.darken3, + navBG: '#262626', + background: '#121212', + + accent: '#8c9eff', + error: '#b71c1c', + }, + }, light: { colors: { - primary: '#1867C0', + primary: '#8560A9', secondary: '#5CBBF6', + //secondary: colors.grey.lighten2, + cardBackground: '#FAFAFA', + navBG: '#F7F8FB', + textColor: '#262626', + + accent: '#82B1FF', + error: '#FF5252', + info: '#2196F3', + success: '#4CAF50', + warning: '#FFC107', }, }, }, diff --git a/client-new/src/views/Addons.vue b/client-new/src/views/Addons.vue new file mode 100644 index 000000000..e69de29bb diff --git a/client-new/src/views/Events.vue b/client-new/src/views/Events.vue new file mode 100644 index 000000000..e69de29bb diff --git a/client-new/src/views/Pipeline.vue b/client-new/src/views/Pipeline.vue new file mode 100644 index 000000000..e64deafe3 --- /dev/null +++ b/client-new/src/views/Pipeline.vue @@ -0,0 +1,7 @@ + + + diff --git a/client-new/src/views/Settings.vue b/client-new/src/views/Settings.vue new file mode 100644 index 000000000..e69de29bb diff --git a/client-new/src/views/Templates.vue b/client-new/src/views/Templates.vue new file mode 100644 index 000000000..e69de29bb diff --git a/client-new/yarn.lock b/client-new/yarn.lock index 28864d4e3..d736a9a5d 100644 --- a/client-new/yarn.lock +++ b/client-new/yarn.lock @@ -228,6 +228,25 @@ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== +"@types/lodash.get@^4.4.9": + version "4.4.9" + resolved "https://registry.yarnpkg.com/@types/lodash.get/-/lodash.get-4.4.9.tgz#6390714bf688321d9a445cbc8e90220635649713" + integrity sha512-J5dvW98sxmGnamqf+/aLP87PYXyrha9xIgc2ZlHl6OHMFR2Ejdxep50QfU0abO1+CH6+ugx+8wEUN1toImAinA== + dependencies: + "@types/lodash" "*" + +"@types/lodash.set@^4.3.9": + version "4.3.9" + resolved "https://registry.yarnpkg.com/@types/lodash.set/-/lodash.set-4.3.9.tgz#55d95bce407b42c6655f29b2d0811fd428e698f0" + integrity sha512-KOxyNkZpbaggVmqbpr82N2tDVTx05/3/j0f50Es1prxrWB0XYf9p3QNxqcbWb7P1Q9wlvsUSlCFnwlPCIJ46PQ== + dependencies: + "@types/lodash" "*" + +"@types/lodash@*": + version "4.14.202" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.202.tgz#f09dbd2fb082d507178b2f2a5c7e74bd72ff98f8" + integrity sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ== + "@types/node@^18.15.0": version "18.19.3" resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.3.tgz#e4723c4cb385641d61b983f6fe0b716abd5f8fc0" @@ -240,6 +259,11 @@ resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.6.tgz#c65b2bfce1bec346582c07724e3f8c1017a20339" integrity sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A== +"@types/socket.io-client@1.4.36": + version "1.4.36" + resolved "https://registry.yarnpkg.com/@types/socket.io-client/-/socket.io-client-1.4.36.tgz#e4f1ca065f84c20939e9850e70222202bd76ff3f" + integrity sha512-ZJWjtFBeBy1kRSYpVbeGYTElf6BqPQUkXDlHHD4k/42byCN5Rh027f4yARHCink9sKAkbtGZXEAmR0ZCnc2/Ag== + "@typescript-eslint/eslint-plugin@^5.59.1": version "5.62.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz#aeef0328d172b9e37d9bab6dbc13b87ed88977db" @@ -1151,6 +1175,11 @@ locate-path@^6.0.0: dependencies: p-locate "^5.0.0" +lodash-es@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" + integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== + lodash.merge@^4.6.2: version "4.6.2" resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" @@ -1627,6 +1656,13 @@ vue-router@^4.2.0: dependencies: "@vue/devtools-api" "^6.5.0" +vue-socket.io-extended@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/vue-socket.io-extended/-/vue-socket.io-extended-4.2.0.tgz#e663553669fd3dcd9786b1add40b18580d36816f" + integrity sha512-3ZHy53W4CpzRdTZjWL7krq80FQlnK6IyOG0ur158pij1PXKyVBYDpjE0/3SluK7NeNTqefa/Y8RFCFy6BISG/g== + dependencies: + "@types/socket.io-client" "1.4.36" + vue-template-compiler@^2.7.14: version "2.7.16" resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.7.16.tgz#c81b2d47753264c77ac03b9966a46637482bb03b" From a0bd31c14ee25ffc16a8a177d7e7c897c7b2062b Mon Sep 17 00:00:00 2001 From: Gianni Carafa Date: Wed, 27 Dec 2023 21:02:00 +0100 Subject: [PATCH 04/95] (WIP) all bugs removed, first working site, still no socket.io --- client-new/package.json | 1 + .../assets => public}/img/addons/CouchDB.png | Bin .../img/addons/Elasticsearch.png | Bin .../assets => public}/img/addons/Haraka.png | Bin .../img/addons/HarakaTxt.png | Bin .../assets => public}/img/addons/Kafka.png | Bin .../assets => public}/img/addons/MariaDB.png | Bin .../img/addons/Mariadb_full.png | Bin .../img/addons/Memcached.png | Bin .../assets => public}/img/addons/Minio.png | Bin .../assets => public}/img/addons/MongoDB.png | Bin .../img/addons/MongoDBCluster.png | Bin .../img/addons/Mongodb_full.png | Bin .../assets => public}/img/addons/MySQL.png | Bin .../img/addons/PerconaServerMongoDB.png | Bin .../img/addons/PostgresCluster.png | Bin .../assets => public}/img/addons/RabbitMQ.png | Bin .../assets => public}/img/addons/RabbitMQ.svg | 0 .../assets => public}/img/addons/Redis.png | Bin .../img/addons/RedisCluster.png | Bin .../img/addons/cloudflare.svg | 0 .../img/addons/postgresql.png | Bin .../img/addons/redis-cluster.png | Bin .../{src/assets => public}/img/empty.svg | 0 .../assets => public}/img/icons/connected.svg | 0 .../img/icons/disconnected.svg | 0 .../assets => public}/img/icons/discord.svg | 0 .../assets => public}/img/icons/gitea.svg | 0 .../{src/assets => public}/img/icons/gogs.svg | 0 .../assets => public}/img/icons/onedev.svg | 0 client-new/src/components/apps/addons.vue | 4 +- client-new/src/components/apps/detail.vue | 5 +-- client-new/src/components/apps/events.vue | 2 +- client-new/src/components/apps/new.vue | 35 ++++++++++++++---- .../src/components/apps/vulnerabilities.vue | 4 +- client-new/src/components/events/view.vue | 2 +- client-new/src/components/pipelines/list.vue | 3 +- client-new/src/components/pipelines/new.vue | 4 +- client-new/src/plugins/index.ts | 9 +++-- client-new/src/plugins/pinia.ts | 3 ++ client-new/src/router/index.ts | 5 ++- client-new/src/stores/kubero.ts | 24 ++++++++++++ client-new/yarn.lock | 13 +++++++ server/src/index.ts | 2 +- 44 files changed, 90 insertions(+), 26 deletions(-) rename client-new/{src/assets => public}/img/addons/CouchDB.png (100%) rename client-new/{src/assets => public}/img/addons/Elasticsearch.png (100%) rename client-new/{src/assets => public}/img/addons/Haraka.png (100%) rename client-new/{src/assets => public}/img/addons/HarakaTxt.png (100%) rename client-new/{src/assets => public}/img/addons/Kafka.png (100%) rename client-new/{src/assets => public}/img/addons/MariaDB.png (100%) rename client-new/{src/assets => public}/img/addons/Mariadb_full.png (100%) rename client-new/{src/assets => public}/img/addons/Memcached.png (100%) rename client-new/{src/assets => public}/img/addons/Minio.png (100%) rename client-new/{src/assets => public}/img/addons/MongoDB.png (100%) rename client-new/{src/assets => public}/img/addons/MongoDBCluster.png (100%) rename client-new/{src/assets => public}/img/addons/Mongodb_full.png (100%) rename client-new/{src/assets => public}/img/addons/MySQL.png (100%) rename client-new/{src/assets => public}/img/addons/PerconaServerMongoDB.png (100%) rename client-new/{src/assets => public}/img/addons/PostgresCluster.png (100%) rename client-new/{src/assets => public}/img/addons/RabbitMQ.png (100%) rename client-new/{src/assets => public}/img/addons/RabbitMQ.svg (100%) rename client-new/{src/assets => public}/img/addons/Redis.png (100%) rename client-new/{src/assets => public}/img/addons/RedisCluster.png (100%) rename client-new/{src/assets => public}/img/addons/cloudflare.svg (100%) rename client-new/{src/assets => public}/img/addons/postgresql.png (100%) rename client-new/{src/assets => public}/img/addons/redis-cluster.png (100%) rename client-new/{src/assets => public}/img/empty.svg (100%) rename client-new/{src/assets => public}/img/icons/connected.svg (100%) rename client-new/{src/assets => public}/img/icons/disconnected.svg (100%) rename client-new/{src/assets => public}/img/icons/discord.svg (100%) rename client-new/{src/assets => public}/img/icons/gitea.svg (100%) rename client-new/{src/assets => public}/img/icons/gogs.svg (100%) rename client-new/{src/assets => public}/img/icons/onedev.svg (100%) create mode 100644 client-new/src/plugins/pinia.ts create mode 100644 client-new/src/stores/kubero.ts diff --git a/client-new/package.json b/client-new/package.json index 9a7eea275..415bbba23 100644 --- a/client-new/package.json +++ b/client-new/package.json @@ -15,6 +15,7 @@ "core-js": "^3.29.0", "lodash": "^4.17.21", "lodash-es": "^4.17.21", + "pinia": "^2.1.7", "roboto-fontface": "*", "vue": "^3.3.0", "vue-router": "^4.2.0", diff --git a/client-new/src/assets/img/addons/CouchDB.png b/client-new/public/img/addons/CouchDB.png similarity index 100% rename from client-new/src/assets/img/addons/CouchDB.png rename to client-new/public/img/addons/CouchDB.png diff --git a/client-new/src/assets/img/addons/Elasticsearch.png b/client-new/public/img/addons/Elasticsearch.png similarity index 100% rename from client-new/src/assets/img/addons/Elasticsearch.png rename to client-new/public/img/addons/Elasticsearch.png diff --git a/client-new/src/assets/img/addons/Haraka.png b/client-new/public/img/addons/Haraka.png similarity index 100% rename from client-new/src/assets/img/addons/Haraka.png rename to client-new/public/img/addons/Haraka.png diff --git a/client-new/src/assets/img/addons/HarakaTxt.png b/client-new/public/img/addons/HarakaTxt.png similarity index 100% rename from client-new/src/assets/img/addons/HarakaTxt.png rename to client-new/public/img/addons/HarakaTxt.png diff --git a/client-new/src/assets/img/addons/Kafka.png b/client-new/public/img/addons/Kafka.png similarity index 100% rename from client-new/src/assets/img/addons/Kafka.png rename to client-new/public/img/addons/Kafka.png diff --git a/client-new/src/assets/img/addons/MariaDB.png b/client-new/public/img/addons/MariaDB.png similarity index 100% rename from client-new/src/assets/img/addons/MariaDB.png rename to client-new/public/img/addons/MariaDB.png diff --git a/client-new/src/assets/img/addons/Mariadb_full.png b/client-new/public/img/addons/Mariadb_full.png similarity index 100% rename from client-new/src/assets/img/addons/Mariadb_full.png rename to client-new/public/img/addons/Mariadb_full.png diff --git a/client-new/src/assets/img/addons/Memcached.png b/client-new/public/img/addons/Memcached.png similarity index 100% rename from client-new/src/assets/img/addons/Memcached.png rename to client-new/public/img/addons/Memcached.png diff --git a/client-new/src/assets/img/addons/Minio.png b/client-new/public/img/addons/Minio.png similarity index 100% rename from client-new/src/assets/img/addons/Minio.png rename to client-new/public/img/addons/Minio.png diff --git a/client-new/src/assets/img/addons/MongoDB.png b/client-new/public/img/addons/MongoDB.png similarity index 100% rename from client-new/src/assets/img/addons/MongoDB.png rename to client-new/public/img/addons/MongoDB.png diff --git a/client-new/src/assets/img/addons/MongoDBCluster.png b/client-new/public/img/addons/MongoDBCluster.png similarity index 100% rename from client-new/src/assets/img/addons/MongoDBCluster.png rename to client-new/public/img/addons/MongoDBCluster.png diff --git a/client-new/src/assets/img/addons/Mongodb_full.png b/client-new/public/img/addons/Mongodb_full.png similarity index 100% rename from client-new/src/assets/img/addons/Mongodb_full.png rename to client-new/public/img/addons/Mongodb_full.png diff --git a/client-new/src/assets/img/addons/MySQL.png b/client-new/public/img/addons/MySQL.png similarity index 100% rename from client-new/src/assets/img/addons/MySQL.png rename to client-new/public/img/addons/MySQL.png diff --git a/client-new/src/assets/img/addons/PerconaServerMongoDB.png b/client-new/public/img/addons/PerconaServerMongoDB.png similarity index 100% rename from client-new/src/assets/img/addons/PerconaServerMongoDB.png rename to client-new/public/img/addons/PerconaServerMongoDB.png diff --git a/client-new/src/assets/img/addons/PostgresCluster.png b/client-new/public/img/addons/PostgresCluster.png similarity index 100% rename from client-new/src/assets/img/addons/PostgresCluster.png rename to client-new/public/img/addons/PostgresCluster.png diff --git a/client-new/src/assets/img/addons/RabbitMQ.png b/client-new/public/img/addons/RabbitMQ.png similarity index 100% rename from client-new/src/assets/img/addons/RabbitMQ.png rename to client-new/public/img/addons/RabbitMQ.png diff --git a/client-new/src/assets/img/addons/RabbitMQ.svg b/client-new/public/img/addons/RabbitMQ.svg similarity index 100% rename from client-new/src/assets/img/addons/RabbitMQ.svg rename to client-new/public/img/addons/RabbitMQ.svg diff --git a/client-new/src/assets/img/addons/Redis.png b/client-new/public/img/addons/Redis.png similarity index 100% rename from client-new/src/assets/img/addons/Redis.png rename to client-new/public/img/addons/Redis.png diff --git a/client-new/src/assets/img/addons/RedisCluster.png b/client-new/public/img/addons/RedisCluster.png similarity index 100% rename from client-new/src/assets/img/addons/RedisCluster.png rename to client-new/public/img/addons/RedisCluster.png diff --git a/client-new/src/assets/img/addons/cloudflare.svg b/client-new/public/img/addons/cloudflare.svg similarity index 100% rename from client-new/src/assets/img/addons/cloudflare.svg rename to client-new/public/img/addons/cloudflare.svg diff --git a/client-new/src/assets/img/addons/postgresql.png b/client-new/public/img/addons/postgresql.png similarity index 100% rename from client-new/src/assets/img/addons/postgresql.png rename to client-new/public/img/addons/postgresql.png diff --git a/client-new/src/assets/img/addons/redis-cluster.png b/client-new/public/img/addons/redis-cluster.png similarity index 100% rename from client-new/src/assets/img/addons/redis-cluster.png rename to client-new/public/img/addons/redis-cluster.png diff --git a/client-new/src/assets/img/empty.svg b/client-new/public/img/empty.svg similarity index 100% rename from client-new/src/assets/img/empty.svg rename to client-new/public/img/empty.svg diff --git a/client-new/src/assets/img/icons/connected.svg b/client-new/public/img/icons/connected.svg similarity index 100% rename from client-new/src/assets/img/icons/connected.svg rename to client-new/public/img/icons/connected.svg diff --git a/client-new/src/assets/img/icons/disconnected.svg b/client-new/public/img/icons/disconnected.svg similarity index 100% rename from client-new/src/assets/img/icons/disconnected.svg rename to client-new/public/img/icons/disconnected.svg diff --git a/client-new/src/assets/img/icons/discord.svg b/client-new/public/img/icons/discord.svg similarity index 100% rename from client-new/src/assets/img/icons/discord.svg rename to client-new/public/img/icons/discord.svg diff --git a/client-new/src/assets/img/icons/gitea.svg b/client-new/public/img/icons/gitea.svg similarity index 100% rename from client-new/src/assets/img/icons/gitea.svg rename to client-new/public/img/icons/gitea.svg diff --git a/client-new/src/assets/img/icons/gogs.svg b/client-new/public/img/icons/gogs.svg similarity index 100% rename from client-new/src/assets/img/icons/gogs.svg rename to client-new/public/img/icons/gogs.svg diff --git a/client-new/src/assets/img/icons/onedev.svg b/client-new/public/img/icons/onedev.svg similarity index 100% rename from client-new/src/assets/img/icons/onedev.svg rename to client-new/public/img/icons/onedev.svg diff --git a/client-new/src/components/apps/addons.vue b/client-new/src/components/apps/addons.vue index 81f897d78..5f0862e92 100644 --- a/client-new/src/components/apps/addons.vue +++ b/client-new/src/components/apps/addons.vue @@ -53,14 +53,14 @@ persistent max-width="600px" > - From 2eed7c2fc10e36170a5fc88441f07ceb723ba414 Mon Sep 17 00:00:00 2001 From: Gianni Carafa Date: Fri, 5 Jan 2024 05:07:43 +0100 Subject: [PATCH 33/95] migration: Fix template tabs --- client-new/src/components/templates/index.vue | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client-new/src/components/templates/index.vue b/client-new/src/components/templates/index.vue index d2b7a8798..e41dcc125 100644 --- a/client-new/src/components/templates/index.vue +++ b/client-new/src/components/templates/index.vue @@ -8,7 +8,6 @@ - + + Date: Sat, 6 Jan 2024 00:03:29 +0100 Subject: [PATCH 34/95] add some nice toast messages --- client-new/src/components/pipelines/list.vue | 2 + client-new/src/layouts/default/Default.vue | 43 ++++++++ package.json | 5 + server/src/kubero.ts | 101 +++++++++++++++---- server/src/types.ts | 8 ++ yarn.lock | 8 ++ 6 files changed, 147 insertions(+), 20 deletions(-) create mode 100644 package.json create mode 100644 yarn.lock diff --git a/client-new/src/components/pipelines/list.vue b/client-new/src/components/pipelines/list.vue index 928c4dd4f..d54c24bfd 100644 --- a/client-new/src/components/pipelines/list.vue +++ b/client-new/src/components/pipelines/list.vue @@ -108,9 +108,11 @@ type Pipeline = { } const { socket } = useSocketIO(); +/* socket.on('connect', () => { console.log("Websocket connected"); }); +*/ socket.on('updatedPipelines', (instances: any) => { console.log("updatedPipelines", instances); diff --git a/client-new/src/layouts/default/Default.vue b/client-new/src/layouts/default/Default.vue index 9da3b7ca2..0bc6c9594 100644 --- a/client-new/src/layouts/default/Default.vue +++ b/client-new/src/layouts/default/Default.vue @@ -10,4 +10,47 @@ import AppBar from './AppBar.vue' import NavDrawer from './NavDrawer.vue' import DefaultView from './View.vue' + + import { useSocketIO } from '../../socket.io'; + import { SweetAlertIcon} from 'sweetalert2' + import Swal from 'sweetalert2' + + + + diff --git a/package.json b/package.json new file mode 100644 index 000000000..5248000aa --- /dev/null +++ b/package.json @@ -0,0 +1,5 @@ +{ + "dependencies": { + "sweetalert2": "^11.10.2" + } +} diff --git a/server/src/kubero.ts b/server/src/kubero.ts index 9aa7e6284..4217ac443 100644 --- a/server/src/kubero.ts +++ b/server/src/kubero.ts @@ -1,6 +1,6 @@ import debug from 'debug'; import { Server } from "socket.io"; -import { IApp, IPipeline, IPipelineList, IKubectlAppList, IDeployKeyPair, IKubectlPipelineList, IKubectlApp, ILoglines, IKuberoConfig} from './types'; +import { IApp, IPipeline, IPipelineList, IKubectlAppList, IDeployKeyPair, IKubectlPipelineList, IKubectlApp, ILoglines, IKuberoConfig, IMessage} from './types'; import { IPullrequest } from './git/types'; import { App } from './modules/application'; import { Buildpack } from './modules/config'; @@ -152,7 +152,14 @@ export class Kubero { this.kubectl.createEvent('Normal', 'Created', 'pipeline.created', 'created new pipeline: '+pipeline.name); // update agents - this._io.emit('updatedPipelines', "created"); + const message = { + 'action': 'created', + 'pipelineName':pipeline.name, + 'data': { + 'pipeline': pipeline + } + } as IMessage; + this._io.emit('updatedPipelines', message); } // updates a new pipeline in the same namespace as the kubero app @@ -179,7 +186,14 @@ export class Kubero { this.kubectl.createEvent('Normal', 'Updated', 'pipeline.updated', 'updated pipeline: '+pipeline.name); // update agents - this._io.emit('updatedPipelines', "updated"); + const message = { + 'action': 'updated', + 'pipelineName':pipeline.name, + 'data': { + 'pipeline': pipeline + } + } as IMessage; + this._io.emit('updatedPipelines', message); } @@ -236,7 +250,14 @@ export class Kubero { await new Promise(resolve => setTimeout(resolve, 5000)); // needs some extra time to delete the namespace this.updateState(); - this._io.emit('updatedPipelines', "deleted"); + const message = { + 'action': 'deleted', + 'pipelineName':pipelineName, + 'data': { + 'pipeline': pipeline + } + } as IMessage; + this._io.emit('updatedPipelines', message); this.kubectl.createEvent('Normal', 'Deleted', 'pipeline.deleted', 'deleted pipeline: '+pipelineName); } }) @@ -263,8 +284,17 @@ export class Kubero { this.triggerImageBuild(app.pipeline, app.phase, app.name); } this.appStateList.push(app); + const message = { + 'action': 'created', + 'pipelineName':app.pipeline, + 'phaseName':app.phase, + 'appName': app.name, + 'data': { + 'app': app + } + } as IMessage; - this._io.emit('updatedApps', "created"); + this._io.emit('updatedApps', message); this.kubectl.createEvent('Normal', 'Created', 'app.created', 'created new app: '+app.name+' in '+ app.pipeline+' phase: '+app.phase); } @@ -288,8 +318,15 @@ export class Kubero { if (contextName) { await this.kubectl.updateApp(app, resourceVersion, contextName); // IMPORTANT TODO : Update this.appStateList !! - this._io.emit('updatedApps', "updated"); this.kubectl.createEvent('Normal', 'Updated', 'app.updated', 'updated app: '+app.name+' in '+ app.pipeline+' phase: '+app.phase); + const message = { + 'action': 'updated', + 'pipelineName':app.pipeline, + 'phaseName':app.phase, + 'appName': app.name, + 'data': app + } as IMessage; + this._io.emit('updatedApps', message); } } @@ -307,7 +344,13 @@ export class Kubero { await this.kubectl.deleteApp(pipelineName, phaseName, appName, contextName); this.removeAppFromState(pipelineName, phaseName, appName); this.kubectl.createEvent('Normal', 'Deleted', 'app.deleted', 'deleted app: '+appName+' in '+ pipelineName+' phase: '+phaseName); - this._io.emit('deleteApp',appName, pipelineName, phaseName); + const message = { + 'action': 'deleted', + 'pipelineName':pipelineName, + 'phaseName':pipelineName, + 'appName': appName + } as IMessage; + this._io.emit('updatedApps', message); } } @@ -376,11 +419,11 @@ export class Kubero { let message = { 'action': 'restarted', - 'pipeline':pipelineName, - 'phase':phaseName, - 'app': appName - } - //this._io.emit('restartedApp', message); + 'pipelineName':pipelineName, + 'phaseName':phaseName, + 'appName': appName + } as IMessage; + this._io.emit('updatedApps', message); this.kubectl.createEvent('Normal', 'Restarted', 'app.restarted', 'restarted app: '+appName+' in '+ pipelineName+' phase: '+phaseName); } } @@ -400,11 +443,14 @@ export class Kubero { let message = { 'action': 'rebuild', - 'pipeline':app.pipeline, - 'phase':app.phase, - 'app': app.name - } - //this._io.emit('restartedApp', message); + 'pipelineName':app.pipeline, + 'phaseName':app.phase, + 'appName': app.name, + 'data': { + 'app': app + } + } as IMessage; + this._io.emit('updatedApps', message); this.kubectl.createEvent('Normal', 'Rebuild', 'app.restarted', 'restarted app: '+app.name+' in '+ app.pipeline+' phase: '+app.phase); } } @@ -500,8 +546,17 @@ export class Kubero { let apps = await this.getAppsByBranch(webhook.branch); for (const app of apps) { - - this._io.emit('updatedApps', "created"); + const message = { + 'action': 'pushed', + 'pipelineName':app.pipeline, + 'phaseName':app.phase, + 'appName': app.name, + 'data': { + 'app': app, + 'webhook': webhook + } + } as IMessage; + this._io.emit('updatedApps', message); this.kubectl.createEvent('Normal', 'Pushed', 'pushed', 'pushed to branch: '+webhook.branch+' in '+ webhook.repo.ssh_url + ' for app: '+app.name + ' in pipeline: '+app.pipeline + ' phase: '+app.phase); this.rebuildApp(app); } @@ -1212,7 +1267,13 @@ export class Kubero { if (contextName) { this.kubectl.setCurrentContext(contextName); this.kubectl.deployApp(namespace, appName, tag); - this._io.emit('updatedApps', "deplyment_started"); + this._io.emit('updatedApps', { + 'action': 'deployed', + 'data': { + 'name': appName, + 'pipeline': pipelineName, + 'phase': phaseName + }}); } } diff --git a/server/src/types.ts b/server/src/types.ts index df75aa8a1..ff0fabcab 100644 --- a/server/src/types.ts +++ b/server/src/types.ts @@ -329,4 +329,12 @@ export interface ILoglines { container: string, color: string, log: string, +} + +export interface IMessage { + action: string, + appName?: string, + pipelineName: string, + phaseName: string, + data?: any } \ No newline at end of file diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 000000000..9300132bc --- /dev/null +++ b/yarn.lock @@ -0,0 +1,8 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +sweetalert2@^11.10.2: + version "11.10.2" + resolved "https://registry.yarnpkg.com/sweetalert2/-/sweetalert2-11.10.2.tgz#084fba88028e7ab5667ceed00e4201dda7d25294" + integrity sha512-BYlIxGw6OF9Rw2z1wlnh1U+fvHHkvtg4BGyimV9nZxQRGvCBfx9uonxgwuYpJuYqCtM+2W1KOm8iMIEb/2v7Hg== From fb1fd0b65e4bacea367891841e52c654de4741dd Mon Sep 17 00:00:00 2001 From: Gianni Carafa Date: Sat, 6 Jan 2024 23:40:08 +0100 Subject: [PATCH 35/95] migration: minor fixes --- client-new/src/components/apps/form.vue | 14 +++++++++----- client-new/src/components/events/view.vue | 2 +- client-new/src/components/pipelines/form.vue | 2 +- client-new/src/layouts/default/Default.vue | 2 +- 4 files changed, 12 insertions(+), 8 deletions(-) diff --git a/client-new/src/components/apps/form.vue b/client-new/src/components/apps/form.vue index 0beb71370..17467eb64 100644 --- a/client-new/src/components/apps/form.vue +++ b/client-new/src/components/apps/form.vue @@ -613,7 +613,7 @@ Environment Variables - + @@ -724,9 +724,9 @@ @@ -742,6 +742,8 @@ label="Web Pods" max="10" min="0" + step="1" + hint="pods" thumb-label="always" > @@ -757,6 +759,8 @@ label="Worker Pods" max="10" min="0" + step="1" + hint="pods" thumb-label="always" > @@ -827,7 +831,7 @@ !!v || 'Domain is required', (v: any) => v.length <= 60 || 'Name must be less than 60 characters', - (v: any) => /^([a-z0-9|-]+[a-z0-9]{1,}\.)*[a-z0-9|-]+[a-z0-9]{1,}\.[a-z]{2,}$/.test(v) || 'Not a domain', + (v: any) => /^(([a-zA-Z]{1})|([a-zA-Z]{1}[a-zA-Z]{1})|([a-zA-Z]{1}[0-9]{1})|([0-9]{1}[a-zA-Z]{1})|([a-zA-Z0-9][a-zA-Z0-9-_]{1,61}[a-zA-Z0-9]))\.([a-zA-Z]{2,6}|[a-zA-Z0-9-]{2,30}\.[a-zA-Z]{2,8})$/.test(v) || 'Not a domain', ], cronjobScheduleRules: [ (v: any) => !!v || 'Schedule is required', diff --git a/client-new/src/components/events/view.vue b/client-new/src/components/events/view.vue index a8f5fe5bf..e9c17228c 100644 --- a/client-new/src/components/events/view.vue +++ b/client-new/src/components/events/view.vue @@ -4,7 +4,7 @@ - + v.length <= 90 || 'Name must be less than 90 characters', - (v: any) => /^([a-z0-9|-]*[a-z0-9]{1,}\.)*[a-z0-9|-]+[a-z0-9]{1,}\.[a-z]{2,}$/.test(v) || 'Not a domain', + (v: any) => /^(([a-zA-Z]{1})|([a-zA-Z]{1}[a-zA-Z]{1})|([a-zA-Z]{1}[0-9]{1})|([0-9]{1}[a-zA-Z]{1})|([a-zA-Z0-9][a-zA-Z0-9-_]{1,61}[a-zA-Z0-9]))\.([a-zA-Z]{2,6}|[a-zA-Z0-9-]{2,30}\.[a-zA-Z]{2,8})$/.test(v) || 'Not a domain', ], repositoryRules: [ (v: any) => !!v || 'Repository is required', diff --git a/client-new/src/layouts/default/Default.vue b/client-new/src/layouts/default/Default.vue index 0bc6c9594..5eaac6bce 100644 --- a/client-new/src/layouts/default/Default.vue +++ b/client-new/src/layouts/default/Default.vue @@ -45,7 +45,7 @@ function triggerToast(icon: SweetAlertIcon, title: string, text: string) { toast: true, position: 'top-end', showConfirmButton: false, - timer: 6000, + timer: 3000, timerProgressBar: true, icon: icon, title: title, From dc7ee431c84ecfc3fa2fbb298ae6635260cddf3d Mon Sep 17 00:00:00 2001 From: Gianni Carafa Date: Sun, 7 Jan 2024 00:03:15 +0100 Subject: [PATCH 36/95] migration: minor icon fix --- client-new/src/components/pipelines/form.vue | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/client-new/src/components/pipelines/form.vue b/client-new/src/components/pipelines/form.vue index c10350336..3465fdef5 100644 --- a/client-new/src/components/pipelines/form.vue +++ b/client-new/src/components/pipelines/form.vue @@ -56,8 +56,8 @@ cols="12" md="8" > - - mdi-githubGithub + + mdi-githubGithub Gitea mdi-gitlabGitlab @@ -596,7 +596,8 @@ export default defineComponent({ background-image: url('./../../../public/img/icons/gogs.svg'); background-size: contain; background-repeat: no-repeat; - filter: invert(39%) sepia(47%) saturate(584%) hue-rotate(228deg) brightness(95%) contrast(80%); + filter: brightness(0) saturate(100%) invert(28%) sepia(0%) saturate(78%) hue-rotate(197deg) brightness(95%) contrast(83%); + /*filter: invert(39%) sepia(47%) saturate(584%) hue-rotate(228deg) brightness(95%) contrast(80%); /*filter: invert(93%) sepia(49%) saturate(7411%) hue-rotate(184deg) brightness(87%) contrast(90%);*/ } @@ -612,7 +613,8 @@ export default defineComponent({ background-image: url('./../../../public/img/icons/onedev.svg'); background-size: contain; background-repeat: no-repeat; - filter: invert(39%) sepia(47%) saturate(584%) hue-rotate(228deg) brightness(95%) contrast(80%); + filter: brightness(0) saturate(100%) invert(28%) sepia(0%) saturate(78%) hue-rotate(197deg) brightness(95%) contrast(83%); + /*filter: invert(39%) sepia(47%) saturate(584%) hue-rotate(228deg) brightness(95%) contrast(80%); /*filter: invert(93%) sepia(49%) saturate(7411%) hue-rotate(184deg) brightness(87%) contrast(90%);*/ } @@ -627,7 +629,8 @@ export default defineComponent({ background-image: url('./../../../public/img/icons/gitea.svg'); background-size: contain; background-repeat: no-repeat; - filter: invert(39%) sepia(47%) saturate(584%) hue-rotate(228deg) brightness(95%) contrast(80%); + filter: brightness(0) saturate(100%) invert(28%) sepia(0%) saturate(78%) hue-rotate(197deg) brightness(95%) contrast(83%); + /*filter: invert(39%) sepia(47%) saturate(584%) hue-rotate(228deg) brightness(95%) contrast(80%); /*filter: invert(93%) sepia(49%) saturate(7411%) hue-rotate(184deg) brightness(87%) contrast(90%);*/ } From f2b17b0806d8b886511af31e6d51d55c33d3318e Mon Sep 17 00:00:00 2001 From: Gianni Carafa Date: Sun, 7 Jan 2024 22:26:40 +0100 Subject: [PATCH 37/95] improve resilience a bit --- server/src/kubero.ts | 5 ++ server/src/modules/kubectl.ts | 4 +- server/src/routes/pipelines.ts | 134 +++++++++++++++++++++++++-------- 3 files changed, 109 insertions(+), 34 deletions(-) diff --git a/server/src/kubero.ts b/server/src/kubero.ts index 4217ac443..5aec9aa89 100644 --- a/server/src/kubero.ts +++ b/server/src/kubero.ts @@ -216,6 +216,7 @@ export class Kubero { let pipeline = await this.kubectl.getPipeline(pipelineName) .catch(error => { debug.log(error); + return undefined; }); if (pipeline) { @@ -382,6 +383,10 @@ export class Kubero { await this.kubectl.setCurrentContext(process.env.KUBERO_CONTEXT || 'default'); const kpipeline = await this.kubectl.getPipeline(pipelineName); + if (!kpipeline.spec || !kpipeline.spec.git || !kpipeline.spec.git.keys) { + return; + } + delete kpipeline.spec.git.keys.priv delete kpipeline.spec.git.keys.pub diff --git a/server/src/modules/kubectl.ts b/server/src/modules/kubectl.ts index 326104b3e..21cb5657f 100644 --- a/server/src/modules/kubectl.ts +++ b/server/src/modules/kubectl.ts @@ -189,11 +189,13 @@ export class Kubectl { pipelineName ).catch(error => { debug.log(error); + throw error; }); if (pipeline) { return pipeline.body as IKubectlPipeline; } else { - return {} as IKubectlPipeline; + throw new Error("Pipeline not found"); + //return {} as IKubectlPipeline; } } diff --git a/server/src/routes/pipelines.ts b/server/src/routes/pipelines.ts index fc8f6f5cd..17facf630 100644 --- a/server/src/routes/pipelines.ts +++ b/server/src/routes/pipelines.ts @@ -166,15 +166,38 @@ Router.delete('/cli/pipelines/:pipeline', bearerMiddleware, async function (req: "bearerFormat": 'JWT', } }] */ - await req.app.locals.kubero.deletePipeline(encodeURI(req.params.pipeline)); - res.send("pipeline "+encodeURI(req.params.pipeline)+" deleted"); + try { + await req.app.locals.kubero.deleteApp(req.params.pipeline, req.params.phase, req.params.app); + res.send("pipeline "+encodeURI(req.params.pipeline)+" deleted"); + } catch (error) { + console.log(error); + res.status(503); + res.send("delete failed"); + } }); Router.delete('/pipelines/:pipeline/:phase/:app', authMiddleware, async function (req: Request, res: Response) { // #swagger.tags = ['UI'] // #swagger.summary = 'Delete an app' - await req.app.locals.kubero.deleteApp(req.params.pipeline, req.params.phase, req.params.app); - res.send("deleted"); + try { + await req.app.locals.kubero.deleteApp(req.params.pipeline, req.params.phase, req.params.app); + + // sanityze params + const pipeline = encodeURI(req.params.pipeline); + const phase = encodeURI(req.params.phase); + const app = encodeURI(req.params.app); + const response = { + message: "deleted "+pipeline+" "+phase+" "+app, + pipeline: pipeline, + phase: phase, + app: app + }; + res.send(response); + } catch (error) { + console.log(error); + res.status(503); + res.send("delete failed"); + } }); Router.delete('/cli/pipelines/:pipeline/:phase/:app', bearerMiddleware, async function (req: Request, res: Response) { @@ -187,19 +210,25 @@ Router.delete('/cli/pipelines/:pipeline/:phase/:app', bearerMiddleware, async fu "bearerFormat": 'JWT', } }] */ - await req.app.locals.kubero.deleteApp(req.params.pipeline, req.params.phase, req.params.app); - - // sanityze params - const pipeline = encodeURI(req.params.pipeline); - const phase = encodeURI(req.params.phase); - const app = encodeURI(req.params.app); - const response = { - message: "deleted "+pipeline+" "+phase+" "+app, - pipeline: pipeline, - phase: phase, - app: app - }; - res.send(response); + try { + await req.app.locals.kubero.deleteApp(req.params.pipeline, req.params.phase, req.params.app); + + // sanityze params + const pipeline = encodeURI(req.params.pipeline); + const phase = encodeURI(req.params.phase); + const app = encodeURI(req.params.app); + const response = { + message: "deleted "+pipeline+" "+phase+" "+app, + pipeline: pipeline, + phase: phase, + app: app + }; + res.send(response); + } catch (error) { + console.log(error); + res.status(503); + res.send("delete failed"); + } }); Router.get('/cli/pipelines/:pipeline/:phase/:app', bearerMiddleware, async function (req: Request, res: Response) { @@ -212,23 +241,44 @@ Router.get('/cli/pipelines/:pipeline/:phase/:app', bearerMiddleware, async funct "bearerFormat": 'JWT', } }] */ - let app = await req.app.locals.kubero.getApp(req.params.pipeline, req.params.phase, req.params.app); - - // TODO: the response should be sanitised the same way as in the the UI - res.send(app.body); + try { + let app = await req.app.locals.kubero.getApp(req.params.pipeline, req.params.phase, req.params.app); + if (app == undefined) { + res.status(404); + res.send("not found"); + return; + } + // TODO: the response should be sanitised the same way as in the the UI + res.send(app.body); + } catch (error) { + console.log(error); + res.status(404); + res.send("not found"); + } }); Router.get('/pipelines/:pipeline/:phase/:app', authMiddleware, async function (req: Request, res: Response) { // #swagger.tags = ['UI'] // #swagger.summary = 'Get app details' - let app = await req.app.locals.kubero.getApp(req.params.pipeline, req.params.phase, req.params.app); + try { + let app = await req.app.locals.kubero.getApp(req.params.pipeline, req.params.phase, req.params.app); + if (app == undefined) { + res.status(404); + res.send("not found"); + return; + } - const a = new App(app.body.spec as IApp); + const a = new App(app.body.spec as IApp); - res.send({ - resourceVersion: app.body.metadata.resourceVersion, - spec: a - }); + res.send({ + resourceVersion: app.body.metadata.resourceVersion, + spec: a + }); + } catch (error) { + console.log(error); + res.status(404); + res.send("not found"); + } }); Router.get('/cli/pipelines/:pipeline/apps', bearerMiddleware, async function (req: Request, res: Response) { @@ -241,20 +291,38 @@ Router.get('/cli/pipelines/:pipeline/apps', bearerMiddleware, async function (re "bearerFormat": 'JWT', } }] */ - let apps = await req.app.locals.kubero.getPipelineWithApps(req.params.pipeline); - res.send(apps); + try { + let apps = await req.app.locals.kubero.getPipelineWithApps(req.params.pipeline); + res.send(apps); + } catch (error) { + console.log(error); + res.status(404); + res.send("not found"); + } }); Router.get('/pipelines/:pipeline/apps', authMiddleware, async function (req: Request, res: Response) { // #swagger.tags = ['UI'] // #swagger.summary = 'Get all apps in a pipeline' - let apps = await req.app.locals.kubero.getPipelineWithApps(req.params.pipeline); - res.send(apps); + try { + let apps = await req.app.locals.kubero.getPipelineWithApps(req.params.pipeline); + res.send(apps); + } catch (error) { + console.log(error); + res.status(404); + res.send("not found"); + } }); Router.get('/pipelines/:pipeline/:phase/:app/restart', authMiddleware, async function (req: Request, res: Response) { // #swagger.tags = ['UI'] // #swagger.summary = 'Restart an app' - req.app.locals.kubero.restartApp(req.params.pipeline, req.params.phase, req.params.app); - res.send("restarted"); + try { + await req.app.locals.kubero.restartApp(req.params.pipeline, req.params.phase, req.params.app); + res.send("restarted"); + } catch (error) { + console.log(error); + res.status(503); + res.send("restart failed"); + } }); \ No newline at end of file From 6cf31bbca2d90f8f3f5c0f42ce70c4b55d7c3d05 Mon Sep 17 00:00:00 2001 From: Gianni Carafa Date: Sun, 7 Jan 2024 23:50:48 +0100 Subject: [PATCH 38/95] add confirmation button --- client-new/src/components/pipelines/list.vue | 46 +++++++++++++------- 1 file changed, 31 insertions(+), 15 deletions(-) diff --git a/client-new/src/components/pipelines/list.vue b/client-new/src/components/pipelines/list.vue index d54c24bfd..17ba0a997 100644 --- a/client-new/src/components/pipelines/list.vue +++ b/client-new/src/components/pipelines/list.vue @@ -92,6 +92,7 @@ import axios from "axios"; import { ref, defineComponent } from 'vue' import Breadcrumbs from "../breadcrumbs.vue"; import { useSocketIO } from '../../socket.io'; +import Swal from 'sweetalert2'; type Pipeline = { name: string, @@ -168,24 +169,39 @@ export default defineComponent({ console.log(error); }); }, - deletePipeline(app: string) { - - const element = document.querySelector(`#${app}`) as HTMLElement; - if (element) { - element.style.display = "none"; - } - - axios.delete(`/api/pipelines/${app}`) - .then(response => { - console.log(response); - ///this.loadPipelinesList(); + deletePipeline(pipeline: string) { + + Swal.fire({ + title: "Delete Pipeline", + text: "Do you want to delete this pipeline? This action cannot be undone. It will delete all the apps and data associated with this pipeline.", + icon: "question", + showCancelButton: true, + confirmButtonText: "Delete", + cancelButtonText: "Cancel", + confirmButtonColor: "--var(kubero)", }) - .catch(error => { - console.log(error); + .then((result) => { + if (result.isConfirmed) { + const element = document.querySelector(`#${pipeline}`) as HTMLElement; + if (element) { + element.style.display = "none"; + } + + axios.delete(`/api/pipelines/${pipeline}`) + .then(response => { + console.log(response); + ///this.loadPipelinesList(); + }) + .catch(error => { + console.log(error); + }); + } + return; }); + }, - editPipeline(app: string) { - this.$router.push({ name: 'Edit Pipeline', params: { name: app } }); + editPipeline(pipeline: string) { + this.$router.push({ name: 'Edit Pipeline', params: { name: pipeline } }); }, }, }); From 37fa024e1b8d5d902e5650cf8b86f1d451057cd9 Mon Sep 17 00:00:00 2001 From: Gianni Carafa Date: Mon, 8 Jan 2024 00:39:26 +0100 Subject: [PATCH 39/95] migration: minor color fixes --- client-new/src/App.vue | 5 ----- client-new/src/components/pipelines/list.vue | 4 ++-- client-new/src/layouts/default/Default.vue | 1 + 3 files changed, 3 insertions(+), 7 deletions(-) diff --git a/client-new/src/App.vue b/client-new/src/App.vue index 95df42d15..e54e669ba 100644 --- a/client-new/src/App.vue +++ b/client-new/src/App.vue @@ -2,11 +2,6 @@ - - \ No newline at end of file diff --git a/client/public/img/icons/connected.svg b/client/public/img/icons/connected.svg deleted file mode 100644 index 11e33e471..000000000 --- a/client/public/img/icons/connected.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/client/public/img/icons/disconnected.svg b/client/public/img/icons/disconnected.svg deleted file mode 100644 index 1de2371ed..000000000 --- a/client/public/img/icons/disconnected.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/client/public/img/icons/discord.svg b/client/public/img/icons/discord.svg deleted file mode 100644 index 4b7477340..000000000 --- a/client/public/img/icons/discord.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/client/public/img/icons/gitea.svg b/client/public/img/icons/gitea.svg deleted file mode 100644 index 61f7c81b3..000000000 --- a/client/public/img/icons/gitea.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/client/public/img/icons/gogs.svg b/client/public/img/icons/gogs.svg deleted file mode 100644 index b1ff153b9..000000000 --- a/client/public/img/icons/gogs.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/client/public/img/icons/onedev.svg b/client/public/img/icons/onedev.svg deleted file mode 100644 index dd823159a..000000000 --- a/client/public/img/icons/onedev.svg +++ /dev/null @@ -1,23 +0,0 @@ - \ No newline at end of file diff --git a/client/public/index.html b/client/public/index.html deleted file mode 100644 index 4fb5ffe22..000000000 --- a/client/public/index.html +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - <%= htmlWebpackPlugin.options.title %> - - - - - - - - - - - - -

- - - diff --git a/client/public/robots.txt b/client/public/robots.txt deleted file mode 100644 index 77470cb39..000000000 --- a/client/public/robots.txt +++ /dev/null @@ -1,2 +0,0 @@ -User-agent: * -Disallow: / \ No newline at end of file diff --git a/client/src/App.vue b/client/src/App.vue deleted file mode 100644 index 974bd62ae..000000000 --- a/client/src/App.vue +++ /dev/null @@ -1,337 +0,0 @@ - - - - - \ No newline at end of file diff --git a/client/src/components/addons/list.vue b/client/src/components/addons/list.vue deleted file mode 100644 index 986d82ce7..000000000 --- a/client/src/components/addons/list.vue +++ /dev/null @@ -1,162 +0,0 @@ - - - - - \ No newline at end of file diff --git a/client/src/components/appfooter.vue b/client/src/components/appfooter.vue deleted file mode 100644 index 056c4556a..000000000 --- a/client/src/components/appfooter.vue +++ /dev/null @@ -1,20 +0,0 @@ - - \ No newline at end of file diff --git a/client/src/components/apps/addons.vue b/client/src/components/apps/addons.vue deleted file mode 100644 index bc005a44f..000000000 --- a/client/src/components/apps/addons.vue +++ /dev/null @@ -1,336 +0,0 @@ - - - - \ No newline at end of file diff --git a/client/src/components/apps/detail.vue b/client/src/components/apps/detail.vue deleted file mode 100644 index 8d3afa616..000000000 --- a/client/src/components/apps/detail.vue +++ /dev/null @@ -1,174 +0,0 @@ - - - - - \ No newline at end of file diff --git a/client/src/components/apps/events.vue b/client/src/components/apps/events.vue deleted file mode 100644 index 676b7f1c0..000000000 --- a/client/src/components/apps/events.vue +++ /dev/null @@ -1,169 +0,0 @@ - - - - - \ No newline at end of file diff --git a/client/src/components/apps/logs.vue b/client/src/components/apps/logs.vue deleted file mode 100644 index 73d652ef2..000000000 --- a/client/src/components/apps/logs.vue +++ /dev/null @@ -1,121 +0,0 @@ - - - - - \ No newline at end of file diff --git a/client/src/components/apps/logstab.vue b/client/src/components/apps/logstab.vue deleted file mode 100644 index f56f2fa79..000000000 --- a/client/src/components/apps/logstab.vue +++ /dev/null @@ -1,67 +0,0 @@ - - - - - \ No newline at end of file diff --git a/client/src/components/apps/new.vue b/client/src/components/apps/new.vue deleted file mode 100644 index bf75e13d3..000000000 --- a/client/src/components/apps/new.vue +++ /dev/null @@ -1,1831 +0,0 @@ - - - - - diff --git a/client/src/components/apps/vulnerabilities.vue b/client/src/components/apps/vulnerabilities.vue deleted file mode 100644 index 3e293bc2a..000000000 --- a/client/src/components/apps/vulnerabilities.vue +++ /dev/null @@ -1,361 +0,0 @@ - - - - - \ No newline at end of file diff --git a/client/src/components/breadcrumbs.vue b/client/src/components/breadcrumbs.vue deleted file mode 100644 index 7352a5d50..000000000 --- a/client/src/components/breadcrumbs.vue +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/client/src/components/events/view.vue b/client/src/components/events/view.vue deleted file mode 100644 index 95d11ecb0..000000000 --- a/client/src/components/events/view.vue +++ /dev/null @@ -1,126 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/client/src/components/login.vue b/client/src/components/login.vue deleted file mode 100644 index 471b6c9dd..000000000 --- a/client/src/components/login.vue +++ /dev/null @@ -1,130 +0,0 @@ - - - \ No newline at end of file diff --git a/client/src/components/pipelines/appcard.vue b/client/src/components/pipelines/appcard.vue deleted file mode 100644 index 595829d9f..000000000 --- a/client/src/components/pipelines/appcard.vue +++ /dev/null @@ -1,342 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/client/src/components/pipelines/detail.vue b/client/src/components/pipelines/detail.vue deleted file mode 100644 index 093c57345..000000000 --- a/client/src/components/pipelines/detail.vue +++ /dev/null @@ -1,159 +0,0 @@ - - - \ No newline at end of file diff --git a/client/src/components/pipelines/list.vue b/client/src/components/pipelines/list.vue deleted file mode 100644 index b080c0708..000000000 --- a/client/src/components/pipelines/list.vue +++ /dev/null @@ -1,209 +0,0 @@ - - - - - \ No newline at end of file diff --git a/client/src/components/pipelines/new.vue b/client/src/components/pipelines/new.vue deleted file mode 100644 index 113c2182d..000000000 --- a/client/src/components/pipelines/new.vue +++ /dev/null @@ -1,611 +0,0 @@ - - - - - \ No newline at end of file diff --git a/client/src/components/pipelines/prcard.vue b/client/src/components/pipelines/prcard.vue deleted file mode 100644 index 3526a26b4..000000000 --- a/client/src/components/pipelines/prcard.vue +++ /dev/null @@ -1,145 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/client/src/components/services/list.vue b/client/src/components/services/list.vue deleted file mode 100644 index ff59fdb54..000000000 --- a/client/src/components/services/list.vue +++ /dev/null @@ -1,239 +0,0 @@ - - - - - \ No newline at end of file diff --git a/client/src/components/settings/form.vue b/client/src/components/settings/form.vue deleted file mode 100644 index 65a7bc525..000000000 --- a/client/src/components/settings/form.vue +++ /dev/null @@ -1,357 +0,0 @@ - - - - - \ No newline at end of file diff --git a/client/src/main.js b/client/src/main.js deleted file mode 100644 index c28755c23..000000000 --- a/client/src/main.js +++ /dev/null @@ -1,32 +0,0 @@ -import Vue from 'vue' -import VueRouter from 'vue-router' -import App from './App.vue' -import vuetify from './plugins/vuetify'; -import vueSocketIoExtended from './plugins/vue-socket-io-extended'; -import router from './router'; - -router.beforeEach((to, from, next) => { - document.title = App.name + " - " + to.name; - next(); -}); - -Vue.config.productionTip = false -Vue.use(VueRouter) - -Vue.filter('formatDate', function(value) { - if (value) { - return new Date(value).toLocaleString(); - } -}); - -// vcdount is created in index.html by loadin js from CDN -//https://www.npmjs.com/package/vue-css-donut-chart -// eslint-disable-next-line no-undef -Vue.use(vcdonut.default); - -new Vue({ - vueSocketIoExtended, - router, - vuetify, - render: h => h(App) -}).$mount('#app') diff --git a/client/src/plugins/vue-socket-io-extended.js b/client/src/plugins/vue-socket-io-extended.js deleted file mode 100644 index 8399ee33d..000000000 --- a/client/src/plugins/vue-socket-io-extended.js +++ /dev/null @@ -1,15 +0,0 @@ -import Vue from 'vue'; -import VueSocketIOExt from 'vue-socket.io-extended'; -import { io } from 'socket.io-client'; - -const socket = io(); - -Vue.use(VueSocketIOExt, socket); - -export default { - sockets: { - connect() { - console.log('socket connected'); - } - } -} \ No newline at end of file diff --git a/client/src/plugins/vuetify.js b/client/src/plugins/vuetify.js deleted file mode 100644 index ba8f1ef3a..000000000 --- a/client/src/plugins/vuetify.js +++ /dev/null @@ -1,39 +0,0 @@ -import Vue from 'vue'; -import Vuetify from 'vuetify/lib/framework'; -import colors from 'vuetify/es5/util/colors' - -Vue.use(Vuetify); - -export default new Vuetify({ - version: "", - isAuthenticated: false, - buildPipeline: false, - theme: { - dark: false, - themes: { - dark: { - primary: '#8560A9', - //cardBackground: '#', // use default - navBG: '#262626', - secondary: colors.grey.darken3, - background: '#121212', - - accent: '#8c9eff', - error: '#b71c1c', - }, - light: { - primary: '#8560A9', - cardBackground: '#FAFAFA', - navBG: '#F7F8FB', - secondary: colors.grey.lighten2, - textColor: '#262626', - - accent: '#82B1FF', - error: '#FF5252', - info: '#2196F3', - success: '#4CAF50', - warning: '#FFC107', - }, - }, - }, -}); \ No newline at end of file diff --git a/client/src/router/index.js b/client/src/router/index.js deleted file mode 100644 index 7b9c9bd9f..000000000 --- a/client/src/router/index.js +++ /dev/null @@ -1,88 +0,0 @@ -import VueRouter from "vue-router" -import PipelineList from "@/components/pipelines/list" -import PipelineNew from "@/components/pipelines/new" -import PipelineDetails from "@/components/pipelines/detail" -import AppsNew from "@/components/apps/new" -import AppsDetail from "@/components/apps/detail" -import AppsLogsPopUp from "@/components/apps/logs" -import Settingsform from "@/components/settings/form" -import Addonslist from "@/components/addons/list" -import EventsView from "@/components/events/view" -import Serviceslist from "@/components/services/list" -import Login from "@/components/login" - -export default new VueRouter({ - routes: [ - { - path: "/", - name: "Pipelines", - component: PipelineList - }, - { - path: "/pipeline/new", - name: "New Pipeline", - component: PipelineNew - }, - { - path: "/pipeline/:pipeline/apps", - name: "PupeLine Details", - component: PipelineDetails, - props: true - }, - { - path: "/pipeline/:pipeline/:phase/apps/new", - name: "New App", - component: AppsNew, - props: true - }, - { - path: "/pipeline/:pipeline", - name: "Edit Pipeline", - component: PipelineNew, - props: true - }, - { - path: "/pipeline/:pipeline/:phase/:app", - name: "Edit App", - component: AppsNew, - props: true - }, - { - path: "/pipeline/:pipeline/:phase/:app/detail", - name: "App details", - component: AppsDetail, - props: true - }, - { - path: "/pipeline/:pipeline/:phase/:app/logspopup", - name: "App logs popup", - component: AppsLogsPopUp, - props: true - }, - { - path: "/settings", - name: "Settigns", - component: Settingsform - }, - { - path: "/addons", - name: "Addons", - component: Addonslist - }, - { - path: "/login", - name: "Login", - component: Login - }, - { - path: "/events", - name: "Events", - component: EventsView - }, - { - path: "/templates", - name: "Templates", - component: Serviceslist - }, - ] -}) \ No newline at end of file diff --git a/client/vue.config.js b/client/vue.config.js deleted file mode 100644 index ec92a7865..000000000 --- a/client/vue.config.js +++ /dev/null @@ -1,17 +0,0 @@ -module.exports = { - chainWebpack: config => { - config.plugin('html').tap(args => { - args[0].title = "Kubero" - return args; - }) - }, - devServer: { - //before: configureAPI.before, - // Can't figure out how to connect up socket.io as part of webpack devServer - //after: configureAPI.after - }, - - transpileDependencies: [ - 'vuetify' - ] -}; diff --git a/client/yarn.lock b/client/yarn.lock deleted file mode 100644 index aafab7e34..000000000 --- a/client/yarn.lock +++ /dev/null @@ -1,6267 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@aashutoshrathi/word-wrap@^1.2.3": - version "1.2.6" - resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" - integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== - -"@achrinza/node-ipc@^9.2.5": - version "9.2.7" - resolved "https://registry.yarnpkg.com/@achrinza/node-ipc/-/node-ipc-9.2.7.tgz#cc418f9218d24d9b87f32207e5d6e71c64e241f8" - integrity sha512-/EvNkqB4HNxPWCZASmgrjqG8gIdPOolD67LGASvGMp/FY5ne0rbvpYg5o9x8RmgjAl8KdmNQ4YlV1et9DYiW8g== - dependencies: - "@node-ipc/js-queue" "2.0.3" - event-pubsub "4.3.0" - js-message "1.0.7" - -"@ampproject/remapping@^2.2.0": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" - integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== - dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" - -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.22.10", "@babel/code-frame@^7.22.5": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.10.tgz#1c20e612b768fefa75f6e90d6ecb86329247f0a3" - integrity sha512-/KKIMG4UEL35WmI9OlvMhurwtytjvXoFcGNrOvyG9zIzA8YmPjVtIZUf7b05+TPO7G7/GEmLHDaoCgACHl9hhA== - dependencies: - "@babel/highlight" "^7.22.10" - chalk "^2.4.2" - -"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9": - version "7.22.9" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.9.tgz#71cdb00a1ce3a329ce4cbec3a44f9fef35669730" - integrity sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ== - -"@babel/core@^7.12.16": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.22.11.tgz#8033acaa2aa24c3f814edaaa057f3ce0ba559c24" - integrity sha512-lh7RJrtPdhibbxndr6/xx0w8+CVlY5FJZiaSz908Fpy+G0xkBFTvwLcKJFF4PJxVfGhVWNebikpWGnOoC71juQ== - dependencies: - "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.22.10" - "@babel/generator" "^7.22.10" - "@babel/helper-compilation-targets" "^7.22.10" - "@babel/helper-module-transforms" "^7.22.9" - "@babel/helpers" "^7.22.11" - "@babel/parser" "^7.22.11" - "@babel/template" "^7.22.5" - "@babel/traverse" "^7.22.11" - "@babel/types" "^7.22.11" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.3" - semver "^6.3.1" - -"@babel/eslint-parser@^7.19.1": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.22.11.tgz#cceb8c7989c241a16dd14e12a6cd725618f3f58b" - integrity sha512-YjOYZ3j7TjV8OhLW6NCtyg8G04uStATEUe5eiLuCZaXz2VSDQ3dsAtm2D+TuQyAqNMUK2WacGo0/uma9Pein1w== - dependencies: - "@nicolo-ribaudo/eslint-scope-5-internals" "5.1.1-v1" - eslint-visitor-keys "^2.1.0" - semver "^6.3.1" - -"@babel/generator@^7.22.10": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.22.10.tgz#c92254361f398e160645ac58831069707382b722" - integrity sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A== - dependencies: - "@babel/types" "^7.22.10" - "@jridgewell/gen-mapping" "^0.3.2" - "@jridgewell/trace-mapping" "^0.3.17" - jsesc "^2.5.1" - -"@babel/helper-annotate-as-pure@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz#e7f06737b197d580a01edf75d97e2c8be99d3882" - integrity sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-builder-binary-assignment-operator-visitor@^7.22.5": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.10.tgz#573e735937e99ea75ea30788b57eb52fab7468c9" - integrity sha512-Av0qubwDQxC56DoUReVDeLfMEjYYSN1nZrTUrWkXd7hpU73ymRANkbuDm3yni9npkn+RXy9nNbEJZEzXr7xrfQ== - dependencies: - "@babel/types" "^7.22.10" - -"@babel/helper-compilation-targets@^7.12.16", "@babel/helper-compilation-targets@^7.22.10", "@babel/helper-compilation-targets@^7.22.5", "@babel/helper-compilation-targets@^7.22.6": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.10.tgz#01d648bbc25dd88f513d862ee0df27b7d4e67024" - integrity sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q== - dependencies: - "@babel/compat-data" "^7.22.9" - "@babel/helper-validator-option" "^7.22.5" - browserslist "^4.21.9" - lru-cache "^5.1.1" - semver "^6.3.1" - -"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.22.10", "@babel/helper-create-class-features-plugin@^7.22.11", "@babel/helper-create-class-features-plugin@^7.22.5": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.11.tgz#4078686740459eeb4af3494a273ac09148dfb213" - integrity sha512-y1grdYL4WzmUDBRGK0pDbIoFd7UZKoDurDzWEoNMYoj1EL+foGRQNyPWDcC+YyegN5y1DUsFFmzjGijB3nSVAQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" - "@babel/helper-member-expression-to-functions" "^7.22.5" - "@babel/helper-optimise-call-expression" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.9" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - semver "^6.3.1" - -"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.5": - version "7.22.9" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.9.tgz#9d8e61a8d9366fe66198f57c40565663de0825f6" - integrity sha512-+svjVa/tFwsNSG4NEy1h85+HQ5imbT92Q5/bgtS7P0GTQlP8WuFdqsiABmQouhiFGyV66oGxZFpeYHza1rNsKw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - regexpu-core "^5.3.1" - semver "^6.3.1" - -"@babel/helper-define-polyfill-provider@^0.4.2": - version "0.4.2" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.2.tgz#82c825cadeeeee7aad237618ebbe8fa1710015d7" - integrity sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw== - dependencies: - "@babel/helper-compilation-targets" "^7.22.6" - "@babel/helper-plugin-utils" "^7.22.5" - debug "^4.1.1" - lodash.debounce "^4.0.8" - resolve "^1.14.2" - -"@babel/helper-environment-visitor@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz#f06dd41b7c1f44e1f8da6c4055b41ab3a09a7e98" - integrity sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q== - -"@babel/helper-function-name@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz#ede300828905bb15e582c037162f99d5183af1be" - integrity sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ== - dependencies: - "@babel/template" "^7.22.5" - "@babel/types" "^7.22.5" - -"@babel/helper-hoist-variables@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" - integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-member-expression-to-functions@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz#0a7c56117cad3372fbf8d2fb4bf8f8d64a1e76b2" - integrity sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz#1a8f4c9f4027d23f520bd76b364d44434a72660c" - integrity sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-module-transforms@^7.22.5", "@babel/helper-module-transforms@^7.22.9": - version "7.22.9" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz#92dfcb1fbbb2bc62529024f72d942a8c97142129" - integrity sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ== - dependencies: - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-module-imports" "^7.22.5" - "@babel/helper-simple-access" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/helper-validator-identifier" "^7.22.5" - -"@babel/helper-optimise-call-expression@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz#f21531a9ccbff644fdd156b4077c16ff0c3f609e" - integrity sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw== - dependencies: - "@babel/types" "^7.22.5" - -"@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.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" - integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== - -"@babel/helper-remap-async-to-generator@^7.22.5", "@babel/helper-remap-async-to-generator@^7.22.9": - version "7.22.9" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.9.tgz#53a25b7484e722d7efb9c350c75c032d4628de82" - integrity sha512-8WWC4oR4Px+tr+Fp0X3RHDVfINGpF3ad1HIbrc8A77epiR6eMMc6jsgozkzT2uDiOOdoS9cLIQ+XD2XvI2WSmQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-wrap-function" "^7.22.9" - -"@babel/helper-replace-supers@^7.22.5", "@babel/helper-replace-supers@^7.22.9": - version "7.22.9" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.9.tgz#cbdc27d6d8d18cd22c81ae4293765a5d9afd0779" - integrity sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg== - dependencies: - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-member-expression-to-functions" "^7.22.5" - "@babel/helper-optimise-call-expression" "^7.22.5" - -"@babel/helper-simple-access@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de" - integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-skip-transparent-expression-wrappers@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz#007f15240b5751c537c40e77abb4e89eeaaa8847" - integrity sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-split-export-declaration@^7.22.6": - version "7.22.6" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" - integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-string-parser@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" - integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== - -"@babel/helper-validator-identifier@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz#9544ef6a33999343c8740fa51350f30eeaaaf193" - integrity sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ== - -"@babel/helper-validator-option@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz#de52000a15a177413c8234fa3a8af4ee8102d0ac" - integrity sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw== - -"@babel/helper-wrap-function@^7.22.9": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.10.tgz#d845e043880ed0b8c18bd194a12005cb16d2f614" - integrity sha512-OnMhjWjuGYtdoO3FmsEFWvBStBAe2QOgwOLsLNDjN+aaiMD8InJk1/O3HSD8lkqTjCgg5YI34Tz15KNNA3p+nQ== - dependencies: - "@babel/helper-function-name" "^7.22.5" - "@babel/template" "^7.22.5" - "@babel/types" "^7.22.10" - -"@babel/helpers@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.22.11.tgz#b02f5d5f2d7abc21ab59eeed80de410ba70b056a" - integrity sha512-vyOXC8PBWaGc5h7GMsNx68OH33cypkEDJCHvYVVgVbbxJDROYVtexSk0gK5iCF1xNjRIN2s8ai7hwkWDq5szWg== - dependencies: - "@babel/template" "^7.22.5" - "@babel/traverse" "^7.22.11" - "@babel/types" "^7.22.11" - -"@babel/highlight@^7.22.10": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.10.tgz#02a3f6d8c1cb4521b2fd0ab0da8f4739936137d7" - integrity sha512-78aUtVcT7MUscr0K5mIEnkwxPE0MaxkR5RxRwuHaQ+JuU5AmTPhY+do2mdzVTnIJJpyBglql2pehuBIWHug+WQ== - dependencies: - "@babel/helper-validator-identifier" "^7.22.5" - chalk "^2.4.2" - js-tokens "^4.0.0" - -"@babel/parser@^7.18.4", "@babel/parser@^7.22.11", "@babel/parser@^7.22.5": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.11.tgz#becf8ee33aad2a35ed5607f521fe6e72a615f905" - integrity sha512-R5zb8eJIBPJriQtbH/htEQy4k7E2dHWlD2Y2VT07JCzwYZHBxV5ZYtM0UhXSNMT74LyxuM+b1jdL7pSesXbC/g== - -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz#87245a21cd69a73b0b81bcda98d443d6df08f05e" - integrity sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz#fef09f9499b1f1c930da8a0c419db42167d792ca" - integrity sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/plugin-transform-optional-chaining" "^7.22.5" - -"@babel/plugin-proposal-class-properties@^7.12.13": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz#b110f59741895f7ec21a6fff696ec46265c446a3" - integrity sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-proposal-decorators@^7.12.13": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.22.10.tgz#d6a8c3a9018e1b13e6647f869c5ea56ff2b585d4" - integrity sha512-KxN6TqZzcFi4uD3UifqXElBTBNLAEH1l3vzMQj6JwJZbL2sZlThxSViOKCYY+4Ah4V4JhQ95IVB7s/Y6SJSlMQ== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.10" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.9" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/plugin-syntax-decorators" "^7.22.10" - -"@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": - version "7.21.0-placeholder-for-preset-env.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz#7844f9289546efa9febac2de4cfe358a050bd703" - integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w== - -"@babel/plugin-syntax-async-generators@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" - integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-class-properties@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" - integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== - 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-decorators@^7.22.10": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.22.10.tgz#7d83ea04d893c442b78ebf4c3cbac59a7211deff" - integrity sha512-z1KTVemBjnz+kSEilAsI4lbkPOl5TvJH7YDSY1CTIzvLWJ+KHXp+mRe8VPmfnyvqOPqar1V2gid2PleKzRUstQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.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" - integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-export-namespace-from@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" - integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-syntax-import-assertions@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz#07d252e2aa0bc6125567f742cd58619cb14dce98" - integrity sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-syntax-import-attributes@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz#ab840248d834410b829f569f5262b9e517555ecb" - integrity sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-syntax-import-meta@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" - integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-json-strings@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" - integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-jsx@^7.12.13", "@babel/plugin-syntax-jsx@^7.2.0", "@babel/plugin-syntax-jsx@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz#a6b68e84fb76e759fc3b93e901876ffabbe1d918" - integrity sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" - integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" - integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-numeric-separator@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" - integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-object-rest-spread@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" - integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-catch-binding@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" - integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-chaining@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" - integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@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.14.5" - -"@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.14.5" - -"@babel/plugin-syntax-unicode-sets-regex@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz#d49a3b3e6b52e5be6740022317580234a6a47357" - integrity sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-transform-arrow-functions@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz#e5ba566d0c58a5b2ba2a8b795450641950b71958" - integrity sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-async-generator-functions@^7.22.10": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.11.tgz#dbe3b1ff5a52e2e5edc4b19a60d325a675ed2649" - integrity sha512-0pAlmeRJn6wU84zzZsEOx1JV1Jf8fqO9ok7wofIJwUnplYo247dcd24P+cMJht7ts9xkzdtB0EPHmOb7F+KzXw== - dependencies: - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-remap-async-to-generator" "^7.22.9" - "@babel/plugin-syntax-async-generators" "^7.8.4" - -"@babel/plugin-transform-async-to-generator@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz#c7a85f44e46f8952f6d27fe57c2ed3cc084c3775" - integrity sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ== - dependencies: - "@babel/helper-module-imports" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-remap-async-to-generator" "^7.22.5" - -"@babel/plugin-transform-block-scoped-functions@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz#27978075bfaeb9fa586d3cb63a3d30c1de580024" - integrity sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-block-scoping@^7.22.10": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.10.tgz#88a1dccc3383899eb5e660534a76a22ecee64faa" - integrity sha512-1+kVpGAOOI1Albt6Vse7c8pHzcZQdQKW+wJH+g8mCaszOdDVwRXa/slHPqIw+oJAJANTKDMuM2cBdV0Dg618Vg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-class-properties@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz#97a56e31ad8c9dc06a0b3710ce7803d5a48cca77" - integrity sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-class-static-block@^7.22.5": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.11.tgz#dc8cc6e498f55692ac6b4b89e56d87cec766c974" - integrity sha512-GMM8gGmqI7guS/llMFk1bJDkKfn3v3C4KHK9Yg1ey5qcHcOlKb0QvcMrgzvxo+T03/4szNh5lghY+fEC98Kq9g== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.11" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - -"@babel/plugin-transform-classes@^7.22.6": - version "7.22.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.6.tgz#e04d7d804ed5b8501311293d1a0e6d43e94c3363" - integrity sha512-58EgM6nuPNG6Py4Z3zSuu0xWu2VfodiMi72Jt5Kj2FECmaYk1RrTXA45z6KBFsu9tRgwQDwIiY4FXTt+YsSFAQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-compilation-targets" "^7.22.6" - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" - "@babel/helper-optimise-call-expression" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - globals "^11.1.0" - -"@babel/plugin-transform-computed-properties@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz#cd1e994bf9f316bd1c2dafcd02063ec261bb3869" - integrity sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/template" "^7.22.5" - -"@babel/plugin-transform-destructuring@^7.22.10": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.10.tgz#38e2273814a58c810b6c34ea293be4973c4eb5e2" - integrity sha512-dPJrL0VOyxqLM9sritNbMSGx/teueHF/htMKrPT7DNxccXxRDPYqlgPFFdr8u+F+qUZOkZoXue/6rL5O5GduEw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-dotall-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz#dbb4f0e45766eb544e193fb00e65a1dd3b2a4165" - integrity sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-duplicate-keys@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz#b6e6428d9416f5f0bba19c70d1e6e7e0b88ab285" - integrity sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-dynamic-import@^7.22.5": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.11.tgz#2c7722d2a5c01839eaf31518c6ff96d408e447aa" - integrity sha512-g/21plo58sfteWjaO0ZNVb+uEOkJNjAaHhbejrnBmu011l/eNDScmkbjCC3l4FKb10ViaGU4aOkFznSu2zRHgA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - -"@babel/plugin-transform-exponentiation-operator@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz#402432ad544a1f9a480da865fda26be653e48f6a" - integrity sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g== - dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-export-namespace-from@^7.22.5": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.11.tgz#b3c84c8f19880b6c7440108f8929caf6056db26c" - integrity sha512-xa7aad7q7OiT8oNZ1mU7NrISjlSkVdMbNxn9IuLZyL9AJEhs1Apba3I+u5riX1dIkdptP5EKDG5XDPByWxtehw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - -"@babel/plugin-transform-for-of@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz#ab1b8a200a8f990137aff9a084f8de4099ab173f" - integrity sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-function-name@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz#935189af68b01898e0d6d99658db6b164205c143" - integrity sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg== - dependencies: - "@babel/helper-compilation-targets" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-json-strings@^7.22.5": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.11.tgz#689a34e1eed1928a40954e37f74509f48af67835" - integrity sha512-CxT5tCqpA9/jXFlme9xIBCc5RPtdDq3JpkkhgHQqtDdiTnTI0jtZ0QzXhr5DILeYifDPp2wvY2ad+7+hLMW5Pw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-json-strings" "^7.8.3" - -"@babel/plugin-transform-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz#e9341f4b5a167952576e23db8d435849b1dd7920" - integrity sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-logical-assignment-operators@^7.22.5": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.11.tgz#24c522a61688bde045b7d9bc3c2597a4d948fc9c" - integrity sha512-qQwRTP4+6xFCDV5k7gZBF3C31K34ut0tbEcTKxlX/0KXxm9GLcO14p570aWxFvVzx6QAfPgq7gaeIHXJC8LswQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - -"@babel/plugin-transform-member-expression-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz#4fcc9050eded981a468347dd374539ed3e058def" - integrity sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-modules-amd@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz#4e045f55dcf98afd00f85691a68fc0780704f526" - integrity sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ== - dependencies: - "@babel/helper-module-transforms" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-modules-commonjs@^7.22.5": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.11.tgz#d7991d3abad199c03b68ee66a64f216c47ffdfae" - integrity sha512-o2+bg7GDS60cJMgz9jWqRUsWkMzLCxp+jFDeDUT5sjRlAxcJWZ2ylNdI7QQ2+CH5hWu7OnN+Cv3htt7AkSf96g== - dependencies: - "@babel/helper-module-transforms" "^7.22.9" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-simple-access" "^7.22.5" - -"@babel/plugin-transform-modules-systemjs@^7.22.5": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.11.tgz#3386be5875d316493b517207e8f1931d93154bb1" - integrity sha512-rIqHmHoMEOhI3VkVf5jQ15l539KrwhzqcBO6wdCNWPWc/JWt9ILNYNUssbRpeq0qWns8svuw8LnMNCvWBIJ8wA== - dependencies: - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-module-transforms" "^7.22.9" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-identifier" "^7.22.5" - -"@babel/plugin-transform-modules-umd@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz#4694ae40a87b1745e3775b6a7fe96400315d4f98" - integrity sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ== - dependencies: - "@babel/helper-module-transforms" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-named-capturing-groups-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz#67fe18ee8ce02d57c855185e27e3dc959b2e991f" - integrity sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-new-target@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz#1b248acea54ce44ea06dfd37247ba089fcf9758d" - integrity sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-nullish-coalescing-operator@^7.22.5": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.11.tgz#debef6c8ba795f5ac67cd861a81b744c5d38d9fc" - integrity sha512-YZWOw4HxXrotb5xsjMJUDlLgcDXSfO9eCmdl1bgW4+/lAGdkjaEvOnQ4p5WKKdUgSzO39dgPl0pTnfxm0OAXcg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - -"@babel/plugin-transform-numeric-separator@^7.22.5": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.11.tgz#498d77dc45a6c6db74bb829c02a01c1d719cbfbd" - integrity sha512-3dzU4QGPsILdJbASKhF/V2TVP+gJya1PsueQCxIPCEcerqF21oEcrob4mzjsp2Py/1nLfF5m+xYNMDpmA8vffg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - -"@babel/plugin-transform-object-rest-spread@^7.22.5": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.11.tgz#dbbb06ce783cd994a8f430d8cefa553e9b42ca62" - integrity sha512-nX8cPFa6+UmbepISvlf5jhQyaC7ASs/7UxHmMkuJ/k5xSHvDPPaibMo+v3TXwU/Pjqhep/nFNpd3zn4YR59pnw== - dependencies: - "@babel/compat-data" "^7.22.9" - "@babel/helper-compilation-targets" "^7.22.10" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.22.5" - -"@babel/plugin-transform-object-super@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz#794a8d2fcb5d0835af722173c1a9d704f44e218c" - integrity sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.5" - -"@babel/plugin-transform-optional-catch-binding@^7.22.5": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.11.tgz#461cc4f578a127bb055527b3e77404cad38c08e0" - integrity sha512-rli0WxesXUeCJnMYhzAglEjLWVDF6ahb45HuprcmQuLidBJFWjNnOzssk2kuc6e33FlLaiZhG/kUIzUMWdBKaQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - -"@babel/plugin-transform-optional-chaining@^7.22.10", "@babel/plugin-transform-optional-chaining@^7.22.5": - version "7.22.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.12.tgz#d7ebf6a88cd2f4d307b0e000ab630acd8124b333" - integrity sha512-7XXCVqZtyFWqjDsYDY4T45w4mlx1rf7aOgkc/Ww76xkgBiOlmjPkx36PBLHa1k1rwWvVgYMPsbuVnIamx2ZQJw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - -"@babel/plugin-transform-parameters@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz#c3542dd3c39b42c8069936e48717a8d179d63a18" - integrity sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-private-methods@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz#21c8af791f76674420a147ae62e9935d790f8722" - integrity sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-private-property-in-object@^7.22.5": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.11.tgz#ad45c4fc440e9cb84c718ed0906d96cf40f9a4e1" - integrity sha512-sSCbqZDBKHetvjSwpyWzhuHkmW5RummxJBVbYLkGkaiTOWGxml7SXt0iWa03bzxFIx7wOj3g/ILRd0RcJKBeSQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-create-class-features-plugin" "^7.22.11" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - -"@babel/plugin-transform-property-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz#b5ddabd73a4f7f26cd0e20f5db48290b88732766" - integrity sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-regenerator@^7.22.10": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.10.tgz#8ceef3bd7375c4db7652878b0241b2be5d0c3cca" - integrity sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - regenerator-transform "^0.15.2" - -"@babel/plugin-transform-reserved-words@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz#832cd35b81c287c4bcd09ce03e22199641f964fb" - integrity sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-runtime@^7.12.15": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.10.tgz#89eda6daf1d3af6f36fb368766553054c8d7cd46" - integrity sha512-RchI7HePu1eu0CYNKHHHQdfenZcM4nz8rew5B1VWqeRKdcwW5aQ5HeG9eTUbWiAS1UrmHVLmoxTWHt3iLD/NhA== - dependencies: - "@babel/helper-module-imports" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - babel-plugin-polyfill-corejs2 "^0.4.5" - babel-plugin-polyfill-corejs3 "^0.8.3" - babel-plugin-polyfill-regenerator "^0.5.2" - semver "^6.3.1" - -"@babel/plugin-transform-shorthand-properties@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz#6e277654be82b5559fc4b9f58088507c24f0c624" - integrity sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-spread@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz#6487fd29f229c95e284ba6c98d65eafb893fea6b" - integrity sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - -"@babel/plugin-transform-sticky-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz#295aba1595bfc8197abd02eae5fc288c0deb26aa" - integrity sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-template-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz#8f38cf291e5f7a8e60e9f733193f0bcc10909bff" - integrity sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-typeof-symbol@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz#5e2ba478da4b603af8673ff7c54f75a97b716b34" - integrity sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-unicode-escapes@^7.22.10": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.10.tgz#c723f380f40a2b2f57a62df24c9005834c8616d9" - integrity sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-unicode-property-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz#098898f74d5c1e86660dc112057b2d11227f1c81" - integrity sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-unicode-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz#ce7e7bb3ef208c4ff67e02a22816656256d7a183" - integrity sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-unicode-sets-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz#77788060e511b708ffc7d42fdfbc5b37c3004e91" - integrity sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/preset-env@^7.12.16": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.22.10.tgz#3263b9fe2c8823d191d28e61eac60a79f9ce8a0f" - integrity sha512-riHpLb1drNkpLlocmSyEg4oYJIQFeXAK/d7rI6mbD0XsvoTOOweXDmQPG/ErxsEhWk3rl3Q/3F6RFQlVFS8m0A== - dependencies: - "@babel/compat-data" "^7.22.9" - "@babel/helper-compilation-targets" "^7.22.10" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-option" "^7.22.5" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.22.5" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.22.5" - "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" - "@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-import-assertions" "^7.22.5" - "@babel/plugin-syntax-import-attributes" "^7.22.5" - "@babel/plugin-syntax-import-meta" "^7.10.4" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - "@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-private-property-in-object" "^7.14.5" - "@babel/plugin-syntax-top-level-await" "^7.14.5" - "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" - "@babel/plugin-transform-arrow-functions" "^7.22.5" - "@babel/plugin-transform-async-generator-functions" "^7.22.10" - "@babel/plugin-transform-async-to-generator" "^7.22.5" - "@babel/plugin-transform-block-scoped-functions" "^7.22.5" - "@babel/plugin-transform-block-scoping" "^7.22.10" - "@babel/plugin-transform-class-properties" "^7.22.5" - "@babel/plugin-transform-class-static-block" "^7.22.5" - "@babel/plugin-transform-classes" "^7.22.6" - "@babel/plugin-transform-computed-properties" "^7.22.5" - "@babel/plugin-transform-destructuring" "^7.22.10" - "@babel/plugin-transform-dotall-regex" "^7.22.5" - "@babel/plugin-transform-duplicate-keys" "^7.22.5" - "@babel/plugin-transform-dynamic-import" "^7.22.5" - "@babel/plugin-transform-exponentiation-operator" "^7.22.5" - "@babel/plugin-transform-export-namespace-from" "^7.22.5" - "@babel/plugin-transform-for-of" "^7.22.5" - "@babel/plugin-transform-function-name" "^7.22.5" - "@babel/plugin-transform-json-strings" "^7.22.5" - "@babel/plugin-transform-literals" "^7.22.5" - "@babel/plugin-transform-logical-assignment-operators" "^7.22.5" - "@babel/plugin-transform-member-expression-literals" "^7.22.5" - "@babel/plugin-transform-modules-amd" "^7.22.5" - "@babel/plugin-transform-modules-commonjs" "^7.22.5" - "@babel/plugin-transform-modules-systemjs" "^7.22.5" - "@babel/plugin-transform-modules-umd" "^7.22.5" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5" - "@babel/plugin-transform-new-target" "^7.22.5" - "@babel/plugin-transform-nullish-coalescing-operator" "^7.22.5" - "@babel/plugin-transform-numeric-separator" "^7.22.5" - "@babel/plugin-transform-object-rest-spread" "^7.22.5" - "@babel/plugin-transform-object-super" "^7.22.5" - "@babel/plugin-transform-optional-catch-binding" "^7.22.5" - "@babel/plugin-transform-optional-chaining" "^7.22.10" - "@babel/plugin-transform-parameters" "^7.22.5" - "@babel/plugin-transform-private-methods" "^7.22.5" - "@babel/plugin-transform-private-property-in-object" "^7.22.5" - "@babel/plugin-transform-property-literals" "^7.22.5" - "@babel/plugin-transform-regenerator" "^7.22.10" - "@babel/plugin-transform-reserved-words" "^7.22.5" - "@babel/plugin-transform-shorthand-properties" "^7.22.5" - "@babel/plugin-transform-spread" "^7.22.5" - "@babel/plugin-transform-sticky-regex" "^7.22.5" - "@babel/plugin-transform-template-literals" "^7.22.5" - "@babel/plugin-transform-typeof-symbol" "^7.22.5" - "@babel/plugin-transform-unicode-escapes" "^7.22.10" - "@babel/plugin-transform-unicode-property-regex" "^7.22.5" - "@babel/plugin-transform-unicode-regex" "^7.22.5" - "@babel/plugin-transform-unicode-sets-regex" "^7.22.5" - "@babel/preset-modules" "0.1.6-no-external-plugins" - "@babel/types" "^7.22.10" - babel-plugin-polyfill-corejs2 "^0.4.5" - babel-plugin-polyfill-corejs3 "^0.8.3" - babel-plugin-polyfill-regenerator "^0.5.2" - core-js-compat "^3.31.0" - semver "^6.3.1" - -"@babel/preset-modules@0.1.6-no-external-plugins": - version "0.1.6-no-external-plugins" - resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz#ccb88a2c49c817236861fee7826080573b8a923a" - integrity sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/types" "^7.4.4" - esutils "^2.0.2" - -"@babel/regjsgen@^0.8.0": - version "0.8.0" - resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" - integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== - -"@babel/runtime@^7.12.13", "@babel/runtime@^7.8.4": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.11.tgz#7a9ba3bbe406ad6f9e8dd4da2ece453eb23a77a4" - integrity sha512-ee7jVNlWN09+KftVOu9n7S8gQzD/Z6hN/I8VBRXW4P1+Xe7kJGXMwu8vds4aGIMHZnNbdpSWCfZZtinytpcAvA== - dependencies: - regenerator-runtime "^0.14.0" - -"@babel/template@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.5.tgz#0c8c4d944509875849bd0344ff0050756eefc6ec" - integrity sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw== - dependencies: - "@babel/code-frame" "^7.22.5" - "@babel/parser" "^7.22.5" - "@babel/types" "^7.22.5" - -"@babel/traverse@^7.22.11", "@babel/traverse@^7.22.5": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.22.11.tgz#71ebb3af7a05ff97280b83f05f8865ac94b2027c" - integrity sha512-mzAenteTfomcB7mfPtyi+4oe5BZ6MXxWcn4CX+h4IRJ+OOGXBrWU6jDQavkQI9Vuc5P+donFabBfFCcmWka9lQ== - dependencies: - "@babel/code-frame" "^7.22.10" - "@babel/generator" "^7.22.10" - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.22.11" - "@babel/types" "^7.22.11" - debug "^4.1.0" - globals "^11.1.0" - -"@babel/types@^7.22.10", "@babel/types@^7.22.11", "@babel/types@^7.22.5", "@babel/types@^7.4.4": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.11.tgz#0e65a6a1d4d9cbaa892b2213f6159485fe632ea2" - integrity sha512-siazHiGuZRz9aB9NpHy9GOs9xiQPKnMzgdr493iI1M67vRXpnEq8ZOOKzezC5q7zwuQ6sDhdSp4SD9ixKSqKZg== - dependencies: - "@babel/helper-string-parser" "^7.22.5" - "@babel/helper-validator-identifier" "^7.22.5" - to-fast-properties "^2.0.0" - -"@discoveryjs/json-ext@0.5.7": - version "0.5.7" - resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" - integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== - -"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": - version "4.4.0" - resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" - integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== - dependencies: - eslint-visitor-keys "^3.3.0" - -"@eslint-community/regexpp@^4.6.1": - version "4.8.0" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.8.0.tgz#11195513186f68d42fbf449f9a7136b2c0c92005" - integrity sha512-JylOEEzDiOryeUnFbQz+oViCXS0KsvR1mvHkoMiu5+UiBvy+RYX7tzlIIIEstF/gVa2tj9AQXk3dgnxv6KxhFg== - -"@eslint/eslintrc@^2.1.2": - version "2.1.2" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.2.tgz#c6936b4b328c64496692f76944e755738be62396" - integrity sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g== - dependencies: - ajv "^6.12.4" - debug "^4.3.2" - espree "^9.6.0" - globals "^13.19.0" - ignore "^5.2.0" - import-fresh "^3.2.1" - js-yaml "^4.1.0" - minimatch "^3.1.2" - strip-json-comments "^3.1.1" - -"@eslint/js@8.48.0": - version "8.48.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.48.0.tgz#642633964e217905436033a2bd08bf322849b7fb" - integrity sha512-ZSjtmelB7IJfWD2Fvb7+Z+ChTIKWq6kjda95fLcQKNS5aheVHn4IkfgRQE3sIIzTcSLwLcLZUD9UBt+V7+h+Pw== - -"@hapi/hoek@^9.0.0": - version "9.3.0" - resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.3.0.tgz#8368869dcb735be2e7f5cb7647de78e167a251fb" - integrity sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ== - -"@hapi/topo@^5.0.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-5.1.0.tgz#dc448e332c6c6e37a4dc02fd84ba8d44b9afb012" - integrity sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg== - dependencies: - "@hapi/hoek" "^9.0.0" - -"@humanwhocodes/config-array@^0.11.10": - version "0.11.10" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.10.tgz#5a3ffe32cc9306365fb3fd572596cd602d5e12d2" - integrity sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ== - dependencies: - "@humanwhocodes/object-schema" "^1.2.1" - debug "^4.1.1" - minimatch "^3.0.5" - -"@humanwhocodes/module-importer@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" - integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== - -"@humanwhocodes/object-schema@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" - integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== - -"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" - integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== - dependencies: - "@jridgewell/set-array" "^1.0.1" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.9" - -"@jridgewell/resolve-uri@^3.1.0": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" - integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== - -"@jridgewell/set-array@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" - integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== - -"@jridgewell/source-map@^0.3.3": - version "0.3.5" - resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.5.tgz#a3bb4d5c6825aab0d281268f47f6ad5853431e91" - integrity sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ== - dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" - -"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": - version "1.4.15" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== - -"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.19" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz#f8a3249862f91be48d3127c3cfe992f79b4b8811" - integrity sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw== - dependencies: - "@jridgewell/resolve-uri" "^3.1.0" - "@jridgewell/sourcemap-codec" "^1.4.14" - -"@leichtgewicht/ip-codec@^2.0.1": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz#b2ac626d6cb9c8718ab459166d4bb405b8ffa78b" - integrity sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A== - -"@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1": - version "5.1.1-v1" - resolved "https://registry.yarnpkg.com/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz#dbf733a965ca47b1973177dc0bb6c889edcfb129" - integrity sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg== - dependencies: - eslint-scope "5.1.1" - -"@node-ipc/js-queue@2.0.3": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@node-ipc/js-queue/-/js-queue-2.0.3.tgz#ac7fe33d766fa53e233ef8fedaf3443a01c5a4cd" - integrity sha512-fL1wpr8hhD5gT2dA1qifeVaoDFlQR5es8tFuKqjHX+kdOtdNHnxkVZbtIrR2rxnMFvehkjaZRNV2H/gPXlb0hw== - dependencies: - easy-stack "1.0.1" - -"@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== - dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== - -"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": - version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.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== - -"@sideway/address@^4.1.3": - version "4.1.4" - resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.4.tgz#03dccebc6ea47fdc226f7d3d1ad512955d4783f0" - integrity sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw== - dependencies: - "@hapi/hoek" "^9.0.0" - -"@sideway/formula@^3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@sideway/formula/-/formula-3.0.1.tgz#80fcbcbaf7ce031e0ef2dd29b1bfc7c3f583611f" - integrity sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg== - -"@sideway/pinpoint@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz#cff8ffadc372ad29fd3f78277aeb29e632cc70df" - integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ== - -"@socket.io/component-emitter@~3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz#96116f2a912e0c02817345b3c10751069920d553" - integrity sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg== - -"@soda/friendly-errors-webpack-plugin@^1.8.0": - version "1.8.1" - resolved "https://registry.yarnpkg.com/@soda/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.8.1.tgz#4d4fbb1108993aaa362116247c3d18188a2c6c85" - integrity sha512-h2ooWqP8XuFqTXT+NyAFbrArzfQA7R6HTezADrvD9Re8fxMLTPPniLdqVTdDaO0eIoLaAwKT+d6w+5GeTk7Vbg== - dependencies: - chalk "^3.0.0" - error-stack-parser "^2.0.6" - string-width "^4.2.3" - strip-ansi "^6.0.1" - -"@soda/get-current-script@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@soda/get-current-script/-/get-current-script-1.0.2.tgz#a53515db25d8038374381b73af20bb4f2e508d87" - integrity sha512-T7VNNlYVM1SgQ+VsMYhnDkcGmWhQdL0bDyGm5TlQ3GBXnJscEClUUOKduWTmm2zCnvNLC1hc3JpuXjs/nFOc5w== - -"@trysound/sax@0.2.0": - version "0.2.0" - resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad" - integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== - -"@types/body-parser@*": - version "1.19.2" - resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.2.tgz#aea2059e28b7658639081347ac4fab3de166e6f0" - integrity sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g== - dependencies: - "@types/connect" "*" - "@types/node" "*" - -"@types/bonjour@^3.5.9": - version "3.5.10" - resolved "https://registry.yarnpkg.com/@types/bonjour/-/bonjour-3.5.10.tgz#0f6aadfe00ea414edc86f5d106357cda9701e275" - integrity sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw== - dependencies: - "@types/node" "*" - -"@types/connect-history-api-fallback@^1.3.5": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz#9fd20b3974bdc2bcd4ac6567e2e0f6885cb2cf41" - integrity sha512-4x5FkPpLipqwthjPsF7ZRbOv3uoLUFkTA9G9v583qi4pACvq0uTELrB8OLUzPWUI4IJIyvM85vzkV1nyiI2Lig== - dependencies: - "@types/express-serve-static-core" "*" - "@types/node" "*" - -"@types/connect@*": - version "3.4.35" - resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1" - integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ== - dependencies: - "@types/node" "*" - -"@types/eslint-scope@^3.7.3": - version "3.7.4" - resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.4.tgz#37fc1223f0786c39627068a12e94d6e6fc61de16" - integrity sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA== - dependencies: - "@types/eslint" "*" - "@types/estree" "*" - -"@types/eslint@*", "@types/eslint@^7.29.0 || ^8.4.1": - version "8.44.2" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.44.2.tgz#0d21c505f98a89b8dd4d37fa162b09da6089199a" - integrity sha512-sdPRb9K6iL5XZOmBubg8yiFp5yS/JdUDQsq5e6h95km91MCYMuvp7mh1fjPEYUhvHepKpZOjnEaMBR4PxjWDzg== - dependencies: - "@types/estree" "*" - "@types/json-schema" "*" - -"@types/estree@*", "@types/estree@^1.0.0": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.1.tgz#aa22750962f3bf0e79d753d3cc067f010c95f194" - integrity sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA== - -"@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.33": - version "4.17.36" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.36.tgz#baa9022119bdc05a4adfe740ffc97b5f9360e545" - integrity sha512-zbivROJ0ZqLAtMzgzIUC4oNqDG9iF0lSsAqpOD9kbs5xcIM3dTiyuHvBc7R8MtWBp3AAWGaovJa+wzWPjLYW7Q== - dependencies: - "@types/node" "*" - "@types/qs" "*" - "@types/range-parser" "*" - "@types/send" "*" - -"@types/express@*", "@types/express@^4.17.13": - version "4.17.17" - resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.17.tgz#01d5437f6ef9cfa8668e616e13c2f2ac9a491ae4" - integrity sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q== - dependencies: - "@types/body-parser" "*" - "@types/express-serve-static-core" "^4.17.33" - "@types/qs" "*" - "@types/serve-static" "*" - -"@types/html-minifier-terser@^6.0.0": - version "6.1.0" - resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#4fc33a00c1d0c16987b1a20cf92d20614c55ac35" - integrity sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg== - -"@types/http-errors@*": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.1.tgz#20172f9578b225f6c7da63446f56d4ce108d5a65" - integrity sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ== - -"@types/http-proxy@^1.17.8": - version "1.17.11" - resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.11.tgz#0ca21949a5588d55ac2b659b69035c84bd5da293" - integrity sha512-HC8G7c1WmaF2ekqpnFq626xd3Zz0uvaqFmBJNRZCGEZCXkvSdJoNFn/8Ygbd9fKNQj8UzLdCETaI0UWPAjK7IA== - dependencies: - "@types/node" "*" - -"@types/json-schema@*", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": - version "7.0.12" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.12.tgz#d70faba7039d5fca54c83c7dbab41051d2b6f6cb" - integrity sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA== - -"@types/mime@*": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.1.tgz#5f8f2bca0a5863cb69bc0b0acd88c96cb1d4ae10" - integrity sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA== - -"@types/mime@^1": - version "1.3.2" - resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.2.tgz#93e25bf9ee75fe0fd80b594bc4feb0e862111b5a" - integrity sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw== - -"@types/minimist@^1.2.0": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.2.tgz#ee771e2ba4b3dc5b372935d549fd9617bf345b8c" - integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ== - -"@types/node@*": - version "20.5.6" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.5.6.tgz#5e9aaa86be03a09decafd61b128d6cec64a5fe40" - integrity sha512-Gi5wRGPbbyOTX+4Y2iULQ27oUPrefaB0PxGQJnfyWN3kvEDGM3mIB5M/gQLmitZf7A9FmLeaqxD3L1CXpm3VKQ== - -"@types/normalize-package-data@^2.4.0": - version "2.4.1" - resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" - integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== - -"@types/parse-json@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" - integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== - -"@types/qs@*": - version "6.9.7" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" - integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== - -"@types/range-parser@*": - version "1.2.4" - resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" - integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== - -"@types/retry@0.12.0": - version "0.12.0" - resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d" - integrity sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA== - -"@types/send@*": - version "0.17.1" - resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.1.tgz#ed4932b8a2a805f1fe362a70f4e62d0ac994e301" - integrity sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q== - dependencies: - "@types/mime" "^1" - "@types/node" "*" - -"@types/serve-index@^1.9.1": - version "1.9.1" - resolved "https://registry.yarnpkg.com/@types/serve-index/-/serve-index-1.9.1.tgz#1b5e85370a192c01ec6cec4735cf2917337a6278" - integrity sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg== - dependencies: - "@types/express" "*" - -"@types/serve-static@*", "@types/serve-static@^1.13.10": - version "1.15.2" - resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.2.tgz#3e5419ecd1e40e7405d34093f10befb43f63381a" - integrity sha512-J2LqtvFYCzaj8pVYKw8klQXrLLk7TBZmQ4ShlcdkELFKGwGMfevMLneMMRkMgZxotOD9wg497LpC7O8PcvAmfw== - dependencies: - "@types/http-errors" "*" - "@types/mime" "*" - "@types/node" "*" - -"@types/socket.io-client@1.4.36": - version "1.4.36" - resolved "https://registry.yarnpkg.com/@types/socket.io-client/-/socket.io-client-1.4.36.tgz#e4f1ca065f84c20939e9850e70222202bd76ff3f" - integrity sha512-ZJWjtFBeBy1kRSYpVbeGYTElf6BqPQUkXDlHHD4k/42byCN5Rh027f4yARHCink9sKAkbtGZXEAmR0ZCnc2/Ag== - -"@types/sockjs@^0.3.33": - version "0.3.33" - resolved "https://registry.yarnpkg.com/@types/sockjs/-/sockjs-0.3.33.tgz#570d3a0b99ac995360e3136fd6045113b1bd236f" - integrity sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw== - dependencies: - "@types/node" "*" - -"@types/ws@^8.5.5": - version "8.5.5" - resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.5.tgz#af587964aa06682702ee6dcbc7be41a80e4b28eb" - integrity sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg== - dependencies: - "@types/node" "*" - -"@vue/babel-helper-vue-jsx-merge-props@^1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.4.0.tgz#8d53a1e21347db8edbe54d339902583176de09f2" - integrity sha512-JkqXfCkUDp4PIlFdDQ0TdXoIejMtTHP67/pvxlgeY+u5k3LEdKuWZ3LK6xkxo52uDoABIVyRwqVkfLQJhk7VBA== - -"@vue/babel-helper-vue-transform-on@^1.1.5": - version "1.1.5" - resolved "https://registry.yarnpkg.com/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.1.5.tgz#a976486b21e108e545524fe41ffe3fc9bbc28c7f" - integrity sha512-SgUymFpMoAyWeYWLAY+MkCK3QEROsiUnfaw5zxOVD/M64KQs8D/4oK6Q5omVA2hnvEOE0SCkH2TZxs/jnnUj7w== - -"@vue/babel-plugin-jsx@^1.0.3": - version "1.1.5" - resolved "https://registry.yarnpkg.com/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.1.5.tgz#5088bae7dbb83531d94df3742ff650c12fd54973" - integrity sha512-nKs1/Bg9U1n3qSWnsHhCVQtAzI6aQXqua8j/bZrau8ywT1ilXQbK4FwEJGmU8fV7tcpuFvWmmN7TMmV1OBma1g== - dependencies: - "@babel/helper-module-imports" "^7.22.5" - "@babel/plugin-syntax-jsx" "^7.22.5" - "@babel/template" "^7.22.5" - "@babel/traverse" "^7.22.5" - "@babel/types" "^7.22.5" - "@vue/babel-helper-vue-transform-on" "^1.1.5" - camelcase "^6.3.0" - html-tags "^3.3.1" - svg-tags "^1.0.0" - -"@vue/babel-plugin-transform-vue-jsx@^1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@vue/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-1.4.0.tgz#4d4b3d46a39ea62b7467dd6e26ce47f7ceafb2fe" - integrity sha512-Fmastxw4MMx0vlgLS4XBX0XiBbUFzoMGeVXuMV08wyOfXdikAFqBTuYPR0tlk+XskL19EzHc39SgjrPGY23JnA== - dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@babel/plugin-syntax-jsx" "^7.2.0" - "@vue/babel-helper-vue-jsx-merge-props" "^1.4.0" - html-tags "^2.0.0" - lodash.kebabcase "^4.1.1" - svg-tags "^1.0.0" - -"@vue/babel-preset-app@^5.0.8": - version "5.0.8" - resolved "https://registry.yarnpkg.com/@vue/babel-preset-app/-/babel-preset-app-5.0.8.tgz#ce38f76314f5265d62a89756ef264c21f1d351a1" - integrity sha512-yl+5qhpjd8e1G4cMXfORkkBlvtPCIgmRf3IYCWYDKIQ7m+PPa5iTm4feiNmCMD6yGqQWMhhK/7M3oWGL9boKwg== - dependencies: - "@babel/core" "^7.12.16" - "@babel/helper-compilation-targets" "^7.12.16" - "@babel/helper-module-imports" "^7.12.13" - "@babel/plugin-proposal-class-properties" "^7.12.13" - "@babel/plugin-proposal-decorators" "^7.12.13" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - "@babel/plugin-syntax-jsx" "^7.12.13" - "@babel/plugin-transform-runtime" "^7.12.15" - "@babel/preset-env" "^7.12.16" - "@babel/runtime" "^7.12.13" - "@vue/babel-plugin-jsx" "^1.0.3" - "@vue/babel-preset-jsx" "^1.1.2" - babel-plugin-dynamic-import-node "^2.3.3" - core-js "^3.8.3" - core-js-compat "^3.8.3" - semver "^7.3.4" - -"@vue/babel-preset-jsx@^1.1.2": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@vue/babel-preset-jsx/-/babel-preset-jsx-1.4.0.tgz#f4914ba314235ab097bc4372ed67473c0780bfcc" - integrity sha512-QmfRpssBOPZWL5xw7fOuHNifCQcNQC1PrOo/4fu6xlhlKJJKSA3HqX92Nvgyx8fqHZTUGMPHmFA+IDqwXlqkSA== - dependencies: - "@vue/babel-helper-vue-jsx-merge-props" "^1.4.0" - "@vue/babel-plugin-transform-vue-jsx" "^1.4.0" - "@vue/babel-sugar-composition-api-inject-h" "^1.4.0" - "@vue/babel-sugar-composition-api-render-instance" "^1.4.0" - "@vue/babel-sugar-functional-vue" "^1.4.0" - "@vue/babel-sugar-inject-h" "^1.4.0" - "@vue/babel-sugar-v-model" "^1.4.0" - "@vue/babel-sugar-v-on" "^1.4.0" - -"@vue/babel-sugar-composition-api-inject-h@^1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@vue/babel-sugar-composition-api-inject-h/-/babel-sugar-composition-api-inject-h-1.4.0.tgz#187e1389f8871d89ece743bb50aed713be9d6c85" - integrity sha512-VQq6zEddJHctnG4w3TfmlVp5FzDavUSut/DwR0xVoe/mJKXyMcsIibL42wPntozITEoY90aBV0/1d2KjxHU52g== - dependencies: - "@babel/plugin-syntax-jsx" "^7.2.0" - -"@vue/babel-sugar-composition-api-render-instance@^1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@vue/babel-sugar-composition-api-render-instance/-/babel-sugar-composition-api-render-instance-1.4.0.tgz#2c1607ae6dffdab47e785bc01fa45ba756e992c1" - integrity sha512-6ZDAzcxvy7VcnCjNdHJ59mwK02ZFuP5CnucloidqlZwVQv5CQLijc3lGpR7MD3TWFi78J7+a8J56YxbCtHgT9Q== - dependencies: - "@babel/plugin-syntax-jsx" "^7.2.0" - -"@vue/babel-sugar-functional-vue@^1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@vue/babel-sugar-functional-vue/-/babel-sugar-functional-vue-1.4.0.tgz#60da31068567082287c7337c66ef4df04e0a1029" - integrity sha512-lTEB4WUFNzYt2In6JsoF9sAYVTo84wC4e+PoZWSgM6FUtqRJz7wMylaEhSRgG71YF+wfLD6cc9nqVeXN2rwBvw== - dependencies: - "@babel/plugin-syntax-jsx" "^7.2.0" - -"@vue/babel-sugar-inject-h@^1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@vue/babel-sugar-inject-h/-/babel-sugar-inject-h-1.4.0.tgz#bf39aa6631fb1d0399b1c49b4c59e1c8899b4363" - integrity sha512-muwWrPKli77uO2fFM7eA3G1lAGnERuSz2NgAxuOLzrsTlQl8W4G+wwbM4nB6iewlKbwKRae3nL03UaF5ffAPMA== - dependencies: - "@babel/plugin-syntax-jsx" "^7.2.0" - -"@vue/babel-sugar-v-model@^1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@vue/babel-sugar-v-model/-/babel-sugar-v-model-1.4.0.tgz#a51d986609f430c4f70ada3a93cc560a2970f720" - integrity sha512-0t4HGgXb7WHYLBciZzN5s0Hzqan4Ue+p/3FdQdcaHAb7s5D9WZFGoSxEZHrR1TFVZlAPu1bejTKGeAzaaG3NCQ== - dependencies: - "@babel/plugin-syntax-jsx" "^7.2.0" - "@vue/babel-helper-vue-jsx-merge-props" "^1.4.0" - "@vue/babel-plugin-transform-vue-jsx" "^1.4.0" - camelcase "^5.0.0" - html-tags "^2.0.0" - svg-tags "^1.0.0" - -"@vue/babel-sugar-v-on@^1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@vue/babel-sugar-v-on/-/babel-sugar-v-on-1.4.0.tgz#43b7106a9672d8cbeefc0eb8afe1d376edc6166e" - integrity sha512-m+zud4wKLzSKgQrWwhqRObWzmTuyzl6vOP7024lrpeJM4x2UhQtRDLgYjXAw9xBXjCwS0pP9kXjg91F9ZNo9JA== - dependencies: - "@babel/plugin-syntax-jsx" "^7.2.0" - "@vue/babel-plugin-transform-vue-jsx" "^1.4.0" - camelcase "^5.0.0" - -"@vue/cli-overlay@^5.0.8": - version "5.0.8" - resolved "https://registry.yarnpkg.com/@vue/cli-overlay/-/cli-overlay-5.0.8.tgz#b61477acdc43bbd42fce6326d228471201ecdcdd" - integrity sha512-KmtievE/B4kcXp6SuM2gzsnSd8WebkQpg3XaB6GmFh1BJGRqa1UiW9up7L/Q67uOdTigHxr5Ar2lZms4RcDjwQ== - -"@vue/cli-plugin-babel@^5.0.8": - version "5.0.8" - resolved "https://registry.yarnpkg.com/@vue/cli-plugin-babel/-/cli-plugin-babel-5.0.8.tgz#54f9a07900f29baff54803dcfa916c602894feb7" - integrity sha512-a4qqkml3FAJ3auqB2kN2EMPocb/iu0ykeELwed+9B1c1nQ1HKgslKMHMPavYx3Cd/QAx2mBD4hwKBqZXEI/CsQ== - dependencies: - "@babel/core" "^7.12.16" - "@vue/babel-preset-app" "^5.0.8" - "@vue/cli-shared-utils" "^5.0.8" - babel-loader "^8.2.2" - thread-loader "^3.0.0" - webpack "^5.54.0" - -"@vue/cli-plugin-eslint@^5.0.8": - version "5.0.8" - resolved "https://registry.yarnpkg.com/@vue/cli-plugin-eslint/-/cli-plugin-eslint-5.0.8.tgz#754939265c2c5b746fa36c7d7705a89138e193bf" - integrity sha512-d11+I5ONYaAPW1KyZj9GlrV/E6HZePq5L5eAF5GgoVdu6sxr6bDgEoxzhcS1Pk2eh8rn1MxG/FyyR+eCBj/CNg== - dependencies: - "@vue/cli-shared-utils" "^5.0.8" - eslint-webpack-plugin "^3.1.0" - globby "^11.0.2" - webpack "^5.54.0" - yorkie "^2.0.0" - -"@vue/cli-plugin-router@^5.0.8": - version "5.0.8" - resolved "https://registry.yarnpkg.com/@vue/cli-plugin-router/-/cli-plugin-router-5.0.8.tgz#a113ec626f3d4216d20496c42d35533bce9e889f" - integrity sha512-Gmv4dsGdAsWPqVijz3Ux2OS2HkMrWi1ENj2cYL75nUeL+Xj5HEstSqdtfZ0b1q9NCce+BFB6QnHfTBXc/fCvMg== - dependencies: - "@vue/cli-shared-utils" "^5.0.8" - -"@vue/cli-plugin-vuex@^5.0.8": - version "5.0.8" - resolved "https://registry.yarnpkg.com/@vue/cli-plugin-vuex/-/cli-plugin-vuex-5.0.8.tgz#0d4cb3020f9102bea9288d750729dde176c66ccd" - integrity sha512-HSYWPqrunRE5ZZs8kVwiY6oWcn95qf/OQabwLfprhdpFWAGtLStShjsGED2aDpSSeGAskQETrtR/5h7VqgIlBA== - -"@vue/cli-service@^5.0.8": - version "5.0.8" - resolved "https://registry.yarnpkg.com/@vue/cli-service/-/cli-service-5.0.8.tgz#cf3f6f1b7bf0fba9cdab86b6bec4f9897f982dac" - integrity sha512-nV7tYQLe7YsTtzFrfOMIHc5N2hp5lHG2rpYr0aNja9rNljdgcPZLyQRb2YRivTHqTv7lI962UXFURcpStHgyFw== - dependencies: - "@babel/helper-compilation-targets" "^7.12.16" - "@soda/friendly-errors-webpack-plugin" "^1.8.0" - "@soda/get-current-script" "^1.0.2" - "@types/minimist" "^1.2.0" - "@vue/cli-overlay" "^5.0.8" - "@vue/cli-plugin-router" "^5.0.8" - "@vue/cli-plugin-vuex" "^5.0.8" - "@vue/cli-shared-utils" "^5.0.8" - "@vue/component-compiler-utils" "^3.3.0" - "@vue/vue-loader-v15" "npm:vue-loader@^15.9.7" - "@vue/web-component-wrapper" "^1.3.0" - acorn "^8.0.5" - acorn-walk "^8.0.2" - address "^1.1.2" - autoprefixer "^10.2.4" - browserslist "^4.16.3" - case-sensitive-paths-webpack-plugin "^2.3.0" - cli-highlight "^2.1.10" - clipboardy "^2.3.0" - cliui "^7.0.4" - copy-webpack-plugin "^9.0.1" - css-loader "^6.5.0" - css-minimizer-webpack-plugin "^3.0.2" - cssnano "^5.0.0" - debug "^4.1.1" - default-gateway "^6.0.3" - dotenv "^10.0.0" - dotenv-expand "^5.1.0" - fs-extra "^9.1.0" - globby "^11.0.2" - hash-sum "^2.0.0" - html-webpack-plugin "^5.1.0" - is-file-esm "^1.0.0" - launch-editor-middleware "^2.2.1" - lodash.defaultsdeep "^4.6.1" - lodash.mapvalues "^4.6.0" - mini-css-extract-plugin "^2.5.3" - minimist "^1.2.5" - module-alias "^2.2.2" - portfinder "^1.0.26" - postcss "^8.2.6" - postcss-loader "^6.1.1" - progress-webpack-plugin "^1.0.12" - ssri "^8.0.1" - terser-webpack-plugin "^5.1.1" - thread-loader "^3.0.0" - vue-loader "^17.0.0" - vue-style-loader "^4.1.3" - webpack "^5.54.0" - webpack-bundle-analyzer "^4.4.0" - webpack-chain "^6.5.1" - webpack-dev-server "^4.7.3" - webpack-merge "^5.7.3" - webpack-virtual-modules "^0.4.2" - whatwg-fetch "^3.6.2" - -"@vue/cli-shared-utils@^5.0.8": - version "5.0.8" - resolved "https://registry.yarnpkg.com/@vue/cli-shared-utils/-/cli-shared-utils-5.0.8.tgz#75fc96528eba2b1c7e33cb7e989a984ddef99c8a" - integrity sha512-uK2YB7bBVuQhjOJF+O52P9yFMXeJVj7ozqJkwYE9PlMHL1LMHjtCYm4cSdOebuPzyP+/9p0BimM/OqxsevIopQ== - dependencies: - "@achrinza/node-ipc" "^9.2.5" - chalk "^4.1.2" - execa "^1.0.0" - joi "^17.4.0" - launch-editor "^2.2.1" - lru-cache "^6.0.0" - node-fetch "^2.6.7" - open "^8.0.2" - ora "^5.3.0" - read-pkg "^5.1.1" - semver "^7.3.4" - strip-ansi "^6.0.0" - -"@vue/compiler-sfc@2.7.14": - version "2.7.14" - resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-2.7.14.tgz#3446fd2fbb670d709277fc3ffa88efc5e10284fd" - integrity sha512-aNmNHyLPsw+sVvlQFQ2/8sjNuLtK54TC6cuKnVzAY93ks4ZBrvwQSnkkIh7bsbNhum5hJBS00wSDipQ937f5DA== - dependencies: - "@babel/parser" "^7.18.4" - postcss "^8.4.14" - source-map "^0.6.1" - -"@vue/component-compiler-utils@^3.1.0", "@vue/component-compiler-utils@^3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@vue/component-compiler-utils/-/component-compiler-utils-3.3.0.tgz#f9f5fb53464b0c37b2c8d2f3fbfe44df60f61dc9" - integrity sha512-97sfH2mYNU+2PzGrmK2haqffDpVASuib9/w2/noxiFi31Z54hW+q3izKQXXQZSNhtiUpAI36uSuYepeBe4wpHQ== - dependencies: - consolidate "^0.15.1" - hash-sum "^1.0.2" - lru-cache "^4.1.2" - merge-source-map "^1.1.0" - postcss "^7.0.36" - postcss-selector-parser "^6.0.2" - source-map "~0.6.1" - vue-template-es2015-compiler "^1.9.0" - optionalDependencies: - prettier "^1.18.2 || ^2.0.0" - -"@vue/vue-loader-v15@npm:vue-loader@^15.9.7": - version "15.10.2" - resolved "https://registry.yarnpkg.com/vue-loader/-/vue-loader-15.10.2.tgz#6dccfda8661caa7f5415806a5e386fd3258d8112" - integrity sha512-ndeSe/8KQc/nlA7TJ+OBhv2qalmj1s+uBs7yHDRFaAXscFTApBzY9F1jES3bautmgWjDlDct0fw8rPuySDLwxw== - dependencies: - "@vue/component-compiler-utils" "^3.1.0" - hash-sum "^1.0.2" - loader-utils "^1.1.0" - vue-hot-reload-api "^2.3.0" - vue-style-loader "^4.1.0" - -"@vue/web-component-wrapper@^1.3.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@vue/web-component-wrapper/-/web-component-wrapper-1.3.0.tgz#b6b40a7625429d2bd7c2281ddba601ed05dc7f1a" - integrity sha512-Iu8Tbg3f+emIIMmI2ycSI8QcEuAUgPTgHwesDU1eKMLE4YC/c/sFbGc70QgMq31ijRftV0R7vCm9co6rldCeOA== - -"@webassemblyjs/ast@1.11.6", "@webassemblyjs/ast@^1.11.5": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.6.tgz#db046555d3c413f8966ca50a95176a0e2c642e24" - integrity sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q== - dependencies: - "@webassemblyjs/helper-numbers" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - -"@webassemblyjs/floating-point-hex-parser@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz#dacbcb95aff135c8260f77fa3b4c5fea600a6431" - integrity sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw== - -"@webassemblyjs/helper-api-error@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz#6132f68c4acd59dcd141c44b18cbebbd9f2fa768" - integrity sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q== - -"@webassemblyjs/helper-buffer@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz#b66d73c43e296fd5e88006f18524feb0f2c7c093" - integrity sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA== - -"@webassemblyjs/helper-numbers@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz#cbce5e7e0c1bd32cf4905ae444ef64cea919f1b5" - integrity sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g== - dependencies: - "@webassemblyjs/floating-point-hex-parser" "1.11.6" - "@webassemblyjs/helper-api-error" "1.11.6" - "@xtuc/long" "4.2.2" - -"@webassemblyjs/helper-wasm-bytecode@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz#bb2ebdb3b83aa26d9baad4c46d4315283acd51e9" - integrity sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA== - -"@webassemblyjs/helper-wasm-section@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz#ff97f3863c55ee7f580fd5c41a381e9def4aa577" - integrity sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-buffer" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/wasm-gen" "1.11.6" - -"@webassemblyjs/ieee754@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz#bb665c91d0b14fffceb0e38298c329af043c6e3a" - integrity sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg== - dependencies: - "@xtuc/ieee754" "^1.2.0" - -"@webassemblyjs/leb128@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.6.tgz#70e60e5e82f9ac81118bc25381a0b283893240d7" - integrity sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ== - dependencies: - "@xtuc/long" "4.2.2" - -"@webassemblyjs/utf8@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.6.tgz#90f8bc34c561595fe156603be7253cdbcd0fab5a" - integrity sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA== - -"@webassemblyjs/wasm-edit@^1.11.5": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz#c72fa8220524c9b416249f3d94c2958dfe70ceab" - integrity sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-buffer" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/helper-wasm-section" "1.11.6" - "@webassemblyjs/wasm-gen" "1.11.6" - "@webassemblyjs/wasm-opt" "1.11.6" - "@webassemblyjs/wasm-parser" "1.11.6" - "@webassemblyjs/wast-printer" "1.11.6" - -"@webassemblyjs/wasm-gen@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz#fb5283e0e8b4551cc4e9c3c0d7184a65faf7c268" - integrity sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/ieee754" "1.11.6" - "@webassemblyjs/leb128" "1.11.6" - "@webassemblyjs/utf8" "1.11.6" - -"@webassemblyjs/wasm-opt@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz#d9a22d651248422ca498b09aa3232a81041487c2" - integrity sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-buffer" "1.11.6" - "@webassemblyjs/wasm-gen" "1.11.6" - "@webassemblyjs/wasm-parser" "1.11.6" - -"@webassemblyjs/wasm-parser@1.11.6", "@webassemblyjs/wasm-parser@^1.11.5": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz#bb85378c527df824004812bbdb784eea539174a1" - integrity sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-api-error" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/ieee754" "1.11.6" - "@webassemblyjs/leb128" "1.11.6" - "@webassemblyjs/utf8" "1.11.6" - -"@webassemblyjs/wast-printer@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz#a7bf8dd7e362aeb1668ff43f35cb849f188eff20" - integrity sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@xtuc/long" "4.2.2" - -"@xtuc/ieee754@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" - integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== - -"@xtuc/long@4.2.2": - version "4.2.2" - resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" - integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== - -accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: - version "1.3.8" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" - integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== - dependencies: - mime-types "~2.1.34" - negotiator "0.6.3" - -acorn-import-assertions@^1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz#507276249d684797c84e0734ef84860334cfb1ac" - integrity sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA== - -acorn-jsx@^5.3.2: - version "5.3.2" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" - integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== - -acorn-walk@^8.0.0, acorn-walk@^8.0.2, acorn-walk@^8.2.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@^8.0.4, acorn@^8.0.5, acorn@^8.4.1, acorn@^8.7.1, acorn@^8.8.2, acorn@^8.9.0: - version "8.10.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" - integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== - -address@^1.1.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/address/-/address-1.2.2.tgz#2b5248dac5485a6390532c6a517fda2e3faac89e" - integrity sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA== - -ajv-errors@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" - integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== - -ajv-formats@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" - integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== - dependencies: - ajv "^8.0.0" - -ajv-keywords@^3.1.0, ajv-keywords@^3.5.2: - version "3.5.2" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" - integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== - -ajv-keywords@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16" - integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw== - dependencies: - fast-deep-equal "^3.1.3" - -ajv@^6.1.0, ajv@^6.12.4, ajv@^6.12.5: - version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ajv@^8.0.0, ajv@^8.9.0: - version "8.12.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" - integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== - dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" - -ansi-escapes@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" - integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== - -ansi-html-community@^0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz#69fbc4d6ccbe383f9736934ae34c3f8290f1bf41" - integrity sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw== - -ansi-regex@>=5.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" - integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== - -ansi-regex@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.1.tgz#123d6479e92ad45ad897d4054e3c7ca7db4944e1" - integrity sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw== - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.0.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" - -any-promise@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" - integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== - -anymatch@~3.1.2: - version "3.1.3" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" - integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -arch@^2.1.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/arch/-/arch-2.2.0.tgz#1bc47818f305764f23ab3306b0bfc086c5a29d11" - integrity sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ== - -argparse@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" - integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== - -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" - integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== - -array-flatten@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" - integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - -async@^2.6.4: - version "2.6.4" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" - integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== - dependencies: - lodash "^4.17.14" - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== - -at-least-node@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" - integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== - -autoprefixer@^10.2.4: - version "10.4.15" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.15.tgz#a1230f4aeb3636b89120b34a1f513e2f6834d530" - integrity sha512-KCuPB8ZCIqFdA4HwKXsvz7j6gvSDNhDP7WnUjBleRkKjPdvCmHFuQ77ocavI8FT6NdvlBnE2UFr2H4Mycn8Vew== - dependencies: - browserslist "^4.21.10" - caniuse-lite "^1.0.30001520" - fraction.js "^4.2.0" - normalize-range "^0.1.2" - picocolors "^1.0.0" - postcss-value-parser "^4.2.0" - -axios@^1.2.1: - version "1.5.0" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.5.0.tgz#f02e4af823e2e46a9768cfc74691fdd0517ea267" - integrity sha512-D4DdjDo5CY50Qms0qGQTTw6Q44jl7zRwY7bthds06pUGfChBCTcQs+N743eFWGEd6pRTMd6A+I87aWyFV5wiZQ== - dependencies: - follow-redirects "^1.15.0" - form-data "^4.0.0" - proxy-from-env "^1.1.0" - -babel-loader@^8.2.2: - version "8.3.0" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.3.0.tgz#124936e841ba4fe8176786d6ff28add1f134d6a8" - integrity sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q== - dependencies: - find-cache-dir "^3.3.1" - loader-utils "^2.0.0" - make-dir "^3.1.0" - schema-utils "^2.6.5" - -babel-plugin-dynamic-import-node@^2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" - integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== - dependencies: - object.assign "^4.1.0" - -babel-plugin-polyfill-corejs2@^0.4.5: - version "0.4.5" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.5.tgz#8097b4cb4af5b64a1d11332b6fb72ef5e64a054c" - integrity sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg== - dependencies: - "@babel/compat-data" "^7.22.6" - "@babel/helper-define-polyfill-provider" "^0.4.2" - semver "^6.3.1" - -babel-plugin-polyfill-corejs3@^0.8.3: - version "0.8.3" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.3.tgz#b4f719d0ad9bb8e0c23e3e630c0c8ec6dd7a1c52" - integrity sha512-z41XaniZL26WLrvjy7soabMXrfPWARN25PZoriDEiLMxAp50AUW3t35BGQUMg5xK3UrpVTtagIDklxYa+MhiNA== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.2" - core-js-compat "^3.31.0" - -babel-plugin-polyfill-regenerator@^0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.2.tgz#80d0f3e1098c080c8b5a65f41e9427af692dc326" - integrity sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.2" - -balanced-match@^1.0.0: - 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.3.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -batch@0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" - integrity sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw== - -big.js@^5.2.2: - version "5.2.2" - resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" - integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== - -binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - -bl@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" - integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== - dependencies: - buffer "^5.5.0" - inherits "^2.0.4" - readable-stream "^3.4.0" - -bluebird@^3.1.1: - version "3.7.2" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" - integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== - -body-parser@1.20.1: - version "1.20.1" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668" - integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw== - dependencies: - bytes "3.1.2" - content-type "~1.0.4" - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - http-errors "2.0.0" - iconv-lite "0.4.24" - on-finished "2.4.1" - qs "6.11.0" - raw-body "2.5.1" - type-is "~1.6.18" - unpipe "1.0.0" - -bonjour-service@^1.0.11: - version "1.1.1" - resolved "https://registry.yarnpkg.com/bonjour-service/-/bonjour-service-1.1.1.tgz#960948fa0e0153f5d26743ab15baf8e33752c135" - integrity sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg== - dependencies: - array-flatten "^2.1.2" - dns-equal "^1.0.0" - fast-deep-equal "^3.1.3" - multicast-dns "^7.2.5" - -boolbase@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" - integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -braces@^3.0.2, braces@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.16.3, browserslist@^4.21.10, browserslist@^4.21.4, browserslist@^4.21.9: - version "4.21.10" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.10.tgz#dbbac576628c13d3b2231332cb2ec5a46e015bb0" - integrity sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ== - dependencies: - caniuse-lite "^1.0.30001517" - electron-to-chromium "^1.4.477" - node-releases "^2.0.13" - update-browserslist-db "^1.0.11" - -buffer-from@^1.0.0: - 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@^5.5.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" - integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.1.13" - -bytes@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" - integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw== - -bytes@3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" - integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== - -call-bind@^1.0.0, call-bind@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== - dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" - -callsite@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20" - integrity sha512-0vdNRFXn5q+dtOqjfFtmtlI9N2eVZ7LMyEV2iKC5mEEFvSg/69Ml6b/WU2qF8W1nLRa0wiSrDT3Y5jOHZCwKPQ== - -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -camel-case@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" - integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== - dependencies: - pascal-case "^3.1.2" - tslib "^2.0.3" - -camelcase@^5.0.0: - version "5.3.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" - integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== - -camelcase@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" - integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== - -caniuse-api@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" - integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== - dependencies: - browserslist "^4.0.0" - caniuse-lite "^1.0.0" - lodash.memoize "^4.1.2" - lodash.uniq "^4.5.0" - -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001517, caniuse-lite@^1.0.30001520: - version "1.0.30001524" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001524.tgz#1e14bce4f43c41a7deaeb5ebfe86664fe8dadb80" - integrity sha512-Jj917pJtYg9HSJBF95HVX3Cdr89JUyLT4IZ8SvM5aDRni95swKgYi3TgYLH5hnGfPE/U1dg6IfZ50UsIlLkwSA== - -case-sensitive-paths-webpack-plugin@^2.3.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz#db64066c6422eed2e08cc14b986ca43796dbc6d4" - integrity sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw== - -chalk@^2.1.0, chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" - integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: - 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@>=3.0.0 <4.0.0", chokidar@^3.5.3: - version "3.5.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - -chrome-trace-event@^1.0.2: - 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== - -ci-info@^1.5.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497" - integrity sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A== - -clean-css@^5.2.2: - version "5.3.2" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-5.3.2.tgz#70ecc7d4d4114921f5d298349ff86a31a9975224" - integrity sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww== - dependencies: - source-map "~0.6.0" - -cli-cursor@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" - integrity sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw== - dependencies: - restore-cursor "^2.0.0" - -cli-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" - integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== - dependencies: - restore-cursor "^3.1.0" - -cli-highlight@^2.1.10: - version "2.1.11" - resolved "https://registry.yarnpkg.com/cli-highlight/-/cli-highlight-2.1.11.tgz#49736fa452f0aaf4fae580e30acb26828d2dc1bf" - integrity sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg== - dependencies: - chalk "^4.0.0" - highlight.js "^10.7.1" - mz "^2.4.0" - parse5 "^5.1.1" - parse5-htmlparser2-tree-adapter "^6.0.0" - yargs "^16.0.0" - -cli-spinners@^2.5.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.0.tgz#5881d0ad96381e117bbe07ad91f2008fe6ffd8db" - integrity sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g== - -clipboardy@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/clipboardy/-/clipboardy-2.3.0.tgz#3c2903650c68e46a91b388985bc2774287dba290" - integrity sha512-mKhiIL2DrQIsuXMgBgnfEHOZOryC7kY7YO//TN6c63wlEm3NG5tz+YgY5rVi29KCmq/QQjKYvM7a19+MDOTHOQ== - dependencies: - arch "^2.1.1" - execa "^1.0.0" - is-wsl "^2.1.1" - -cliui@^7.0.2, cliui@^7.0.4: - version "7.0.4" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" - integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^7.0.0" - -clone-deep@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" - integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== - dependencies: - is-plain-object "^2.0.4" - kind-of "^6.0.2" - shallow-clone "^3.0.0" - -clone@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" - integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== - -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - 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 sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - -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== - -colord@^2.9.1: - version "2.9.3" - resolved "https://registry.yarnpkg.com/colord/-/colord-2.9.3.tgz#4f8ce919de456f1d5c1c368c307fe20f3e59fb43" - integrity sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw== - -colorette@^2.0.10: - version "2.0.20" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" - integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== - -combined-stream@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - -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== - -commander@^8.3.0: - version "8.3.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" - integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== - -commondir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" - integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== - -compressible@~2.0.16: - version "2.0.18" - resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" - integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== - dependencies: - mime-db ">= 1.43.0 < 2" - -compression@^1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" - integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== - dependencies: - accepts "~1.3.5" - bytes "3.0.0" - compressible "~2.0.16" - debug "2.6.9" - on-headers "~1.0.2" - safe-buffer "5.1.2" - vary "~1.1.2" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - -connect-history-api-fallback@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz#647264845251a0daf25b97ce87834cace0f5f1c8" - integrity sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA== - -consolidate@^0.15.1: - version "0.15.1" - resolved "https://registry.yarnpkg.com/consolidate/-/consolidate-0.15.1.tgz#21ab043235c71a07d45d9aad98593b0dba56bab7" - integrity sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw== - dependencies: - bluebird "^3.1.1" - -content-disposition@0.5.4: - version "0.5.4" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" - integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== - dependencies: - safe-buffer "5.2.1" - -content-type@~1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" - integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== - -convert-source-map@^1.7.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" - integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== - -cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" - integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== - -cookie@0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" - integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== - -copy-webpack-plugin@^9.0.1: - version "9.1.0" - resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-9.1.0.tgz#2d2c460c4c4695ec0a58afb2801a1205256c4e6b" - integrity sha512-rxnR7PaGigJzhqETHGmAcxKnLZSR5u1Y3/bcIv/1FnqXedcL/E2ewK7ZCNrArJKCiSv8yVXhTqetJh8inDvfsA== - dependencies: - fast-glob "^3.2.7" - glob-parent "^6.0.1" - globby "^11.0.3" - normalize-path "^3.0.0" - schema-utils "^3.1.1" - serialize-javascript "^6.0.0" - -core-js-compat@^3.31.0, core-js-compat@^3.8.3: - version "3.32.1" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.32.1.tgz#55f9a7d297c0761a8eb1d31b593e0f5b6ffae964" - integrity sha512-GSvKDv4wE0bPnQtjklV101juQ85g6H3rm5PDP20mqlS5j0kXF3pP97YvAu5hl+uFHqMictp3b2VxOHljWMAtuA== - dependencies: - browserslist "^4.21.10" - -core-js@^3.27.0, core-js@^3.8.3: - version "3.32.1" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.32.1.tgz#a7d8736a3ed9dd05940c3c4ff32c591bb735be77" - integrity sha512-lqufgNn9NLnESg5mQeYsxQP5w7wrViSj0jr/kv6ECQiByzQkrn1MKvV0L3acttpDqfQrHLwr2KCMgX5b8X+lyQ== - -core-util-is@~1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" - integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== - -cosmiconfig@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6" - integrity sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA== - dependencies: - "@types/parse-json" "^4.0.0" - import-fresh "^3.2.1" - parse-json "^5.0.0" - path-type "^4.0.0" - yaml "^1.10.0" - -cross-spawn@^5.0.1: - version "5.1.0" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" - integrity sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A== - dependencies: - lru-cache "^4.0.1" - shebang-command "^1.2.0" - which "^1.2.9" - -cross-spawn@^6.0.0: - version "6.0.5" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" - integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== - dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" - -cross-spawn@^7.0.2, cross-spawn@^7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -css-declaration-sorter@^6.3.1: - version "6.4.1" - resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz#28beac7c20bad7f1775be3a7129d7eae409a3a71" - integrity sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g== - -css-loader@^6.5.0: - version "6.8.1" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.8.1.tgz#0f8f52699f60f5e679eab4ec0fcd68b8e8a50a88" - integrity sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g== - dependencies: - icss-utils "^5.1.0" - postcss "^8.4.21" - postcss-modules-extract-imports "^3.0.0" - postcss-modules-local-by-default "^4.0.3" - postcss-modules-scope "^3.0.0" - postcss-modules-values "^4.0.0" - postcss-value-parser "^4.2.0" - semver "^7.3.8" - -css-minimizer-webpack-plugin@^3.0.2: - version "3.4.1" - resolved "https://registry.yarnpkg.com/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.4.1.tgz#ab78f781ced9181992fe7b6e4f3422e76429878f" - integrity sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q== - dependencies: - cssnano "^5.0.6" - jest-worker "^27.0.2" - postcss "^8.3.5" - schema-utils "^4.0.0" - serialize-javascript "^6.0.0" - source-map "^0.6.1" - -css-select@^4.1.3: - version "4.3.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b" - integrity sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ== - dependencies: - boolbase "^1.0.0" - css-what "^6.0.1" - domhandler "^4.3.1" - domutils "^2.8.0" - nth-check "^2.0.1" - -css-tree@^1.1.2, css-tree@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" - integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== - dependencies: - mdn-data "2.0.14" - source-map "^0.6.1" - -css-what@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" - integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== - -cssesc@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" - integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== - -cssnano-preset-default@^5.2.14: - version "5.2.14" - resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz#309def4f7b7e16d71ab2438052093330d9ab45d8" - integrity sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A== - dependencies: - css-declaration-sorter "^6.3.1" - cssnano-utils "^3.1.0" - postcss-calc "^8.2.3" - postcss-colormin "^5.3.1" - postcss-convert-values "^5.1.3" - postcss-discard-comments "^5.1.2" - postcss-discard-duplicates "^5.1.0" - postcss-discard-empty "^5.1.1" - postcss-discard-overridden "^5.1.0" - postcss-merge-longhand "^5.1.7" - postcss-merge-rules "^5.1.4" - postcss-minify-font-values "^5.1.0" - postcss-minify-gradients "^5.1.1" - postcss-minify-params "^5.1.4" - postcss-minify-selectors "^5.2.1" - postcss-normalize-charset "^5.1.0" - postcss-normalize-display-values "^5.1.0" - postcss-normalize-positions "^5.1.1" - postcss-normalize-repeat-style "^5.1.1" - postcss-normalize-string "^5.1.0" - postcss-normalize-timing-functions "^5.1.0" - postcss-normalize-unicode "^5.1.1" - postcss-normalize-url "^5.1.0" - postcss-normalize-whitespace "^5.1.1" - postcss-ordered-values "^5.1.3" - postcss-reduce-initial "^5.1.2" - postcss-reduce-transforms "^5.1.0" - postcss-svgo "^5.1.0" - postcss-unique-selectors "^5.1.1" - -cssnano-utils@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cssnano-utils/-/cssnano-utils-3.1.0.tgz#95684d08c91511edfc70d2636338ca37ef3a6861" - integrity sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA== - -cssnano@^5.0.0, cssnano@^5.0.6: - version "5.1.15" - resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-5.1.15.tgz#ded66b5480d5127fcb44dac12ea5a983755136bf" - integrity sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw== - dependencies: - cssnano-preset-default "^5.2.14" - lilconfig "^2.0.3" - yaml "^1.10.2" - -csso@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/csso/-/csso-4.2.0.tgz#ea3a561346e8dc9f546d6febedd50187cf389529" - integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA== - dependencies: - css-tree "^1.1.2" - -csstype@^3.1.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b" - integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ== - -de-indent@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d" - integrity sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg== - -debug@2.6.9: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@^3.2.7: - version "3.2.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - -debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2: - version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - -decache@^4.6.0: - version "4.6.2" - resolved "https://registry.yarnpkg.com/decache/-/decache-4.6.2.tgz#c1df1325a2f36d53922e08f33380f083148199cd" - integrity sha512-2LPqkLeu8XWHU8qNCS3kcF6sCcb5zIzvWaAHYSvPfwhdd7mHuah29NssMzrTYyHN4F5oFy2ko9OBYxegtU0FEw== - dependencies: - callsite "^1.0.0" - -deep-is@^0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" - integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== - -deepmerge@^1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-1.5.2.tgz#10499d868844cdad4fee0842df8c7f6f0c95a753" - integrity sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ== - -default-gateway@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-6.0.3.tgz#819494c888053bdb743edbf343d6cdf7f2943a71" - integrity sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg== - dependencies: - execa "^5.0.0" - -defaults@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a" - integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== - dependencies: - clone "^1.0.2" - -define-lazy-prop@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" - integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== - -define-properties@^1.1.4: - version "1.2.0" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5" - integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA== - dependencies: - has-property-descriptors "^1.0.0" - object-keys "^1.1.1" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== - -depd@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" - integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== - -depd@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" - integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== - -destroy@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" - integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== - -detect-node@^2.0.4: - version "2.1.0" - resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" - integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== - -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - -dns-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" - integrity sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg== - -dns-packet@^5.2.2: - version "5.6.1" - resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-5.6.1.tgz#ae888ad425a9d1478a0674256ab866de1012cf2f" - integrity sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw== - dependencies: - "@leichtgewicht/ip-codec" "^2.0.1" - -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" - -dom-converter@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" - integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== - dependencies: - utila "~0.4" - -dom-serializer@^1.0.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30" - integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag== - dependencies: - domelementtype "^2.0.1" - domhandler "^4.2.0" - entities "^2.0.0" - -domelementtype@^2.0.1, domelementtype@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" - integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== - -domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" - integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== - dependencies: - domelementtype "^2.2.0" - -domutils@^2.5.2, domutils@^2.8.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" - integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== - dependencies: - dom-serializer "^1.0.1" - domelementtype "^2.2.0" - domhandler "^4.2.0" - -dot-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" - integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== - dependencies: - no-case "^3.0.4" - tslib "^2.0.3" - -dotenv-expand@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz#3fbaf020bfd794884072ea26b1e9791d45a629f0" - integrity sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA== - -dotenv@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-10.0.0.tgz#3d4227b8fb95f81096cdd2b66653fb2c7085ba81" - integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q== - -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== - -easy-stack@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/easy-stack/-/easy-stack-1.0.1.tgz#8afe4264626988cabb11f3c704ccd0c835411066" - integrity sha512-wK2sCs4feiiJeFXn3zvY0p41mdU5VUgbgs1rNsc/y5ngFUijdWd+iIN8eoyuZHKB8xN6BL4PdWmzqFmxNg6V2w== - -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== - -electron-to-chromium@^1.4.477: - version "1.4.503" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.503.tgz#7bd43927ea9b4198697672d28d8fbd0da016a7a1" - integrity sha512-LF2IQit4B0VrUHFeQkWhZm97KuJSGF2WJqq1InpY+ECpFRkXd8yTIaTtJxsO0OKDmiBYwWqcrNaXOurn2T2wiA== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -emojis-list@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" - integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== - -encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== - -end-of-stream@^1.1.0: - version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - -engine.io-client@~6.5.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-6.5.2.tgz#8709e22c291d4297ae80318d3c8baeae71f0e002" - integrity sha512-CQZqbrpEYnrpGqC07a9dJDz4gePZUgTPMU3NKJPSeQOyw27Tst4Pl3FemKoFGAlHzgZmKjoRmiJvbWfhCXUlIg== - dependencies: - "@socket.io/component-emitter" "~3.1.0" - debug "~4.3.1" - engine.io-parser "~5.2.1" - ws "~8.11.0" - xmlhttprequest-ssl "~2.0.0" - -engine.io-parser@~5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-5.2.1.tgz#9f213c77512ff1a6cc0c7a86108a7ffceb16fcfb" - integrity sha512-9JktcM3u18nU9N2Lz3bWeBgxVgOKpw7yhRaoxQA3FUDZzzw+9WlA6p4G4u0RixNkg14fH7EfEc/RhpurtiROTQ== - -enhanced-resolve@^5.15.0: - version "5.15.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz#1af946c7d93603eb88e9896cee4904dc012e9c35" - integrity sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg== - dependencies: - graceful-fs "^4.2.4" - tapable "^2.2.0" - -entities@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" - integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== - -error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - -error-stack-parser@^2.0.6: - version "2.1.4" - resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.1.4.tgz#229cb01cdbfa84440bfa91876285b94680188286" - integrity sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ== - dependencies: - stackframe "^1.3.4" - -es-module-lexer@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.3.0.tgz#6be9c9e0b4543a60cd166ff6f8b4e9dae0b0c16f" - integrity sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA== - -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== - -escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== - -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - -escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - -eslint-plugin-vue@^9.8.0: - version "9.17.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-9.17.0.tgz#4501547373f246547083482838b4c8f4b28e5932" - integrity sha512-r7Bp79pxQk9I5XDP0k2dpUC7Ots3OSWgvGZNu3BxmKK6Zg7NgVtcOB6OCna5Kb9oQwJPl5hq183WD0SY5tZtIQ== - dependencies: - "@eslint-community/eslint-utils" "^4.4.0" - natural-compare "^1.4.0" - nth-check "^2.1.1" - postcss-selector-parser "^6.0.13" - semver "^7.5.4" - vue-eslint-parser "^9.3.1" - xml-name-validator "^4.0.0" - -eslint-scope@5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== - dependencies: - esrecurse "^4.3.0" - estraverse "^4.1.1" - -eslint-scope@^7.1.1, eslint-scope@^7.2.2: - version "7.2.2" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" - integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== - dependencies: - esrecurse "^4.3.0" - estraverse "^5.2.0" - -eslint-visitor-keys@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" - integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== - -eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: - version "3.4.3" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" - integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== - -eslint-webpack-plugin@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/eslint-webpack-plugin/-/eslint-webpack-plugin-3.2.0.tgz#1978cdb9edc461e4b0195a20da950cf57988347c" - integrity sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w== - dependencies: - "@types/eslint" "^7.29.0 || ^8.4.1" - jest-worker "^28.0.2" - micromatch "^4.0.5" - normalize-path "^3.0.0" - schema-utils "^4.0.0" - -eslint@^8.30.0: - version "8.48.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.48.0.tgz#bf9998ba520063907ba7bfe4c480dc8be03c2155" - integrity sha512-sb6DLeIuRXxeM1YljSe1KEx9/YYeZFQWcV8Rq9HfigmdDEugjLEVEa1ozDjL6YDjBpQHPJxJzze+alxi4T3OLg== - dependencies: - "@eslint-community/eslint-utils" "^4.2.0" - "@eslint-community/regexpp" "^4.6.1" - "@eslint/eslintrc" "^2.1.2" - "@eslint/js" "8.48.0" - "@humanwhocodes/config-array" "^0.11.10" - "@humanwhocodes/module-importer" "^1.0.1" - "@nodelib/fs.walk" "^1.2.8" - ajv "^6.12.4" - chalk "^4.0.0" - cross-spawn "^7.0.2" - debug "^4.3.2" - doctrine "^3.0.0" - escape-string-regexp "^4.0.0" - eslint-scope "^7.2.2" - eslint-visitor-keys "^3.4.3" - espree "^9.6.1" - esquery "^1.4.2" - esutils "^2.0.2" - fast-deep-equal "^3.1.3" - file-entry-cache "^6.0.1" - find-up "^5.0.0" - glob-parent "^6.0.2" - globals "^13.19.0" - graphemer "^1.4.0" - ignore "^5.2.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - is-path-inside "^3.0.3" - js-yaml "^4.1.0" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" - lodash.merge "^4.6.2" - minimatch "^3.1.2" - natural-compare "^1.4.0" - optionator "^0.9.3" - strip-ansi "^6.0.1" - text-table "^0.2.0" - -espree@^9.3.1, espree@^9.6.0, espree@^9.6.1: - version "9.6.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" - integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== - dependencies: - acorn "^8.9.0" - acorn-jsx "^5.3.2" - eslint-visitor-keys "^3.4.1" - -esquery@^1.4.0, esquery@^1.4.2: - version "1.5.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" - integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== - dependencies: - estraverse "^5.1.0" - -esrecurse@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - -estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - -estraverse@^5.1.0, estraverse@^5.2.0: - 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" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -etag@~1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== - -event-pubsub@4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/event-pubsub/-/event-pubsub-4.3.0.tgz#f68d816bc29f1ec02c539dc58c8dd40ce72cb36e" - integrity sha512-z7IyloorXvKbFx9Bpie2+vMJKKx1fH1EN5yiTfp8CiLOTptSYy1g8H4yDpGlEdshL1PBiFtBHepF2cNsqeEeFQ== - -eventemitter3@^4.0.0: - version "4.0.7" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" - integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== - -events@^3.2.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" - integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== - -execa@^0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-0.8.0.tgz#d8d76bbc1b55217ed190fd6dd49d3c774ecfc8da" - integrity sha512-zDWS+Rb1E8BlqqhALSt9kUhss8Qq4nN3iof3gsOdyINksElaPyNBtKUMTR62qhvgVWR0CqCX7sdnKe4MnUbFEA== - dependencies: - cross-spawn "^5.0.1" - get-stream "^3.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - -execa@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" - integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== - dependencies: - cross-spawn "^6.0.0" - get-stream "^4.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - -execa@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" - integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== - dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.0" - human-signals "^2.1.0" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.1" - onetime "^5.1.2" - signal-exit "^3.0.3" - strip-final-newline "^2.0.0" - -express@^4.17.3: - version "4.18.2" - resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" - integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== - dependencies: - accepts "~1.3.8" - array-flatten "1.1.1" - body-parser "1.20.1" - content-disposition "0.5.4" - content-type "~1.0.4" - cookie "0.5.0" - cookie-signature "1.0.6" - debug "2.6.9" - depd "2.0.0" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - finalhandler "1.2.0" - fresh "0.5.2" - http-errors "2.0.0" - merge-descriptors "1.0.1" - methods "~1.1.2" - on-finished "2.4.1" - parseurl "~1.3.3" - path-to-regexp "0.1.7" - proxy-addr "~2.0.7" - qs "6.11.0" - range-parser "~1.2.1" - safe-buffer "5.2.1" - send "0.18.0" - serve-static "1.15.0" - setprototypeof "1.2.0" - statuses "2.0.1" - type-is "~1.6.18" - utils-merge "1.0.1" - vary "~1.1.2" - -fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fast-glob@^3.2.7, fast-glob@^3.2.9: - version "3.3.1" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.1.tgz#784b4e897340f3dbbef17413b3f11acf03c874c4" - integrity sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - -fast-json-stable-stringify@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -fast-levenshtein@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== - -fastq@^1.6.0: - version "1.15.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" - integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== - dependencies: - reusify "^1.0.4" - -faye-websocket@^0.11.3: - version "0.11.4" - resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.4.tgz#7f0d9275cfdd86a1c963dc8b65fcc451edcbb1da" - integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g== - dependencies: - websocket-driver ">=0.5.1" - -figures@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" - integrity sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA== - dependencies: - escape-string-regexp "^1.0.5" - -file-entry-cache@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" - integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== - dependencies: - flat-cache "^3.0.4" - -file-loader@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-6.2.0.tgz#baef7cf8e1840df325e4390b4484879480eebe4d" - integrity sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw== - dependencies: - loader-utils "^2.0.0" - schema-utils "^3.0.0" - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -finalhandler@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" - integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== - dependencies: - debug "2.6.9" - encodeurl "~1.0.2" - escape-html "~1.0.3" - on-finished "2.4.1" - parseurl "~1.3.3" - statuses "2.0.1" - unpipe "~1.0.0" - -find-cache-dir@^3.3.1: - 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" - pkg-dir "^4.1.0" - -find-up@^4.0.0, find-up@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== - dependencies: - locate-path "^5.0.0" - path-exists "^4.0.0" - -find-up@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" - integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== - dependencies: - locate-path "^6.0.0" - path-exists "^4.0.0" - -flat-cache@^3.0.4: - version "3.1.0" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.1.0.tgz#0e54ab4a1a60fe87e2946b6b00657f1c99e1af3f" - integrity sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew== - dependencies: - flatted "^3.2.7" - keyv "^4.5.3" - rimraf "^3.0.2" - -flatted@^3.2.7: - version "3.2.7" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" - integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== - -follow-redirects@^1.0.0, follow-redirects@^1.15.0: - version "1.15.2" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" - integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== - -form-data@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" - integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" - -forwarded@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" - integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== - -fraction.js@^4.2.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.2.1.tgz#14b4cc886575a5684f8d5fd5759c5db376bb7bb8" - integrity sha512-/KxoyCnPM0GwYI4NN0Iag38Tqt+od3/mLuguepLgCAKPn0ZhC544nssAW0tG2/00zXEYl9W+7hwAIpLHo6Oc7Q== - -fresh@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== - -fs-extra@^9.1.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" - integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== - dependencies: - at-least-node "^1.0.0" - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-monkey@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.4.tgz#ee8c1b53d3fe8bb7e5d2c5c5dfc0168afdd2f747" - integrity sha512-INM/fWAxMICjttnD0DX1rBvinKskj5G1w+oy/pnm9u/tSlnBrzFonJMcalKJ30P8RRsPzKcCG7Q8l0jx5Fh9YQ== - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - -fsevents@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" - integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - -gensync@^1.0.0-beta.2: - version "1.0.0-beta.2" - resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" - integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== - -get-caller-file@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - -get-intrinsic@^1.0.2, get-intrinsic@^1.1.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82" - integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-proto "^1.0.1" - has-symbols "^1.0.3" - -get-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" - integrity sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ== - -get-stream@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" - integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== - dependencies: - pump "^3.0.0" - -get-stream@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" - integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== - -glob-parent@^5.1.2, 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== - dependencies: - is-glob "^4.0.1" - -glob-parent@^6.0.1, glob-parent@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" - integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== - dependencies: - is-glob "^4.0.3" - -glob-to-regexp@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" - integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== - -glob@^7.0.0, glob@^7.1.3: - version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.1.1" - once "^1.3.0" - path-is-absolute "^1.0.0" - -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - -globals@^13.19.0: - version "13.21.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.21.0.tgz#163aae12f34ef502f5153cfbdd3600f36c63c571" - integrity sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg== - dependencies: - type-fest "^0.20.2" - -globby@^11.0.2, globby@^11.0.3: - version "11.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" - integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.2.9" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^3.0.0" - -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: - version "4.2.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" - integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== - -graphemer@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" - integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== - -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" - -handle-thing@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" - integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== - -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-property-descriptors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" - integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== - dependencies: - get-intrinsic "^1.1.1" - -has-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" - integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== - -has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - -has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -hash-sum@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/hash-sum/-/hash-sum-1.0.2.tgz#33b40777754c6432573c120cc3808bbd10d47f04" - integrity sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA== - -hash-sum@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/hash-sum/-/hash-sum-2.0.0.tgz#81d01bb5de8ea4a214ad5d6ead1b523460b0b45a" - integrity sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg== - -he@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" - integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== - -highlight.js@^10.7.1: - version "10.7.3" - resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.7.3.tgz#697272e3991356e40c3cac566a74eef681756531" - integrity sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A== - -hosted-git-info@^2.1.4: - version "2.8.9" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" - integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== - -hpack.js@^2.1.6: - version "2.1.6" - resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" - integrity sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ== - dependencies: - inherits "^2.0.1" - obuf "^1.0.0" - readable-stream "^2.0.1" - wbuf "^1.1.0" - -html-entities@^2.3.2: - version "2.4.0" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.4.0.tgz#edd0cee70402584c8c76cc2c0556db09d1f45061" - integrity sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ== - -html-minifier-terser@^6.0.2: - version "6.1.0" - resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#bfc818934cc07918f6b3669f5774ecdfd48f32ab" - integrity sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw== - dependencies: - camel-case "^4.1.2" - clean-css "^5.2.2" - commander "^8.3.0" - he "^1.2.0" - param-case "^3.0.4" - relateurl "^0.2.7" - terser "^5.10.0" - -html-tags@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-2.0.0.tgz#10b30a386085f43cede353cc8fa7cb0deeea668b" - integrity sha512-+Il6N8cCo2wB/Vd3gqy/8TZhTD3QvcVeQLCnZiGkGCH3JP28IgGAY41giccp2W4R3jfyJPAP318FQTa1yU7K7g== - -html-tags@^3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.3.1.tgz#a04026a18c882e4bba8a01a3d39cfe465d40b5ce" - integrity sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ== - -html-webpack-plugin@^5.1.0: - version "5.5.3" - resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.5.3.tgz#72270f4a78e222b5825b296e5e3e1328ad525a3e" - integrity sha512-6YrDKTuqaP/TquFH7h4srYWsZx+x6k6+FbsTm0ziCwGHDP78Unr1r9F/H4+sGmMbX08GQcJ+K64x55b+7VM/jg== - dependencies: - "@types/html-minifier-terser" "^6.0.0" - html-minifier-terser "^6.0.2" - lodash "^4.17.21" - pretty-error "^4.0.0" - tapable "^2.0.0" - -htmlparser2@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" - integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== - dependencies: - domelementtype "^2.0.1" - domhandler "^4.0.0" - domutils "^2.5.2" - entities "^2.0.0" - -http-deceiver@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" - integrity sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw== - -http-errors@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" - integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== - dependencies: - depd "2.0.0" - inherits "2.0.4" - setprototypeof "1.2.0" - statuses "2.0.1" - toidentifier "1.0.1" - -http-errors@~1.6.2: - version "1.6.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" - integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.0" - statuses ">= 1.4.0 < 2" - -http-parser-js@>=0.5.1: - version "0.5.8" - resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.8.tgz#af23090d9ac4e24573de6f6aecc9d84a48bf20e3" - integrity sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q== - -http-proxy-middleware@^2.0.3: - version "2.0.6" - resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz#e1a4dd6979572c7ab5a4e4b55095d1f32a74963f" - integrity sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw== - dependencies: - "@types/http-proxy" "^1.17.8" - http-proxy "^1.18.1" - is-glob "^4.0.1" - is-plain-obj "^3.0.0" - micromatch "^4.0.2" - -http-proxy@^1.18.1: - version "1.18.1" - resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" - integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== - dependencies: - eventemitter3 "^4.0.0" - follow-redirects "^1.0.0" - requires-port "^1.0.0" - -human-signals@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" - integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== - -iconv-lite@0.4.24: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -icss-utils@^5.0.0, icss-utils@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" - integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== - -ieee754@^1.1.13: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -ignore@^5.2.0: - version "5.2.4" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" - integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== - -import-fresh@^3.2.1: - version "3.3.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -inherits@2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== - -interpret@^1.0.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" - integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== - -ipaddr.js@1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" - integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== - -ipaddr.js@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.1.0.tgz#2119bc447ff8c257753b196fc5f1ce08a4cdf39f" - integrity sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ== - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== - -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - -is-ci@^1.0.10: - version "1.2.1" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" - integrity sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg== - dependencies: - ci-info "^1.5.0" - -is-core-module@^2.13.0: - version "2.13.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.0.tgz#bb52aa6e2cbd49a30c2ba68c42bf3435ba6072db" - integrity sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ== - dependencies: - has "^1.0.3" - -is-docker@^2.0.0, is-docker@^2.1.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" - integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - -is-file-esm@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-file-esm/-/is-file-esm-1.0.0.tgz#987086b0f5a5318179e9d30f4f2f8d37321e1b5f" - integrity sha512-rZlaNKb4Mr8WlRu2A9XdeoKgnO5aA53XdPHgCKVyCrQ/rWi89RET1+bq37Ru46obaQXeiX4vmFIm1vks41hoSA== - dependencies: - read-pkg-up "^7.0.1" - -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - integrity sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w== - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: - 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" - -is-interactive@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" - integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-path-inside@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" - integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== - -is-plain-obj@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz#af6f2ea14ac5a646183a5bbdb5baabbc156ad9d7" - integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA== - -is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== - dependencies: - isobject "^3.0.1" - -is-primitive@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-3.0.1.tgz#98c4db1abff185485a657fc2905052b940524d05" - integrity sha512-GljRxhWvlCNRfZyORiH77FwdFwGcMO620o37EOYC0ORWdq+WYNVqW0w2Juzew4M+L81l6/QS3t5gkkihyRqv9w== - -is-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ== - -is-stream@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" - integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== - -is-unicode-supported@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" - integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== - -is-wsl@^2.1.1, is-wsl@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" - integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== - dependencies: - is-docker "^2.0.0" - -isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - -isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== - -javascript-stringify@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/javascript-stringify/-/javascript-stringify-2.1.0.tgz#27c76539be14d8bd128219a2d731b09337904e79" - integrity sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg== - -jest-worker@^27.0.2, jest-worker@^27.4.5: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" - integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== - dependencies: - "@types/node" "*" - merge-stream "^2.0.0" - supports-color "^8.0.0" - -jest-worker@^28.0.2: - version "28.1.3" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-28.1.3.tgz#7e3c4ce3fa23d1bb6accb169e7f396f98ed4bb98" - integrity sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g== - dependencies: - "@types/node" "*" - merge-stream "^2.0.0" - supports-color "^8.0.0" - -joi@^17.4.0: - version "17.10.0" - resolved "https://registry.yarnpkg.com/joi/-/joi-17.10.0.tgz#04e249daa24d48fada2d34046a8262e474b1326f" - integrity sha512-hrazgRSlhzacZ69LdcKfhi3Vu13z2yFfoAzmEov3yFIJlatTdVGUW6vle1zjH8qkzdCn/qGw8rapjqsObbYXAg== - dependencies: - "@hapi/hoek" "^9.0.0" - "@hapi/topo" "^5.0.0" - "@sideway/address" "^4.1.3" - "@sideway/formula" "^3.0.1" - "@sideway/pinpoint" "^2.0.0" - -js-message@1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/js-message/-/js-message-1.0.7.tgz#fbddd053c7a47021871bb8b2c95397cc17c20e47" - integrity sha512-efJLHhLjIyKRewNS9EGZ4UpI8NguuL6fKkhRxVuMmrGV2xN/0APGdQYwLFky5w9naebSZ0OwAGp0G6/2Cg90rA== - -js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== - dependencies: - argparse "^2.0.1" - -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== - -jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== - -json-buffer@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" - integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== - -json-parse-better-errors@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" - integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== - -json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" - integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-schema-traverse@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" - integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== - -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== - -json5@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" - integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== - dependencies: - minimist "^1.2.0" - -json5@^2.1.2, json5@^2.2.3: - version "2.2.3" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" - integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== - -jsonfile@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" - integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== - dependencies: - universalify "^2.0.0" - optionalDependencies: - graceful-fs "^4.1.6" - -keyv@^4.5.3: - version "4.5.3" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.3.tgz#00873d2b046df737963157bd04f294ca818c9c25" - integrity sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug== - dependencies: - json-buffer "3.0.1" - -kind-of@^6.0.2: - version "6.0.3" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" - integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== - -klona@^2.0.4, klona@^2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.6.tgz#85bffbf819c03b2f53270412420a4555ef882e22" - integrity sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA== - -launch-editor-middleware@^2.2.1: - version "2.6.0" - resolved "https://registry.yarnpkg.com/launch-editor-middleware/-/launch-editor-middleware-2.6.0.tgz#2ba4fe4b695d7fe3d44dee86b6d46d57b8332dfd" - integrity sha512-K2yxgljj5TdCeRN1lBtO3/J26+AIDDDw+04y6VAiZbWcTdBwsYN6RrZBnW5DN/QiSIdKNjKdATLUUluWWFYTIA== - dependencies: - launch-editor "^2.6.0" - -launch-editor@^2.2.1, launch-editor@^2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.6.0.tgz#4c0c1a6ac126c572bd9ff9a30da1d2cae66defd7" - integrity sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ== - dependencies: - picocolors "^1.0.0" - shell-quote "^1.7.3" - -levn@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" - integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== - dependencies: - prelude-ls "^1.2.1" - type-check "~0.4.0" - -lilconfig@^2.0.3: - version "2.1.0" - resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52" - integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== - -lines-and-columns@^1.1.6: - version "1.2.4" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" - integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== - -loader-runner@^4.1.0, loader-runner@^4.2.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" - integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== - -loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3: - version "1.4.2" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.2.tgz#29a957f3a63973883eb684f10ffd3d151fec01a3" - integrity sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg== - dependencies: - big.js "^5.2.2" - emojis-list "^3.0.0" - json5 "^1.0.1" - -loader-utils@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.4.tgz#8b5cb38b5c34a9a018ee1fc0e6a066d1dfcc528c" - integrity sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw== - dependencies: - big.js "^5.2.2" - emojis-list "^3.0.0" - json5 "^2.1.2" - -locate-path@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" - integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== - dependencies: - p-locate "^4.1.0" - -locate-path@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" - integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== - dependencies: - p-locate "^5.0.0" - -lodash-es@^4.17.20: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" - integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== - -lodash.debounce@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" - integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== - -lodash.defaultsdeep@^4.6.1: - version "4.6.1" - resolved "https://registry.yarnpkg.com/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz#512e9bd721d272d94e3d3a63653fa17516741ca6" - integrity sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA== - -lodash.kebabcase@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz#8489b1cb0d29ff88195cceca448ff6d6cc295c36" - integrity sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g== - -lodash.mapvalues@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz#1bafa5005de9dd6f4f26668c30ca37230cc9689c" - integrity sha512-JPFqXFeZQ7BfS00H58kClY7SPVeHertPE0lNuCyZ26/XlN8TvakYD7b9bGyNmXbT/D3BbtPAAmq90gPWqLkxlQ== - -lodash.memoize@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" - integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== - -lodash.merge@^4.6.2: - version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" - integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== - -lodash.uniq@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" - integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== - -lodash@^4.17.14, lodash@^4.17.20, lodash@^4.17.21: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -log-symbols@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" - integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== - dependencies: - chalk "^4.1.0" - is-unicode-supported "^0.1.0" - -log-update@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/log-update/-/log-update-2.3.0.tgz#88328fd7d1ce7938b29283746f0b1bc126b24708" - integrity sha512-vlP11XfFGyeNQlmEn9tJ66rEW1coA/79m5z6BCkudjbAGE83uhAcGYrBFwfs3AdLiLzGRusRPAbSPK9xZteCmg== - dependencies: - ansi-escapes "^3.0.0" - cli-cursor "^2.0.0" - wrap-ansi "^3.0.1" - -lower-case@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" - integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== - dependencies: - tslib "^2.0.3" - -lru-cache@^4.0.1, lru-cache@^4.1.2: - version "4.1.5" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" - integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== - dependencies: - pseudomap "^1.0.2" - yallist "^2.1.2" - -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -make-dir@^3.0.2, make-dir@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" - integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== - dependencies: - semver "^6.0.0" - -mdn-data@2.0.14: - version "2.0.14" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" - integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== - -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== - -memfs@^3.4.3: - version "3.6.0" - resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.6.0.tgz#d7a2110f86f79dd950a8b6df6d57bc984aa185f6" - integrity sha512-EGowvkkgbMcIChjMTMkESFDbZeSh8xZ7kNSF0hAiAN4Jh6jgHCRS0Ga/+C8y6Au+oqpezRHCfPsmJ2+DwAgiwQ== - dependencies: - fs-monkey "^1.0.4" - -merge-descriptors@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" - integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== - -merge-source-map@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/merge-source-map/-/merge-source-map-1.1.0.tgz#2fdde7e6020939f70906a68f2d7ae685e4c8c646" - integrity sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw== - dependencies: - source-map "^0.6.1" - -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - -merge2@^1.3.0, merge2@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -methods@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== - -micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== - dependencies: - braces "^3.0.2" - picomatch "^2.3.1" - -mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": - version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34: - version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - -mime@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== - -mimic-fn@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" - integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== - -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -mini-css-extract-plugin@^2.5.3: - version "2.7.6" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.6.tgz#282a3d38863fddcd2e0c220aaed5b90bc156564d" - integrity sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw== - dependencies: - schema-utils "^4.0.0" - -minimalistic-assert@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" - integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== - -minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6: - version "1.2.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" - integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== - -minipass@^3.1.1: - version "3.3.6" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" - integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== - dependencies: - yallist "^4.0.0" - -mkdirp@^0.5.6: - version "0.5.6" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" - integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== - dependencies: - minimist "^1.2.6" - -module-alias@^2.2.2: - version "2.2.3" - resolved "https://registry.yarnpkg.com/module-alias/-/module-alias-2.2.3.tgz#ec2e85c68973bda6ab71ce7c93b763ec96053221" - integrity sha512-23g5BFj4zdQL/b6tor7Ji+QY4pEfNH784BMslY9Qb0UnJWRAt+lQGLYmRaM0KDBwIG23ffEBELhZDP2rhi9f/Q== - -mrmime@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-1.0.1.tgz#5f90c825fad4bdd41dc914eff5d1a8cfdaf24f27" - integrity sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw== - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@2.1.3, ms@^2.1.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -multicast-dns@^7.2.5: - version "7.2.5" - resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-7.2.5.tgz#77eb46057f4d7adbd16d9290fa7299f6fa64cced" - integrity sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg== - dependencies: - dns-packet "^5.2.2" - thunky "^1.0.2" - -mz@^2.4.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" - integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== - dependencies: - any-promise "^1.0.0" - object-assign "^4.0.1" - thenify-all "^1.0.0" - -nanoid@^3.3.6: - version "3.3.6" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" - integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== - -negotiator@0.6.3: - version "0.6.3" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" - integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== - -neo-async@^2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" - integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== - -nice-try@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" - integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== - -no-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" - integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== - dependencies: - lower-case "^2.0.2" - tslib "^2.0.3" - -node-fetch@^2.6.7: - version "2.7.0" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" - integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== - dependencies: - whatwg-url "^5.0.0" - -node-forge@^1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" - integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== - -node-releases@^2.0.13: - version "2.0.13" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d" - integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== - -normalize-package-data@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" - integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== - dependencies: - hosted-git-info "^2.1.4" - resolve "^1.10.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -normalize-path@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-1.0.0.tgz#32d0e472f91ff345701c15a8311018d3b0a90379" - integrity sha512-7WyT0w8jhpDStXRq5836AMmihQwq2nrUVQrgjvUo/p/NZf9uy/MeJ246lBJVmWuYXMlJuG9BNZHF0hWjfTbQUA== - -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -normalize-range@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" - integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== - -normalize-url@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" - integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== - -npm-run-path@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" - integrity sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw== - dependencies: - path-key "^2.0.0" - -npm-run-path@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" - integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== - dependencies: - path-key "^3.0.0" - -nth-check@>=2.0.1, nth-check@^2.0.1, nth-check@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" - integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== - dependencies: - boolbase "^1.0.0" - -null-loader@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/null-loader/-/null-loader-3.0.0.tgz#3e2b6c663c5bda8c73a54357d8fa0708dc61b245" - integrity sha512-hf5sNLl8xdRho4UPBOOeoIwT3WhjYcMUQm0zj44EhD6UscMAz72o2udpoDFBgykucdEDGIcd6SXbc/G6zssbzw== - dependencies: - loader-utils "^1.2.3" - schema-utils "^1.0.0" - -object-assign@^4.0.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== - -object-inspect@^1.9.0: - version "1.12.3" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" - integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== - -object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object.assign@^4.1.0: - version "4.1.4" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" - integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - has-symbols "^1.0.3" - object-keys "^1.1.1" - -obuf@^1.0.0, obuf@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" - integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== - -on-finished@2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" - integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== - dependencies: - ee-first "1.1.1" - -on-headers@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" - integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== - -once@^1.3.0, once@^1.3.1, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" - -onetime@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" - integrity sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ== - dependencies: - mimic-fn "^1.0.0" - -onetime@^5.1.0, onetime@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== - dependencies: - mimic-fn "^2.1.0" - -open@^8.0.2, open@^8.0.9: - version "8.4.2" - resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" - integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== - dependencies: - define-lazy-prop "^2.0.0" - is-docker "^2.1.1" - is-wsl "^2.2.0" - -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== - -optionator@^0.9.3: - version "0.9.3" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" - integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== - dependencies: - "@aashutoshrathi/word-wrap" "^1.2.3" - deep-is "^0.1.3" - fast-levenshtein "^2.0.6" - levn "^0.4.1" - prelude-ls "^1.2.1" - type-check "^0.4.0" - -ora@^5.3.0: - version "5.4.1" - resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" - integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== - dependencies: - bl "^4.1.0" - chalk "^4.1.0" - cli-cursor "^3.1.0" - cli-spinners "^2.5.0" - is-interactive "^1.0.0" - is-unicode-supported "^0.1.0" - log-symbols "^4.1.0" - strip-ansi "^6.0.0" - wcwidth "^1.0.1" - -p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== - -p-limit@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" - integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== - dependencies: - p-try "^2.0.0" - -p-limit@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - -p-locate@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" - integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== - dependencies: - p-limit "^2.2.0" - -p-locate@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" - integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== - dependencies: - p-limit "^3.0.2" - -p-retry@^4.5.0: - version "4.6.2" - resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-4.6.2.tgz#9baae7184057edd4e17231cee04264106e092a16" - integrity sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ== - dependencies: - "@types/retry" "0.12.0" - retry "^0.13.1" - -p-try@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" - integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== - -param-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" - integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== - dependencies: - dot-case "^3.0.4" - tslib "^2.0.3" - -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - -parse-json@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" - integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== - dependencies: - "@babel/code-frame" "^7.0.0" - error-ex "^1.3.1" - json-parse-even-better-errors "^2.3.0" - lines-and-columns "^1.1.6" - -parse5-htmlparser2-tree-adapter@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz#2cdf9ad823321140370d4dbf5d3e92c7c8ddc6e6" - integrity sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA== - dependencies: - parse5 "^6.0.1" - -parse5@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" - integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== - -parse5@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" - integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== - -parseurl@~1.3.2, parseurl@~1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" - integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== - -pascal-case@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" - integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== - dependencies: - no-case "^3.0.4" - tslib "^2.0.3" - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - -path-key@^2.0.0, path-key@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== - -path-key@^3.0.0, path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-parse@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" - integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -picocolors@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-0.2.1.tgz#570670f793646851d1ba135996962abad587859f" - integrity sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA== - -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, picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -pkg-dir@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" - integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== - dependencies: - find-up "^4.0.0" - -portfinder@^1.0.26: - version "1.0.32" - resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.32.tgz#2fe1b9e58389712429dc2bea5beb2146146c7f81" - integrity sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg== - dependencies: - async "^2.6.4" - debug "^3.2.7" - mkdirp "^0.5.6" - -postcss-calc@^8.2.3: - version "8.2.4" - resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-8.2.4.tgz#77b9c29bfcbe8a07ff6693dc87050828889739a5" - integrity sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q== - dependencies: - postcss-selector-parser "^6.0.9" - postcss-value-parser "^4.2.0" - -postcss-colormin@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-5.3.1.tgz#86c27c26ed6ba00d96c79e08f3ffb418d1d1988f" - integrity sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ== - dependencies: - browserslist "^4.21.4" - caniuse-api "^3.0.0" - colord "^2.9.1" - postcss-value-parser "^4.2.0" - -postcss-convert-values@^5.1.3: - version "5.1.3" - resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz#04998bb9ba6b65aa31035d669a6af342c5f9d393" - integrity sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA== - dependencies: - browserslist "^4.21.4" - postcss-value-parser "^4.2.0" - -postcss-discard-comments@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz#8df5e81d2925af2780075840c1526f0660e53696" - integrity sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ== - -postcss-discard-duplicates@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz#9eb4fe8456706a4eebd6d3b7b777d07bad03e848" - integrity sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw== - -postcss-discard-empty@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz#e57762343ff7f503fe53fca553d18d7f0c369c6c" - integrity sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A== - -postcss-discard-overridden@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz#7e8c5b53325747e9d90131bb88635282fb4a276e" - integrity sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw== - -postcss-loader@^6.1.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-6.2.1.tgz#0895f7346b1702103d30fdc66e4d494a93c008ef" - integrity sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q== - dependencies: - cosmiconfig "^7.0.0" - klona "^2.0.5" - semver "^7.3.5" - -postcss-merge-longhand@^5.1.7: - version "5.1.7" - resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz#24a1bdf402d9ef0e70f568f39bdc0344d568fb16" - integrity sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ== - dependencies: - postcss-value-parser "^4.2.0" - stylehacks "^5.1.1" - -postcss-merge-rules@^5.1.4: - version "5.1.4" - resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz#2f26fa5cacb75b1402e213789f6766ae5e40313c" - integrity sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g== - dependencies: - browserslist "^4.21.4" - caniuse-api "^3.0.0" - cssnano-utils "^3.1.0" - postcss-selector-parser "^6.0.5" - -postcss-minify-font-values@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz#f1df0014a726083d260d3bd85d7385fb89d1f01b" - integrity sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-minify-gradients@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz#f1fe1b4f498134a5068240c2f25d46fcd236ba2c" - integrity sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw== - dependencies: - colord "^2.9.1" - cssnano-utils "^3.1.0" - postcss-value-parser "^4.2.0" - -postcss-minify-params@^5.1.4: - version "5.1.4" - resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz#c06a6c787128b3208b38c9364cfc40c8aa5d7352" - integrity sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw== - dependencies: - browserslist "^4.21.4" - cssnano-utils "^3.1.0" - postcss-value-parser "^4.2.0" - -postcss-minify-selectors@^5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz#d4e7e6b46147b8117ea9325a915a801d5fe656c6" - integrity sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg== - dependencies: - postcss-selector-parser "^6.0.5" - -postcss-modules-extract-imports@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d" - integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw== - -postcss-modules-local-by-default@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz#b08eb4f083050708998ba2c6061b50c2870ca524" - integrity sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA== - dependencies: - icss-utils "^5.0.0" - postcss-selector-parser "^6.0.2" - postcss-value-parser "^4.1.0" - -postcss-modules-scope@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz#9ef3151456d3bbfa120ca44898dfca6f2fa01f06" - integrity sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg== - dependencies: - postcss-selector-parser "^6.0.4" - -postcss-modules-values@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz#d7c5e7e68c3bb3c9b27cbf48ca0bb3ffb4602c9c" - integrity sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ== - dependencies: - icss-utils "^5.0.0" - -postcss-normalize-charset@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz#9302de0b29094b52c259e9b2cf8dc0879879f0ed" - integrity sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg== - -postcss-normalize-display-values@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz#72abbae58081960e9edd7200fcf21ab8325c3da8" - integrity sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-positions@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz#ef97279d894087b59325b45c47f1e863daefbb92" - integrity sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-repeat-style@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz#e9eb96805204f4766df66fd09ed2e13545420fb2" - integrity sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-string@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz#411961169e07308c82c1f8c55f3e8a337757e228" - integrity sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-timing-functions@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz#d5614410f8f0b2388e9f240aa6011ba6f52dafbb" - integrity sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-unicode@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz#f67297fca3fea7f17e0d2caa40769afc487aa030" - integrity sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA== - dependencies: - browserslist "^4.21.4" - postcss-value-parser "^4.2.0" - -postcss-normalize-url@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz#ed9d88ca82e21abef99f743457d3729a042adcdc" - integrity sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew== - dependencies: - normalize-url "^6.0.1" - postcss-value-parser "^4.2.0" - -postcss-normalize-whitespace@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz#08a1a0d1ffa17a7cc6efe1e6c9da969cc4493cfa" - integrity sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-ordered-values@^5.1.3: - version "5.1.3" - resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz#b6fd2bd10f937b23d86bc829c69e7732ce76ea38" - integrity sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ== - dependencies: - cssnano-utils "^3.1.0" - postcss-value-parser "^4.2.0" - -postcss-reduce-initial@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz#798cd77b3e033eae7105c18c9d371d989e1382d6" - integrity sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg== - dependencies: - browserslist "^4.21.4" - caniuse-api "^3.0.0" - -postcss-reduce-transforms@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz#333b70e7758b802f3dd0ddfe98bb1ccfef96b6e9" - integrity sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-selector-parser@^6.0.13, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5, postcss-selector-parser@^6.0.9: - version "6.0.13" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz#d05d8d76b1e8e173257ef9d60b706a8e5e99bf1b" - integrity sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ== - dependencies: - cssesc "^3.0.0" - util-deprecate "^1.0.2" - -postcss-svgo@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-5.1.0.tgz#0a317400ced789f233a28826e77523f15857d80d" - integrity sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA== - dependencies: - postcss-value-parser "^4.2.0" - svgo "^2.7.0" - -postcss-unique-selectors@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz#a9f273d1eacd09e9aa6088f4b0507b18b1b541b6" - integrity sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA== - dependencies: - postcss-selector-parser "^6.0.5" - -postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" - integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== - -postcss@^7.0.36: - version "7.0.39" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.39.tgz#9624375d965630e2e1f2c02a935c82a59cb48309" - integrity sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA== - dependencies: - picocolors "^0.2.1" - source-map "^0.6.1" - -postcss@^8.2.6, postcss@^8.3.5, postcss@^8.4.14, postcss@^8.4.21: - version "8.4.28" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.28.tgz#c6cc681ed00109072816e1557f889ef51cf950a5" - integrity sha512-Z7V5j0cq8oEKyejIKfpD8b4eBy9cwW2JWPk0+fB1HOAMsfHbnAXLLS+PfVWlzMSLQaWttKDt607I0XHmpE67Vw== - dependencies: - nanoid "^3.3.6" - picocolors "^1.0.0" - source-map-js "^1.0.2" - -prelude-ls@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" - integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== - -"prettier@^1.18.2 || ^2.0.0": - version "2.8.8" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" - integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== - -pretty-error@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-4.0.0.tgz#90a703f46dd7234adb46d0f84823e9d1cb8f10d6" - integrity sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw== - dependencies: - lodash "^4.17.20" - renderkid "^3.0.0" - -process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - -progress-webpack-plugin@^1.0.12: - version "1.0.16" - resolved "https://registry.yarnpkg.com/progress-webpack-plugin/-/progress-webpack-plugin-1.0.16.tgz#278f5c1afd21af783aad72c5ec95241520230fe5" - integrity sha512-sdiHuuKOzELcBANHfrupYo+r99iPRyOnw15qX+rNlVUqXGfjXdH4IgxriKwG1kNJwVswKQHMdj1hYZMcb9jFaA== - dependencies: - chalk "^2.1.0" - figures "^2.0.0" - log-update "^2.3.0" - -proxy-addr@~2.0.7: - version "2.0.7" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" - integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== - dependencies: - forwarded "0.2.0" - ipaddr.js "1.9.1" - -proxy-from-env@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" - integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== - -pseudomap@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" - integrity sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ== - -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -punycode@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" - integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== - -qs@6.11.0: - version "6.11.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" - integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== - dependencies: - side-channel "^1.0.4" - -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -randombytes@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== - dependencies: - safe-buffer "^5.1.0" - -range-parser@^1.2.1, range-parser@~1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" - integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== - -raw-body@2.5.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" - integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== - dependencies: - bytes "3.1.2" - http-errors "2.0.0" - iconv-lite "0.4.24" - unpipe "1.0.0" - -read-pkg-up@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" - integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== - dependencies: - find-up "^4.1.0" - read-pkg "^5.2.0" - type-fest "^0.8.1" - -read-pkg@^5.1.1, read-pkg@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" - integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== - dependencies: - "@types/normalize-package-data" "^2.4.0" - normalize-package-data "^2.5.0" - parse-json "^5.0.0" - type-fest "^0.6.0" - -readable-stream@^2.0.1: - version "2.3.8" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" - integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readable-stream@^3.0.6, readable-stream@^3.4.0: - version "3.6.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" - integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -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" - -rechoir@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" - integrity sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw== - dependencies: - resolve "^1.1.6" - -regenerate-unicode-properties@^10.1.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz#7c3192cab6dd24e21cb4461e5ddd7dd24fa8374c" - integrity sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ== - dependencies: - regenerate "^1.4.2" - -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.14.0: - version "0.14.0" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45" - integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA== - -regenerator-transform@^0.15.2: - version "0.15.2" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.2.tgz#5bbae58b522098ebdf09bca2f83838929001c7a4" - integrity sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg== - dependencies: - "@babel/runtime" "^7.8.4" - -regexpu-core@^5.3.1: - version "5.3.2" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.3.2.tgz#11a2b06884f3527aec3e93dbbf4a3b958a95546b" - integrity sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ== - dependencies: - "@babel/regjsgen" "^0.8.0" - regenerate "^1.4.2" - regenerate-unicode-properties "^10.1.0" - regjsparser "^0.9.1" - unicode-match-property-ecmascript "^2.0.0" - unicode-match-property-value-ecmascript "^2.1.0" - -regjsparser@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709" - integrity sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ== - dependencies: - jsesc "~0.5.0" - -relateurl@^0.2.7: - version "0.2.7" - resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" - integrity sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog== - -renderkid@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-3.0.0.tgz#5fd823e4d6951d37358ecc9a58b1f06836b6268a" - integrity sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg== - dependencies: - css-select "^4.1.3" - dom-converter "^0.2.0" - htmlparser2 "^6.1.0" - lodash "^4.17.21" - strip-ansi "^6.0.1" - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== - -require-from-string@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" - integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== - -requires-port@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" - integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - -resolve@^1.1.6, resolve@^1.10.0, resolve@^1.14.2: - version "1.22.4" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.4.tgz#1dc40df46554cdaf8948a486a10f6ba1e2026c34" - integrity sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg== - dependencies: - is-core-module "^2.13.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -restore-cursor@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" - integrity sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q== - dependencies: - onetime "^2.0.0" - signal-exit "^3.0.2" - -restore-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" - integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== - dependencies: - onetime "^5.1.0" - signal-exit "^3.0.2" - -retry@^0.13.1: - version "0.13.1" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" - integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.1.0, safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -"safer-buffer@>= 2.1.2 < 3": - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -sass-loader@^10.0.0: - version "10.4.1" - resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-10.4.1.tgz#bea4e173ddf512c9d7f53e9ec686186146807cbf" - integrity sha512-aX/iJZTTpNUNx/OSYzo2KsjIUQHqvWsAhhUijFjAPdZTEhstjZI9zTNvkTTwsx+uNUJqUwOw5gacxQMx4hJxGQ== - dependencies: - klona "^2.0.4" - loader-utils "^2.0.0" - neo-async "^2.6.2" - schema-utils "^3.0.0" - semver "^7.3.2" - -sass@1.32.13: - version "1.32.13" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.32.13.tgz#8d29c849e625a415bce71609c7cf95e15f74ed00" - integrity sha512-dEgI9nShraqP7cXQH+lEXVf73WOPCse0QlFzSD8k+1TcOxCMwVXfQlr0jtoluZysQOyJGnfr21dLvYKDJq8HkA== - dependencies: - chokidar ">=3.0.0 <4.0.0" - -schema-utils@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" - integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g== - dependencies: - ajv "^6.1.0" - ajv-errors "^1.0.0" - ajv-keywords "^3.1.0" - -schema-utils@^2.6.5: - version "2.7.1" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" - integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== - dependencies: - "@types/json-schema" "^7.0.5" - ajv "^6.12.4" - ajv-keywords "^3.5.2" - -schema-utils@^3.0.0, schema-utils@^3.1.1, schema-utils@^3.2.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.3.0.tgz#f50a88877c3c01652a15b622ae9e9795df7a60fe" - integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg== - dependencies: - "@types/json-schema" "^7.0.8" - ajv "^6.12.5" - ajv-keywords "^3.5.2" - -schema-utils@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.2.0.tgz#70d7c93e153a273a805801882ebd3bff20d89c8b" - integrity sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw== - dependencies: - "@types/json-schema" "^7.0.9" - ajv "^8.9.0" - ajv-formats "^2.1.1" - ajv-keywords "^5.1.0" - -select-hose@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" - integrity sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg== - -selfsigned@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-2.1.1.tgz#18a7613d714c0cd3385c48af0075abf3f266af61" - integrity sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ== - dependencies: - node-forge "^1" - -"semver@2 || 3 || 4 || 5", semver@^5.5.0: - version "5.7.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" - integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== - -semver@^6.0.0, semver@^6.3.1: - version "6.3.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" - integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== - -semver@^7.1.2, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.6, semver@^7.3.8, semver@^7.5.4: - version "7.5.4" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" - integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== - dependencies: - lru-cache "^6.0.0" - -send@0.18.0: - version "0.18.0" - resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" - integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== - dependencies: - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "2.0.0" - mime "1.6.0" - ms "2.1.3" - on-finished "2.4.1" - range-parser "~1.2.1" - statuses "2.0.1" - -serialize-javascript@^6.0.0, serialize-javascript@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.1.tgz#b206efb27c3da0b0ab6b52f48d170b7996458e5c" - integrity sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w== - dependencies: - randombytes "^2.1.0" - -serve-index@^1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" - integrity sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw== - dependencies: - accepts "~1.3.4" - batch "0.6.1" - debug "2.6.9" - escape-html "~1.0.3" - http-errors "~1.6.2" - mime-types "~2.1.17" - parseurl "~1.3.2" - -serve-static@1.15.0: - version "1.15.0" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" - integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== - dependencies: - encodeurl "~1.0.2" - escape-html "~1.0.3" - parseurl "~1.3.3" - send "0.18.0" - -set-value@>=4.0.1: - version "4.1.0" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-4.1.0.tgz#aa433662d87081b75ad88a4743bd450f044e7d09" - integrity sha512-zTEg4HL0RwVrqcWs3ztF+x1vkxfm0lP+MQQFPiMJTKVceBwEV0A569Ou8l9IYQG8jOZdMVI1hGsc0tmeD2o/Lw== - dependencies: - is-plain-object "^2.0.4" - is-primitive "^3.0.1" - -setprototypeof@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" - integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== - -setprototypeof@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" - integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== - -shallow-clone@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" - integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== - dependencies: - kind-of "^6.0.2" - -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg== - dependencies: - shebang-regex "^1.0.0" - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -shell-quote@^1.7.3: - version "1.8.1" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.1.tgz#6dbf4db75515ad5bac63b4f1894c3a154c766680" - integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA== - -shelljs@^0.8.3: - version "0.8.5" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.5.tgz#de055408d8361bed66c669d2f000538ced8ee20c" - integrity sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow== - dependencies: - glob "^7.0.0" - interpret "^1.0.0" - rechoir "^0.6.2" - -side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== - dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" - -signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3: - version "3.0.7" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - -sirv@^1.0.7: - version "1.0.19" - resolved "https://registry.yarnpkg.com/sirv/-/sirv-1.0.19.tgz#1d73979b38c7fe91fcba49c85280daa9c2363b49" - integrity sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ== - dependencies: - "@polka/url" "^1.0.0-next.20" - mrmime "^1.0.0" - totalist "^1.0.0" - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -socket.io-client@^4.7.2: - version "4.7.2" - resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-4.7.2.tgz#f2f13f68058bd4e40f94f2a1541f275157ff2c08" - integrity sha512-vtA0uD4ibrYD793SOIAwlo8cj6haOeMHrGvwPxJsxH7CeIksqJ+3Zc06RvWTIFgiSqx4A3sOnTXpfAEE2Zyz6w== - dependencies: - "@socket.io/component-emitter" "~3.1.0" - debug "~4.3.2" - engine.io-client "~6.5.2" - socket.io-parser "~4.2.4" - -socket.io-parser@~4.2.4: - version "4.2.4" - resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-4.2.4.tgz#c806966cf7270601e47469ddeec30fbdfda44c83" - integrity sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew== - dependencies: - "@socket.io/component-emitter" "~3.1.0" - debug "~4.3.1" - -sockjs@^0.3.24: - version "0.3.24" - resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.24.tgz#c9bc8995f33a111bea0395ec30aa3206bdb5ccce" - integrity sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ== - dependencies: - faye-websocket "^0.11.3" - uuid "^8.3.2" - websocket-driver "^0.7.4" - -source-map-js@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" - integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== - -source-map-support@~0.5.20: - version "0.5.21" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" - integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -spdx-correct@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c" - integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" - integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== - -spdx-expression-parse@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" - integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.13" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz#7189a474c46f8d47c7b0da4b987bb45e908bd2d5" - integrity sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w== - -spdy-transport@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" - integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== - dependencies: - debug "^4.1.0" - detect-node "^2.0.4" - hpack.js "^2.1.6" - obuf "^1.1.2" - readable-stream "^3.0.6" - wbuf "^1.7.3" - -spdy@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b" - integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== - dependencies: - debug "^4.1.0" - handle-thing "^2.0.0" - http-deceiver "^1.2.7" - select-hose "^2.0.0" - spdy-transport "^3.0.0" - -ssri@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" - integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== - dependencies: - minipass "^3.1.1" - -stable@^0.1.8: - version "0.1.8" - resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" - integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== - -stackframe@^1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.3.4.tgz#b881a004c8c149a5e8efef37d51b16e412943310" - integrity sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw== - -statuses@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" - integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== - -"statuses@>= 1.4.0 < 2": - version "1.5.0" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" - integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== - -string-width@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" - -string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - integrity sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow== - dependencies: - ansi-regex "^3.0.0" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-eof@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" - integrity sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q== - -strip-final-newline@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" - integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== - -strip-indent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" - integrity sha512-RsSNPLpq6YUL7QYy44RnPVTn/lcVZtb48Uof3X5JLbF4zD/Gs7ZFDv2HWol+leoQN2mT86LAzSshGfkTlSOpsA== - -strip-json-comments@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - -stylehacks@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-5.1.1.tgz#7934a34eb59d7152149fa69d6e9e56f2fc34bcc9" - integrity sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw== - dependencies: - browserslist "^4.21.4" - postcss-selector-parser "^6.0.4" - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - 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" - -supports-color@^8.0.0: - version "8.1.1" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.0" - -supports-preserve-symlinks-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" - integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== - -svg-tags@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/svg-tags/-/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764" - integrity sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA== - -svgo@^2.7.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/svgo/-/svgo-2.8.0.tgz#4ff80cce6710dc2795f0c7c74101e6764cfccd24" - integrity sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg== - dependencies: - "@trysound/sax" "0.2.0" - commander "^7.2.0" - css-select "^4.1.3" - css-tree "^1.1.3" - csso "^4.2.0" - picocolors "^1.0.0" - stable "^0.1.8" - -tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" - integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== - -terser-webpack-plugin@^5.1.1, terser-webpack-plugin@^5.3.7: - version "5.3.9" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz#832536999c51b46d468067f9e37662a3b96adfe1" - integrity sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA== - dependencies: - "@jridgewell/trace-mapping" "^0.3.17" - jest-worker "^27.4.5" - schema-utils "^3.1.1" - serialize-javascript "^6.0.1" - terser "^5.16.8" - -terser@^5.10.0, terser@^5.16.8: - version "5.19.2" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.19.2.tgz#bdb8017a9a4a8de4663a7983f45c506534f9234e" - integrity sha512-qC5+dmecKJA4cpYxRa5aVkKehYsQKc+AHeKl0Oe62aYjBL8ZA33tTljktDHJSaxxMnbI5ZYw+o/S2DxxLu8OfA== - dependencies: - "@jridgewell/source-map" "^0.3.3" - acorn "^8.8.2" - commander "^2.20.0" - source-map-support "~0.5.20" - -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== - -thenify-all@^1.0.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" - integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== - dependencies: - thenify ">= 3.1.0 < 4" - -"thenify@>= 3.1.0 < 4": - version "3.3.1" - resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" - integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== - dependencies: - any-promise "^1.0.0" - -thread-loader@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/thread-loader/-/thread-loader-3.0.4.tgz#c392e4c0241fbc80430eb680e4886819b504a31b" - integrity sha512-ByaL2TPb+m6yArpqQUZvP+5S1mZtXsEP7nWKKlAUTm7fCml8kB5s1uI3+eHRP2bk5mVYfRSBI7FFf+tWEyLZwA== - dependencies: - json-parse-better-errors "^1.0.2" - loader-runner "^4.1.0" - loader-utils "^2.0.0" - neo-async "^2.6.2" - schema-utils "^3.0.0" - -thunky@^1.0.2: - version "1.1.0" - resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" - integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== - -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -toidentifier@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" - integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== - -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== - -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" - integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== - -tslib@^2.0.3: - version "2.6.2" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" - integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== - -type-check@^0.4.0, type-check@~0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" - integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== - dependencies: - prelude-ls "^1.2.1" - -type-fest@^0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" - integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== - -type-fest@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" - integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== - -type-fest@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" - integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== - -type-is@~1.6.18: - version "1.6.18" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" - integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== - dependencies: - media-typer "0.3.0" - mime-types "~2.1.24" - -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 "^2.0.0" - unicode-property-aliases-ecmascript "^2.0.0" - -unicode-match-property-value-ecmascript@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz#cb5fffdcd16a05124f5a4b0bf7c3770208acbbe0" - integrity sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA== - -unicode-property-aliases-ecmascript@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" - integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== - -universalify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" - integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== - -unpipe@1.0.0, unpipe@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== - -update-browserslist-db@^1.0.11: - version "1.0.11" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz#9a2a641ad2907ae7b3616506f4b977851db5b940" - integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA== - dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" - -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - -util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== - -utila@~0.4: - version "0.4.0" - resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" - integrity sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA== - -utils-merge@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== - -uuid@^8.3.2: - version "8.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - -validate-npm-package-license@^3.0.1: - version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" - integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - -vary@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== - -vue-cli-plugin-vuetify@~2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/vue-cli-plugin-vuetify/-/vue-cli-plugin-vuetify-2.1.1.tgz#9328cf730ba220a8ce564cc04cacec3c8605ca9d" - integrity sha512-JM4KpH+CNAmDWpxgzPkOfcXYSv6O3dFvnZdS7e6JmuOi8xpuTic5qzvaewOFnEa9BEAragyqiSPh5/L1PyJ1Rg== - dependencies: - null-loader "^3.0.0" - semver "^7.1.2" - shelljs "^0.8.3" - -vue-eslint-parser@^9.3.1: - version "9.3.1" - resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-9.3.1.tgz#429955e041ae5371df5f9e37ebc29ba046496182" - integrity sha512-Clr85iD2XFZ3lJ52/ppmUDG/spxQu6+MAeHXjjyI4I1NUYZ9xmenQp4N0oaHJhrA8OOxltCVxMRfANGa70vU0g== - dependencies: - debug "^4.3.4" - eslint-scope "^7.1.1" - eslint-visitor-keys "^3.3.0" - espree "^9.3.1" - esquery "^1.4.0" - lodash "^4.17.21" - semver "^7.3.6" - -vue-hot-reload-api@^2.3.0: - version "2.3.4" - resolved "https://registry.yarnpkg.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz#532955cc1eb208a3d990b3a9f9a70574657e08f2" - integrity sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog== - -vue-loader@^17.0.0: - version "17.2.2" - resolved "https://registry.yarnpkg.com/vue-loader/-/vue-loader-17.2.2.tgz#96148eb70c1365cc8c5bab4274923596811c79df" - integrity sha512-aqNvKJvnz2A/6VWeJZodAo8XLoAlVwBv+2Z6dama+LHsAF+P/xijQ+OfWrxIs0wcGSJduvdzvTuATzXbNKkpiw== - dependencies: - chalk "^4.1.0" - hash-sum "^2.0.0" - watchpack "^2.4.0" - -vue-router@^3.5.2: - version "3.6.5" - resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-3.6.5.tgz#95847d52b9a7e3f1361cb605c8e6441f202afad8" - integrity sha512-VYXZQLtjuvKxxcshuRAwjHnciqZVoXAjTjcqBTz4rKc8qih9g9pI3hbDjmqXaHdgL3v8pV6P8Z335XvHzESxLQ== - -vue-socket.io-extended@^4.0.6: - version "4.2.0" - resolved "https://registry.yarnpkg.com/vue-socket.io-extended/-/vue-socket.io-extended-4.2.0.tgz#e663553669fd3dcd9786b1add40b18580d36816f" - integrity sha512-3ZHy53W4CpzRdTZjWL7krq80FQlnK6IyOG0ur158pij1PXKyVBYDpjE0/3SluK7NeNTqefa/Y8RFCFy6BISG/g== - dependencies: - "@types/socket.io-client" "1.4.36" - -vue-style-loader@^4.1.0, vue-style-loader@^4.1.3: - version "4.1.3" - resolved "https://registry.yarnpkg.com/vue-style-loader/-/vue-style-loader-4.1.3.tgz#6d55863a51fa757ab24e89d9371465072aa7bc35" - integrity sha512-sFuh0xfbtpRlKfm39ss/ikqs9AbKCoXZBpHeVZ8Tx650o0k0q/YCM7FRvigtxpACezfq6af+a7JeqVTWvncqDg== - dependencies: - hash-sum "^1.0.2" - loader-utils "^1.0.2" - -vue-template-compiler@^2.7.14: - version "2.7.14" - resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.7.14.tgz#4545b7dfb88090744c1577ae5ac3f964e61634b1" - integrity sha512-zyA5Y3ArvVG0NacJDkkzJuPQDF8RFeRlzV2vLeSnhSpieO6LK2OVbdLPi5MPPs09Ii+gMO8nY4S3iKQxBxDmWQ== - dependencies: - de-indent "^1.0.2" - he "^1.2.0" - -vue-template-es2015-compiler@^1.9.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz#1ee3bc9a16ecbf5118be334bb15f9c46f82f5825" - integrity sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw== - -vue@^2.7.14: - version "2.7.14" - resolved "https://registry.yarnpkg.com/vue/-/vue-2.7.14.tgz#3743dcd248fd3a34d421ae456b864a0246bafb17" - integrity sha512-b2qkFyOM0kwqWFuQmgd4o+uHGU7T+2z3T+WQp8UBjADfEv2n4FEMffzBmCKNP0IGzOEEfYjvtcC62xaSKeQDrQ== - dependencies: - "@vue/compiler-sfc" "2.7.14" - csstype "^3.1.0" - -vuetify-loader@^1.7.0: - version "1.9.2" - resolved "https://registry.yarnpkg.com/vuetify-loader/-/vuetify-loader-1.9.2.tgz#adcadac71c6d9b24bde42a5b81dfda1871f73f81" - integrity sha512-8PP2w7aAs/rjA+Izec6qY7sHVb75MNrGQrDOTZJ5IEnvl+NiFhVpU2iWdRDZ3eMS842cWxSWStvkr+KJJKy+Iw== - dependencies: - acorn "^8.4.1" - acorn-walk "^8.2.0" - decache "^4.6.0" - file-loader "^6.2.0" - loader-utils "^2.0.0" - -vuetify@^2.6.13: - version "2.7.1" - resolved "https://registry.yarnpkg.com/vuetify/-/vuetify-2.7.1.tgz#49fc4d460ecfb51ed40d5befff779ceabf4f5a03" - integrity sha512-DVFmRsDtYrITw9yuGLwpFWngFYzEgk0KwloDCIV3+vhZw+NBFJOSzdbttbYmOwtqvQlhDxUyIRQolrRbSFAKlg== - -watchpack@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d" - integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== - dependencies: - glob-to-regexp "^0.4.1" - graceful-fs "^4.1.2" - -wbuf@^1.1.0, wbuf@^1.7.3: - version "1.7.3" - resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" - integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== - dependencies: - minimalistic-assert "^1.0.0" - -wcwidth@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" - integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== - dependencies: - defaults "^1.0.3" - -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" - integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== - -webpack-bundle-analyzer@^4.4.0: - version "4.9.0" - resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.9.0.tgz#fc093c4ab174fd3dcbd1c30b763f56d10141209d" - integrity sha512-+bXGmO1LyiNx0i9enBu3H8mv42sj/BJWhZNFwjz92tVnBa9J3JMGo2an2IXlEleoDOPn/Hofl5hr/xCpObUDtw== - dependencies: - "@discoveryjs/json-ext" "0.5.7" - 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-chain@^6.5.1: - version "6.5.1" - resolved "https://registry.yarnpkg.com/webpack-chain/-/webpack-chain-6.5.1.tgz#4f27284cbbb637e3c8fbdef43eef588d4d861206" - integrity sha512-7doO/SRtLu8q5WM0s7vPKPWX580qhi0/yBHkOxNkv50f6qB76Zy9o2wRTrrPULqYTvQlVHuvbA8v+G5ayuUDsA== - dependencies: - deepmerge "^1.5.2" - javascript-stringify "^2.0.1" - -webpack-dev-middleware@^5.3.1: - version "5.3.3" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz#efae67c2793908e7311f1d9b06f2a08dcc97e51f" - integrity sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA== - dependencies: - colorette "^2.0.10" - memfs "^3.4.3" - mime-types "^2.1.31" - range-parser "^1.2.1" - schema-utils "^4.0.0" - -webpack-dev-server@^4.7.3: - version "4.15.1" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.15.1.tgz#8944b29c12760b3a45bdaa70799b17cb91b03df7" - integrity sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA== - dependencies: - "@types/bonjour" "^3.5.9" - "@types/connect-history-api-fallback" "^1.3.5" - "@types/express" "^4.17.13" - "@types/serve-index" "^1.9.1" - "@types/serve-static" "^1.13.10" - "@types/sockjs" "^0.3.33" - "@types/ws" "^8.5.5" - ansi-html-community "^0.0.8" - bonjour-service "^1.0.11" - chokidar "^3.5.3" - colorette "^2.0.10" - compression "^1.7.4" - connect-history-api-fallback "^2.0.0" - default-gateway "^6.0.3" - express "^4.17.3" - graceful-fs "^4.2.6" - html-entities "^2.3.2" - http-proxy-middleware "^2.0.3" - ipaddr.js "^2.0.1" - launch-editor "^2.6.0" - open "^8.0.9" - p-retry "^4.5.0" - rimraf "^3.0.2" - schema-utils "^4.0.0" - selfsigned "^2.1.1" - serve-index "^1.9.1" - sockjs "^0.3.24" - spdy "^4.0.2" - webpack-dev-middleware "^5.3.1" - ws "^8.13.0" - -webpack-merge@^5.7.3: - version "5.9.0" - resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.9.0.tgz#dc160a1c4cf512ceca515cc231669e9ddb133826" - integrity sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg== - dependencies: - clone-deep "^4.0.1" - wildcard "^2.0.0" - -webpack-sources@^3.2.3: - version "3.2.3" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" - integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== - -webpack-virtual-modules@^0.4.2: - version "0.4.6" - resolved "https://registry.yarnpkg.com/webpack-virtual-modules/-/webpack-virtual-modules-0.4.6.tgz#3e4008230731f1db078d9cb6f68baf8571182b45" - integrity sha512-5tyDlKLqPfMqjT3Q9TAqf2YqjwmnUleZwzJi1A5qXnlBCdj2AtOJ6wAWdglTIDOPgOiOrXeBeFcsQ8+aGQ6QbA== - -webpack@^5.54.0: - version "5.88.2" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.88.2.tgz#f62b4b842f1c6ff580f3fcb2ed4f0b579f4c210e" - integrity sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ== - dependencies: - "@types/eslint-scope" "^3.7.3" - "@types/estree" "^1.0.0" - "@webassemblyjs/ast" "^1.11.5" - "@webassemblyjs/wasm-edit" "^1.11.5" - "@webassemblyjs/wasm-parser" "^1.11.5" - acorn "^8.7.1" - acorn-import-assertions "^1.9.0" - browserslist "^4.14.5" - chrome-trace-event "^1.0.2" - enhanced-resolve "^5.15.0" - es-module-lexer "^1.2.1" - eslint-scope "5.1.1" - events "^3.2.0" - glob-to-regexp "^0.4.1" - graceful-fs "^4.2.9" - json-parse-even-better-errors "^2.3.1" - loader-runner "^4.2.0" - mime-types "^2.1.27" - neo-async "^2.6.2" - schema-utils "^3.2.0" - tapable "^2.1.1" - terser-webpack-plugin "^5.3.7" - watchpack "^2.4.0" - webpack-sources "^3.2.3" - -websocket-driver@>=0.5.1, websocket-driver@^0.7.4: - version "0.7.4" - resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" - integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== - dependencies: - http-parser-js ">=0.5.1" - safe-buffer ">=5.1.0" - websocket-extensions ">=0.1.1" - -websocket-extensions@>=0.1.1: - version "0.1.4" - resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" - integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== - -whatwg-fetch@^3.6.2: - version "3.6.17" - resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.17.tgz#009bbbfc122b227b74ba1ff31536b3a1a0e0e212" - integrity sha512-c4ghIvG6th0eudYwKZY5keb81wtFz9/WeAHAoy8+r18kcWlitUIrmGFQ2rWEl4UCKUilD3zCLHOIPheHx5ypRQ== - -whatwg-url@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" - integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== - dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" - -which@^1.2.9: - version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - dependencies: - isexe "^2.0.0" - -which@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -wildcard@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.1.tgz#5ab10d02487198954836b6349f74fff961e10f67" - integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ== - -wrap-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-3.0.1.tgz#288a04d87eda5c286e060dfe8f135ce8d007f8ba" - integrity sha512-iXR3tDXpbnTpzjKSylUJRkLuOrEC7hwEB221cgn6wtF8wpmz28puFXAEfPT5zrjM3wahygB//VuWEr1vTkDcNQ== - dependencies: - string-width "^2.1.1" - strip-ansi "^4.0.0" - -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== - -ws@^7.3.1: - version "7.5.9" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" - integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== - -ws@^8.13.0: - version "8.13.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0" - integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== - -ws@~8.11.0: - version "8.11.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.11.0.tgz#6a0d36b8edfd9f96d8b25683db2f8d7de6e8e143" - integrity sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg== - -xml-name-validator@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-4.0.0.tgz#79a006e2e63149a8600f15430f0a4725d1524835" - integrity sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw== - -xmlhttprequest-ssl@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz#91360c86b914e67f44dce769180027c0da618c67" - integrity sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A== - -y18n@^5.0.5: - version "5.0.8" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" - integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== - -yallist@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" - integrity sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A== - -yallist@^3.0.2: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yaml@^1.10.0, yaml@^1.10.2: - version "1.10.2" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" - integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== - -yargs-parser@^20.2.2: - version "20.2.9" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" - integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== - -yargs@^16.0.0: - version "16.2.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" - integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== - dependencies: - cliui "^7.0.2" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.0" - y18n "^5.0.5" - yargs-parser "^20.2.2" - -yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== - -yorkie@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/yorkie/-/yorkie-2.0.0.tgz#92411912d435214e12c51c2ae1093e54b6bb83d9" - integrity sha512-jcKpkthap6x63MB4TxwCyuIGkV0oYP/YRyuQU5UO0Yz/E/ZAu+653/uov+phdmO54n6BcvFRyyt0RRrWdN2mpw== - dependencies: - execa "^0.8.0" - is-ci "^1.0.10" - normalize-path "^1.0.0" - strip-indent "^2.0.0" diff --git a/server/src/index.ts b/server/src/index.ts index 24f150f18..886f320a0 100644 --- a/server/src/index.ts +++ b/server/src/index.ts @@ -20,7 +20,7 @@ configure(app, server); const maxAge = process.env.NODE_ENV === 'development' ? '1s' : '1h'; const publicDir = path.join(__dirname, 'public'); -const publicPath = resolve(__dirname, publicDir); // TODO change to client-new an fix path for docker image +const publicPath = resolve(__dirname, publicDir); const staticConf = { maxAge: maxAge, etag: true }; app.use(history()); From 257e79dddaddd0a5cae77c75226f19cca7eb9a59 Mon Sep 17 00:00:00 2001 From: Gianni Carafa Date: Tue, 9 Jan 2024 21:49:56 +0100 Subject: [PATCH 45/95] rename new client --- Dockerfile | 18 +----------------- {client-new => client}/.browserslistrc | 0 {client-new => client}/.editorconfig | 0 {client-new => client}/.eslintrc.js | 0 {client-new => client}/.gitignore | 0 {client-new => client}/README.md | 0 {client-new => client}/index.html | 0 {client-new => client}/package.json | 0 {client-new => client}/public/favicon.ico | Bin .../public/img/addons/CouchDB.png | Bin .../public/img/addons/Elasticsearch.png | Bin .../public/img/addons/Haraka.png | Bin .../public/img/addons/HarakaTxt.png | Bin .../public/img/addons/Kafka.png | Bin .../public/img/addons/MariaDB.png | Bin .../public/img/addons/Mariadb_full.png | Bin .../public/img/addons/Memcached.png | Bin .../public/img/addons/Minio.png | Bin .../public/img/addons/MongoDB.png | Bin .../public/img/addons/MongoDBCluster.png | Bin .../public/img/addons/Mongodb_full.png | Bin .../public/img/addons/MySQL.png | Bin .../img/addons/PerconaServerMongoDB.png | Bin .../public/img/addons/PostgresCluster.png | Bin .../public/img/addons/RabbitMQ.png | Bin .../public/img/addons/RabbitMQ.svg | 0 .../public/img/addons/Redis.png | Bin .../public/img/addons/RedisCluster.png | Bin .../public/img/addons/cloudflare.svg | 0 .../public/img/addons/postgresql.png | Bin .../public/img/addons/redis-cluster.png | Bin {client-new => client}/public/img/empty.svg | 0 .../public/img/icons/connected.svg | 0 .../public/img/icons/disconnected.svg | 0 .../public/img/icons/discord.svg | 0 .../public/img/icons/gitea.svg | 0 .../public/img/icons/gogs.svg | 0 .../public/img/icons/onedev.svg | 0 {client-new => client}/public/robots.txt | 0 {client-new => client}/src/App.vue | 0 {client-new => client}/src/assets/logo.png | Bin {client-new => client}/src/assets/logo.svg | 0 .../src/components/addons/index.vue | 0 .../src/components/appfooter.vue | 0 .../src/components/apps/addons.vue | 0 .../src/components/apps/detail.vue | 0 .../src/components/apps/events.vue | 0 .../src/components/apps/form.vue | 0 .../src/components/apps/logs.vue | 0 .../src/components/apps/logstab.vue | 0 .../src/components/apps/vulnerabilities.vue | 0 .../src/components/breadcrumbs.vue | 0 .../src/components/events/view.vue | 0 .../src/components/loginprompt.vue | 0 .../src/components/pipelines/appcard.vue | 0 .../src/components/pipelines/detail.vue | 0 .../src/components/pipelines/form.vue | 0 .../src/components/pipelines/list.vue | 0 .../src/components/pipelines/prcard.vue | 0 .../src/components/settings/form.vue | 0 .../src/components/templates/index.vue | 0 .../src/layouts/default/AppBar.vue | 0 .../src/layouts/default/Default.vue | 0 .../src/layouts/default/NavDrawer.vue | 0 .../src/layouts/default/Popup.vue | 0 .../src/layouts/default/View.vue | 0 .../src/layouts/login/Login.vue | 0 .../src/layouts/login/View.vue | 0 {client-new => client}/src/main.ts | 0 {client-new => client}/src/plugins/index.ts | 0 {client-new => client}/src/plugins/pinia.ts | 0 {client-new => client}/src/plugins/vuetify.ts | 0 {client-new => client}/src/router/index.ts | 0 {client-new => client}/src/socket.io.ts | 0 {client-new => client}/src/stores/kubero.ts | 0 .../src/styles/settings.scss | 0 {client-new => client}/src/views/Addons.vue | 0 {client-new => client}/src/views/Events.vue | 0 {client-new => client}/src/views/Login.vue | 0 {client-new => client}/src/views/Pipeline.vue | 0 {client-new => client}/src/views/Settings.vue | 0 .../src/views/Templates.vue | 0 {client-new => client}/src/vite-env.d.ts | 0 {client-new => client}/tsconfig.json | 0 {client-new => client}/tsconfig.node.json | 0 {client-new => client}/vite.config.ts | 0 {client-new => client}/yarn.lock | 0 87 files changed, 1 insertion(+), 17 deletions(-) rename {client-new => client}/.browserslistrc (100%) rename {client-new => client}/.editorconfig (100%) rename {client-new => client}/.eslintrc.js (100%) rename {client-new => client}/.gitignore (100%) rename {client-new => client}/README.md (100%) rename {client-new => client}/index.html (100%) rename {client-new => client}/package.json (100%) rename {client-new => client}/public/favicon.ico (100%) rename {client-new => client}/public/img/addons/CouchDB.png (100%) rename {client-new => client}/public/img/addons/Elasticsearch.png (100%) rename {client-new => client}/public/img/addons/Haraka.png (100%) rename {client-new => client}/public/img/addons/HarakaTxt.png (100%) rename {client-new => client}/public/img/addons/Kafka.png (100%) rename {client-new => client}/public/img/addons/MariaDB.png (100%) rename {client-new => client}/public/img/addons/Mariadb_full.png (100%) rename {client-new => client}/public/img/addons/Memcached.png (100%) rename {client-new => client}/public/img/addons/Minio.png (100%) rename {client-new => client}/public/img/addons/MongoDB.png (100%) rename {client-new => client}/public/img/addons/MongoDBCluster.png (100%) rename {client-new => client}/public/img/addons/Mongodb_full.png (100%) rename {client-new => client}/public/img/addons/MySQL.png (100%) rename {client-new => client}/public/img/addons/PerconaServerMongoDB.png (100%) rename {client-new => client}/public/img/addons/PostgresCluster.png (100%) rename {client-new => client}/public/img/addons/RabbitMQ.png (100%) rename {client-new => client}/public/img/addons/RabbitMQ.svg (100%) rename {client-new => client}/public/img/addons/Redis.png (100%) rename {client-new => client}/public/img/addons/RedisCluster.png (100%) rename {client-new => client}/public/img/addons/cloudflare.svg (100%) rename {client-new => client}/public/img/addons/postgresql.png (100%) rename {client-new => client}/public/img/addons/redis-cluster.png (100%) rename {client-new => client}/public/img/empty.svg (100%) rename {client-new => client}/public/img/icons/connected.svg (100%) rename {client-new => client}/public/img/icons/disconnected.svg (100%) rename {client-new => client}/public/img/icons/discord.svg (100%) rename {client-new => client}/public/img/icons/gitea.svg (100%) rename {client-new => client}/public/img/icons/gogs.svg (100%) rename {client-new => client}/public/img/icons/onedev.svg (100%) rename {client-new => client}/public/robots.txt (100%) rename {client-new => client}/src/App.vue (100%) rename {client-new => client}/src/assets/logo.png (100%) rename {client-new => client}/src/assets/logo.svg (100%) rename {client-new => client}/src/components/addons/index.vue (100%) rename {client-new => client}/src/components/appfooter.vue (100%) rename {client-new => client}/src/components/apps/addons.vue (100%) rename {client-new => client}/src/components/apps/detail.vue (100%) rename {client-new => client}/src/components/apps/events.vue (100%) rename {client-new => client}/src/components/apps/form.vue (100%) rename {client-new => client}/src/components/apps/logs.vue (100%) rename {client-new => client}/src/components/apps/logstab.vue (100%) rename {client-new => client}/src/components/apps/vulnerabilities.vue (100%) rename {client-new => client}/src/components/breadcrumbs.vue (100%) rename {client-new => client}/src/components/events/view.vue (100%) rename {client-new => client}/src/components/loginprompt.vue (100%) rename {client-new => client}/src/components/pipelines/appcard.vue (100%) rename {client-new => client}/src/components/pipelines/detail.vue (100%) rename {client-new => client}/src/components/pipelines/form.vue (100%) rename {client-new => client}/src/components/pipelines/list.vue (100%) rename {client-new => client}/src/components/pipelines/prcard.vue (100%) rename {client-new => client}/src/components/settings/form.vue (100%) rename {client-new => client}/src/components/templates/index.vue (100%) rename {client-new => client}/src/layouts/default/AppBar.vue (100%) rename {client-new => client}/src/layouts/default/Default.vue (100%) rename {client-new => client}/src/layouts/default/NavDrawer.vue (100%) rename {client-new => client}/src/layouts/default/Popup.vue (100%) rename {client-new => client}/src/layouts/default/View.vue (100%) rename {client-new => client}/src/layouts/login/Login.vue (100%) rename {client-new => client}/src/layouts/login/View.vue (100%) rename {client-new => client}/src/main.ts (100%) rename {client-new => client}/src/plugins/index.ts (100%) rename {client-new => client}/src/plugins/pinia.ts (100%) rename {client-new => client}/src/plugins/vuetify.ts (100%) rename {client-new => client}/src/router/index.ts (100%) rename {client-new => client}/src/socket.io.ts (100%) rename {client-new => client}/src/stores/kubero.ts (100%) rename {client-new => client}/src/styles/settings.scss (100%) rename {client-new => client}/src/views/Addons.vue (100%) rename {client-new => client}/src/views/Events.vue (100%) rename {client-new => client}/src/views/Login.vue (100%) rename {client-new => client}/src/views/Pipeline.vue (100%) rename {client-new => client}/src/views/Settings.vue (100%) rename {client-new => client}/src/views/Templates.vue (100%) rename {client-new => client}/src/vite-env.d.ts (100%) rename {client-new => client}/tsconfig.json (100%) rename {client-new => client}/tsconfig.node.json (100%) rename {client-new => client}/vite.config.ts (100%) rename {client-new => client}/yarn.lock (100%) diff --git a/Dockerfile b/Dockerfile index 6537bc8ac..cfa1d67c9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -11,7 +11,7 @@ RUN cd server && \ yarn swaggergen && \ echo $VERSION > VERSION && \ cd .. -COPY client-new ./client +COPY client ./client RUN cd client && \ yarn install && \ yarn build && \ @@ -27,25 +27,9 @@ COPY --from=build /build/server/package.json /app/server/package.json COPY --from=build /build/server/node_modules /app/server/node_modules COPY --from=build /build/server/swagger.json /app/swagger.json -#COPY --from=build /build/client/dist /client-new/dist -#COPY --from=build /build/client/node_modules /client-new/node_modules RUN echo $VERSION > VERSION -#RUN cd /app/server && \ -# yarn install --production && \ -# cd .. -#RUN cd /app/client && \ -# yarn install --production && \ -# cd .. - - -#COPY server/dist ./server -#COPY server/node_modules ./server/node_modules -#COPY server/swagger.json ./swagger.json -#COPY server/package.json ./server/package.json -#COPY client-new/dist ./client - WORKDIR /app/server CMD [ "node", "index.js" ] \ No newline at end of file diff --git a/client-new/.browserslistrc b/client/.browserslistrc similarity index 100% rename from client-new/.browserslistrc rename to client/.browserslistrc diff --git a/client-new/.editorconfig b/client/.editorconfig similarity index 100% rename from client-new/.editorconfig rename to client/.editorconfig diff --git a/client-new/.eslintrc.js b/client/.eslintrc.js similarity index 100% rename from client-new/.eslintrc.js rename to client/.eslintrc.js diff --git a/client-new/.gitignore b/client/.gitignore similarity index 100% rename from client-new/.gitignore rename to client/.gitignore diff --git a/client-new/README.md b/client/README.md similarity index 100% rename from client-new/README.md rename to client/README.md diff --git a/client-new/index.html b/client/index.html similarity index 100% rename from client-new/index.html rename to client/index.html diff --git a/client-new/package.json b/client/package.json similarity index 100% rename from client-new/package.json rename to client/package.json diff --git a/client-new/public/favicon.ico b/client/public/favicon.ico similarity index 100% rename from client-new/public/favicon.ico rename to client/public/favicon.ico diff --git a/client-new/public/img/addons/CouchDB.png b/client/public/img/addons/CouchDB.png similarity index 100% rename from client-new/public/img/addons/CouchDB.png rename to client/public/img/addons/CouchDB.png diff --git a/client-new/public/img/addons/Elasticsearch.png b/client/public/img/addons/Elasticsearch.png similarity index 100% rename from client-new/public/img/addons/Elasticsearch.png rename to client/public/img/addons/Elasticsearch.png diff --git a/client-new/public/img/addons/Haraka.png b/client/public/img/addons/Haraka.png similarity index 100% rename from client-new/public/img/addons/Haraka.png rename to client/public/img/addons/Haraka.png diff --git a/client-new/public/img/addons/HarakaTxt.png b/client/public/img/addons/HarakaTxt.png similarity index 100% rename from client-new/public/img/addons/HarakaTxt.png rename to client/public/img/addons/HarakaTxt.png diff --git a/client-new/public/img/addons/Kafka.png b/client/public/img/addons/Kafka.png similarity index 100% rename from client-new/public/img/addons/Kafka.png rename to client/public/img/addons/Kafka.png diff --git a/client-new/public/img/addons/MariaDB.png b/client/public/img/addons/MariaDB.png similarity index 100% rename from client-new/public/img/addons/MariaDB.png rename to client/public/img/addons/MariaDB.png diff --git a/client-new/public/img/addons/Mariadb_full.png b/client/public/img/addons/Mariadb_full.png similarity index 100% rename from client-new/public/img/addons/Mariadb_full.png rename to client/public/img/addons/Mariadb_full.png diff --git a/client-new/public/img/addons/Memcached.png b/client/public/img/addons/Memcached.png similarity index 100% rename from client-new/public/img/addons/Memcached.png rename to client/public/img/addons/Memcached.png diff --git a/client-new/public/img/addons/Minio.png b/client/public/img/addons/Minio.png similarity index 100% rename from client-new/public/img/addons/Minio.png rename to client/public/img/addons/Minio.png diff --git a/client-new/public/img/addons/MongoDB.png b/client/public/img/addons/MongoDB.png similarity index 100% rename from client-new/public/img/addons/MongoDB.png rename to client/public/img/addons/MongoDB.png diff --git a/client-new/public/img/addons/MongoDBCluster.png b/client/public/img/addons/MongoDBCluster.png similarity index 100% rename from client-new/public/img/addons/MongoDBCluster.png rename to client/public/img/addons/MongoDBCluster.png diff --git a/client-new/public/img/addons/Mongodb_full.png b/client/public/img/addons/Mongodb_full.png similarity index 100% rename from client-new/public/img/addons/Mongodb_full.png rename to client/public/img/addons/Mongodb_full.png diff --git a/client-new/public/img/addons/MySQL.png b/client/public/img/addons/MySQL.png similarity index 100% rename from client-new/public/img/addons/MySQL.png rename to client/public/img/addons/MySQL.png diff --git a/client-new/public/img/addons/PerconaServerMongoDB.png b/client/public/img/addons/PerconaServerMongoDB.png similarity index 100% rename from client-new/public/img/addons/PerconaServerMongoDB.png rename to client/public/img/addons/PerconaServerMongoDB.png diff --git a/client-new/public/img/addons/PostgresCluster.png b/client/public/img/addons/PostgresCluster.png similarity index 100% rename from client-new/public/img/addons/PostgresCluster.png rename to client/public/img/addons/PostgresCluster.png diff --git a/client-new/public/img/addons/RabbitMQ.png b/client/public/img/addons/RabbitMQ.png similarity index 100% rename from client-new/public/img/addons/RabbitMQ.png rename to client/public/img/addons/RabbitMQ.png diff --git a/client-new/public/img/addons/RabbitMQ.svg b/client/public/img/addons/RabbitMQ.svg similarity index 100% rename from client-new/public/img/addons/RabbitMQ.svg rename to client/public/img/addons/RabbitMQ.svg diff --git a/client-new/public/img/addons/Redis.png b/client/public/img/addons/Redis.png similarity index 100% rename from client-new/public/img/addons/Redis.png rename to client/public/img/addons/Redis.png diff --git a/client-new/public/img/addons/RedisCluster.png b/client/public/img/addons/RedisCluster.png similarity index 100% rename from client-new/public/img/addons/RedisCluster.png rename to client/public/img/addons/RedisCluster.png diff --git a/client-new/public/img/addons/cloudflare.svg b/client/public/img/addons/cloudflare.svg similarity index 100% rename from client-new/public/img/addons/cloudflare.svg rename to client/public/img/addons/cloudflare.svg diff --git a/client-new/public/img/addons/postgresql.png b/client/public/img/addons/postgresql.png similarity index 100% rename from client-new/public/img/addons/postgresql.png rename to client/public/img/addons/postgresql.png diff --git a/client-new/public/img/addons/redis-cluster.png b/client/public/img/addons/redis-cluster.png similarity index 100% rename from client-new/public/img/addons/redis-cluster.png rename to client/public/img/addons/redis-cluster.png diff --git a/client-new/public/img/empty.svg b/client/public/img/empty.svg similarity index 100% rename from client-new/public/img/empty.svg rename to client/public/img/empty.svg diff --git a/client-new/public/img/icons/connected.svg b/client/public/img/icons/connected.svg similarity index 100% rename from client-new/public/img/icons/connected.svg rename to client/public/img/icons/connected.svg diff --git a/client-new/public/img/icons/disconnected.svg b/client/public/img/icons/disconnected.svg similarity index 100% rename from client-new/public/img/icons/disconnected.svg rename to client/public/img/icons/disconnected.svg diff --git a/client-new/public/img/icons/discord.svg b/client/public/img/icons/discord.svg similarity index 100% rename from client-new/public/img/icons/discord.svg rename to client/public/img/icons/discord.svg diff --git a/client-new/public/img/icons/gitea.svg b/client/public/img/icons/gitea.svg similarity index 100% rename from client-new/public/img/icons/gitea.svg rename to client/public/img/icons/gitea.svg diff --git a/client-new/public/img/icons/gogs.svg b/client/public/img/icons/gogs.svg similarity index 100% rename from client-new/public/img/icons/gogs.svg rename to client/public/img/icons/gogs.svg diff --git a/client-new/public/img/icons/onedev.svg b/client/public/img/icons/onedev.svg similarity index 100% rename from client-new/public/img/icons/onedev.svg rename to client/public/img/icons/onedev.svg diff --git a/client-new/public/robots.txt b/client/public/robots.txt similarity index 100% rename from client-new/public/robots.txt rename to client/public/robots.txt diff --git a/client-new/src/App.vue b/client/src/App.vue similarity index 100% rename from client-new/src/App.vue rename to client/src/App.vue diff --git a/client-new/src/assets/logo.png b/client/src/assets/logo.png similarity index 100% rename from client-new/src/assets/logo.png rename to client/src/assets/logo.png diff --git a/client-new/src/assets/logo.svg b/client/src/assets/logo.svg similarity index 100% rename from client-new/src/assets/logo.svg rename to client/src/assets/logo.svg diff --git a/client-new/src/components/addons/index.vue b/client/src/components/addons/index.vue similarity index 100% rename from client-new/src/components/addons/index.vue rename to client/src/components/addons/index.vue diff --git a/client-new/src/components/appfooter.vue b/client/src/components/appfooter.vue similarity index 100% rename from client-new/src/components/appfooter.vue rename to client/src/components/appfooter.vue diff --git a/client-new/src/components/apps/addons.vue b/client/src/components/apps/addons.vue similarity index 100% rename from client-new/src/components/apps/addons.vue rename to client/src/components/apps/addons.vue diff --git a/client-new/src/components/apps/detail.vue b/client/src/components/apps/detail.vue similarity index 100% rename from client-new/src/components/apps/detail.vue rename to client/src/components/apps/detail.vue diff --git a/client-new/src/components/apps/events.vue b/client/src/components/apps/events.vue similarity index 100% rename from client-new/src/components/apps/events.vue rename to client/src/components/apps/events.vue diff --git a/client-new/src/components/apps/form.vue b/client/src/components/apps/form.vue similarity index 100% rename from client-new/src/components/apps/form.vue rename to client/src/components/apps/form.vue diff --git a/client-new/src/components/apps/logs.vue b/client/src/components/apps/logs.vue similarity index 100% rename from client-new/src/components/apps/logs.vue rename to client/src/components/apps/logs.vue diff --git a/client-new/src/components/apps/logstab.vue b/client/src/components/apps/logstab.vue similarity index 100% rename from client-new/src/components/apps/logstab.vue rename to client/src/components/apps/logstab.vue diff --git a/client-new/src/components/apps/vulnerabilities.vue b/client/src/components/apps/vulnerabilities.vue similarity index 100% rename from client-new/src/components/apps/vulnerabilities.vue rename to client/src/components/apps/vulnerabilities.vue diff --git a/client-new/src/components/breadcrumbs.vue b/client/src/components/breadcrumbs.vue similarity index 100% rename from client-new/src/components/breadcrumbs.vue rename to client/src/components/breadcrumbs.vue diff --git a/client-new/src/components/events/view.vue b/client/src/components/events/view.vue similarity index 100% rename from client-new/src/components/events/view.vue rename to client/src/components/events/view.vue diff --git a/client-new/src/components/loginprompt.vue b/client/src/components/loginprompt.vue similarity index 100% rename from client-new/src/components/loginprompt.vue rename to client/src/components/loginprompt.vue diff --git a/client-new/src/components/pipelines/appcard.vue b/client/src/components/pipelines/appcard.vue similarity index 100% rename from client-new/src/components/pipelines/appcard.vue rename to client/src/components/pipelines/appcard.vue diff --git a/client-new/src/components/pipelines/detail.vue b/client/src/components/pipelines/detail.vue similarity index 100% rename from client-new/src/components/pipelines/detail.vue rename to client/src/components/pipelines/detail.vue diff --git a/client-new/src/components/pipelines/form.vue b/client/src/components/pipelines/form.vue similarity index 100% rename from client-new/src/components/pipelines/form.vue rename to client/src/components/pipelines/form.vue diff --git a/client-new/src/components/pipelines/list.vue b/client/src/components/pipelines/list.vue similarity index 100% rename from client-new/src/components/pipelines/list.vue rename to client/src/components/pipelines/list.vue diff --git a/client-new/src/components/pipelines/prcard.vue b/client/src/components/pipelines/prcard.vue similarity index 100% rename from client-new/src/components/pipelines/prcard.vue rename to client/src/components/pipelines/prcard.vue diff --git a/client-new/src/components/settings/form.vue b/client/src/components/settings/form.vue similarity index 100% rename from client-new/src/components/settings/form.vue rename to client/src/components/settings/form.vue diff --git a/client-new/src/components/templates/index.vue b/client/src/components/templates/index.vue similarity index 100% rename from client-new/src/components/templates/index.vue rename to client/src/components/templates/index.vue diff --git a/client-new/src/layouts/default/AppBar.vue b/client/src/layouts/default/AppBar.vue similarity index 100% rename from client-new/src/layouts/default/AppBar.vue rename to client/src/layouts/default/AppBar.vue diff --git a/client-new/src/layouts/default/Default.vue b/client/src/layouts/default/Default.vue similarity index 100% rename from client-new/src/layouts/default/Default.vue rename to client/src/layouts/default/Default.vue diff --git a/client-new/src/layouts/default/NavDrawer.vue b/client/src/layouts/default/NavDrawer.vue similarity index 100% rename from client-new/src/layouts/default/NavDrawer.vue rename to client/src/layouts/default/NavDrawer.vue diff --git a/client-new/src/layouts/default/Popup.vue b/client/src/layouts/default/Popup.vue similarity index 100% rename from client-new/src/layouts/default/Popup.vue rename to client/src/layouts/default/Popup.vue diff --git a/client-new/src/layouts/default/View.vue b/client/src/layouts/default/View.vue similarity index 100% rename from client-new/src/layouts/default/View.vue rename to client/src/layouts/default/View.vue diff --git a/client-new/src/layouts/login/Login.vue b/client/src/layouts/login/Login.vue similarity index 100% rename from client-new/src/layouts/login/Login.vue rename to client/src/layouts/login/Login.vue diff --git a/client-new/src/layouts/login/View.vue b/client/src/layouts/login/View.vue similarity index 100% rename from client-new/src/layouts/login/View.vue rename to client/src/layouts/login/View.vue diff --git a/client-new/src/main.ts b/client/src/main.ts similarity index 100% rename from client-new/src/main.ts rename to client/src/main.ts diff --git a/client-new/src/plugins/index.ts b/client/src/plugins/index.ts similarity index 100% rename from client-new/src/plugins/index.ts rename to client/src/plugins/index.ts diff --git a/client-new/src/plugins/pinia.ts b/client/src/plugins/pinia.ts similarity index 100% rename from client-new/src/plugins/pinia.ts rename to client/src/plugins/pinia.ts diff --git a/client-new/src/plugins/vuetify.ts b/client/src/plugins/vuetify.ts similarity index 100% rename from client-new/src/plugins/vuetify.ts rename to client/src/plugins/vuetify.ts diff --git a/client-new/src/router/index.ts b/client/src/router/index.ts similarity index 100% rename from client-new/src/router/index.ts rename to client/src/router/index.ts diff --git a/client-new/src/socket.io.ts b/client/src/socket.io.ts similarity index 100% rename from client-new/src/socket.io.ts rename to client/src/socket.io.ts diff --git a/client-new/src/stores/kubero.ts b/client/src/stores/kubero.ts similarity index 100% rename from client-new/src/stores/kubero.ts rename to client/src/stores/kubero.ts diff --git a/client-new/src/styles/settings.scss b/client/src/styles/settings.scss similarity index 100% rename from client-new/src/styles/settings.scss rename to client/src/styles/settings.scss diff --git a/client-new/src/views/Addons.vue b/client/src/views/Addons.vue similarity index 100% rename from client-new/src/views/Addons.vue rename to client/src/views/Addons.vue diff --git a/client-new/src/views/Events.vue b/client/src/views/Events.vue similarity index 100% rename from client-new/src/views/Events.vue rename to client/src/views/Events.vue diff --git a/client-new/src/views/Login.vue b/client/src/views/Login.vue similarity index 100% rename from client-new/src/views/Login.vue rename to client/src/views/Login.vue diff --git a/client-new/src/views/Pipeline.vue b/client/src/views/Pipeline.vue similarity index 100% rename from client-new/src/views/Pipeline.vue rename to client/src/views/Pipeline.vue diff --git a/client-new/src/views/Settings.vue b/client/src/views/Settings.vue similarity index 100% rename from client-new/src/views/Settings.vue rename to client/src/views/Settings.vue diff --git a/client-new/src/views/Templates.vue b/client/src/views/Templates.vue similarity index 100% rename from client-new/src/views/Templates.vue rename to client/src/views/Templates.vue diff --git a/client-new/src/vite-env.d.ts b/client/src/vite-env.d.ts similarity index 100% rename from client-new/src/vite-env.d.ts rename to client/src/vite-env.d.ts diff --git a/client-new/tsconfig.json b/client/tsconfig.json similarity index 100% rename from client-new/tsconfig.json rename to client/tsconfig.json diff --git a/client-new/tsconfig.node.json b/client/tsconfig.node.json similarity index 100% rename from client-new/tsconfig.node.json rename to client/tsconfig.node.json diff --git a/client-new/vite.config.ts b/client/vite.config.ts similarity index 100% rename from client-new/vite.config.ts rename to client/vite.config.ts diff --git a/client-new/yarn.lock b/client/yarn.lock similarity index 100% rename from client-new/yarn.lock rename to client/yarn.lock From f89509fe946879019c09b8145cfab4f8f17e4114 Mon Sep 17 00:00:00 2001 From: Gianni Carafa Date: Wed, 10 Jan 2024 04:10:08 +0100 Subject: [PATCH 46/95] check if domain is allready in use on this cluster --- client/src/components/apps/form.vue | 17 ++- server/package.json | 2 +- server/src/modules/kubectl.ts | 11 +- server/src/modules/settings.ts | 10 ++ server/src/routes/settings.ts | 13 ++- server/yarn.lock | 159 ++++++++++++---------------- 6 files changed, 115 insertions(+), 97 deletions(-) diff --git a/client/src/components/apps/form.vue b/client/src/components/apps/form.vue index 17467eb64..c6c0e2500 100644 --- a/client/src/components/apps/form.vue +++ b/client/src/components/apps/form.vue @@ -1151,6 +1151,7 @@ export default defineComponent({ to: this.getAppBreadcrumbLink(), } ], + takenDomains: [] as string[], advanced: false, panel: [0], valid: false, @@ -1412,7 +1413,8 @@ export default defineComponent({ domainRules: [ (v: any) => !!v || 'Domain is required', (v: any) => v.length <= 60 || 'Name must be less than 60 characters', - (v: any) => /^(([a-zA-Z]{1})|([a-zA-Z]{1}[a-zA-Z]{1})|([a-zA-Z]{1}[0-9]{1})|([0-9]{1}[a-zA-Z]{1})|([a-zA-Z0-9][a-zA-Z0-9-_]{1,61}[a-zA-Z0-9]))\.([a-zA-Z]{2,6}|[a-zA-Z0-9-]{2,30}\.[a-zA-Z]{2,8})$/.test(v) || 'Not a domain', + (v: any) => /^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z0-9][a-z0-9-]{0,61}[a-z0-9]$/.test(v) || 'Not a domain', + (v: any) => this.checkDomainAvailability(v) || 'Domain already taken', ], cronjobScheduleRules: [ (v: any) => !!v || 'Schedule is required', @@ -1438,6 +1440,7 @@ export default defineComponent({ this.loadPodsizeList(); this.loadBuildpacks(); this.loadClusterIssuers(); + this.getDomains(); if (this.app != 'new') { this.loadApp(); // this may lead into a race condition with the buildpacks loaded in loadPipeline } @@ -1456,6 +1459,18 @@ export default defineComponent({ Breadcrumbs, }, methods: { + getDomains() { + axios.get('/api/domains').then(response => { + this.takenDomains = response.data; + }); + }, + checkDomainAvailability(domain: string) { + if (this.takenDomains.includes(domain)) { + return false; + } else { + return true; + } + }, getAppBreadcrumbLink() { if (this.app == 'new') { return { name: 'Pipeline Apps', params: { pipeline: this.pipeline }}; diff --git a/server/package.json b/server/package.json index e027a2c17..59fcae5e6 100644 --- a/server/package.json +++ b/server/package.json @@ -16,7 +16,7 @@ "test": "ENV_FILE=.env.test jest" }, "dependencies": { - "@kubernetes/client-node": "^0.16.3", + "@kubernetes/client-node": "^0.20.0", "@nerdvision/gitlab-js": "^1.0.0-alpha.12", "@octokit/core": "^3.6.0", "@octokit/webhooks": "^9.26.0", diff --git a/server/src/modules/kubectl.ts b/server/src/modules/kubectl.ts index 21cb5657f..9f3d3858d 100644 --- a/server/src/modules/kubectl.ts +++ b/server/src/modules/kubectl.ts @@ -22,7 +22,8 @@ import { PodMetricsList, NodeMetric, StorageV1Api, - BatchV1Api + BatchV1Api, + NetworkingV1Api, } from '@kubernetes/client-node' import { IPipeline, IKubectlPipeline, IKubectlPipelineList, IKubectlAppList, IKuberoConfig} from '../types'; import { App, KubectlApp } from './application'; @@ -40,6 +41,7 @@ export class Kubectl { private storageV1Api: StorageV1Api = {} as StorageV1Api; private batchV1Api: BatchV1Api = {} as BatchV1Api; private customObjectsApi: CustomObjectsApi = {} as CustomObjectsApi; + private networkingV1Api: NetworkingV1Api = {} as NetworkingV1Api; public kubeVersion: VersionInfo | void; private patchUtils: PatchUtils = {} as PatchUtils; public log: KubeLog; @@ -74,6 +76,7 @@ export class Kubectl { this.appsV1Api = this.kc.makeApiClient(AppsV1Api); this.storageV1Api = this.kc.makeApiClient(StorageV1Api); this.batchV1Api = this.kc.makeApiClient(BatchV1Api); + this.networkingV1Api = this.kc.makeApiClient(NetworkingV1Api); this.metricsApi = new Metrics(this.kc); this.patchUtils = new PatchUtils(); this.customObjectsApi = this.kc.makeApiClient(CustomObjectsApi); @@ -324,6 +327,7 @@ export class Kubectl { undefined, undefined, undefined, + undefined, options ).then(() => { debug.log(`Deployment ${deploymentName} in Pipeline ${namespace} updated`); @@ -984,5 +988,10 @@ export class Kubectl { debug.log('ERROR: '+error); }); }; + + public async getAllIngress(): Promise { + const ingresses = await this.networkingV1Api.listIngressForAllNamespaces(); + return ingresses.body.items; + } } \ No newline at end of file diff --git a/server/src/modules/settings.ts b/server/src/modules/settings.ts index 031cb92c2..5508b26ff 100644 --- a/server/src/modules/settings.ts +++ b/server/src/modules/settings.ts @@ -30,4 +30,14 @@ export class Settings { return config } + public async getDomains(): Promise { + let allIngress = await this.kubectl.getAllIngress() + let domains: string[] = [] + allIngress.forEach((ingress: any) => { + ingress.spec.rules.forEach((rule: any) => { + domains.push(rule.host) + }) + }) + return domains + } } \ No newline at end of file diff --git a/server/src/routes/settings.ts b/server/src/routes/settings.ts index de2697009..43a2f49dc 100644 --- a/server/src/routes/settings.ts +++ b/server/src/routes/settings.ts @@ -4,7 +4,8 @@ import { Auth } from '../modules/auth'; export const Router = express.Router(); export const auth = new Auth(); auth.init(); -export const authMiddleware = auth.authMiddleware; // requires allways a authentification +export const allwaysAuthMiddleware = auth.authMiddleware; // requires allways a authentification +export const authMiddleware = auth.getAuthMiddleware(); export const bearerMiddleware = auth.getBearerMiddleware(); Router.get('/cli/settings', bearerMiddleware, async function (req: Request, res: Response) { @@ -22,7 +23,7 @@ Router.get('/cli/settings', bearerMiddleware, async function (req: Request, res: }); // get the settings -Router.get('/settings', authMiddleware, async function (req: Request, res: Response) { +Router.get('/settings', allwaysAuthMiddleware, async function (req: Request, res: Response) { // #swagger.tags = ['UI'] // #swagger.summary = 'Get the Kubero settings' const settings = await req.app.locals.settings.getSettings(); @@ -45,3 +46,11 @@ Router.get('/banner', async function (req: Request, res: Response) { let banner = await req.app.locals.kubero.config.kubero?.banner || defaultbanner; res.send(banner) }); + +Router.get('/domains', authMiddleware, async function (req: Request, res: Response) { + + // #swagger.tags = ['UI'] + // #swagger.summary = 'Get a list of all configured domains on this cluster' + const domains = await req.app.locals.settings.getDomains(); + res.send(domains) +}); \ No newline at end of file diff --git a/server/yarn.lock b/server/yarn.lock index 0033f4bf6..5bd51f087 100644 --- a/server/yarn.lock +++ b/server/yarn.lock @@ -584,33 +584,27 @@ underscore "^1.9.1" ws "^6.1.0" -"@kubernetes/client-node@^0.16.3": - version "0.16.3" - resolved "https://registry.npmjs.org/@kubernetes/client-node/-/client-node-0.16.3.tgz" - integrity sha512-L7IckuyuPfhd+/Urib8MRas9D6sfKEq8IaITYcaE6LlU+Y8MeD7MTbuW6Yb2WdeRuFN8HPSS47mxPnOUNYBXEg== +"@kubernetes/client-node@^0.20.0": + version "0.20.0" + resolved "https://registry.yarnpkg.com/@kubernetes/client-node/-/client-node-0.20.0.tgz#4447ae27fd6eef3d4830a5a039f3b84ffd5c5913" + integrity sha512-xxlv5GLX4FVR/dDKEsmi4SPeuB49aRc35stndyxcC73XnUEEwF39vXbROpHOirmDse8WE9vxOjABnSVS+jb7EA== dependencies: "@types/js-yaml" "^4.0.1" - "@types/node" "^10.12.0" + "@types/node" "^20.1.1" "@types/request" "^2.47.1" - "@types/stream-buffers" "^3.0.3" - "@types/tar" "^4.0.3" - "@types/underscore" "^1.8.9" - "@types/ws" "^6.0.1" + "@types/ws" "^8.5.3" byline "^5.0.0" - execa "5.0.0" - isomorphic-ws "^4.0.1" + isomorphic-ws "^5.0.0" js-yaml "^4.1.0" - jsonpath-plus "^0.19.0" - openid-client "^4.1.1" + jsonpath-plus "^7.2.0" request "^2.88.0" rfc4648 "^1.3.0" - shelljs "^0.8.5" stream-buffers "^3.0.2" tar "^6.1.11" - tmp-promise "^3.0.2" - tslib "^1.9.3" - underscore "^1.9.1" - ws "^7.3.1" + tslib "^2.4.1" + ws "^8.11.0" + optionalDependencies: + openid-client "^5.3.0" "@nerdvision/gitlab-js@^1.0.0-alpha.12": version "1.0.0-alpha.12" @@ -1060,13 +1054,6 @@ resolved "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz" integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w== -"@types/minipass@*": - version "3.3.5" - resolved "https://registry.npmjs.org/@types/minipass/-/minipass-3.3.5.tgz" - integrity sha512-M2BLHQdEmDmH671h0GIlOQQJrgezd1vNqq7PVj1VOsHZ2uQQb4iPiQIl0SlMdhxZPUsLIfEklmeEHXg8DJRewA== - dependencies: - minipass "*" - "@types/ms@*": version "0.7.34" resolved "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz" @@ -1082,6 +1069,13 @@ resolved "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz" integrity sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw== +"@types/node@^20.1.1": + version "20.10.8" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.10.8.tgz#f1e223cbde9e25696661d167a5b93a9b2a5d57c7" + integrity sha512-f8nQs3cLxbAFc00vEU59yf9UyGUftkPaLGfvbVOIDdx2i1b8epBqj2aNGyP19fiyXWvlmZ7qC1XLjAzw/OKIeA== + dependencies: + undici-types "~5.26.4" + "@types/oauth@*": version "0.9.4" resolved "https://registry.npmjs.org/@types/oauth/-/oauth-0.9.4.tgz" @@ -1197,13 +1191,6 @@ resolved "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz" integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw== -"@types/stream-buffers@^3.0.3": - version "3.0.7" - resolved "https://registry.npmjs.org/@types/stream-buffers/-/stream-buffers-3.0.7.tgz" - integrity sha512-azOCy05sXVXrO+qklf0c/B07H/oHaIuDDAiHPVwlk3A9Ek+ksHyTeMajLZl3r76FxpPpxem//4Te61G1iW3Giw== - dependencies: - "@types/node" "*" - "@types/swagger-ui-express@^4.1.3": version "4.1.6" resolved "https://registry.npmjs.org/@types/swagger-ui-express/-/swagger-ui-express-4.1.6.tgz" @@ -1212,14 +1199,6 @@ "@types/express" "*" "@types/serve-static" "*" -"@types/tar@^4.0.3": - version "4.0.5" - resolved "https://registry.npmjs.org/@types/tar/-/tar-4.0.5.tgz" - integrity sha512-cgwPhNEabHaZcYIy5xeMtux2EmYBitfqEceBUi2t5+ETy4dW6kswt6WX4+HqLeiiKOo42EXbGiDmVJ2x+vi37Q== - dependencies: - "@types/minipass" "*" - "@types/node" "*" - "@types/tough-cookie@*": version "4.0.5" resolved "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz" @@ -1242,6 +1221,13 @@ dependencies: "@types/node" "*" +"@types/ws@^8.5.3": + version "8.5.10" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.10.tgz#4acfb517970853fa6574a3a6886791d04a396787" + integrity sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A== + dependencies: + "@types/node" "*" + "@types/yargs-parser@*": version "21.0.3" resolved "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz" @@ -2080,7 +2066,7 @@ etag@~1.8.1: resolved "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz" integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== -execa@5.0.0, execa@^5.0.0: +execa@^5.0.0: version "5.0.0" resolved "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz" integrity sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ== @@ -2388,7 +2374,7 @@ gopd@^1.0.1: dependencies: get-intrinsic "^1.1.3" -got@^11.8.0, got@^11.8.1: +got@^11.8.1: version "11.8.6" resolved "https://registry.npmjs.org/got/-/got-11.8.6.tgz" integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g== @@ -2653,6 +2639,11 @@ isomorphic-ws@^4.0.1: resolved "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz" integrity sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w== +isomorphic-ws@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-5.0.0.tgz#e5529148912ecb9b451b46ed44d53dae1ce04bbf" + integrity sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw== + isstream@~0.1.2: version "0.1.2" resolved "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz" @@ -3076,12 +3067,10 @@ jose@^1.27.1: dependencies: "@panva/asn1.js" "^1.0.0" -jose@^2.0.5: - version "2.0.6" - resolved "https://registry.npmjs.org/jose/-/jose-2.0.6.tgz" - integrity sha512-FVoPY7SflDodE4lknJmbAHSUjLCzE2H1F6MS0RYKMQ8SR+lNccpMf8R4eqkNYyyUjR5qZReOzZo5C5YiHOCjjg== - dependencies: - "@panva/asn1.js" "^1.0.0" +jose@^4.15.4: + version "4.15.4" + resolved "https://registry.yarnpkg.com/jose/-/jose-4.15.4.tgz#02a9a763803e3872cf55f29ecef0dfdcc218cc03" + integrity sha512-W+oqK4H+r5sITxfxpSU+MMdr/YSWGvgZMQDIsNoBDGGy4i7GBPTtvFKibQzW06n3U3TqHjhvBJsirShsEJ6eeQ== js-tokens@^4.0.0: version "4.0.0" @@ -3158,6 +3147,11 @@ jsonpath-plus@^0.19.0: resolved "https://registry.npmjs.org/jsonpath-plus/-/jsonpath-plus-0.19.0.tgz" integrity sha512-GSVwsrzW9LsA5lzsqe4CkuZ9wp+kxBb2GwNniaWzI2YFn5Ig42rSW8ZxVpWXaAfakXNrx5pgY5AbQq7kzX29kg== +jsonpath-plus@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/jsonpath-plus/-/jsonpath-plus-7.2.0.tgz#7ad94e147b3ed42f7939c315d2b9ce490c5a3899" + integrity sha512-zBfiUPM5nD0YZSBT/o/fbCUlCcepMIdP0CJZxM1+KgA4f2T206f6VAg9e7mX35+KlMaIc5qXW34f3BnwJ3w+RA== + jsprim@^1.2.2: version "1.4.2" resolved "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz" @@ -3353,11 +3347,6 @@ minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: dependencies: brace-expansion "^1.1.7" -minipass@*: - version "7.0.4" - resolved "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz" - integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== - minipass@^3.0.0: version "3.3.6" resolved "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz" @@ -3485,9 +3474,9 @@ object-assign@^4: resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== -object-hash@^2.0.1: +object-hash@^2.0.1, object-hash@^2.2.0: version "2.2.0" - resolved "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz" + resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-2.2.0.tgz#5ad518581eefc443bd763472b8ff2e9c2c0d54a5" integrity sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw== object-inspect@^1.9.0: @@ -3495,9 +3484,9 @@ object-inspect@^1.9.0: resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz" integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== -oidc-token-hash@^5.0.0, oidc-token-hash@^5.0.1: +oidc-token-hash@^5.0.0, oidc-token-hash@^5.0.3: version "5.0.3" - resolved "https://registry.npmjs.org/oidc-token-hash/-/oidc-token-hash-5.0.3.tgz" + resolved "https://registry.yarnpkg.com/oidc-token-hash/-/oidc-token-hash-5.0.3.tgz#9a229f0a1ce9d4fc89bcaee5478c97a889e7b7b6" integrity sha512-IF4PcGgzAr6XXSff26Sk/+P4KZFJVuHAJZj3wgO3vX2bMdNVp/QXTP3P7CEm9V1IdG8lDLY3HhiqpsE/nOwpPw== on-finished@2.4.1: @@ -3541,18 +3530,15 @@ openid-client@^3.14.0: oidc-token-hash "^5.0.0" p-any "^3.0.0" -openid-client@^4.1.1: - version "4.9.1" - resolved "https://registry.npmjs.org/openid-client/-/openid-client-4.9.1.tgz" - integrity sha512-DYUF07AHjI3QDKqKbn2F7RqozT4hyi4JvmpodLrq0HHoNP7t/AjeG/uqiBK1/N2PZSAQEThVjDLHSmJN4iqu/w== +openid-client@^5.3.0: + version "5.6.4" + resolved "https://registry.yarnpkg.com/openid-client/-/openid-client-5.6.4.tgz#b2c25e6d5338ba3ce00e04341bb286798a196177" + integrity sha512-T1h3B10BRPKfcObdBklX639tVz+xh34O7GjofqrqiAQdm7eHsQ00ih18x6wuJ/E6FxdtS2u3FmUGPDeEcMwzNA== dependencies: - aggregate-error "^3.1.0" - got "^11.8.0" - jose "^2.0.5" + jose "^4.15.4" lru-cache "^6.0.0" - make-error "^1.3.6" - object-hash "^2.0.1" - oidc-token-hash "^5.0.1" + object-hash "^2.2.0" + oidc-token-hash "^5.0.3" p-any@^3.0.0: version "3.0.0" @@ -3942,13 +3928,6 @@ rfc4648@^1.3.0: resolved "https://registry.npmjs.org/rfc4648/-/rfc4648-1.5.3.tgz" integrity sha512-MjOWxM065+WswwnmNONOT+bD1nXzY9Km6u3kzvnx8F8/HXGZdz3T6e6vZJ8Q/RIMUSp/nxqjH3GwvJDy8ijeQQ== -rimraf@^3.0.0: - version "3.0.2" - resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - rxjs@^7.0.0: version "7.8.1" resolved "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz" @@ -4049,7 +4028,7 @@ shell-quote@^1.7.3: resolved "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz" integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA== -shelljs@^0.8.2, shelljs@^0.8.5: +shelljs@^0.8.2: version "0.8.5" resolved "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz" integrity sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow== @@ -4296,20 +4275,6 @@ test-exclude@^6.0.0: glob "^7.1.4" minimatch "^3.0.4" -tmp-promise@^3.0.2: - version "3.0.3" - resolved "https://registry.npmjs.org/tmp-promise/-/tmp-promise-3.0.3.tgz" - integrity sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ== - dependencies: - tmp "^0.2.0" - -tmp@^0.2.0: - version "0.2.1" - resolved "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz" - integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== - dependencies: - rimraf "^3.0.0" - tmpl@1.0.5: version "1.0.5" resolved "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz" @@ -4400,9 +4365,9 @@ tslib@^1.9.3: resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.1.0: +tslib@^2.1.0, tslib@^2.4.1: version "2.6.2" - resolved "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== tunnel-agent@^0.6.0: @@ -4462,6 +4427,11 @@ underscore@^1.9.1: resolved "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz" integrity sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A== +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== + universal-user-agent@^6.0.0: version "6.0.1" resolved "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.1.tgz" @@ -4603,11 +4573,16 @@ ws@^6.1.0: dependencies: async-limiter "~1.0.0" -ws@^7.2.3, ws@^7.3.1: +ws@^7.2.3: version "7.5.9" resolved "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz" integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== +ws@^8.11.0: + version "8.16.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.16.0.tgz#d1cd774f36fbc07165066a60e40323eab6446fd4" + integrity sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ== + ws@~8.11.0: version "8.11.0" resolved "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz" From 98b36a8ca6d3f50145023fb9a341a2afae14dbea Mon Sep 17 00:00:00 2001 From: Gianni Carafa Date: Wed, 10 Jan 2024 04:48:29 +0100 Subject: [PATCH 47/95] empty logs when leaving --- client/src/components/apps/logs.vue | 1 + 1 file changed, 1 insertion(+) diff --git a/client/src/components/apps/logs.vue b/client/src/components/apps/logs.vue index 57b10f2d4..66188390e 100644 --- a/client/src/components/apps/logs.vue +++ b/client/src/components/apps/logs.vue @@ -61,6 +61,7 @@ export default defineComponent({ }, unmounted() { this.socketLeave() + this.loglines = [] }, props: { pipeline: { From c90839a0492ced46cb7a504b0afa5078392647d5 Mon Sep 17 00:00:00 2001 From: Gianni Carafa Date: Wed, 10 Jan 2024 22:28:47 +0100 Subject: [PATCH 48/95] add cockroach operator --- client/public/img/addons/CockroachDB.svg | 1 + server/src/addons/cockroachDB.ts | 86 ++++++++++++++++++++++++ server/src/addons/minio.ts | 2 +- server/src/addons/plugin.ts | 9 ++- server/src/modules/addons.ts | 8 ++- 5 files changed, 101 insertions(+), 5 deletions(-) create mode 100644 client/public/img/addons/CockroachDB.svg create mode 100644 server/src/addons/cockroachDB.ts diff --git a/client/public/img/addons/CockroachDB.svg b/client/public/img/addons/CockroachDB.svg new file mode 100644 index 000000000..6e8eca8e0 --- /dev/null +++ b/client/public/img/addons/CockroachDB.svg @@ -0,0 +1 @@ +CL \ No newline at end of file diff --git a/server/src/addons/cockroachDB.ts b/server/src/addons/cockroachDB.ts new file mode 100644 index 000000000..773aa9853 --- /dev/null +++ b/server/src/addons/cockroachDB.ts @@ -0,0 +1,86 @@ +import {Plugin, IPlugin, IPluginFormFields} from './plugin'; + +// Classname must be same as the CRD's Name +export class Cockroachdb extends Plugin implements IPlugin { + public id: string = 'cockroachdb';//same as operator name + public displayName = 'CockroachDB' + public icon = '/img/addons/CockroachDB.svg' + public install: string = 'kubectl create -f https://operatorhub.io/install/cockroachdb.yaml' + public url = 'https://artifacthub.io/packages/olm/community-operators/cockroachdb' + public docs = [ + { + title: 'Kubero Docs', url: '' + } + ] + public artifact_url = 'https://artifacthub.io/api/v1/packages/olm/community-operators/mongodb-operator' + public beta: boolean = true; + + public formfields: {[key: string]: IPluginFormFields} = { + 'Cockroachdb.metadata.name':{ + type: 'text', + label: 'MongoDB Name', + name: 'MongoDB.metadata.name', + required: true, + default: 'mongodbinstance', + description: 'The name of the MongoDB cluster' + }, + 'Cockroachdb.conf.cache':{ + type: 'text', + label: 'Cache Size', + name: 'Cockroachdb.conf.cache', + required: true, + default: '25%', + description: 'Size of the cache' + }, + 'Cockroachdb.conf.max-sql-memory':{ + type: 'text', + label: 'Max SQL Memory', + name: 'Cockroachdb.conf.max-sql-memory', + required: true, + default: '25%', + description: 'Max SQL Memory' + }, + 'Cockroachdb.conf.single-node':{ + type: 'switch', + label: 'Single Node', + name: 'Cockroachdb.conf.single-node', + required: false, + default: false, + description: 'Single Node' + }, + 'Cockroachdb.statefulset.replicas':{ + type: 'number', + label: 'Replicas', + name: 'Cockroachdb.statefulset.replicas', + required: true, + default: 3, + description: 'Number of Replicas' + }, + 'Cockroachdb.spec.storage.persistentVolume.storageSize':{ + type: 'text', + label: 'Sorage Size', + name: 'MongoDB.spec.storage.storageSize', + default: '1Gi', + required: true, + description: 'Size of the storage' + }, + 'Cockroachdb.spec.storage.persistentVolume.storageClass':{ + type: 'text', + label: 'Sorage Class', + name: 'MongoDB.spec.storage.storageClass', + default: 'standard', + required: true, + description: 'Classname of the storage' + }, + }; + + public env: any[] = [] + + protected additionalResourceDefinitions: Object = {} + + constructor(availableOperators: any) { + super(); + super.init(availableOperators); + } + +} \ No newline at end of file diff --git a/server/src/addons/minio.ts b/server/src/addons/minio.ts index ce212ceda..acbad164c 100644 --- a/server/src/addons/minio.ts +++ b/server/src/addons/minio.ts @@ -1,7 +1,7 @@ import {Plugin, IPlugin, IPluginFormFields} from './plugin'; // Classname must be same as the CRD's Name -export class Minio extends Plugin implements IPlugin { +export class Tenant extends Plugin implements IPlugin { public id: string = 'minio-operator';//same as operator name public displayName = 'Minio' public icon = '/img/addons/Minio.png' diff --git a/server/src/addons/plugin.ts b/server/src/addons/plugin.ts index f11aba422..687f17262 100644 --- a/server/src/addons/plugin.ts +++ b/server/src/addons/plugin.ts @@ -58,8 +58,6 @@ export abstract class Plugin { public async init(availableCRDs: any) { - console.log("init : "+this.id, this.constructor.name) - // load data from local Operators this.operator_data = this.loadOperatorData(availableCRDs); @@ -71,6 +69,12 @@ export abstract class Plugin { this.loadAdditionalResourceDefinitions(); + if (this.enabled) { + console.log("✅ "+this.id, this.constructor.name) + } else { + console.log("❌ "+this.id, this.constructor.name) + } + } @@ -145,6 +149,7 @@ export abstract class Plugin { private loadOperatorData(availableOperators: any): any { for (const operatorCRD of availableOperators) { + console.log(operatorCRD.spec.names.kind, this.constructor.name) if (operatorCRD.spec.names.kind === this.constructor.name) { this.enabled = true; this.version.installed = operatorCRD.spec.version diff --git a/server/src/modules/addons.ts b/server/src/modules/addons.ts index 9254f4144..d61517ed7 100644 --- a/server/src/modules/addons.ts +++ b/server/src/modules/addons.ts @@ -16,8 +16,9 @@ import { KuberoCouchDB } from '../addons/kuberoCouchDB'; import { KuberoKafka } from '../addons/kuberoKafka'; import { KuberoMail } from '../addons/kuberoMail'; import { KuberoRabbitMQ } from '../addons/kuberoRabbitMQ'; +import { Cockroachdb } from '../addons/cockroachDB'; import { MongoDB } from '../addons/mongoDB'; -import { Minio } from '../addons/minio'; +import { Tenant } from '../addons/minio'; import { Tunnel } from '../addons/cloudflare'; import { IPlugin } from '../addons/plugin'; @@ -127,7 +128,10 @@ export class Addons { const mongoDB = new MongoDB(this.CRDList) this.addonsList.push(mongoDB) - const minio = new Minio(this.CRDList) + const cockroachdb = new Cockroachdb(this.CRDList) + this.addonsList.push(cockroachdb) + + const minio = new Tenant(this.CRDList) this.addonsList.push(minio) } From e9ca5e8f432087fa20fa1dd6f2598b3ecee6379d Mon Sep 17 00:00:00 2001 From: Gianni Carafa Date: Wed, 10 Jan 2024 22:48:44 +0100 Subject: [PATCH 49/95] add external release deployment strategy --- client/src/components/apps/form.vue | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/client/src/components/apps/form.vue b/client/src/components/apps/form.vue index c6c0e2500..0ebaaf68e 100644 --- a/client/src/components/apps/form.vue +++ b/client/src/components/apps/form.vue @@ -154,6 +154,11 @@ label="Plain images" value="plain" > + Plain -
This is the default for kubero. Your code is running on official images. The code will be built for every pod. This the fastes way, to run your code, but becomes more inefficient with every replica.
+
This is the default for kubero. Your code is running on official images. The code will be built for every pod. This is the fastes way, to run your code, but becomes more inefficient with every replica.
@@ -196,6 +201,14 @@
Builds the image based on the Dockerfile in your git root directory. This allows for the highest level of customization.
+ + +

+ External CI/CD +

+
You are building your image on a external CI/CD and deploy it by changing the image tag thrue the API
+
+

Buildpipeline not configured @@ -221,7 +234,7 @@ --> - +
- -
+ + + v-if="deploymentstrategy == 'docker' || (deploymentstrategy == 'git' && buildstrategy == 'external' )"> + v-if="deploymentstrategy == 'docker' || (deploymentstrategy == 'git' && buildstrategy == 'external' )"> Date: Wed, 10 Jan 2024 21:34:06 +0100 Subject: [PATCH 50/95] fix taken domains, to ignore current domain on edit --- client/src/components/apps/form.vue | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/client/src/components/apps/form.vue b/client/src/components/apps/form.vue index 0ebaaf68e..51dcea0c4 100644 --- a/client/src/components/apps/form.vue +++ b/client/src/components/apps/form.vue @@ -1472,9 +1472,17 @@ export default defineComponent({ Breadcrumbs, }, methods: { + whiteListDomains(domainsList: string[]) { + for (let i = 0; i < domainsList.length; i++) { + if (domainsList[i] == this.domain) { + domainsList.splice(i, 1); + } + } + return domainsList; + }, getDomains() { axios.get('/api/domains').then(response => { - this.takenDomains = response.data; + this.takenDomains = this.whiteListDomains(response.data); }); }, checkDomainAvailability(domain: string) { @@ -1712,6 +1720,9 @@ export default defineComponent({ if (this.buildpack && this.buildpack.run && this.buildpack.run.readOnlyAppStorage === undefined) { this.buildpack.run.readOnlyAppStorage = true; } + + // remove loaded domain from taken domains + this.takenDomains = this.whiteListDomains(this.takenDomains); }); } }, From f71004c8ddce7a03e9fbae9606166e6da069615e Mon Sep 17 00:00:00 2001 From: Gianni Carafa Date: Thu, 11 Jan 2024 22:23:58 +0100 Subject: [PATCH 51/95] fix Cockroach operator --- server/src/addons/cockroachDB.ts | 26 +++++++++++++++++++++++++- server/src/addons/kuberoMysql.ts | 2 +- server/src/addons/plugin.ts | 15 ++++++++++++--- 3 files changed, 38 insertions(+), 5 deletions(-) diff --git a/server/src/addons/cockroachDB.ts b/server/src/addons/cockroachDB.ts index 773aa9853..2d5ddaf07 100644 --- a/server/src/addons/cockroachDB.ts +++ b/server/src/addons/cockroachDB.ts @@ -65,7 +65,7 @@ export class Cockroachdb extends Plugin implements IPlugin { description: 'Size of the storage' }, 'Cockroachdb.spec.storage.persistentVolume.storageClass':{ - type: 'text', + type: 'select-storageclass', label: 'Sorage Class', name: 'MongoDB.spec.storage.storageClass', default: 'standard', @@ -83,4 +83,28 @@ export class Cockroachdb extends Plugin implements IPlugin { super.init(availableOperators); } + public resourceDefinitions: any = { + 'Cockroachdb': { + apiVersion: "cockroachdb.roachprod.crdb.io/v1alpha1", + kind: "Cockroachdb", + metadata: { + name: "cockroachdbinstance", + }, + spec: { + cache: "25%", + 'max-sql-memory': "25%", + 'single-node': false, + statefulset: { + replicas: 3 + }, + storage: { + persistentVolume: { + storageSize: "1Gi", + storageClass: "standard" + } + } + } + } + } + } \ No newline at end of file diff --git a/server/src/addons/kuberoMysql.ts b/server/src/addons/kuberoMysql.ts index c1dfba61e..4f18761c1 100644 --- a/server/src/addons/kuberoMysql.ts +++ b/server/src/addons/kuberoMysql.ts @@ -29,7 +29,7 @@ export class KuberoMysql extends Plugin implements IPlugin { label: 'Storage Class', // options: ['default', 'local-path', 'nfs-client', 'rook-ceph-block'], name: 'spec.mysql.global.storageClass', - default: 'default', + default: 'standard', required: true }, 'KuberoMysql.spec.mysql.primary.persistence.size':{ diff --git a/server/src/addons/plugin.ts b/server/src/addons/plugin.ts index 687f17262..07f4f90c1 100644 --- a/server/src/addons/plugin.ts +++ b/server/src/addons/plugin.ts @@ -65,12 +65,13 @@ export abstract class Plugin { await this.loadMetadataFromArtefacthub(); // load CRD from artefacthub, or alterantively from local operator, as a fallback use the CRD from the plugin - this.loadCRDFromArtefacthubData(); + this.loadCRD(); this.loadAdditionalResourceDefinitions(); if (this.enabled) { console.log("✅ "+this.id, this.constructor.name) + //console.log(this.resourceDefinitions) // debug CRD } else { console.log("❌ "+this.id, this.constructor.name) } @@ -101,13 +102,21 @@ export abstract class Plugin { } - private loadCRDFromArtefacthubData() { + private loadCRD() { + if (this.resourceDefinitions[this.kind] !== undefined) { + // CRD already loaded from operator + return; + } if (this.artefact_data.crds === undefined) { console.log("No CRDs defined in artefacthub for "+this.id) this.loadCRDFromOperatorData(); return; + } else { + this.loadCRDFromArtefacthubData(); } + } + private loadCRDFromArtefacthubData() { for (const artefactCRD of this.artefact_data.crds) { if (artefactCRD.kind === this.kind) { // search in artefact data for the crd @@ -149,7 +158,7 @@ export abstract class Plugin { private loadOperatorData(availableOperators: any): any { for (const operatorCRD of availableOperators) { - console.log(operatorCRD.spec.names.kind, this.constructor.name) + // console.log(operatorCRD.spec.names.kind, this.constructor.name) // debug CRD if (operatorCRD.spec.names.kind === this.constructor.name) { this.enabled = true; this.version.installed = operatorCRD.spec.version From 3478e4323853a2c6a2e84573d6858f6b90bf9bbc Mon Sep 17 00:00:00 2001 From: Gianni Carafa Date: Thu, 11 Jan 2024 23:51:52 +0100 Subject: [PATCH 52/95] fix cockrachdb api version --- server/src/addons/cockroachDB.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/server/src/addons/cockroachDB.ts b/server/src/addons/cockroachDB.ts index 2d5ddaf07..2d3074314 100644 --- a/server/src/addons/cockroachDB.ts +++ b/server/src/addons/cockroachDB.ts @@ -85,7 +85,7 @@ export class Cockroachdb extends Plugin implements IPlugin { public resourceDefinitions: any = { 'Cockroachdb': { - apiVersion: "cockroachdb.roachprod.crdb.io/v1alpha1", + apiVersion: "charts.operatorhub.io/v1alpha1", kind: "Cockroachdb", metadata: { name: "cockroachdbinstance", @@ -107,4 +107,7 @@ export class Cockroachdb extends Plugin implements IPlugin { } } -} \ No newline at end of file +} + + + From ad4770d5ec341049edf9da800117677924da358c Mon Sep 17 00:00:00 2001 From: Gianni Carafa Date: Fri, 12 Jan 2024 07:42:17 +0100 Subject: [PATCH 53/95] improve toast background in light theme --- client/src/components/pipelines/list.vue | 4 +++- client/src/layouts/default/Default.vue | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/client/src/components/pipelines/list.vue b/client/src/components/pipelines/list.vue index 7027721c8..e8da06d2a 100644 --- a/client/src/components/pipelines/list.vue +++ b/client/src/components/pipelines/list.vue @@ -178,7 +178,9 @@ export default defineComponent({ confirmButtonText: "Delete", cancelButtonText: "Cancel", confirmButtonColor: "rgb(var(--v-theme-kubero))", - background: "rgb(var(--v-theme-surface))", + background: "rgb(var(--v-theme-cardBackground))", + /*background: "rgb(var(--v-theme-on-surface-variant))",*/ + color: "rgba(var(--v-theme-on-background),var(--v-high-emphasis-opacity));", }) .then((result) => { if (result.isConfirmed) { diff --git a/client/src/layouts/default/Default.vue b/client/src/layouts/default/Default.vue index df95dd1b4..54024f9c0 100644 --- a/client/src/layouts/default/Default.vue +++ b/client/src/layouts/default/Default.vue @@ -51,7 +51,9 @@ function triggerToast(icon: SweetAlertIcon, title: string, text: string) { title: title, html: text, showCancelButton: false, - background: "rgb(var(--v-theme-surface))", + background: "rgb(var(--v-theme-cardBackground))", + /*background: "rgb(var(--v-theme-on-surface-variant))",*/ + color: "rgba(var(--v-theme-on-background),var(--v-high-emphasis-opacity));", }) } From 4bef320de8947f77dd30094f6db4bdf41d4c8cf7 Mon Sep 17 00:00:00 2001 From: Gianni Carafa Date: Thu, 11 Jan 2024 20:47:02 +0100 Subject: [PATCH 54/95] migration: minor UI fixes for dialog boxes --- client/src/components/addons/index.vue | 66 ++++++++++---------- client/src/components/pipelines/form.vue | 2 +- client/src/components/templates/index.vue | 73 +++++++++++------------ 3 files changed, 72 insertions(+), 69 deletions(-) diff --git a/client/src/components/addons/index.vue b/client/src/components/addons/index.vue index 13ff388fb..b149d282d 100644 --- a/client/src/components/addons/index.vue +++ b/client/src/components/addons/index.vue @@ -62,38 +62,42 @@ max-width="890" > - - {{clickedAddon.displayName}} ({{clickedAddon.kind}}) - - - {{clickedAddon.description}} -
-

Maintainers

- -
-

Links

- -
- -
{{clickedAddon.install}}
- - copy - - mdi-content-copy - - + + + {{clickedAddon.displayName}} ({{clickedAddon.kind}}) + + + + {{clickedAddon.description}} +
+

Maintainers

+ +
+

Links

+ +
+
+ +
{{clickedAddon.install}}
+ + copy + + mdi-content-copy + + -
+
+
diff --git a/client/src/components/pipelines/form.vue b/client/src/components/pipelines/form.vue index 3465fdef5..4c7eaaed0 100644 --- a/client/src/components/pipelines/form.vue +++ b/client/src/components/pipelines/form.vue @@ -144,7 +144,7 @@ >
- + Phases diff --git a/client/src/components/templates/index.vue b/client/src/components/templates/index.vue index e41dcc125..bd0a45ff6 100644 --- a/client/src/components/templates/index.vue +++ b/client/src/components/templates/index.vue @@ -79,43 +79,42 @@ v-model="dialog" max-width="890" > - - - {{clickedTemplate.name}} - - - {{clickedTemplate.description}} - - - - - - - - - - - - Install - - + + + + {{clickedTemplate.description}} + + + + + + + + + + + + Install + + + From 8d70af4535d50214ac09660f5e2a34502f7b5c57 Mon Sep 17 00:00:00 2001 From: Gianni Carafa Date: Thu, 11 Jan 2024 23:20:16 +0100 Subject: [PATCH 55/95] migration: minor UI improvements --- client/src/components/apps/form.vue | 20 ++++++++++---------- client/src/components/pipelines/form.vue | 8 ++++++-- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/client/src/components/apps/form.vue b/client/src/components/apps/form.vue index 51dcea0c4..5693ebf7f 100644 --- a/client/src/components/apps/form.vue +++ b/client/src/components/apps/form.vue @@ -42,7 +42,7 @@ v-model="appname" :rules="nameRules" :counter="60" - :readonly="app!='new'" + :disabled="app!='new'" label="App name" v-on:input="changeName(appname)" required @@ -107,9 +107,9 @@ multiple > - + Deployment - + - + Security @@ -479,7 +479,7 @@ - + Networking @@ -532,7 +532,7 @@ - + Cors @@ -623,7 +623,7 @@ - + Environment Variables @@ -683,7 +683,7 @@ - + Resources @@ -782,7 +782,7 @@ - + Volumes
@@ -876,7 +876,7 @@ - + Cronjobs
diff --git a/client/src/components/pipelines/form.vue b/client/src/components/pipelines/form.vue index 4c7eaaed0..79ac63246 100644 --- a/client/src/components/pipelines/form.vue +++ b/client/src/components/pipelines/form.vue @@ -144,29 +144,33 @@ > - + Phases - + From 949402390bd6c89c36ece8bbefab90fa062e85d0 Mon Sep 17 00:00:00 2001 From: Gianni Carafa Date: Thu, 11 Jan 2024 23:47:20 +0100 Subject: [PATCH 56/95] migration: Fix settings --- client/src/router/index.ts | 11 +++++++++++ client/src/views/Settings.vue | 7 +++++++ 2 files changed, 18 insertions(+) diff --git a/client/src/router/index.ts b/client/src/router/index.ts index d45f3a8c1..04d7dd31d 100644 --- a/client/src/router/index.ts +++ b/client/src/router/index.ts @@ -73,6 +73,17 @@ const routes = [ }, ], }, + { + path: '/settings', + component: () => import('@/layouts/default/Default.vue'), + children: [ + { + path: '/settings', + name: 'Settings', + component: () => import('@/views/Settings.vue'), + }, + ], + }, { path: '/login', component: () => import('@/layouts/login/Login.vue'), diff --git a/client/src/views/Settings.vue b/client/src/views/Settings.vue index e69de29bb..d320594e9 100644 --- a/client/src/views/Settings.vue +++ b/client/src/views/Settings.vue @@ -0,0 +1,7 @@ + + + From 0ef705696663d4712cd660978426b6a450f7c629 Mon Sep 17 00:00:00 2001 From: Gianni Carafa Date: Fri, 12 Jan 2024 02:38:14 +0100 Subject: [PATCH 57/95] add labels to docker image --- Dockerfile | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index cfa1d67c9..c1deac8b0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ ARG VERSION=2.0.0 -FROM node:18-alpine AS build +FROM node:21-alpine AS build ENV NODE_ENV=development WORKDIR /build @@ -9,7 +9,6 @@ RUN cd server && \ yarn install && \ npm run build && \ yarn swaggergen && \ - echo $VERSION > VERSION && \ cd .. COPY client ./client RUN cd client && \ @@ -18,6 +17,10 @@ RUN cd client && \ cd .. FROM build AS release + +LABEL maintainer='www.kubero.dev' +LABEL version=$VERSION + ENV NODE_ENV=production WORKDIR /app/ From 90ccf09a4eb72bc2a81e7ebf1c8acac039f0bfef Mon Sep 17 00:00:00 2001 From: Gianni Carafa Date: Fri, 12 Jan 2024 23:21:00 +0100 Subject: [PATCH 58/95] add audit logs --- .gitignore | 4 +- client/src/components/events/view.vue | 124 +-- .../default/AppFooter.vue} | 0 client/src/layouts/default/NavDrawer.vue | 1 + client/src/layouts/default/View.vue | 1 + client/src/stores/kubero.ts | 1 + package.json | 5 + server/kubero.db | Bin 0 -> 12288 bytes server/src/configure.ts | 26 +- server/src/git/gitlab.ts | 2 +- server/src/kubero.ts | 132 ++- server/src/modules/audit.ts | 261 ++++++ server/src/modules/kubectl.ts | 8 +- server/src/routes/auth.ts | 2 +- server/src/routes/logs.ts | 16 + server/src/socket.ts | 2 +- yarn.lock | 852 ++++++++++++++++++ 17 files changed, 1369 insertions(+), 68 deletions(-) rename client/src/{components/appfooter.vue => layouts/default/AppFooter.vue} (100%) create mode 100644 package.json create mode 100644 server/kubero.db create mode 100644 server/src/modules/audit.ts create mode 100644 yarn.lock diff --git a/.gitignore b/.gitignore index c377403a4..a6463dbff 100644 --- a/.gitignore +++ b/.gitignore @@ -13,4 +13,6 @@ example-*.json *.log .dockerdata -secrets.yaml \ No newline at end of file +secrets.yaml + +db \ No newline at end of file diff --git a/client/src/components/events/view.vue b/client/src/components/events/view.vue index e9c17228c..5f67b6947 100644 --- a/client/src/components/events/view.vue +++ b/client/src/components/events/view.vue @@ -4,21 +4,23 @@ - + - - - {{ event.message }} - - - {{ event.metadata.creationTimestamp }} - - +
+ +
+ {{ event.title }} +
+ {{ event.metadata.timestamp }} · v{{ event.metadata.id }} · {{ event.message }} +
+
+
+
@@ -56,10 +58,11 @@ import axios from "axios"; import { defineComponent } from 'vue' type Event = { + title: string; message: string; metadata: { - creationTimestamp: string; - uid: string; + timestamp: string; + id: string; }; color: string; icon: string; @@ -78,53 +81,64 @@ export default defineComponent({ events: [] as Event[], }), methods: { - async loadEvents() { - const self = this; - axios.get(`/api/events`) - .then(response => { - // sort by creationTimestamp - response.data.sort((a: Event, b: Event) => { - return new Date(b.metadata.creationTimestamp).getMilliseconds() - new Date(a.metadata.creationTimestamp).getMilliseconds(); - }); + async loadEvents(){ + const self = this; + axios.get(`/api/audit`, { + params: { + limit: 25, + } + }) + .then(response => { + //console.log(response.data); - for (let i = 0; i < response.data.length; i++) { - const date = new Date(response.data[i].metadata.creationTimestamp) - const event = { - message: response.data[i].message, - metadata: { - creationTimestamp: date.toLocaleDateString() + " " + date.toLocaleTimeString(), - uid: response.data[i].metadata.uid, - }, - } as Event; + const auditEntries = response.data.audit as any[]; - switch (response.data[i].type) { - case "Normal": - event.color = "grey lighten-2"; - break; - case "Warning": - event.color = "red lighten-4"; - break; - default: - event.color = "grey lighten-2"; - } + for (let i = 0; i < auditEntries.length; i++) { + const date = new Date(auditEntries[i].timestamp) + const event = { + title: auditEntries[i].action + " " + auditEntries[i].resource, + message: auditEntries[i].message, + metadata: { + //timestamp: date.toLocaleDateString() + " " + date.toLocaleTimeString(), + timestamp: date.toDateString() + " " + date.toLocaleTimeString(), + id: auditEntries[i].id, + }, + } as Event; - switch (response.data[i].reason) { - case "Created": - event.icon = "mdi-bell-plus-outline"; - break; - case "Deleted": - event.icon = "mdi-bell-remove-outline"; - break; - default: - event.icon = "mdi-bell-outline"; + switch (auditEntries[i].severity) { + case "normal": + event.color = "grey lighten-2"; + break; + case "info": + event.color = "primary lighten-4"; + break; + case "warning": + event.color = "orange lighten-4"; + break; + case "error": + event.color = "red lighten-4"; + break; + default: + event.color = "grey lighten-2"; + } + + switch (auditEntries[i].resource) { + case "system": + event.icon = "mdi-bell-plus-outline"; + break; + case "app": + event.icon = "mdi-bell-remove-outline"; + break; + default: + event.icon = "mdi-bell-outline"; + } + self.events.push(event); } - self.events.push(event); - } - }) - .catch(error => { - console.log(error); - }); - }, + }) + .catch(error => { + console.log(error); + }); + }, }, }); diff --git a/client/src/components/appfooter.vue b/client/src/layouts/default/AppFooter.vue similarity index 100% rename from client/src/components/appfooter.vue rename to client/src/layouts/default/AppFooter.vue diff --git a/client/src/layouts/default/NavDrawer.vue b/client/src/layouts/default/NavDrawer.vue index 3d87a0ef6..c7ebf1d05 100644 --- a/client/src/layouts/default/NavDrawer.vue +++ b/client/src/layouts/default/NavDrawer.vue @@ -24,6 +24,7 @@ diff --git a/client/src/layouts/default/View.vue b/client/src/layouts/default/View.vue index 00064d55e..a3925b45a 100644 --- a/client/src/layouts/default/View.vue +++ b/client/src/layouts/default/View.vue @@ -44,6 +44,7 @@ export default defineComponent({ this.kubero.kubernetesVersion = result.data.kubernetesVersion; this.kubero.isAuthenticated = result.data.isAuthenticated; this.kubero.buildPipeline = result.data.buildPipeline; + this.kubero.auditEnabled = result.data.auditEnabled; }) .catch((err) => { diff --git a/client/src/stores/kubero.ts b/client/src/stores/kubero.ts index f09b61bfc..5e071c8ea 100644 --- a/client/src/stores/kubero.ts +++ b/client/src/stores/kubero.ts @@ -13,6 +13,7 @@ export const useKuberoStore = defineStore('kubero', { username: "", token: "", }, + auditEnabled: false, }, buildPipeline: false, }), diff --git a/package.json b/package.json new file mode 100644 index 000000000..8f0deef2c --- /dev/null +++ b/package.json @@ -0,0 +1,5 @@ +{ + "dependencies": { + "sqlite3": "^5.1.7" + } +} diff --git a/server/kubero.db b/server/kubero.db new file mode 100644 index 0000000000000000000000000000000000000000..936d270d0d724b9aa7db8fce2ca369620c1c3812 GIT binary patch literal 12288 zcmeI#!A`<37zgkUj3y=$Z@Yd+48#jBV1;TH8R963oJfVLGi;2tdjS)lz&G$o?NE%6 zC7vb!FX@)H-`B3cojSVf$5zwhGEbDH4m)L@$1aE%W1eeu*EUi14>le5F8hCl$IkPQ z6PHzMaMpNt4+I1t009U<00Izz00bZa0SNq0fnn{?Z?(LMRSyeoRttBVoEp6 { // Attache socket.io to server let sockets = init(server); - const kubero = new Kubero(sockets); - // sleep 5 seconds to wait for kubernetes availability test + const audit = new Audit( + process.env.KUBERO_AUDIT_DB_PATH || './db', + parseInt(process.env.KUBERO_AUDIT_LIMIT || '1000') + ); + await audit.init(); + app.locals.audit = audit; + + const auditEntry: AuditEntry = { + user: '', + severity: 'normal', + action: 'start', + namespace: '', + phase: '', + app: '', + pipeline: '', + resource: 'system', + message: 'server started', + } + audit.logDelayed(auditEntry); // wait till db is created + + const kubero = new Kubero(sockets, audit); + + // sleep 1 seconds to wait for kubernetes availability test await new Promise(resolve => setTimeout(resolve, 1000)); kubero.updateState(); diff --git a/server/src/git/gitlab.ts b/server/src/git/gitlab.ts index d9194ffb2..5a61c3a5f 100644 --- a/server/src/git/gitlab.ts +++ b/server/src/git/gitlab.ts @@ -20,7 +20,7 @@ export class GitlabApi extends Repo { super("gitlab"); console.log("Gitlab API: "+baseURL) - console.log("Gitlab token: "+token) + //console.log("Gitlab token: "+token) this.gitlab = new GitlabClient({ token: token, diff --git a/server/src/kubero.ts b/server/src/kubero.ts index dc5ef1d79..410bbd2a9 100644 --- a/server/src/kubero.ts +++ b/server/src/kubero.ts @@ -4,6 +4,7 @@ import { IApp, IPipeline, IPipelineList, IKubectlAppList, IDeployKeyPair, IKubec import { IPullrequest } from './git/types'; import { App, KubectlTemplate } from './modules/application'; import { Buildpack } from './modules/config'; +import { Audit } from './modules/audit'; import { GithubApi } from './git/github'; import { BitbucketApi } from './git/bitbucket'; import { GiteaApi } from './git/gitea'; @@ -33,8 +34,9 @@ export class Kubero { private pipelineStateList: IPipeline[] = []; private podLogStreams: string[]= [] public config: IKuberoConfig; + private audit: Audit; - constructor(io: Server) { + constructor(io: Server, audit: Audit) { this.config = this.loadConfig(process.env.KUBERO_CONFIG_PATH as string || './config.yaml'); this.kubectl = new Kubectl(this.config); this._io = io; @@ -45,6 +47,8 @@ export class Kubero { this.gitlabApi = new GitlabApi(process.env.GITLAB_BASEURL as string, process.env.GITLAB_PERSONAL_ACCESS_TOKEN as string); this.bitbucketApi = new BitbucketApi(process.env.BITBUCKET_USERNAME as string, process.env.BITBUCKET_APP_PASSWORD as string); debug.debug('Kubero Config: '+JSON.stringify(this.config)); + + this.audit = audit; } public getKubernetesVersion() { @@ -65,12 +69,12 @@ export class Kubero { for (const phase of pipeline.phases) { if (phase.enabled == true) { - debug.log("Checking Namespace: "+pipeline.name+"-"+phase.name); + debug.log("Loading Namespace: "+pipeline.name+"-"+phase.name); this.listAppsInNamespace(pipeline.name, phase.name) .then(appsList => { if (appsList) { for (const app of appsList.items) { - debug.log("added App to state: "+app.spec.name); + debug.log("Loading App: "+app.spec.name); this.appStateList.push(app.spec); } } @@ -150,6 +154,17 @@ export class Kubero { this.updateState(); this.kubectl.createEvent('Normal', 'Created', 'pipeline.created', 'created new pipeline: '+pipeline.name); + this.audit?.log({ + user: '', + severity: 'normal', + action: 'create', + namespace: '', + phase: '', + app: '', + pipeline: pipeline.name, + resource: 'pipeline', + message: 'created new pipeline: '+pipeline.name + }); // update agents const message = { @@ -184,6 +199,17 @@ export class Kubero { this.updateState(); this.kubectl.createEvent('Normal', 'Updated', 'pipeline.updated', 'updated pipeline: '+pipeline.name); + this.audit?.log({ + user: '', + severity: 'normal', + action: 'update', + namespace: '', + phase: '', + app: '', + pipeline: pipeline.name, + resource: 'pipeline', + message: 'updated pipeline: '+pipeline.name + }); // update agents const message = { @@ -260,6 +286,17 @@ export class Kubero { } as IMessage; this._io.emit('updatedPipelines', message); this.kubectl.createEvent('Normal', 'Deleted', 'pipeline.deleted', 'deleted pipeline: '+pipelineName); + this.audit?.log({ + user: '', + severity: 'normal', + action: 'delete', + namespace: '', + phase: '', + app: '', + pipeline: pipelineName, + resource: 'pipeline', + message: 'deleted pipeline: '+pipelineName + }); } }) .catch(error => { @@ -297,6 +334,18 @@ export class Kubero { this._io.emit('updatedApps', message); this.kubectl.createEvent('Normal', 'Created', 'app.created', 'created new app: '+app.name+' in '+ app.pipeline+' phase: '+app.phase); + this.audit?.log({ + user: '', + severity: 'normal', + action: 'create', + namespace: app.name+'-'+app.phase, + phase: app.phase, + app: app.name, + pipeline: app.pipeline, + resource: 'app', + message: 'created new app: '+app.name+' in '+ app.pipeline+' phase: '+app.phase + }); + } } @@ -320,6 +369,17 @@ export class Kubero { await this.kubectl.updateApp(app, resourceVersion, contextName); // IMPORTANT TODO : Update this.appStateList !! this.kubectl.createEvent('Normal', 'Updated', 'app.updated', 'updated app: '+app.name+' in '+ app.pipeline+' phase: '+app.phase); + this.audit?.log({ + user: '', + severity: 'normal', + action: 'update', + namespace: app.name+'-'+app.phase, + phase: app.phase, + app: app.name, + pipeline: app.pipeline, + resource: 'app', + message: 'updated app: '+app.name+' in '+ app.pipeline+' phase: '+app.phase + }); const message = { 'action': 'updated', 'pipelineName':app.pipeline, @@ -345,6 +405,17 @@ export class Kubero { await this.kubectl.deleteApp(pipelineName, phaseName, appName, contextName); this.removeAppFromState(pipelineName, phaseName, appName); this.kubectl.createEvent('Normal', 'Deleted', 'app.deleted', 'deleted app: '+appName+' in '+ pipelineName+' phase: '+phaseName); + this.audit?.log({ + user: '', + severity: 'normal', + action: 'delete', + namespace: appName+'-'+phaseName, + phase: phaseName, + app: appName, + pipeline: pipelineName, + resource: 'app', + message: 'deleted app: '+appName+' in '+ pipelineName+' phase: '+phaseName + }); const message = { 'action': 'deleted', 'pipelineName':pipelineName, @@ -441,6 +512,17 @@ export class Kubero { } as IMessage; this._io.emit('updatedApps', message); this.kubectl.createEvent('Normal', 'Restarted', 'app.restarted', 'restarted app: '+appName+' in '+ pipelineName+' phase: '+phaseName); + this.audit?.log({ + user: '', + severity: 'normal', + action: 'restart', + namespace: appName+'-'+phaseName, + phase: phaseName, + app: appName, + pipeline: pipelineName, + resource: 'app', + message: 'restarted app: '+appName+' in '+ pipelineName+' phase: '+phaseName + }); } } @@ -468,6 +550,17 @@ export class Kubero { } as IMessage; this._io.emit('updatedApps', message); this.kubectl.createEvent('Normal', 'Rebuild', 'app.restarted', 'restarted app: '+app.name+' in '+ app.pipeline+' phase: '+app.phase); + this.audit?.log({ + user: '', + severity: 'normal', + action: 'restart', + namespace: app.name+'-'+app.phase, + phase: app.phase, + app: app.name, + pipeline: app.pipeline, + resource: 'app', + message: 'restarted app: '+app.name+' in '+ app.pipeline+' phase: '+app.phase + }); } } /* @@ -574,6 +667,17 @@ export class Kubero { } as IMessage; this._io.emit('updatedApps', message); this.kubectl.createEvent('Normal', 'Pushed', 'pushed', 'pushed to branch: '+webhook.branch+' in '+ webhook.repo.ssh_url + ' for app: '+app.name + ' in pipeline: '+app.pipeline + ' phase: '+app.phase); + this.audit?.log({ + user: '', + severity: 'normal', + action: 'push', + namespace: app.name+'-'+app.phase, + phase: app.phase, + app: app.name, + pipeline: app.pipeline, + resource: 'app', + message: 'pushed to branch: '+webhook.branch+' in '+ webhook.repo.ssh_url + ' for app: '+app.name + ' in pipeline: '+app.pipeline + ' phase: '+app.phase + }); this.rebuildApp(app); } } @@ -770,6 +874,17 @@ export class Kubero { this.newApp(app); this.kubectl.createEvent('Normal', 'Opened', 'pr.opened', 'opened pull request: '+branch+' in '+ ssh_url); + this.audit?.log({ + user: '', + severity: 'normal', + action: 'pr.opened', + namespace: app.name+'-'+app.phase, + phase: app.phase, + app: app.name, + pipeline: app.pipeline, + resource: 'app', + message: 'opened pull request: '+branch+' in '+ ssh_url + }); } } } @@ -788,6 +903,17 @@ export class Kubero { this.deleteApp(app.pipeline, app.phase, websaveTitle); this.kubectl.createEvent('Normal', 'Closed', 'pr.closed', 'closed pull request: '+branch+' in '+ ssh_url); + this.audit?.log({ + user: '', + severity: 'normal', + action: 'pr.closed', + namespace: app.name+'-'+app.phase, + phase: app.phase, + app: app.name, + pipeline: app.pipeline, + resource: 'app', + message: 'closed pull request: '+branch+' in '+ ssh_url + }); } } } diff --git a/server/src/modules/audit.ts b/server/src/modules/audit.ts new file mode 100644 index 000000000..d3bf38231 --- /dev/null +++ b/server/src/modules/audit.ts @@ -0,0 +1,261 @@ +​import { Database } from 'sqlite3'; +import * as fs from 'fs'; + +export interface AuditEntry { + user: string, + severity: 'normal' | 'info' | 'warning' | 'error', + action: string, + resource: 'system' | 'app' | 'pipeline' | 'phase' | 'namespace' | 'addon' | 'settings' | 'user' | 'events' | 'security' | 'templates' | 'config' | 'addons' | 'kubernetes' | 'unknown', + //resource: string, + namespace: string, + phase: string, + app: string, + pipeline: string, + message: string, +} + +export class Audit { + + private db: Database | undefined; + private logmaxbackups: number = 1000; + private enabled: boolean = true; + private dbpath: string = './db'; + + constructor(dbpath: string = './db', logmaxbackups: number = 1000) { + if (process.env.KUBERO_AUDIT !== 'true') { + this.enabled = false; + return; + } + this.dbpath = dbpath; + this.logmaxbackups = logmaxbackups; + } + + public async init() { + if (!this.enabled) { + return; + } + + if (!fs.existsSync(this.dbpath)){ + try { + fs.mkdirSync(this.dbpath); + } catch (error) { + console.error(error); + } + } + this.db = new Database(this.dbpath + '/kubero.db', (err) => { + if (err) { + console.error(err.message); + } + console.log('Connected to the kubero database.'); + this.createTables(); + }); + } + + private createTables() { + this.db?.run(`CREATE TABLE IF NOT EXISTS audit ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + timestamp DATETIME DEFAULT CURRENT_TIMESTAMP, + user TEXT, + action TEXT, + namespace TEXT, + phase TEXT, + app TEXT, + pipeline TEXT, + resource TEXT, + message TEXT + )`, (err) => { + if (err) { + console.log(err); + } + }); + } + + public logDelayed(entry: AuditEntry, delay: number = 1000) { + setTimeout(() => { + this.log(entry); + }, delay); + } + + public log(entry: AuditEntry) { + //console.log("log") + //console.log(entry) + if (!this.enabled) { + return; + } + this.db?.run(`INSERT INTO audit ( + user, + action, + namespace, + phase, + app, + pipeline, + resource, + message + ) VALUES (?, ?, ?, ?, ?, ?, ?, ?)`, [ + entry.user, + entry.action, + entry.namespace, + entry.phase, + entry.app, + entry.pipeline, + entry.resource, + entry.message + ], (err) => { + if (err) { + console.log(err); + } + } + ); + + this.limit(this.logmaxbackups); + } + + public get(limit: number = 100): Promise { + if (!this.enabled) { + return new Promise((resolve, reject) => { + resolve([]); + }); + } + return new Promise((resolve, reject) => { + this.db?.all(`SELECT * FROM audit ORDER BY timestamp DESC LIMIT ?`, [limit], (err, rows) => { + if (err) { + reject(err); + } + resolve(rows as AuditEntry[]); + }); + }); + } + + public getFiltered(limit: number = 100, filter: string = ''): Promise { + if (!this.enabled) { + return new Promise((resolve, reject) => { + resolve([]); + }); + } + return new Promise((resolve, reject) => { + this.db?.all(`SELECT * FROM audit WHERE message LIKE ? ORDER BY timestamp DESC LIMIT ?`, ['%'+filter+'%', limit], (err, rows) => { + if (err) { + reject(err); + } + resolve(rows as AuditEntry[]); + }); + }); + } + + public getAppEntries(app: string, limit: number = 100): Promise { + if (!this.enabled) { + return new Promise((resolve, reject) => { + resolve([]); + }); + } + return new Promise((resolve, reject) => { + this.db?.all(`SELECT * FROM audit WHERE app = ? ORDER BY timestamp DESC LIMIT ?`, [app, limit], (err, rows) => { + if (err) { + reject(err); + } + resolve(rows as AuditEntry[]); + }); + }); + }; + + public getPhaseEntries(phase: string, limit: number = 100): Promise { + if (!this.enabled) { + return new Promise((resolve, reject) => { + resolve([]); + }); + } + return new Promise((resolve, reject) => { + this.db?.all(`SELECT * FROM audit WHERE phase = ? ORDER BY timestamp DESC LIMIT ?`, [phase, limit], (err, rows) => { + if (err) { + reject(err); + } + resolve(rows as AuditEntry[]); + }); + }); + }; + + public getPipelineEntries(pipeline: string, limit: number = 100): Promise { + if (!this.enabled) { + return new Promise((resolve, reject) => { + resolve([]); + }); + } + return new Promise((resolve, reject) => { + this.db?.all(`SELECT * FROM audit WHERE pipeline = ? ORDER BY timestamp DESC LIMIT ?`, [pipeline, limit], (err, rows) => { + if (err) { + reject(err); + } + resolve(rows as AuditEntry[]); + }); + }); + }; + + private flush(): Promise { + return new Promise((resolve, reject) => { + this.db?.run(`DELETE FROM audit`, (err) => { + if (err) { + reject(err); + } + resolve(); + }); + }); + } + + private close(): Promise { + return new Promise((resolve, reject) => { + this.db?.close((err) => { + if (err) { + reject(err); + } + resolve(); + }); + }); + } + + public async reset(): Promise { + if (!this.enabled) { + return; + } + await this.flush(); + await this.close(); + fs.unlinkSync('./db/kubero.db'); + this.db = new Database('./db/kubero.db', (err) => { + if (err) { + console.error(err.message); + } + console.log('Connected to the kubero database.'); + }); + this.createTables(); + } + + // remove the oldest entries from database if the limit is reached + private limit = (limit: number = 1000) => { + this.db?.run(`DELETE FROM audit WHERE id IN (SELECT id FROM audit ORDER BY timestamp DESC LIMIT -1 OFFSET ?)`, [limit], (err) => { + if (err) { + console.log(err); + } + }) + } + + public count(): Promise { + if (!this.enabled) { + return new Promise((resolve, reject) => { + resolve(0); + }); + } + return new Promise((resolve, reject) => { + this.db?.get(`SELECT COUNT(*) as entries FROM audit`, (err, row) => { + if (err) { + reject(err); + } + resolve((row as any)['entries'] as number); + }); + }); + } + + public getAuditEnabled(): boolean { + return this.enabled; + } + + +} \ No newline at end of file diff --git a/server/src/modules/kubectl.ts b/server/src/modules/kubectl.ts index 9f3d3858d..9a5fda086 100644 --- a/server/src/modules/kubectl.ts +++ b/server/src/modules/kubectl.ts @@ -53,19 +53,19 @@ export class Kubectl { //this.kc.loadFromDefault(); // should not be used since we want also load from base64 ENV var if (process.env.KUBECONFIG_BASE64) { - debug.log("load kubectl config from base64"); + debug.log("Use kubectl config from base64"); let buff = Buffer.from(process.env.KUBECONFIG_BASE64, 'base64'); const kubeconfig = buff.toString('ascii'); this.kc.loadFromString(kubeconfig); } else if(process.env.KUBECONFIG_PATH) { - debug.log("load kubectl config from file"); + debug.log("Use kubectl config from file"); this.kc.loadFromFile(process.env.KUBECONFIG_PATH); } else{ try { this.kc.loadFromCluster(); - debug.log("kubeconfig loaded from cluster"); + debug.log("Kubeconfig loaded from cluster"); } catch (error) { - debug.log("error loading from cluster"); + debug.log("Error loading from cluster"); debug.log(error); } } diff --git a/server/src/routes/auth.ts b/server/src/routes/auth.ts index 85b255556..037febf8c 100644 --- a/server/src/routes/auth.ts +++ b/server/src/routes/auth.ts @@ -35,7 +35,7 @@ Router.all("/session", (req: Request, res: Response) => { "buildPipeline": buildPipeline, "templatesEnabled": req.app.locals.kubero.getTemplateEnabled(), "kubernetesVersion": req.app.locals.kubero.getKubernetesVersion(), - //"templatesEnabled": true, + "auditEnabled": req.app.locals.audit.getAuditEnabled() } res.status(status).send(message) }) diff --git a/server/src/routes/logs.ts b/server/src/routes/logs.ts index 2f1de7a69..690c71561 100644 --- a/server/src/routes/logs.ts +++ b/server/src/routes/logs.ts @@ -52,6 +52,22 @@ Router.get('/events', authMiddleware, async function (req: Request, res: Respons res.send(events); }); +Router.get('/audit', authMiddleware, async function (req: Request, res: Response) { + // #swagger.tags = ['UI'] + // #swagger.summary = 'Get the Kubero audit log' + const limit = req.query.limit || 100; + const audit = await req.app.locals.audit.get(limit); + const count = await req.app.locals.audit.count(); + const response = { + audit: audit, + count: count, + limit: limit + } + + res.send(response); + +}); + Router.get('/metrics/:pipeline/:phase/:app', authMiddleware, async function (req: Request, res: Response) { // #swagger.tags = ['UI'] // #swagger.summary = 'Get metrics for a specific app' diff --git a/server/src/socket.ts b/server/src/socket.ts index 0de9b6c10..15765102e 100644 --- a/server/src/socket.ts +++ b/server/src/socket.ts @@ -8,7 +8,7 @@ export function init(httpServer: HttpServer) { debug('initializing'); const io = new Server(httpServer, { /* options */ }); - console.log('socket.io started') + console.log('⚡️[server]: socket.io started') io.on('connection', client => { debug.debug('socket.io connected') diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 000000000..d031dcfb4 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,852 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@gar/promisify@^1.0.1": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" + integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== + +"@npmcli/fs@^1.0.0": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-1.1.1.tgz#72f719fe935e687c56a4faecf3c03d06ba593257" + integrity sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ== + dependencies: + "@gar/promisify" "^1.0.1" + semver "^7.3.5" + +"@npmcli/move-file@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.1.2.tgz#1a82c3e372f7cae9253eb66d72543d6b8685c674" + integrity sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg== + dependencies: + mkdirp "^1.0.4" + rimraf "^3.0.2" + +"@tootallnate/once@1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" + integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== + +abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + +agent-base@6, agent-base@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + +agentkeepalive@^4.1.3: + version "4.5.0" + resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.5.0.tgz#2673ad1389b3c418c5a20c5d7364f93ca04be923" + integrity sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew== + dependencies: + humanize-ms "^1.2.1" + +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +"aproba@^1.0.3 || ^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" + integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== + +are-we-there-yet@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz#679df222b278c64f2cdba1175cdc00b0d96164bd" + integrity sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg== + dependencies: + delegates "^1.0.0" + readable-stream "^3.6.0" + +balanced-match@^1.0.0: + 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.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +bindings@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== + dependencies: + file-uri-to-path "1.0.0" + +bl@^4.0.3: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +buffer@^5.5.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + +cacache@^15.2.0: + version "15.3.0" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.3.0.tgz#dc85380fb2f556fe3dda4c719bfa0ec875a7f1eb" + integrity sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ== + dependencies: + "@npmcli/fs" "^1.0.0" + "@npmcli/move-file" "^1.0.1" + chownr "^2.0.0" + fs-minipass "^2.0.0" + glob "^7.1.4" + infer-owner "^1.0.4" + lru-cache "^6.0.0" + minipass "^3.1.1" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.2" + mkdirp "^1.0.3" + p-map "^4.0.0" + promise-inflight "^1.0.1" + rimraf "^3.0.2" + ssri "^8.0.1" + tar "^6.0.2" + unique-filename "^1.1.1" + +chownr@^1.1.1: + version "1.1.4" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + +chownr@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" + integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + +color-support@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" + integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +console-control-strings@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== + +debug@4, debug@^4.3.3: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +decompress-response@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" + integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== + dependencies: + mimic-response "^3.1.0" + +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== + +detect-libc@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.2.tgz#8ccf2ba9315350e1241b88d0ac3b0e1fbd99605d" + integrity sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +encoding@^0.1.12: + version "0.1.13" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" + integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== + dependencies: + iconv-lite "^0.6.2" + +end-of-stream@^1.1.0, end-of-stream@^1.4.1: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +env-paths@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" + integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== + +err-code@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" + integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== + +expand-template@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" + integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== + +file-uri-to-path@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== + +fs-constants@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== + +fs-minipass@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" + integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== + dependencies: + minipass "^3.0.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +gauge@^4.0.3: + version "4.0.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-4.0.4.tgz#52ff0652f2bbf607a989793d53b751bef2328dce" + integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg== + dependencies: + aproba "^1.0.3 || ^2.0.0" + color-support "^1.1.3" + console-control-strings "^1.1.0" + has-unicode "^2.0.1" + signal-exit "^3.0.7" + string-width "^4.2.3" + strip-ansi "^6.0.1" + wide-align "^1.1.5" + +github-from-package@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" + integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== + +glob@^7.1.3, glob@^7.1.4: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +graceful-fs@^4.2.6: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +has-unicode@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== + +http-cache-semantics@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" + integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== + +http-proxy-agent@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" + integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== + dependencies: + "@tootallnate/once" "1" + agent-base "6" + debug "4" + +https-proxy-agent@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== + dependencies: + agent-base "6" + debug "4" + +humanize-ms@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" + integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== + dependencies: + ms "^2.0.0" + +iconv-lite@^0.6.2: + version "0.6.3" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +ieee754@^1.1.13: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +infer-owner@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" + integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@^2.0.3, inherits@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +ini@~1.3.0: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +ip@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da" + integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ== + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-lambda@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" + integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +make-fetch-happen@^9.1.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz#53085a09e7971433e6765f7971bf63f4e05cb968" + integrity sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg== + dependencies: + agentkeepalive "^4.1.3" + cacache "^15.2.0" + http-cache-semantics "^4.1.0" + http-proxy-agent "^4.0.1" + https-proxy-agent "^5.0.0" + is-lambda "^1.0.1" + lru-cache "^6.0.0" + minipass "^3.1.3" + minipass-collect "^1.0.2" + minipass-fetch "^1.3.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + negotiator "^0.6.2" + promise-retry "^2.0.1" + socks-proxy-agent "^6.0.0" + ssri "^8.0.0" + +mimic-response@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" + integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== + +minimatch@^3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.2.0, minimist@^1.2.3: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +minipass-collect@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" + integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== + dependencies: + minipass "^3.0.0" + +minipass-fetch@^1.3.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-1.4.1.tgz#d75e0091daac1b0ffd7e9d41629faff7d0c1f1b6" + integrity sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw== + dependencies: + minipass "^3.1.0" + minipass-sized "^1.0.3" + minizlib "^2.0.0" + optionalDependencies: + encoding "^0.1.12" + +minipass-flush@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" + integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== + dependencies: + minipass "^3.0.0" + +minipass-pipeline@^1.2.2, minipass-pipeline@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" + integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== + dependencies: + minipass "^3.0.0" + +minipass-sized@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" + integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== + dependencies: + minipass "^3.0.0" + +minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3: + version "3.3.6" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" + integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== + dependencies: + yallist "^4.0.0" + +minipass@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" + integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== + +minizlib@^2.0.0, minizlib@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" + integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== + dependencies: + minipass "^3.0.0" + yallist "^4.0.0" + +mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" + integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== + +mkdirp@^1.0.3, mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@^2.0.0: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +napi-build-utils@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" + integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== + +negotiator@^0.6.2: + version "0.6.3" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + +node-abi@^3.3.0: + version "3.54.0" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.54.0.tgz#f6386f7548817acac6434c6cba02999c9aebcc69" + integrity sha512-p7eGEiQil0YUV3ItH4/tBb781L5impVmmx2E9FRKF7d18XXzp4PGT2tdYMFY6wQqgxD0IwNZOiSJ0/K0fSi/OA== + dependencies: + semver "^7.3.5" + +node-addon-api@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-7.0.0.tgz#8136add2f510997b3b94814f4af1cce0b0e3962e" + integrity sha512-vgbBJTS4m5/KkE16t5Ly0WW9hz46swAstv0hYYwMtbG7AznRhNyfLRe8HZAiWIpcHzoO7HxhLuBQj9rJ/Ho0ZA== + +node-gyp@8.x: + version "8.4.1" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-8.4.1.tgz#3d49308fc31f768180957d6b5746845fbd429937" + integrity sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w== + dependencies: + env-paths "^2.2.0" + glob "^7.1.4" + graceful-fs "^4.2.6" + make-fetch-happen "^9.1.0" + nopt "^5.0.0" + npmlog "^6.0.0" + rimraf "^3.0.2" + semver "^7.3.5" + tar "^6.1.2" + which "^2.0.2" + +nopt@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" + integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== + dependencies: + abbrev "1" + +npmlog@^6.0.0: + version "6.0.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830" + integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg== + dependencies: + are-we-there-yet "^3.0.0" + console-control-strings "^1.1.0" + gauge "^4.0.3" + set-blocking "^2.0.0" + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +prebuild-install@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.1.tgz#de97d5b34a70a0c81334fd24641f2a1702352e45" + integrity sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw== + dependencies: + detect-libc "^2.0.0" + expand-template "^2.0.3" + github-from-package "0.0.0" + minimist "^1.2.3" + mkdirp-classic "^0.5.3" + napi-build-utils "^1.0.1" + node-abi "^3.3.0" + pump "^3.0.0" + rc "^1.2.7" + simple-get "^4.0.0" + tar-fs "^2.0.0" + tunnel-agent "^0.6.0" + +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== + +promise-retry@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" + integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== + dependencies: + err-code "^2.0.2" + retry "^0.12.0" + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +rc@^1.2.7: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== + +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +safe-buffer@^5.0.1, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +"safer-buffer@>= 2.1.2 < 3.0.0": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +semver@^7.3.5: + version "7.5.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" + integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== + dependencies: + lru-cache "^6.0.0" + +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== + +signal-exit@^3.0.7: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +simple-concat@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" + integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== + +simple-get@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.1.tgz#4a39db549287c979d352112fa03fd99fd6bc3543" + integrity sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA== + dependencies: + decompress-response "^6.0.0" + once "^1.3.1" + simple-concat "^1.0.0" + +smart-buffer@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" + integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== + +socks-proxy-agent@^6.0.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz#2687a31f9d7185e38d530bef1944fe1f1496d6ce" + integrity sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ== + dependencies: + agent-base "^6.0.2" + debug "^4.3.3" + socks "^2.6.2" + +socks@^2.6.2: + version "2.7.1" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.7.1.tgz#d8e651247178fde79c0663043e07240196857d55" + integrity sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ== + dependencies: + ip "^2.0.0" + smart-buffer "^4.2.0" + +sqlite3@^5.1.7: + version "5.1.7" + resolved "https://registry.yarnpkg.com/sqlite3/-/sqlite3-5.1.7.tgz#59ca1053c1ab38647396586edad019b1551041b7" + integrity sha512-GGIyOiFaG+TUra3JIfkI/zGP8yZYLPQ0pl1bH+ODjiX57sPhrLU5sQJn1y9bDKZUFYkX1crlrPfSYt0BKKdkog== + dependencies: + bindings "^1.5.0" + node-addon-api "^7.0.0" + prebuild-install "^7.1.1" + tar "^6.1.11" + optionalDependencies: + node-gyp "8.x" + +ssri@^8.0.0, ssri@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" + integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== + dependencies: + minipass "^3.1.1" + +"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== + +tar-fs@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" + integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== + dependencies: + chownr "^1.1.1" + mkdirp-classic "^0.5.2" + pump "^3.0.0" + tar-stream "^2.1.4" + +tar-stream@^2.1.4: + version "2.2.0" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" + integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== + dependencies: + bl "^4.0.3" + end-of-stream "^1.4.1" + fs-constants "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.1.1" + +tar@^6.0.2, tar@^6.1.11, tar@^6.1.2: + version "6.2.0" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.0.tgz#b14ce49a79cb1cd23bc9b016302dea5474493f73" + integrity sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ== + dependencies: + chownr "^2.0.0" + fs-minipass "^2.0.0" + minipass "^5.0.0" + minizlib "^2.1.1" + mkdirp "^1.0.3" + yallist "^4.0.0" + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== + dependencies: + safe-buffer "^5.0.1" + +unique-filename@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" + integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== + dependencies: + unique-slug "^2.0.0" + +unique-slug@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" + integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== + dependencies: + imurmurhash "^0.1.4" + +util-deprecate@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +which@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +wide-align@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" + integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== + dependencies: + string-width "^1.0.2 || 2 || 3 || 4" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== From 5c8627f646a33c74b37ea25699c4723079a579e2 Mon Sep 17 00:00:00 2001 From: Gianni Carafa Date: Sun, 14 Jan 2024 21:58:18 +0100 Subject: [PATCH 59/95] pass user to method and audit logs --- client/src/components/events/view.vue | 4 +- server/src/configure.ts | 6 +-- server/src/kubero.ts | 46 +++++++++++-------- server/src/modules/audit.ts | 6 +-- server/src/modules/auth.ts | 23 ++++++++-- server/src/routes/apps.ts | 13 ++++-- server/src/routes/pipelines.ts | 29 ++++++++---- .../src/routes/{services.ts => templates.ts} | 0 8 files changed, 84 insertions(+), 43 deletions(-) rename server/src/routes/{services.ts => templates.ts} (100%) diff --git a/client/src/components/events/view.vue b/client/src/components/events/view.vue index 5f67b6947..e9913457c 100644 --- a/client/src/components/events/view.vue +++ b/client/src/components/events/view.vue @@ -14,7 +14,7 @@
- {{ event.title }} + {{ event.user }}: {{ event.title }}
{{ event.metadata.timestamp }} · v{{ event.metadata.id }} · {{ event.message }}
@@ -58,6 +58,7 @@ import axios from "axios"; import { defineComponent } from 'vue' type Event = { + user: string; title: string; message: string; metadata: { @@ -96,6 +97,7 @@ export default defineComponent({ for (let i = 0; i < auditEntries.length; i++) { const date = new Date(auditEntries[i].timestamp) const event = { + user: auditEntries[i].user, title: auditEntries[i].action + " " + auditEntries[i].resource, message: auditEntries[i].message, metadata: { diff --git a/server/src/configure.ts b/server/src/configure.ts index ae995ca15..0e54a20f4 100644 --- a/server/src/configure.ts +++ b/server/src/configure.ts @@ -11,7 +11,7 @@ import { RouterLogs } from "./routes/logs"; import { RouterPipelines } from "./routes/pipelines"; import { RouterRepo } from "./routes/repo"; import { Router as RouterSettings } from "./routes/settings"; -import { Router as RouterServices } from "./routes/services"; +import { Router as RouterTemplates } from "./routes/templates"; import { Router as RouterSecurity } from "./routes/security"; import { init } from './socket' import { Kubero } from './kubero'; @@ -51,7 +51,7 @@ export const configure = async (app: Express, server: Server) => { app.use('/api', RouterPipelines); app.use('/api', RouterRepo); app.use('/api', RouterSettings); - app.use('/api', RouterServices); + app.use('/api', RouterTemplates); app.use('/api', RouterSecurity); const swagger = SwaggerUi.setup(require('../swagger.json')); app.use('/api/docs', SwaggerUi.serve, swagger); @@ -67,7 +67,7 @@ export const configure = async (app: Express, server: Server) => { app.locals.audit = audit; const auditEntry: AuditEntry = { - user: '', + user: 'kubero', severity: 'normal', action: 'start', namespace: '', diff --git a/server/src/kubero.ts b/server/src/kubero.ts index 410bbd2a9..f3b771108 100644 --- a/server/src/kubero.ts +++ b/server/src/kubero.ts @@ -5,6 +5,7 @@ import { IPullrequest } from './git/types'; import { App, KubectlTemplate } from './modules/application'; import { Buildpack } from './modules/config'; import { Audit } from './modules/audit'; +import { User } from './modules/auth'; import { GithubApi } from './git/github'; import { BitbucketApi } from './git/bitbucket'; import { GiteaApi } from './git/gitea'; @@ -21,6 +22,7 @@ import { Stream } from 'stream'; debug('app:kubero') import { Kubectl } from './modules/kubectl'; +import { use } from 'passport'; export class Kubero { public kubectl: Kubectl; @@ -141,7 +143,7 @@ export class Kubero { } // creates a new pipeline in the same namespace as the kubero app - public async newPipeline(pipeline: IPipeline) { + public async newPipeline(pipeline: IPipeline, user: User) { debug.debug('create Pipeline: '+pipeline.name); if ( process.env.KUBERO_READONLY == 'true'){ @@ -155,7 +157,7 @@ export class Kubero { this.kubectl.createEvent('Normal', 'Created', 'pipeline.created', 'created new pipeline: '+pipeline.name); this.audit?.log({ - user: '', + user: user.username, severity: 'normal', action: 'create', namespace: '', @@ -178,7 +180,7 @@ export class Kubero { } // updates a new pipeline in the same namespace as the kubero app - public async updatePipeline(pipeline: IPipeline, resourceVersion: string) { + public async updatePipeline(pipeline: IPipeline, resourceVersion: string, user: User) { debug.debug('update Pipeline: '+pipeline.name); if ( process.env.KUBERO_READONLY == 'true'){ @@ -200,7 +202,7 @@ export class Kubero { this.kubectl.createEvent('Normal', 'Updated', 'pipeline.updated', 'updated pipeline: '+pipeline.name); this.audit?.log({ - user: '', + user: user.username, severity: 'normal', action: 'update', namespace: '', @@ -263,7 +265,7 @@ export class Kubero { } // delete a pipeline and all its namespaces/phases - public deletePipeline(pipelineName: string) { + public deletePipeline(pipelineName: string, user: User) { debug.debug('deletePipeline: '+pipelineName); if ( process.env.KUBERO_READONLY == 'true'){ @@ -287,7 +289,7 @@ export class Kubero { this._io.emit('updatedPipelines', message); this.kubectl.createEvent('Normal', 'Deleted', 'pipeline.deleted', 'deleted pipeline: '+pipelineName); this.audit?.log({ - user: '', + user: user.username, severity: 'normal', action: 'delete', namespace: '', @@ -306,7 +308,7 @@ export class Kubero { } // create a new app in a specified pipeline and phase - public async newApp(app: App) { + public async newApp(app: App, user: User) { debug.log('create App: '+app.name+' in '+ app.pipeline+' phase: '+app.phase + ' deploymentstrategy: '+app.deploymentstrategy); if ( process.env.KUBERO_READONLY == 'true'){ @@ -335,7 +337,7 @@ export class Kubero { this._io.emit('updatedApps', message); this.kubectl.createEvent('Normal', 'Created', 'app.created', 'created new app: '+app.name+' in '+ app.pipeline+' phase: '+app.phase); this.audit?.log({ - user: '', + user: user.username, severity: 'normal', action: 'create', namespace: app.name+'-'+app.phase, @@ -351,7 +353,7 @@ export class Kubero { } // update an app in a pipeline and phase - public async updateApp(app: App, resourceVersion: string) { + public async updateApp(app: App, resourceVersion: string, user: User) { debug.debug('update App: '+app.name+' in '+ app.pipeline+' phase: '+app.phase); await this.setContext(app.pipeline, app.phase); @@ -370,7 +372,7 @@ export class Kubero { // IMPORTANT TODO : Update this.appStateList !! this.kubectl.createEvent('Normal', 'Updated', 'app.updated', 'updated app: '+app.name+' in '+ app.pipeline+' phase: '+app.phase); this.audit?.log({ - user: '', + user: user.username, severity: 'normal', action: 'update', namespace: app.name+'-'+app.phase, @@ -392,7 +394,7 @@ export class Kubero { } // delete a app in a pipeline and phase - public async deleteApp(pipelineName: string, phaseName: string, appName: string) { + public async deleteApp(pipelineName: string, phaseName: string, appName: string, user: User) { debug.debug('delete App: '+appName+' in '+ pipelineName+' phase: '+phaseName); if ( process.env.KUBERO_READONLY == 'true'){ @@ -406,7 +408,7 @@ export class Kubero { this.removeAppFromState(pipelineName, phaseName, appName); this.kubectl.createEvent('Normal', 'Deleted', 'app.deleted', 'deleted app: '+appName+' in '+ pipelineName+' phase: '+phaseName); this.audit?.log({ - user: '', + user: user.username, severity: 'normal', action: 'delete', namespace: appName+'-'+phaseName, @@ -497,7 +499,7 @@ export class Kubero { return pipeline; } - public restartApp(pipelineName: string, phaseName: string, appName: string) { + public restartApp(pipelineName: string, phaseName: string, appName: string, user: User) { debug.debug('restart App: '+appName+' in '+ pipelineName+' phase: '+phaseName); const contextName = this.getContext(pipelineName, phaseName); if (contextName) { @@ -513,7 +515,7 @@ export class Kubero { this._io.emit('updatedApps', message); this.kubectl.createEvent('Normal', 'Restarted', 'app.restarted', 'restarted app: '+appName+' in '+ pipelineName+' phase: '+phaseName); this.audit?.log({ - user: '', + user: user.username, severity: 'normal', action: 'restart', namespace: appName+'-'+phaseName, @@ -872,10 +874,14 @@ export class Kubero { } let app = new App(appOptions); - this.newApp(app); + const user = { + username: 'unknown' + } as User; + + this.newApp(app, user); this.kubectl.createEvent('Normal', 'Opened', 'pr.opened', 'opened pull request: '+branch+' in '+ ssh_url); this.audit?.log({ - user: '', + user: user.username, severity: 'normal', action: 'pr.opened', namespace: app.name+'-'+app.phase, @@ -901,10 +907,14 @@ export class Kubero { app.gitrepo.ssh_url === ssh_url && app.branch === branch) { - this.deleteApp(app.pipeline, app.phase, websaveTitle); + const user = { + username: 'unknown' + } as User; + + this.deleteApp(app.pipeline, app.phase, websaveTitle, user); this.kubectl.createEvent('Normal', 'Closed', 'pr.closed', 'closed pull request: '+branch+' in '+ ssh_url); this.audit?.log({ - user: '', + user: user.username, severity: 'normal', action: 'pr.closed', namespace: app.name+'-'+app.phase, diff --git a/server/src/modules/audit.ts b/server/src/modules/audit.ts index d3bf38231..491592e77 100644 --- a/server/src/modules/audit.ts +++ b/server/src/modules/audit.ts @@ -112,7 +112,7 @@ export class Audit { public get(limit: number = 100): Promise { if (!this.enabled) { - return new Promise((resolve, reject) => { + return new Promise((resolve) => { resolve([]); }); } @@ -128,7 +128,7 @@ export class Audit { public getFiltered(limit: number = 100, filter: string = ''): Promise { if (!this.enabled) { - return new Promise((resolve, reject) => { + return new Promise((resolve) => { resolve([]); }); } @@ -144,7 +144,7 @@ export class Audit { public getAppEntries(app: string, limit: number = 100): Promise { if (!this.enabled) { - return new Promise((resolve, reject) => { + return new Promise((resolve) => { resolve([]); }); } diff --git a/server/src/modules/auth.ts b/server/src/modules/auth.ts index 618a637f9..b692f59f5 100644 --- a/server/src/modules/auth.ts +++ b/server/src/modules/auth.ts @@ -10,7 +10,7 @@ import { Request, Response, NextFunction } from 'express'; import * as crypto from "crypto" import axios from 'axios'; -type User = { +export type User = { id: number, method: string, username: string, @@ -211,7 +211,7 @@ export class Auth { }) } - public authMiddleware(req: Request, res: Response, next: NextFunction) { + public authMiddleware(req: Request, res: Response, next: NextFunction): void { if (typeof(req.isAuthenticated) !== "function" || !req.isAuthenticated()) { debug.debug("not authenticated") res.status(401).send('You are not authenticated') @@ -225,7 +225,7 @@ export class Auth { return next() } - public getAuthMiddleware() { + public getAuthMiddleware(): any { if (this.authentication === true) { return this.authMiddleware; } else { @@ -237,4 +237,21 @@ export class Auth { public getBearerMiddleware() { return this.passport.authenticate('bearer', { session: false }) } + + public getUser(req: Request): User { + let user: User = { + id: 0, + method: '', + username: 'anonymous' + } + + if (req.isAuthenticated()) { + const sessionWithPassport = req.session as any & { passport: User }; + user = sessionWithPassport.passport.user; + } + + //console.log("extractUser: "+JSON.stringify(user)) + + return user; + } } \ No newline at end of file diff --git a/server/src/routes/apps.ts b/server/src/routes/apps.ts index d8a572ff5..92a7b165b 100644 --- a/server/src/routes/apps.ts +++ b/server/src/routes/apps.ts @@ -141,7 +141,8 @@ Router.post('/cli/apps', bearerMiddleware, async function (req: Request, res: Re const app = createApp(req); - req.app.locals.kubero.newApp(app); + const user = auth.getUser(req); + req.app.locals.kubero.newApp(app, user); res.send("new"); }); @@ -149,8 +150,9 @@ Router.post('/cli/apps', bearerMiddleware, async function (req: Request, res: Re Router.post('/apps', authMiddleware, async function (req: Request, res: Response) { // #swagger.tags = ['UI'] // #swagger.summary = 'Create a new app' + const user = auth.getUser(req); const app = createApp(req); - req.app.locals.kubero.newApp(app); + req.app.locals.kubero.newApp(app, user); res.send("new"); }); @@ -254,7 +256,7 @@ Router.put('/pipelines/:pipeline/:phase/:app', authMiddleware, async function (r // #swagger.summary = 'Update an app in a specific pipeline' // #swagger.parameters['body'] = { in: 'body', description: 'App object', required: true, type: 'object' } - let appconfig: IApp = { + const appconfig: IApp = { name: req.params.app, pipeline: req.params.pipeline, phase: req.params.phase, @@ -290,9 +292,10 @@ Router.put('/pipelines/:pipeline/:phase/:app', authMiddleware, async function (r // WARNING: renaming the addon will cause dataloss !!! //normalizeAddonName(appconfig); - let app = new App(appconfig); + const app = new App(appconfig); - req.app.locals.kubero.updateApp(app, req.body.resourceVersion); + const user = auth.getUser(req); + req.app.locals.kubero.updateApp(app, req.body.resourceVersion, user); res.send("updated"); }); diff --git a/server/src/routes/pipelines.ts b/server/src/routes/pipelines.ts index 031e8ef0b..01cd8f65b 100644 --- a/server/src/routes/pipelines.ts +++ b/server/src/routes/pipelines.ts @@ -63,7 +63,8 @@ Router.post('/cli/pipelines',bearerMiddleware, async function (req: Request, res dockerimage: req.body.dockerimage, deploymentstrategy: req.body.deploymentstrategy, }; - req.app.locals.kubero.newPipeline(pipeline); + const user = auth.getUser(req); + req.app.locals.kubero.newPipeline(pipeline, user); res.send(pipeline); }); @@ -71,7 +72,8 @@ Router.post('/pipelines',authMiddleware, async function (req: Request, res: Resp // #swagger.tags = ['UI'] // #swagger.summary = 'Create a new pipeline' // #swagger.parameters['body'] = { in: 'body', description: 'Pipeline object', required: true, type: 'object' } - let pipeline: IPipeline = { + const user = auth.getUser(req); + const pipeline: IPipeline = { name: req.body.pipelineName, domain: req.body.domain, phases: req.body.phases, @@ -81,7 +83,7 @@ Router.post('/pipelines',authMiddleware, async function (req: Request, res: Resp dockerimage: req.body.dockerimage, deploymentstrategy: req.body.deploymentstrategy, }; - req.app.locals.kubero.newPipeline(pipeline); + req.app.locals.kubero.newPipeline(pipeline, user); res.send("new"); }); @@ -90,7 +92,8 @@ Router.put('/pipelines/:pipeline',authMiddleware, async function (req: Request, // #swagger.tags = ['UI'] // #swagger.summary = 'Edit a pipeline' // #swagger.parameters['body'] = { in: 'body', description: 'Pipeline object', required: true, type: 'object' } - let pipeline: IPipeline = { + const user = auth.getUser(req); + const pipeline: IPipeline = { name: req.body.pipelineName, domain: req.body.domain, phases: req.body.phases, @@ -100,7 +103,7 @@ Router.put('/pipelines/:pipeline',authMiddleware, async function (req: Request, dockerimage: req.body.dockerimage, deploymentstrategy: req.body.deploymentstrategy, }; - req.app.locals.kubero.updatePipeline(pipeline, req.body.resourceVersion); + req.app.locals.kubero.updatePipeline(pipeline, req.body.resourceVersion, user); res.send("new"); }); @@ -152,7 +155,8 @@ Router.get('/pipelines/:pipeline', authMiddleware, async function (req: Request, Router.delete('/pipelines/:pipeline', authMiddleware, async function (req: Request, res: Response) { // #swagger.tags = ['UI'] // #swagger.summary = 'Delete a pipeline' - await req.app.locals.kubero.deletePipeline(encodeURI(req.params.pipeline)); + const user = auth.getUser(req); + await req.app.locals.kubero.deletePipeline(encodeURI(req.params.pipeline), user); res.send("pipeline "+encodeURI(req.params.pipeline)+" deleted"); }); @@ -166,8 +170,9 @@ Router.delete('/cli/pipelines/:pipeline', bearerMiddleware, async function (req: "bearerFormat": 'JWT', } }] */ + const user = auth.getUser(req); try { - await req.app.locals.kubero.deleteApp(req.params.pipeline, req.params.phase, req.params.app); + await req.app.locals.kubero.deletePipeline(encodeURI(req.params.pipeline), user); res.send("pipeline "+encodeURI(req.params.pipeline)+" deleted"); } catch (error) { console.log(error); @@ -179,8 +184,9 @@ Router.delete('/cli/pipelines/:pipeline', bearerMiddleware, async function (req: Router.delete('/pipelines/:pipeline/:phase/:app', authMiddleware, async function (req: Request, res: Response) { // #swagger.tags = ['UI'] // #swagger.summary = 'Delete an app' + const user = auth.getUser(req); try { - await req.app.locals.kubero.deleteApp(req.params.pipeline, req.params.phase, req.params.app); + await req.app.locals.kubero.deleteApp(req.params.pipeline, req.params.phase, req.params.app, user); // sanityze params const pipeline = encodeURI(req.params.pipeline); @@ -210,8 +216,9 @@ Router.delete('/cli/pipelines/:pipeline/:phase/:app', bearerMiddleware, async fu "bearerFormat": 'JWT', } }] */ + const user = auth.getUser(req); try { - await req.app.locals.kubero.deleteApp(req.params.pipeline, req.params.phase, req.params.app); + await req.app.locals.kubero.deleteApp(req.params.pipeline, req.params.phase, req.params.app, user); // sanityze params const pipeline = encodeURI(req.params.pipeline); @@ -317,8 +324,10 @@ Router.get('/pipelines/:pipeline/apps', authMiddleware, async function (req: Req Router.get('/pipelines/:pipeline/:phase/:app/restart', authMiddleware, async function (req: Request, res: Response) { // #swagger.tags = ['UI'] // #swagger.summary = 'Restart an app' + + const user = auth.getUser(req); try { - await req.app.locals.kubero.restartApp(req.params.pipeline, req.params.phase, req.params.app); + await req.app.locals.kubero.restartApp(req.params.pipeline, req.params.phase, req.params.app, user); res.send("restarted"); } catch (error) { console.log(error); diff --git a/server/src/routes/services.ts b/server/src/routes/templates.ts similarity index 100% rename from server/src/routes/services.ts rename to server/src/routes/templates.ts From d053a136727f54500fed1520fa5b3e77135ff0c6 Mon Sep 17 00:00:00 2001 From: Gianni Carafa Date: Tue, 16 Jan 2024 22:21:16 +0100 Subject: [PATCH 60/95] add activity view --- client/package.json | 2 +- client/src/components/apps/addons.vue | 42 ++- client/src/components/apps/appstats.vue | 339 ++++++++++++++++++ client/src/components/apps/detail.vue | 26 +- client/src/components/apps/events.vue | 28 +- client/src/components/apps/eventsAudit.vue | 98 +++++ .../src/components/apps/eventsKubernetes.vue | 183 ++++++++++ client/src/components/apps/logstab.vue | 2 + client/src/components/apps/overview.vue | 54 +++ .../src/components/apps/vulnerabilities.vue | 6 +- client/src/components/pipelines/appcard.vue | 11 +- client/src/components/pipelines/prcard.vue | 1 + client/yarn.lock | 152 ++++---- 13 files changed, 847 insertions(+), 97 deletions(-) create mode 100644 client/src/components/apps/appstats.vue create mode 100644 client/src/components/apps/eventsAudit.vue create mode 100644 client/src/components/apps/eventsKubernetes.vue create mode 100644 client/src/components/apps/overview.vue diff --git a/client/package.json b/client/package.json index 7ad097d31..2d44c8f7d 100644 --- a/client/package.json +++ b/client/package.json @@ -20,7 +20,7 @@ "roboto-fontface": "*", "socket.io-client": "^4.7.3", "sweetalert2": "^11.10.2", - "vue": "^3.3.0", + "vue": "^3.4.0", "vue-chartjs": "^5.3.0", "vue-router": "^4.2.0", "vue-socket.io-extended": "^4.2.0", diff --git a/client/src/components/apps/addons.vue b/client/src/components/apps/addons.vue index 36479cb1c..cac552200 100644 --- a/client/src/components/apps/addons.vue +++ b/client/src/components/apps/addons.vue @@ -22,23 +22,25 @@

{{ addon.id }}

- - - edit - - - delete - +
+ + + edit + + + delete + +
@@ -53,7 +55,7 @@ persistent max-width="600px" > - + + + + \ No newline at end of file diff --git a/client/src/components/apps/vulnerabilities.vue b/client/src/components/apps/vulnerabilities.vue index 13da25377..de423cfd9 100644 --- a/client/src/components/apps/vulnerabilities.vue +++ b/client/src/components/apps/vulnerabilities.vue @@ -2,7 +2,7 @@ -

Vulnerabilities in {{ app }}

+
\ No newline at end of file diff --git a/client/src/components/pipelines/appcard.vue b/client/src/components/pipelines/appcard.vue index a92641656..5745c8cdd 100644 --- a/client/src/components/pipelines/appcard.vue +++ b/client/src/components/pipelines/appcard.vue @@ -5,6 +5,7 @@ outlined elevation="2" color="cardBackground" + style="max-width: 600px;" v-if="deleted === false" > @@ -59,8 +60,8 @@ - CPU - Memory + CPU + Memory @@ -69,9 +70,9 @@ - Pod - CPU - Memory + Pod + CPU + Memory {{metric.name}} diff --git a/client/src/components/pipelines/prcard.vue b/client/src/components/pipelines/prcard.vue index 7f45ba3ed..6f89179fa 100644 --- a/client/src/components/pipelines/prcard.vue +++ b/client/src/components/pipelines/prcard.vue @@ -6,6 +6,7 @@ elevation="0" color="cardBackground" v-if="deleted === false" + style="max-width: 600px;" > \ No newline at end of file + + + \ No newline at end of file diff --git a/client/src/components/apps/overview.vue b/client/src/components/apps/overview.vue index 5bb2f82e5..e7af4d5ac 100644 --- a/client/src/components/apps/overview.vue +++ b/client/src/components/apps/overview.vue @@ -2,7 +2,7 @@ - + diff --git a/client/src/components/apps/vulnerabilities.vue b/client/src/components/apps/vulnerabilities.vue index de423cfd9..dc824f478 100644 --- a/client/src/components/apps/vulnerabilities.vue +++ b/client/src/components/apps/vulnerabilities.vue @@ -34,7 +34,7 @@

Metadata

- + Last Scan @@ -93,7 +93,7 @@ - +
@@ -405,9 +405,9 @@ export default defineComponent({ }); - \ No newline at end of file diff --git a/client/src/components/pipelines/appcard.vue b/client/src/components/pipelines/appcard.vue index f92cdc548..390e37188 100644 --- a/client/src/components/pipelines/appcard.vue +++ b/client/src/components/pipelines/appcard.vue @@ -147,6 +147,7 @@ \ No newline at end of file diff --git a/client/src/router/index.ts b/client/src/router/index.ts index b8eadc48d..353964785 100644 --- a/client/src/router/index.ts +++ b/client/src/router/index.ts @@ -105,6 +105,12 @@ const routes = [ props: true, component: () => import('@/components/apps/logs.vue'), }, + { + path: '/popup/console/:pipeline/:phase/:app', + name: 'Pupup Console', + props: true, + component: () => import('@/components/apps/console.vue'), + } ], }, ] diff --git a/client/yarn.lock b/client/yarn.lock index 5d08cb978..3ac13ded4 100644 --- a/client/yarn.lock +++ b/client/yarn.lock @@ -1930,6 +1930,11 @@ xmlhttprequest-ssl@~2.0.0: resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz#91360c86b914e67f44dce769180027c0da618c67" integrity sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A== +xterm@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/xterm/-/xterm-5.3.0.tgz#867daf9cc826f3d45b5377320aabd996cb0fce46" + integrity sha512-8QqjlekLUFTrU6x7xck1MsPzPA571K5zNqWm0M0oroYEWVOptZ0+ubQSkQ3uxIEhcIHRujJy6emDWX4A7qyFzg== + yallist@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" From bde6f224c5f5e0b9bc2dc3953fee30827bf69315 Mon Sep 17 00:00:00 2001 From: Gianni Carafa Date: Mon, 29 Jan 2024 22:24:10 +0100 Subject: [PATCH 89/95] (WIP) working static console --- server/src/kubero.ts | 63 +++++++++++++++++++++++++++++++++++ server/src/modules/kubectl.ts | 27 ++++++++++++++- server/src/routes/logs.ts | 22 +++++++++++- 3 files changed, 110 insertions(+), 2 deletions(-) diff --git a/server/src/kubero.ts b/server/src/kubero.ts index ac25f0f6f..0a6a7d6c1 100644 --- a/server/src/kubero.ts +++ b/server/src/kubero.ts @@ -37,6 +37,7 @@ export class Kubero { private podLogStreams: string[]= [] public config: IKuberoConfig; private audit: Audit; + private execStreams: {[key: string]: {websocket: WebSocket, stream: Stream}} = {}; constructor(io: Server, audit: Audit) { this.config = this.loadConfig(process.env.KUBERO_CONFIG_PATH as string || './config.yaml'); @@ -977,6 +978,68 @@ export class Kubero { return this.config.podSizeList; } + public async execInContainer(pipelineName: string, phaseName: string, appName: string, podName: string, containerName: string, command: string, user: User) { + const contextName = this.getContext(pipelineName, phaseName); + if (contextName) { + const streamname = `${pipelineName}-${phaseName}-${appName}-${containerName}`; + + if ( process.env.KUBERO_READONLY == 'true'){ + console.log('KUBERO_READONLY is set to true, not deleting app'); + return; + } + + if ( this.execStreams[streamname] ) { + if (this.execStreams[streamname].websocket.readyState == this.execStreams[streamname].websocket.OPEN) { + console.log('execInContainer: execStream already running'); + return; + } else { + console.log('execInContainer: execStream already running but not open, deleting'); + delete this.execStreams[streamname]; + } + } + + const execStream = new Stream.PassThrough(); + + const namespace = pipelineName+'-'+phaseName; + const ws = await this.kubectl.execInContainer(namespace, podName, containerName, command, execStream) + .catch(error => { + console.log(error); + return; + }); + + if (!ws || ws.readyState != ws.OPEN) { + console.log('execInContainer: ws is undefined or not open'); + return; + } + + let stream = { + websocket: ws as unknown as WebSocket, + stream: execStream as Stream + }; + this.execStreams[streamname] = stream; + + // sending the terminal output to the client + ws.on('message', (data: Buffer) => { + const roomname = `${pipelineName}-${phaseName}-${appName}-terminal`; + //console.log('execInContainer message', roomname, data.toString()); + this._io.to(roomname).emit('consoleresponse', data.toString()) + }); + + // Sending the terminal input to the container + this._io.on('connection', client => { + //console.log('connection'); + client.on('terminal', (data: any) => { + //console.log('terminal input', data.data); + //console.log('ws.OPEN', ws.readyState == ws.OPEN); + //console.log(ws.url); + //console.log(ws.eventNames()); + execStream.write(data.data); + } + )} + ); + } + } + private logcolor(str: string) { let hash = 0; for (var i = 0; i < str.length; i++) { diff --git a/server/src/modules/kubectl.ts b/server/src/modules/kubectl.ts index f71c31422..9e1c95825 100644 --- a/server/src/modules/kubectl.ts +++ b/server/src/modules/kubectl.ts @@ -3,6 +3,8 @@ debug('app:kubectl') import { KubeConfig, + Attach, + Exec, VersionApi, CoreV1Api, AppsV1Api, @@ -30,7 +32,9 @@ import { App, KubectlApp } from './application'; import { KubectlPipeline } from './pipeline'; import { IAddon, IAddonMinimal } from './addons'; import { version } from 'os'; - +import { WebSocket } from 'ws'; +import stream from 'stream'; +import internal from 'stream'; export class Kubectl { private kc: KubeConfig; @@ -46,6 +50,8 @@ export class Kubectl { private patchUtils: PatchUtils = {} as PatchUtils; public log: KubeLog; public config: IKuberoConfig; + private attach: Attach = {} as Attach; + private exec: Exec = {} as Exec; constructor(config: IKuberoConfig) { this.config = config; @@ -79,6 +85,8 @@ export class Kubectl { this.networkingV1Api = this.kc.makeApiClient(NetworkingV1Api); this.metricsApi = new Metrics(this.kc); this.patchUtils = new PatchUtils(); + this.attach = new Attach(this.kc); + this.exec = new Exec(this.kc) this.customObjectsApi = this.kc.makeApiClient(CustomObjectsApi); } catch (error) { debug.log("error creating api clients. Check kubeconfig, cluster connectivity and context"); @@ -1067,4 +1075,21 @@ export class Kubectl { return ingresses.body.items; } + public async execInContainer(namespace: string, podName: string, containerName: string, command: string, stdin: internal.PassThrough): Promise { + //const command = ['ls', '-al', '.'] + //const command = ['bash'] + //const command = "bash" + const ws = await this.exec.exec( + namespace, + podName, + containerName, + command, + process.stdout as stream.Writable, + process.stderr as stream.Writable, + stdin, + true + ); + return ws + } + } \ No newline at end of file diff --git a/server/src/routes/logs.ts b/server/src/routes/logs.ts index 16c4ac6d5..1f130f259 100644 --- a/server/src/routes/logs.ts +++ b/server/src/routes/logs.ts @@ -8,6 +8,7 @@ auth.init(); export const authMiddleware = auth.getAuthMiddleware(); import debug from 'debug'; +import { pipeline } from 'stream'; //import rateLimit from 'express-rate-limit'; debug('app:routes') @@ -115,4 +116,23 @@ Router.get('/metrics', authMiddleware, async function (req: Request, res: Respon const metrics = await req.app.locals.kubero.getNodeMetrics(); res.send(metrics); -}); \ No newline at end of file +}); + +Router.get('/console/:pipeline/:phase/:app/exec', authMiddleware, async function (req: Request, res: Response) { + // https://github.com/kubernetes-client/javascript/blob/master/examples/typescript/exec/exec-example.ts + + // #swagger.tags = ['UI'] + // #swagger.summary = 'Start a container console' + req.params.pipeline = "test"; + req.params.phase = "production"; + req.params.app = "go-httpbin"; + + let podName = "kubectl-kuberoapp-web-786b847d9f-4dw96"; + //podName = "go-httpbin-kuberoapp-web-86f8dd7f46-zph9h"; + const containerName = "kuberoapp-web"; + const command = 'sh' + const user = 'nobody' + + await req.app.locals.kubero.execInContainer(req.params.pipeline, req.params.phase, req.params.app, podName, containerName, command, user); + res.send(console); +}); From 202960d35b5a76b939358be82f8ff459a224087e Mon Sep 17 00:00:00 2001 From: Gianni Carafa Date: Tue, 30 Jan 2024 23:09:59 +0100 Subject: [PATCH 90/95] (WIP) Dynamic console connection --- client/src/components/apps/console.vue | 159 +++++++++++++++++-------- server/src/kubero.ts | 47 +++++++- server/src/routes/logs.ts | 32 +++++ server/src/types.ts | 24 +++- 4 files changed, 206 insertions(+), 56 deletions(-) diff --git a/client/src/components/apps/console.vue b/client/src/components/apps/console.vue index 3773f3890..c9c3b6887 100644 --- a/client/src/components/apps/console.vue +++ b/client/src/components/apps/console.vue @@ -1,11 +1,43 @@ @@ -18,43 +50,14 @@ import { useKuberoStore } from '../../stores/kubero' const socket = useKuberoStore().kubero.socket as any; -let termOptionsaaaa = { - cursorBlink: true, - /*cursorStyle: 'underline',*/ - fontSize: 14, - fontFamily: 'Inconsolata', - fontWeight: 'normal', - fontWeightBold: 'bold', - lineHeight: 1, - letterSpacing: 0, - allowTransparency: true, - theme: { - foreground: '#fff', - background: '#000', - cursor: '#fff', - cursorAccent: '#000', - selection: 'rgba(255, 255, 255, 0.3)', - black: '#000000', - red: '#ff0000', - green: '#33ff00', - yellow: '#ffff00', - blue: '#0066ff', - magenta: '#cc00ff', - cyan: '#00ffff', - white: '#d0d0d0', - brightBlack: '#808080', - brightRed: '#ff0000', - brightGreen: '#33ff00', - brightYellow: '#ffff00', - brightBlue: '#0066ff', - brightMagenta: '#cc00ff', - brightCyan: '#00ffff', - brightWhite: '#ffffff', - }, -} as ITerminalOptions; - +type Pod = { + name: string, + containers: string[], +} let termOptions = { + cols: 110, + rows: 40, cursorBlink: true, cursorInactiveStyle: 'underline', } as ITerminalOptions; @@ -68,11 +71,8 @@ export default defineComponent({ } }, mounted() { - this.createTerminal() - this.socketJoin() - //this.attacheToContainer() - this.execInContainer() - //this.startLogs() + this.loadPods() + //this.connectToFirstPod() }, unmounted() { this.socketLeave() @@ -93,19 +93,59 @@ export default defineComponent({ }, computed: { room(): string { - return `${this.pipeline}-${this.phase}-${this.app}-terminal`; - }, + return `${this.pipeline}-${this.phase}-${this.app}-${this.pod.name}-${this.container}-terminal`; + } }, data: () => ({ - containersList: ['MISSING', 'example'] as string[], - container: "MISSING", + connected: false, + commands: ['sh', 'bash'] as string[], + command: 'sh' as string, + container: "MISSING" as string, + pods: [{name: 'kubectl-kuberoapp-web-786b847d9f-4dw96', containers: ['kubero-web', 'example']}] as Pod[], + pod: {name: 'kubectl-kuberoapp-web-786b847d9f-4dw96', containers: ['kubero-web', 'example']} as Pod, }), methods: { + loadPods() { + axios.get(`/api/status/pods/${this.pipeline}/${this.phase}`).then((response) => { + //this.loadContainers(); + for (let pod of response.data) { + const p = {name: pod.name, containers: pod.containers.map((c: any) => c.name)} as Pod; + this.pods.push(p); + } + }); + }, + disconnect() { + socket.emit("terminal", { + room: this.room, + data: "exit\r\nexit\r\nexit\r\nexit\r\nexit\r\n", + }); + // wait a bit for the exit to be processed + setTimeout(() => { + this.socketLeave() + }, 1000); + this.connected = false; + term.dispose() + }, + connect() { + this.createTerminal() + this.socketJoin() + this.execInContainer() + this.connected = true; + }, + connectToFirstPod() { + if (this.pods.length == 0) { + return + } + this.pod = this.pods[0]; + this.container = this.pod.containers[0]; + this.connect() + }, createTerminal() { //const room = `${this.pipeline}-${this.phase}-${this.app}-terminal`; term.open(document.getElementById('terminal') as HTMLElement); //term.write('Hello from \x1B[1;3;31mxterm.js\x1B[0m $ ') //term.clear() + term.focus() socket.on("terminal", (data: any) => { console.log("terminal", data); @@ -117,7 +157,7 @@ export default defineComponent({ }) term.onData((data) => { - console.log("onData", data); + //console.log("onData", data); socket.emit("terminal", { room: this.room, @@ -198,20 +238,26 @@ export default defineComponent({ }, socketLeave() { console.log("socketLeave", this.room); + term.write("exit\r\n") socket.emit("leave", { room: this.room, }); }, - execInContainer() { + execInContainer2() { axios.get(`/api/console/${this.pipeline}/${this.phase}/${this.app}/exec`).then(() => { console.log(`attached to container ${this.container}`); }); }, - attacheToContainer() { - axios.get(`/api/console/${this.pipeline}/${this.phase}/${this.app}/attache`).then(() => { + execInContainer(){ + axios.post(`/api/console/${this.pipeline}/${this.phase}/${this.app}/exec`, { + podName: this.pod.name, + containerName: this.container, + command: this.command, + }).then(() => { console.log(`attached to container ${this.container}`); }); - }, + + } }, }); @@ -231,6 +277,15 @@ a:link { text-decoration: none;} background-color: #1E1E1E; /*#444*/ } +.v-row.console-bar { + background-color: #1E1E1E; /*#444*/ + color: #9F9F9F; +} + +.v-application { + background-color: #1E1E1E; /*#444*/ +} + .console { height: 100%; overflow-x: scroll; diff --git a/server/src/kubero.ts b/server/src/kubero.ts index 0a6a7d6c1..89f8604a8 100644 --- a/server/src/kubero.ts +++ b/server/src/kubero.ts @@ -1,6 +1,6 @@ import debug from 'debug'; import { Server } from "socket.io"; -import { IApp, IPipeline, IPipelineList, IKubectlAppList, IDeployKeyPair, IKubectlPipelineList, IKubectlApp, ILoglines, IKuberoConfig, IMessage} from './types'; +import { IApp, IPipeline, IPipelineList, IKubectlAppList, IDeployKeyPair, IKubectlPipelineList, Workload, WorkloadContainer, IKubectlApp, ILoglines, IKuberoConfig, IMessage} from './types'; import { IPullrequest } from './git/types'; import { App, KubectlTemplate } from './modules/application'; import { Buildpack } from './modules/config'; @@ -981,7 +981,7 @@ export class Kubero { public async execInContainer(pipelineName: string, phaseName: string, appName: string, podName: string, containerName: string, command: string, user: User) { const contextName = this.getContext(pipelineName, phaseName); if (contextName) { - const streamname = `${pipelineName}-${phaseName}-${appName}-${containerName}`; + const streamname = `${pipelineName}-${phaseName}-${appName}-${podName}-${containerName}`; if ( process.env.KUBERO_READONLY == 'true'){ console.log('KUBERO_READONLY is set to true, not deleting app'); @@ -1020,7 +1020,7 @@ export class Kubero { // sending the terminal output to the client ws.on('message', (data: Buffer) => { - const roomname = `${pipelineName}-${phaseName}-${appName}-terminal`; + const roomname = `${pipelineName}-${phaseName}-${appName}-${podName}-${containerName}-terminal`; //console.log('execInContainer message', roomname, data.toString()); this._io.to(roomname).emit('consoleresponse', data.toString()) }); @@ -1497,4 +1497,45 @@ export class Kubero { } } + public async getPods(pipelineName: string, phaseName: string): Promise { + const contextName = this.getContext(pipelineName, phaseName); + const namespace = pipelineName+'-'+phaseName; + + let workloads: Workload[] = []; + + if (contextName) { + this.kubectl.setCurrentContext(contextName); + const workload = await this.kubectl.getPods(namespace, contextName); + //return workload + for (const pod of workload) { + let workload = { + name: pod.metadata?.name, + namespace: pod.metadata?.namespace, + phase: phaseName, + pipeline: pipelineName, + status: pod.status?.phase, + age: pod.metadata?.creationTimestamp, + startTime: pod.status?.startTime, + containers: [] as WorkloadContainer[], + } as Workload; + + //for (const container of pod.spec?.containers || []) { + const containersCount = pod.spec?.containers?.length || 0; + for (let i = 0; i < containersCount; i++) { + workload.containers.push({ + name: pod.spec?.containers[i].name, + image: pod.spec?.containers[i].image, + restartCount: pod.status?.containerStatuses?.[i]?.restartCount, + ready: pod.status?.containerStatuses?.[i]?.ready, + started: pod.status?.containerStatuses?.[i]?.started, + } as WorkloadContainer); + } + + workloads.push(workload); + } + } + console.log(workloads); + return workloads; + } + } \ No newline at end of file diff --git a/server/src/routes/logs.ts b/server/src/routes/logs.ts index 1f130f259..09b9a39f9 100644 --- a/server/src/routes/logs.ts +++ b/server/src/routes/logs.ts @@ -136,3 +136,35 @@ Router.get('/console/:pipeline/:phase/:app/exec', authMiddleware, async function await req.app.locals.kubero.execInContainer(req.params.pipeline, req.params.phase, req.params.app, podName, containerName, command, user); res.send(console); }); + +Router.post('/console/:pipeline/:phase/:app/exec', authMiddleware, async function (req: Request, res: Response) { + // https://github.com/kubernetes-client/javascript/blob/master/examples/typescript/exec/exec-example.ts + + // #swagger.tags = ['UI'] + // #swagger.summary = 'Start a container console' + req.params.pipeline = "test"; + req.params.phase = "production"; + req.params.app = "go-httpbin"; + + const user = 'nobody' + + const podName = req.body.podName; + const containerName = req.body.containerName; + const command = req.body.command; + + await req.app.locals.kubero.execInContainer(req.params.pipeline, req.params.phase, req.params.app, podName, containerName, command, user); + res.send(console); +}); + +Router.get('/status/pods/:pipeline/:phase', authMiddleware, async function (req: Request, res: Response) { + // #swagger.tags = ['UI'] + // #swagger.summary = 'Get the Pod workload from an Namespace' + + req.app.locals.kubero.getPods(req.params.pipeline, req.params.phase) + .then((result: any) => { + res.send(result); + }) + .catch((err: any) => { + res.status(500).send(err); + }); +}); \ No newline at end of file diff --git a/server/src/types.ts b/server/src/types.ts index de41110d0..64b3fc078 100644 --- a/server/src/types.ts +++ b/server/src/types.ts @@ -385,4 +385,26 @@ export interface Uptime { minutes: number, seconds: number, milliseconds: number -} \ No newline at end of file +} + +export interface Workload { + name: string, + namespace: string, + phase: string, + pipeline: string, + status: string, + restarts: number, + age: Date | undefined, + startTime: Date | undefined, + containers: WorkloadContainer[] + } + + export interface WorkloadContainer { + name: string, + image: string, + restartCount?: number, + ready?: boolean, + started?: boolean, + age: Date | undefined, + } + From 8949292870877801161fc799cad72d4171dfcd7f Mon Sep 17 00:00:00 2001 From: Gianni Carafa Date: Wed, 31 Jan 2024 00:34:10 +0100 Subject: [PATCH 91/95] disable forms, when connected --- client/src/components/apps/console.vue | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/client/src/components/apps/console.vue b/client/src/components/apps/console.vue index c9c3b6887..c8b4a2f07 100644 --- a/client/src/components/apps/console.vue +++ b/client/src/components/apps/console.vue @@ -9,6 +9,7 @@ :items=pods item-title="name" return-object + :disabled="connected" >
@@ -16,6 +17,7 @@ v-model="container" label="Container" class="pa-1" + :disabled="connected" :items=pod.containers > @@ -24,6 +26,7 @@ v-model="command" label="Command" class="pa-1" + :disabled="connected" :items="commands" > @@ -101,8 +104,8 @@ export default defineComponent({ commands: ['sh', 'bash'] as string[], command: 'sh' as string, container: "MISSING" as string, - pods: [{name: 'kubectl-kuberoapp-web-786b847d9f-4dw96', containers: ['kubero-web', 'example']}] as Pod[], - pod: {name: 'kubectl-kuberoapp-web-786b847d9f-4dw96', containers: ['kubero-web', 'example']} as Pod, + pods: [] as Pod[], + pod: {} as Pod, }), methods: { loadPods() { @@ -112,6 +115,8 @@ export default defineComponent({ const p = {name: pod.name, containers: pod.containers.map((c: any) => c.name)} as Pod; this.pods.push(p); } + this.pod = this.pods[0]; + this.container = this.pod.containers[0]; }); }, disconnect() { From 606411373e08f126b4cea52d774846bf8a71da62 Mon Sep 17 00:00:00 2001 From: Gianni Carafa Date: Wed, 31 Jan 2024 23:17:02 +0100 Subject: [PATCH 92/95] working console --- client/src/components/apps/console.vue | 8 +++- client/src/components/apps/detail.vue | 6 ++- server/src/kubero.ts | 52 +++++++++++++++----------- server/src/modules/kubectl.ts | 3 -- server/src/routes/logs.ts | 8 +--- server/src/socket.ts | 6 ++- 6 files changed, 48 insertions(+), 35 deletions(-) diff --git a/client/src/components/apps/console.vue b/client/src/components/apps/console.vue index c8b4a2f07..37c7981e9 100644 --- a/client/src/components/apps/console.vue +++ b/client/src/components/apps/console.vue @@ -109,7 +109,7 @@ export default defineComponent({ }), methods: { loadPods() { - axios.get(`/api/status/pods/${this.pipeline}/${this.phase}`).then((response) => { + axios.get(`/api/status/pods/${this.pipeline}/${this.phase}/${this.app}`).then((response) => { //this.loadContainers(); for (let pod of response.data) { const p = {name: pod.name, containers: pod.containers.map((c: any) => c.name)} as Pod; @@ -123,13 +123,17 @@ export default defineComponent({ socket.emit("terminal", { room: this.room, data: "exit\r\nexit\r\nexit\r\nexit\r\nexit\r\n", + //data: "exit\r\n", }); // wait a bit for the exit to be processed setTimeout(() => { this.socketLeave() }, 1000); - this.connected = false; + //this.connected = false; term.dispose() + + // close popup window + window.close() }, connect() { this.createTerminal() diff --git a/client/src/components/apps/detail.vue b/client/src/components/apps/detail.vue index 373ba0287..fc04fc0ed 100644 --- a/client/src/components/apps/detail.vue +++ b/client/src/components/apps/detail.vue @@ -202,15 +202,17 @@ export default defineComponent({ this.loadingState = false; }, openConsole() { + /* Swal.fire({ title: "Open Console", text: "This feature is not yet implemented. It will be available in a future release.", icon: "info", background: "rgb(var(--v-theme-cardBackground))", - /*background: "rgb(var(--v-theme-on-surface-variant))",*/ + /*background: "rgb(var(--v-theme-on-surface-variant))", color: "rgba(var(--v-theme-on-background),var(--v-high-emphasis-opacity));", }) - //window.open(`https://${this.appData.spec.domain}`, '_blank'); + */ + window.open(`/popup/console/${this.pipeline}/${this.phase}/${this.app}`, '_blank', 'popup=yes,location=no,height=1000,width=1000,scrollbars=yes,status=no'); }, }, diff --git a/server/src/kubero.ts b/server/src/kubero.ts index 89f8604a8..11347bd0d 100644 --- a/server/src/kubero.ts +++ b/server/src/kubero.ts @@ -37,7 +37,7 @@ export class Kubero { private podLogStreams: string[]= [] public config: IKuberoConfig; private audit: Audit; - private execStreams: {[key: string]: {websocket: WebSocket, stream: Stream}} = {}; + private execStreams: {[key: string]: {websocket: WebSocket, stream: any}} = {}; constructor(io: Server, audit: Audit) { this.config = this.loadConfig(process.env.KUBERO_CONFIG_PATH as string || './config.yaml'); @@ -52,6 +52,22 @@ export class Kubero { debug.debug('Kubero Config: '+JSON.stringify(this.config)); this.audit = audit; + + + this._io.on('connection', client => { + client.on('terminal', (data: any) => { + //console.log('terminal input', data.data); + //console.log('ws.OPEN', ws.readyState == ws.OPEN); + //console.log(ws.url); + //console.log(ws.eventNames()); + //execStream.write(data.data); + if (this.execStreams[data.room]) { + this.execStreams[data.room].stream.write(data.data); + } + //this.execStreams[data.room].stream.write(data.data); + } + )} + ); } public getKubernetesVersion() { @@ -981,7 +997,7 @@ export class Kubero { public async execInContainer(pipelineName: string, phaseName: string, appName: string, podName: string, containerName: string, command: string, user: User) { const contextName = this.getContext(pipelineName, phaseName); if (contextName) { - const streamname = `${pipelineName}-${phaseName}-${appName}-${podName}-${containerName}`; + const streamname = `${pipelineName}-${phaseName}-${appName}-${podName}-${containerName}-terminal`; if ( process.env.KUBERO_READONLY == 'true'){ console.log('KUBERO_READONLY is set to true, not deleting app'); @@ -993,8 +1009,12 @@ export class Kubero { console.log('execInContainer: execStream already running'); return; } else { - console.log('execInContainer: execStream already running but not open, deleting'); + console.log('CLOSED', this.execStreams[streamname].websocket.CLOSED) + console.log('execInContainer: execStream already running but not open, deleting :', this.execStreams[streamname].websocket.readyState); delete this.execStreams[streamname]; + + // wait a bit to make sure the stream is closed + await new Promise(resolve => setTimeout(resolve, 3000)); } } @@ -1014,29 +1034,14 @@ export class Kubero { let stream = { websocket: ws as unknown as WebSocket, - stream: execStream as Stream + stream: execStream }; this.execStreams[streamname] = stream; // sending the terminal output to the client ws.on('message', (data: Buffer) => { - const roomname = `${pipelineName}-${phaseName}-${appName}-${podName}-${containerName}-terminal`; - //console.log('execInContainer message', roomname, data.toString()); - this._io.to(roomname).emit('consoleresponse', data.toString()) + this._io.to(streamname).emit('consoleresponse', data.toString()) }); - - // Sending the terminal input to the container - this._io.on('connection', client => { - //console.log('connection'); - client.on('terminal', (data: any) => { - //console.log('terminal input', data.data); - //console.log('ws.OPEN', ws.readyState == ws.OPEN); - //console.log(ws.url); - //console.log(ws.eventNames()); - execStream.write(data.data); - } - )} - ); } } @@ -1497,7 +1502,7 @@ export class Kubero { } } - public async getPods(pipelineName: string, phaseName: string): Promise { + public async getPods(pipelineName: string, phaseName: string, appName: string): Promise { const contextName = this.getContext(pipelineName, phaseName); const namespace = pipelineName+'-'+phaseName; @@ -1508,6 +1513,11 @@ export class Kubero { const workload = await this.kubectl.getPods(namespace, contextName); //return workload for (const pod of workload) { + // check if app label name starts with appName + if (!pod.metadata?.generateName?.startsWith(appName+'-kuberoapp')) { + continue; + } + let workload = { name: pod.metadata?.name, namespace: pod.metadata?.namespace, diff --git a/server/src/modules/kubectl.ts b/server/src/modules/kubectl.ts index 9e1c95825..bd07a1521 100644 --- a/server/src/modules/kubectl.ts +++ b/server/src/modules/kubectl.ts @@ -3,7 +3,6 @@ debug('app:kubectl') import { KubeConfig, - Attach, Exec, VersionApi, CoreV1Api, @@ -50,7 +49,6 @@ export class Kubectl { private patchUtils: PatchUtils = {} as PatchUtils; public log: KubeLog; public config: IKuberoConfig; - private attach: Attach = {} as Attach; private exec: Exec = {} as Exec; constructor(config: IKuberoConfig) { @@ -85,7 +83,6 @@ export class Kubectl { this.networkingV1Api = this.kc.makeApiClient(NetworkingV1Api); this.metricsApi = new Metrics(this.kc); this.patchUtils = new PatchUtils(); - this.attach = new Attach(this.kc); this.exec = new Exec(this.kc) this.customObjectsApi = this.kc.makeApiClient(CustomObjectsApi); } catch (error) { diff --git a/server/src/routes/logs.ts b/server/src/routes/logs.ts index 09b9a39f9..1b5fd32f9 100644 --- a/server/src/routes/logs.ts +++ b/server/src/routes/logs.ts @@ -142,10 +142,6 @@ Router.post('/console/:pipeline/:phase/:app/exec', authMiddleware, async functio // #swagger.tags = ['UI'] // #swagger.summary = 'Start a container console' - req.params.pipeline = "test"; - req.params.phase = "production"; - req.params.app = "go-httpbin"; - const user = 'nobody' const podName = req.body.podName; @@ -156,11 +152,11 @@ Router.post('/console/:pipeline/:phase/:app/exec', authMiddleware, async functio res.send(console); }); -Router.get('/status/pods/:pipeline/:phase', authMiddleware, async function (req: Request, res: Response) { +Router.get('/status/pods/:pipeline/:phase/:app', authMiddleware, async function (req: Request, res: Response) { // #swagger.tags = ['UI'] // #swagger.summary = 'Get the Pod workload from an Namespace' - req.app.locals.kubero.getPods(req.params.pipeline, req.params.phase) + req.app.locals.kubero.getPods(req.params.pipeline, req.params.phase, req.params.app) .then((result: any) => { res.send(result); }) diff --git a/server/src/socket.ts b/server/src/socket.ts index 365488351..b3a4c6318 100644 --- a/server/src/socket.ts +++ b/server/src/socket.ts @@ -34,7 +34,11 @@ export function init(httpServer: HttpServer, authentication: boolean = false) { debug.log('joining room', join.room) client.join(join.room); }); - +/* + client.on('terminal', terminal => { + console.log('main terminal', terminal) + }); +*/ client.on('leave', leave => { debug.log('leaving room', leave.room) client.leave(leave.room); From 8c9c4d881c9ada31eaf9b4d2716a9401b03d682a Mon Sep 17 00:00:00 2001 From: Gianni Carafa Date: Wed, 31 Jan 2024 21:16:02 +0100 Subject: [PATCH 93/95] minor fixes --- client/src/components/apps/detail.vue | 2 +- server/src/kubero.ts | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/client/src/components/apps/detail.vue b/client/src/components/apps/detail.vue index fc04fc0ed..ec002bf12 100644 --- a/client/src/components/apps/detail.vue +++ b/client/src/components/apps/detail.vue @@ -212,7 +212,7 @@ export default defineComponent({ color: "rgba(var(--v-theme-on-background),var(--v-high-emphasis-opacity));", }) */ - window.open(`/popup/console/${this.pipeline}/${this.phase}/${this.app}`, '_blank', 'popup=yes,location=no,height=1000,width=1000,scrollbars=yes,status=no'); + window.open(`/popup/console/${this.pipeline}/${this.phase}/${this.app}`, '_blank', 'popup=yes,location=no,height=720,width=900,scrollbars=yes,status=no'); }, }, diff --git a/server/src/kubero.ts b/server/src/kubero.ts index 11347bd0d..6922398f3 100644 --- a/server/src/kubero.ts +++ b/server/src/kubero.ts @@ -1544,7 +1544,6 @@ export class Kubero { workloads.push(workload); } } - console.log(workloads); return workloads; } From ca45d81f1588d4ab8f685ef660c268c87d1f2a3d Mon Sep 17 00:00:00 2001 From: Gianni Carafa Date: Wed, 31 Jan 2024 22:31:03 +0100 Subject: [PATCH 94/95] make console configurable --- client/src/components/activity/view.vue | 2 +- client/src/components/apps/detail.vue | 6 ++++++ client/src/layouts/default/Popup.vue | 2 +- client/src/layouts/default/View.vue | 1 + client/src/stores/kubero.ts | 5 +++-- server/config.yaml | 2 ++ server/src/kubero.ts | 12 ++++++++++++ server/src/routes/auth.ts | 4 ++-- server/src/types.ts | 3 +++ 9 files changed, 31 insertions(+), 6 deletions(-) diff --git a/client/src/components/activity/view.vue b/client/src/components/activity/view.vue index 8cfeaf27c..0c78e8adb 100644 --- a/client/src/components/activity/view.vue +++ b/client/src/components/activity/view.vue @@ -1,6 +1,6 @@