From 31b3f58b2c09b0ee233dc4179f10ec1b5a387da2 Mon Sep 17 00:00:00 2001 From: Andras Bacsai Date: Mon, 7 Jun 2021 21:33:11 +0200 Subject: [PATCH] v1.0.16 (#51) --- README.md | 2 +- package.json | 6 +- pnpm-lock.yaml | 2374 +++++------------ .../Application/ActiveTab/General.svelte | 225 +- .../Application/ActiveTab/PullRequests.svelte | 110 + .../Application/Configuration.svelte | 30 +- src/components/Application/Login.svelte | 2 +- src/components/Application/Navbar.svelte | 27 +- src/components/Application/Tabs.svelte | 36 +- src/global.d.ts | 2 + src/hooks/index.ts | 27 +- src/lib/api/applications/cleanup.ts | 3 +- src/lib/api/applications/cloneRepository.ts | 8 +- src/lib/api/applications/configuration.ts | 83 +- src/lib/api/applications/deploy.ts | 24 +- src/lib/api/applications/packs/templates.ts | 1 + src/lib/api/applications/queueAndBuild.ts | 3 +- src/lib/consts.ts | 1 + src/lib/request.ts | 1 - src/models/Configuration.ts | 4 +- src/routes/__layout.svelte | 2 +- src/routes/api/v1/application/check.ts | 28 +- .../{config.ts => config/index.ts} | 11 +- .../application/config/previewDeployment.ts | 62 + src/routes/api/v1/application/deploy/index.ts | 38 +- .../v1/application/deploy/logs/[deployId].ts | 2 - .../api/v1/application/deploy/logs/index.ts | 2 +- src/routes/api/v1/application/remove.ts | 94 +- src/routes/api/v1/dashboard/index.ts | 43 +- src/routes/api/v1/webhooks/deploy.ts | 188 +- .../[name]/[branch]/logs/index.svelte | 8 +- src/routes/application/__layout.svelte | 9 +- .../database/[name]/configuration.svelte | 8 +- src/routes/index.svelte | 2 +- src/routes/settings.svelte | 2 +- src/store/index.ts | 11 +- 36 files changed, 1480 insertions(+), 1999 deletions(-) create mode 100644 src/components/Application/ActiveTab/PullRequests.svelte rename src/routes/api/v1/application/{config.ts => config/index.ts} (88%) create mode 100644 src/routes/api/v1/application/config/previewDeployment.ts diff --git a/README.md b/README.md index 7390e47f7..b679609e1 100644 --- a/README.md +++ b/README.md @@ -54,7 +54,7 @@ With Github integration - Twitter: [@andrasbacsai](https://twitter.com/andrasbacsai) - Telegram: [@andrasbacsai](https://t.me/andrasbacsai) - Email: [andras@coollabs.io](mailto:andras@coollabs.io) -- Discord: [Invitation](https://discord.com/invite/bvS3WhR) +- Discord: [Invitation](https://discord.gg/xhBCC7eGKw) ## Roadmap diff --git a/package.json b/package.json index 257478193..8a469f3a6 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "coolify", "description": "An open-source, hassle-free, self-hostable Heroku & Netlify alternative.", - "version": "1.0.15", + "version": "1.0.16", "license": "AGPL-3.0", "scripts": { "dev:docker:start": "docker-compose -f docker-compose-dev.yml up -d", @@ -14,8 +14,8 @@ "format": "prettier --write ." }, "devDependencies": { - "@sveltejs/adapter-node": "^1.0.0-next.20", - "@sveltejs/kit": "1.0.0-next.107", + "@sveltejs/adapter-node": "^1.0.0-next.24", + "@sveltejs/kit": "1.0.0-next.113", "@types/dockerode": "^3.2.3", "@typescript-eslint/eslint-plugin": "^4.23.0", "@typescript-eslint/parser": "^4.23.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 925fe7bf4..420a6fad3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -2,8 +2,8 @@ lockfileVersion: 5.3 specifiers: '@iarna/toml': ^2.2.5 - '@sveltejs/adapter-node': ^1.0.0-next.20 - '@sveltejs/kit': 1.0.0-next.107 + '@sveltejs/adapter-node': ^1.0.0-next.24 + '@sveltejs/kit': 1.0.0-next.113 '@types/dockerode': ^3.2.3 '@typescript-eslint/eslint-plugin': ^4.23.0 '@typescript-eslint/parser': ^4.23.0 @@ -33,7 +33,7 @@ specifiers: svelte-kit-cookie-session: ^0.4.3 svelte-preprocess: ^4.7.3 svelte-select: ^3.17.0 - tailwindcss: canary + tailwindcss: 2.2.0-canary.8 tslib: ^2.2.0 typescript: ^4.2.4 unique-names-generator: ^4.5.0 @@ -58,8 +58,8 @@ dependencies: unique-names-generator: 4.5.0 devDependencies: - '@sveltejs/adapter-node': 1.0.0-next.20 - '@sveltejs/kit': 1.0.0-next.107_svelte@3.38.2 + '@sveltejs/adapter-node': 1.0.0-next.24 + '@sveltejs/kit': 1.0.0-next.113_svelte@3.38.2 '@types/dockerode': 3.2.3 '@typescript-eslint/eslint-plugin': 4.23.0_7cfaee78cda985ff9bc3d8b5cb92a136 '@typescript-eslint/parser': 4.23.0_eslint@7.26.0+typescript@4.2.4 @@ -75,33 +75,25 @@ devDependencies: prettier-plugin-svelte: 2.3.0_prettier@2.3.0+svelte@3.38.2 svelte: 3.38.2 svelte-preprocess: 4.7.3_5944bffd99aeae72e0daf7602e6be64e - tailwindcss: 2.2.0-canary.7_797cfc3ceddb49f111b184f6879a433f + tailwindcss: 2.2.0-canary.8_797cfc3ceddb49f111b184f6879a433f tslib: 2.2.0 typescript: 4.2.4 vite: 2.3.2 packages: + /@babel/code-frame/7.12.11: - resolution: - { - integrity: sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== - } + resolution: {integrity: sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==} dependencies: '@babel/highlight': 7.14.0 dev: true /@babel/helper-validator-identifier/7.14.0: - resolution: - { - integrity: sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A== - } + resolution: {integrity: sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==} dev: true /@babel/highlight/7.14.0: - resolution: - { - integrity: sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg== - } + resolution: {integrity: sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==} dependencies: '@babel/helper-validator-identifier': 7.14.0 chalk: 2.4.2 @@ -109,11 +101,8 @@ packages: dev: true /@eslint/eslintrc/0.4.1: - resolution: - { - integrity: sha512-5v7TDE9plVhvxQeWLXDTvFvJBdH6pEsdnl2g/dAptmuFEPedQ4Erq5rsDsX+mvAM610IhNaO2W5V1dOOnDKxkQ== - } - engines: { node: ^10.12.0 || >=12.0.0 } + resolution: {integrity: sha512-5v7TDE9plVhvxQeWLXDTvFvJBdH6pEsdnl2g/dAptmuFEPedQ4Erq5rsDsX+mvAM610IhNaO2W5V1dOOnDKxkQ==} + engines: {node: ^10.12.0 || >=12.0.0} dependencies: ajv: 6.12.6 debug: 4.3.1 @@ -129,57 +118,39 @@ packages: dev: true /@fullhuman/postcss-purgecss/3.1.3: - resolution: - { - integrity: sha512-kwOXw8fZ0Lt1QmeOOrd+o4Ibvp4UTEBFQbzvWldjlKv5n+G9sXfIPn1hh63IQIL8K8vbvv1oYMJiIUbuy9bGaA== - } + resolution: {integrity: sha512-kwOXw8fZ0Lt1QmeOOrd+o4Ibvp4UTEBFQbzvWldjlKv5n+G9sXfIPn1hh63IQIL8K8vbvv1oYMJiIUbuy9bGaA==} dependencies: purgecss: 3.1.3 dev: true /@iarna/toml/2.2.5: - resolution: - { - integrity: sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg== - } + resolution: {integrity: sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==} dev: false /@nodelib/fs.scandir/2.1.4: - resolution: - { - integrity: sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA== - } - engines: { node: '>= 8' } + resolution: {integrity: sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==} + engines: {node: '>= 8'} dependencies: '@nodelib/fs.stat': 2.0.4 run-parallel: 1.2.0 dev: true /@nodelib/fs.stat/2.0.4: - resolution: - { - integrity: sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q== - } - engines: { node: '>= 8' } + resolution: {integrity: sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==} + engines: {node: '>= 8'} dev: true /@nodelib/fs.walk/1.2.6: - resolution: - { - integrity: sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow== - } - engines: { node: '>= 8' } + resolution: {integrity: sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==} + engines: {node: '>= 8'} dependencies: '@nodelib/fs.scandir': 2.1.4 fastq: 1.11.0 dev: true /@rollup/pluginutils/4.1.0: - resolution: - { - integrity: sha512-TrBhfJkFxA+ER+ew2U2/fHbebhLT/l/2pRk0hfj9KusXUuRXd2v0R58AfaZK9VXDQ4TogOSEmICVrQAA3zFnHQ== - } - engines: { node: '>= 8.0.0' } + resolution: {integrity: sha512-TrBhfJkFxA+ER+ew2U2/fHbebhLT/l/2pRk0hfj9KusXUuRXd2v0R58AfaZK9VXDQ4TogOSEmICVrQAA3zFnHQ==} + engines: {node: '>= 8.0.0'} peerDependencies: rollup: ^1.20.0||^2.0.0 dependencies: @@ -187,39 +158,30 @@ packages: picomatch: 2.2.3 dev: true - /@sveltejs/adapter-node/1.0.0-next.20: - resolution: - { - integrity: sha512-ornNW289XN4TyY3tRXVGH38FxrqLsw1MHn4oq92T7U6EqnSbw/22waMZnPBQUxcj5GxZsXuuFjeBjn1BWt0x2A== - } + /@sveltejs/adapter-node/1.0.0-next.24: + resolution: {integrity: sha512-33IbIYsIOq3LapSlW519oWuFvEHh8EHqU4FsOg1UZaF2EE5CkOh23SXjv0H9RT0iLCxvhifqiFN+vb/vlDRSWw==} dev: true - /@sveltejs/kit/1.0.0-next.107_svelte@3.38.2: - resolution: - { - integrity: sha512-HxomGMWbuWTU8lahk98hqIL/xjW6HzNTAvTZVMnnmlMHN1N8x7+abkz4Y09Zhu8lZkZpFuqBj2UlsgPW4uJXtw== - } - engines: { node: '>= 12.17.0' } + /@sveltejs/kit/1.0.0-next.113_svelte@3.38.2: + resolution: {integrity: sha512-X7feyAD9ZWQ79W5MXgF0t3JBsA+pTqCrnl2l8y8PNCP7pEJwizPCfmFAjwx7luz3OZUA2FTFBB7bqG7K1IUaYg==} + engines: {node: ^12.20 || ^14.13.1 || >= 16} hasBin: true peerDependencies: svelte: ^3.38.2 dependencies: - '@sveltejs/vite-plugin-svelte': 1.0.0-next.10_svelte@3.38.2+vite@2.3.2 + '@sveltejs/vite-plugin-svelte': 1.0.0-next.10_svelte@3.38.2+vite@2.3.6 cheap-watch: 1.0.3 sade: 1.7.4 svelte: 3.38.2 - vite: 2.3.2 + vite: 2.3.6 transitivePeerDependencies: - rollup - supports-color dev: true - /@sveltejs/vite-plugin-svelte/1.0.0-next.10_svelte@3.38.2+vite@2.3.2: - resolution: - { - integrity: sha512-ImvxbhPePm2hWNTKBSA3LHAYGwiEjHjvvgfPLXm4R87sfZ+BMXql9jBmDpzUC/URBLT4BB3Jxos/i523qkJBHg== - } - engines: { node: '>=12.0.0' } + /@sveltejs/vite-plugin-svelte/1.0.0-next.10_svelte@3.38.2+vite@2.3.6: + resolution: {integrity: sha512-ImvxbhPePm2hWNTKBSA3LHAYGwiEjHjvvgfPLXm4R87sfZ+BMXql9jBmDpzUC/URBLT4BB3Jxos/i523qkJBHg==} + engines: {node: '>=12.0.0'} peerDependencies: svelte: ^3.37.0 vite: ^2.2.3 @@ -233,87 +195,60 @@ packages: source-map: 0.7.3 svelte: 3.38.2 svelte-hmr: 0.14.3_svelte@3.38.2 - vite: 2.3.2 + vite: 2.3.6 transitivePeerDependencies: - rollup - supports-color dev: true /@trysound/sax/0.1.1: - resolution: - { - integrity: sha512-Z6DoceYb/1xSg5+e+ZlPZ9v0N16ZvZ+wYMraFue4HYrE4ttONKtsvruIRf6t9TBR0YvSOfi1hUU0fJfBLCDYow== - } - engines: { node: '>=10.13.0' } + resolution: {integrity: sha512-Z6DoceYb/1xSg5+e+ZlPZ9v0N16ZvZ+wYMraFue4HYrE4ttONKtsvruIRf6t9TBR0YvSOfi1hUU0fJfBLCDYow==} + engines: {node: '>=10.13.0'} dev: true /@types/bson/4.0.3: - resolution: - { - integrity: sha512-mVRvYnTOZJz3ccpxhr3wgxVmSeiYinW+zlzQz3SXWaJmD1DuL05Jeq7nKw3SnbKmbleW5qrLG5vdyWe/A9sXhw== - } + resolution: {integrity: sha512-mVRvYnTOZJz3ccpxhr3wgxVmSeiYinW+zlzQz3SXWaJmD1DuL05Jeq7nKw3SnbKmbleW5qrLG5vdyWe/A9sXhw==} dependencies: '@types/node': 15.0.1 dev: false /@types/dockerode/3.2.3: - resolution: - { - integrity: sha512-nZRhpSxm3PYianRBcRExcHxDvEzYHUPfGCnRL5Fe4/fSEZbtxrRNJ7okzCans3lXxj2t298EynFHGTnTC2f1Iw== - } + resolution: {integrity: sha512-nZRhpSxm3PYianRBcRExcHxDvEzYHUPfGCnRL5Fe4/fSEZbtxrRNJ7okzCans3lXxj2t298EynFHGTnTC2f1Iw==} dependencies: '@types/node': 15.0.1 dev: true /@types/json-schema/7.0.7: - resolution: - { - integrity: sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA== - } + resolution: {integrity: sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==} dev: true /@types/mongodb/3.6.12: - resolution: - { - integrity: sha512-49aEzQD5VdHPxyd5dRyQdqEveAg9LanwrH8RQipnMuulwzKmODXIZRp0umtxi1eBUfEusRkoy8AVOMr+kVuFog== - } + resolution: {integrity: sha512-49aEzQD5VdHPxyd5dRyQdqEveAg9LanwrH8RQipnMuulwzKmODXIZRp0umtxi1eBUfEusRkoy8AVOMr+kVuFog==} dependencies: '@types/bson': 4.0.3 '@types/node': 15.0.1 dev: false /@types/node/15.0.1: - resolution: - { - integrity: sha512-TMkXt0Ck1y0KKsGr9gJtWGjttxlZnnvDtphxUOSd0bfaR6Q1jle+sPvrzNR1urqYTWMinoKvjKfXUGsumaO1PA== - } + resolution: {integrity: sha512-TMkXt0Ck1y0KKsGr9gJtWGjttxlZnnvDtphxUOSd0bfaR6Q1jle+sPvrzNR1urqYTWMinoKvjKfXUGsumaO1PA==} /@types/parse-json/4.0.0: - resolution: - { - integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== - } + resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==} dev: true /@types/pug/2.0.4: - resolution: { integrity: sha1-h3L80EGOPNLMFxVV1zAHQVBR9LI= } + resolution: {integrity: sha1-h3L80EGOPNLMFxVV1zAHQVBR9LI=} dev: true /@types/sass/1.16.0: - resolution: - { - integrity: sha512-2XZovu4NwcqmtZtsBR5XYLw18T8cBCnU2USFHTnYLLHz9fkhnoEMoDsqShJIOFsFhn5aJHjweiUUdTrDGujegA== - } + resolution: {integrity: sha512-2XZovu4NwcqmtZtsBR5XYLw18T8cBCnU2USFHTnYLLHz9fkhnoEMoDsqShJIOFsFhn5aJHjweiUUdTrDGujegA==} dependencies: '@types/node': 15.0.1 dev: true /@typescript-eslint/eslint-plugin/4.23.0_7cfaee78cda985ff9bc3d8b5cb92a136: - resolution: - { - integrity: sha512-tGK1y3KIvdsQEEgq6xNn1DjiFJtl+wn8JJQiETtCbdQxw1vzjXyAaIkEmO2l6Nq24iy3uZBMFQjZ6ECf1QdgGw== - } - engines: { node: ^10.12.0 || >=12.0.0 } + resolution: {integrity: sha512-tGK1y3KIvdsQEEgq6xNn1DjiFJtl+wn8JJQiETtCbdQxw1vzjXyAaIkEmO2l6Nq24iy3uZBMFQjZ6ECf1QdgGw==} + engines: {node: ^10.12.0 || >=12.0.0} peerDependencies: '@typescript-eslint/parser': ^4.0.0 eslint: ^5.0.0 || ^6.0.0 || ^7.0.0 @@ -338,11 +273,8 @@ packages: dev: true /@typescript-eslint/experimental-utils/4.23.0_eslint@7.26.0+typescript@4.2.4: - resolution: - { - integrity: sha512-WAFNiTDnQfrF3Z2fQ05nmCgPsO5o790vOhmWKXbbYQTO9erE1/YsFot5/LnOUizLzU2eeuz6+U/81KV5/hFTGA== - } - engines: { node: ^10.12.0 || >=12.0.0 } + resolution: {integrity: sha512-WAFNiTDnQfrF3Z2fQ05nmCgPsO5o790vOhmWKXbbYQTO9erE1/YsFot5/LnOUizLzU2eeuz6+U/81KV5/hFTGA==} + engines: {node: ^10.12.0 || >=12.0.0} peerDependencies: eslint: '*' dependencies: @@ -359,11 +291,8 @@ packages: dev: true /@typescript-eslint/parser/4.23.0_eslint@7.26.0+typescript@4.2.4: - resolution: - { - integrity: sha512-wsvjksHBMOqySy/Pi2Q6UuIuHYbgAMwLczRl4YanEPKW5KVxI9ZzDYh3B5DtcZPQTGRWFJrfcbJ6L01Leybwug== - } - engines: { node: ^10.12.0 || >=12.0.0 } + resolution: {integrity: sha512-wsvjksHBMOqySy/Pi2Q6UuIuHYbgAMwLczRl4YanEPKW5KVxI9ZzDYh3B5DtcZPQTGRWFJrfcbJ6L01Leybwug==} + engines: {node: ^10.12.0 || >=12.0.0} peerDependencies: eslint: ^5.0.0 || ^6.0.0 || ^7.0.0 typescript: '*' @@ -382,30 +311,21 @@ packages: dev: true /@typescript-eslint/scope-manager/4.23.0: - resolution: - { - integrity: sha512-ZZ21PCFxPhI3n0wuqEJK9omkw51wi2bmeKJvlRZPH5YFkcawKOuRMQMnI8mH6Vo0/DoHSeZJnHiIx84LmVQY+w== - } - engines: { node: ^8.10.0 || ^10.13.0 || >=11.10.1 } + resolution: {integrity: sha512-ZZ21PCFxPhI3n0wuqEJK9omkw51wi2bmeKJvlRZPH5YFkcawKOuRMQMnI8mH6Vo0/DoHSeZJnHiIx84LmVQY+w==} + engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} dependencies: '@typescript-eslint/types': 4.23.0 '@typescript-eslint/visitor-keys': 4.23.0 dev: true /@typescript-eslint/types/4.23.0: - resolution: - { - integrity: sha512-oqkNWyG2SLS7uTWLZf6Sr7Dm02gA5yxiz1RP87tvsmDsguVATdpVguHr4HoGOcFOpCvx9vtCSCyQUGfzq28YCw== - } - engines: { node: ^8.10.0 || ^10.13.0 || >=11.10.1 } + resolution: {integrity: sha512-oqkNWyG2SLS7uTWLZf6Sr7Dm02gA5yxiz1RP87tvsmDsguVATdpVguHr4HoGOcFOpCvx9vtCSCyQUGfzq28YCw==} + engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} dev: true /@typescript-eslint/typescript-estree/4.23.0_typescript@4.2.4: - resolution: - { - integrity: sha512-5Sty6zPEVZF5fbvrZczfmLCOcby3sfrSPu30qKoY1U3mca5/jvU5cwsPb/CO6Q3ByRjixTMIVsDkqwIxCf/dMw== - } - engines: { node: ^10.12.0 || >=12.0.0 } + resolution: {integrity: sha512-5Sty6zPEVZF5fbvrZczfmLCOcby3sfrSPu30qKoY1U3mca5/jvU5cwsPb/CO6Q3ByRjixTMIVsDkqwIxCf/dMw==} + engines: {node: ^10.12.0 || >=12.0.0} peerDependencies: typescript: '*' peerDependenciesMeta: @@ -425,28 +345,19 @@ packages: dev: true /@typescript-eslint/visitor-keys/4.23.0: - resolution: - { - integrity: sha512-5PNe5cmX9pSifit0H+nPoQBXdbNzi5tOEec+3riK+ku4e3er37pKxMKDH5Ct5Y4fhWxcD4spnlYjxi9vXbSpwg== - } - engines: { node: ^8.10.0 || ^10.13.0 || >=11.10.1 } + resolution: {integrity: sha512-5PNe5cmX9pSifit0H+nPoQBXdbNzi5tOEec+3riK+ku4e3er37pKxMKDH5Ct5Y4fhWxcD4spnlYjxi9vXbSpwg==} + engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} dependencies: '@typescript-eslint/types': 4.23.0 eslint-visitor-keys: 2.0.0 dev: true /@zerodevx/svelte-toast/0.3.0: - resolution: - { - integrity: sha512-TY5dLB5DEpxuHu60M6gum+fDxzIGXg35R8500orz58JTFs9LiHWoEfeJ4n9t7Afix3iMmYLl2thjhnCHCiQIhQ== - } + resolution: {integrity: sha512-TY5dLB5DEpxuHu60M6gum+fDxzIGXg35R8500orz58JTFs9LiHWoEfeJ4n9t7Afix3iMmYLl2thjhnCHCiQIhQ==} dev: false /acorn-jsx/5.3.1_acorn@7.4.1: - resolution: - { - integrity: sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== - } + resolution: {integrity: sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: @@ -454,10 +365,7 @@ packages: dev: true /acorn-node/1.8.2: - resolution: - { - integrity: sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A== - } + resolution: {integrity: sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==} dependencies: acorn: 7.4.1 acorn-walk: 7.2.0 @@ -465,27 +373,18 @@ packages: dev: true /acorn-walk/7.2.0: - resolution: - { - integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== - } - engines: { node: '>=0.4.0' } + resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} + engines: {node: '>=0.4.0'} dev: true /acorn/7.4.1: - resolution: - { - integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== - } - engines: { node: '>=0.4.0' } + resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} + engines: {node: '>=0.4.0'} hasBin: true dev: true /ajv/6.12.6: - resolution: - { - integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - } + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} dependencies: fast-deep-equal: 3.1.3 fast-json-stable-stringify: 2.1.0 @@ -494,10 +393,7 @@ packages: dev: true /ajv/8.2.0: - resolution: - { - integrity: sha512-WSNGFuyWd//XO8n/m/EaOlNLtO0yL8EXT/74LqT4khdhpZjP7lkj/kT5uwRmGitKEVp/Oj7ZUHeGfPtgHhQ5CA== - } + resolution: {integrity: sha512-WSNGFuyWd//XO8n/m/EaOlNLtO0yL8EXT/74LqT4khdhpZjP7lkj/kT5uwRmGitKEVp/Oj7ZUHeGfPtgHhQ5CA==} dependencies: fast-deep-equal: 3.1.3 json-schema-traverse: 1.0.0 @@ -506,112 +402,76 @@ packages: dev: true /alphanum-sort/1.0.2: - resolution: { integrity: sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM= } + resolution: {integrity: sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=} dev: true /ansi-colors/4.1.1: - resolution: - { - integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== - } - engines: { node: '>=6' } + resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==} + engines: {node: '>=6'} dev: true /ansi-regex/5.0.0: - resolution: - { - integrity: sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== - } - engines: { node: '>=8' } + resolution: {integrity: sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==} + engines: {node: '>=8'} dev: true /ansi-styles/3.2.1: - resolution: - { - integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - } - engines: { node: '>=4' } + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} dependencies: color-convert: 1.9.3 dev: true /ansi-styles/4.3.0: - resolution: - { - integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - } - engines: { node: '>=8' } + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} dependencies: color-convert: 2.0.1 dev: true /anymatch/3.1.2: - resolution: - { - integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== - } - engines: { node: '>= 8' } + resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==} + engines: {node: '>= 8'} dependencies: normalize-path: 3.0.0 picomatch: 2.2.3 dev: true /argparse/1.0.10: - resolution: - { - integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - } + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} dependencies: sprintf-js: 1.0.3 dev: true /argparse/2.0.1: - resolution: - { - integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== - } + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} dev: false /array-union/2.1.0: - resolution: - { - integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - } - engines: { node: '>=8' } + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} dev: true /asn1/0.2.4: - resolution: - { - integrity: sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== - } + resolution: {integrity: sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==} dependencies: safer-buffer: 2.1.2 dev: false /astral-regex/2.0.0: - resolution: - { - integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== - } - engines: { node: '>=8' } + resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} + engines: {node: '>=8'} dev: true /auto-parse/1.8.0: - resolution: - { - integrity: sha512-Uri4uC+K5cSi5hjM4snFrqPrjqUpwxeSW5EMTPvN7Ju3PlDzmXXDr5tjdzxPvvwgT3J7bmMDJ3Rm625nbrc72A== - } + resolution: {integrity: sha512-Uri4uC+K5cSi5hjM4snFrqPrjqUpwxeSW5EMTPvN7Ju3PlDzmXXDr5tjdzxPvvwgT3J7bmMDJ3Rm625nbrc72A==} dependencies: typpy: 2.3.11 dev: true /autoprefixer/10.2.5_postcss@8.2.15: - resolution: - { - integrity: sha512-7H4AJZXvSsn62SqZyJCP+1AWwOuoYpUfK6ot9vm0e87XD6mT8lDywc9D9OTJPMULyGcvmIxzTAMeG2Cc+YX+fA== - } - engines: { node: ^10 || ^12 || >=14 } + resolution: {integrity: sha512-7H4AJZXvSsn62SqZyJCP+1AWwOuoYpUfK6ot9vm0e87XD6mT8lDywc9D9OTJPMULyGcvmIxzTAMeG2Cc+YX+fA==} + engines: {node: ^10 || ^12 || >=14} hasBin: true peerDependencies: postcss: ^8.1.0 @@ -626,47 +486,32 @@ packages: dev: true /balanced-match/1.0.2: - resolution: - { - integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - } + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} /base64-js/1.5.1: - resolution: - { - integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - } + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} dev: false /bcrypt-pbkdf/1.0.2: - resolution: { integrity: sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= } + resolution: {integrity: sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=} dependencies: tweetnacl: 0.14.5 dev: false /binary-extensions/2.2.0: - resolution: - { - integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - } - engines: { node: '>=8' } + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + engines: {node: '>=8'} dev: true /bl/2.2.1: - resolution: - { - integrity: sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g== - } + resolution: {integrity: sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==} dependencies: readable-stream: 2.3.7 safe-buffer: 5.2.1 dev: false /bl/4.1.0: - resolution: - { - integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== - } + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} dependencies: buffer: 5.7.1 inherits: 2.0.4 @@ -674,41 +519,29 @@ packages: dev: false /bluebird/3.5.1: - resolution: - { - integrity: sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA== - } + resolution: {integrity: sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==} dev: false /boolbase/1.0.0: - resolution: { integrity: sha1-aN/1++YMUes3cl6p4+0xDcwed24= } + resolution: {integrity: sha1-aN/1++YMUes3cl6p4+0xDcwed24=} dev: true /brace-expansion/1.1.11: - resolution: - { - integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - } + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 /braces/3.0.2: - resolution: - { - integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - } - engines: { node: '>=8' } + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} dependencies: fill-range: 7.0.1 dev: true /browserslist/4.16.6: - resolution: - { - integrity: sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ== - } - engines: { node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7 } + resolution: {integrity: sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: caniuse-lite: 1.0.30001220 @@ -719,64 +552,43 @@ packages: dev: true /bson/1.1.6: - resolution: - { - integrity: sha512-EvVNVeGo4tHxwi8L6bPj3y3itEvStdwvvlojVxxbyYfoaxJ6keLgrTuKdyfEAszFK+H3olzBuafE0yoh0D1gdg== - } - engines: { node: '>=0.6.19' } + resolution: {integrity: sha512-EvVNVeGo4tHxwi8L6bPj3y3itEvStdwvvlojVxxbyYfoaxJ6keLgrTuKdyfEAszFK+H3olzBuafE0yoh0D1gdg==} + engines: {node: '>=0.6.19'} dev: false /buffer-equal-constant-time/1.0.1: - resolution: { integrity: sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk= } + resolution: {integrity: sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=} dev: false /buffer/5.7.1: - resolution: - { - integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== - } + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} dependencies: base64-js: 1.5.1 ieee754: 1.2.1 dev: false /bytes/3.1.0: - resolution: - { - integrity: sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== - } - engines: { node: '>= 0.8' } + resolution: {integrity: sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==} + engines: {node: '>= 0.8'} dev: true /callsites/3.1.0: - resolution: - { - integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - } - engines: { node: '>=6' } + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} dev: true /camelcase-css/2.0.1: - resolution: - { - integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== - } - engines: { node: '>= 6' } + resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} + engines: {node: '>= 6'} dev: true /camelcase/5.3.1: - resolution: - { - integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== - } - engines: { node: '>=6' } + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} dev: true /caniuse-api/3.0.0: - resolution: - { - integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== - } + resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} dependencies: browserslist: 4.16.6 caniuse-lite: 1.0.30001220 @@ -785,18 +597,12 @@ packages: dev: true /caniuse-lite/1.0.30001220: - resolution: - { - integrity: sha512-pjC2T4DIDyGAKTL4dMvGUQaMUHRmhvPpAgNNTa14jaBWHu+bLQgvpFqElxh9L4829Fdx0PlKiMp3wnYldRtECA== - } + resolution: {integrity: sha512-pjC2T4DIDyGAKTL4dMvGUQaMUHRmhvPpAgNNTa14jaBWHu+bLQgvpFqElxh9L4829Fdx0PlKiMp3wnYldRtECA==} dev: true /chalk/2.4.2: - resolution: - { - integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - } - engines: { node: '>=4' } + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} dependencies: ansi-styles: 3.2.1 escape-string-regexp: 1.0.5 @@ -804,30 +610,21 @@ packages: dev: true /chalk/4.1.1: - resolution: - { - integrity: sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg== - } - engines: { node: '>=10' } + resolution: {integrity: sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==} + engines: {node: '>=10'} dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 dev: true /cheap-watch/1.0.3: - resolution: - { - integrity: sha512-xC5CruMhLzjPwJ5ecUxGu1uGmwJQykUhqd2QrCrYbwvsFYdRyviu6jG9+pccwDXJR/OpmOTOJ9yLFunVgQu9wg== - } - engines: { node: '>=8' } + resolution: {integrity: sha512-xC5CruMhLzjPwJ5ecUxGu1uGmwJQykUhqd2QrCrYbwvsFYdRyviu6jG9+pccwDXJR/OpmOTOJ9yLFunVgQu9wg==} + engines: {node: '>=8'} dev: true /chokidar/3.5.1: - resolution: - { - integrity: sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw== - } - engines: { node: '>= 8.10.0' } + resolution: {integrity: sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==} + engines: {node: '>= 8.10.0'} dependencies: anymatch: 3.1.2 braces: 3.0.2 @@ -841,112 +638,76 @@ packages: dev: true /chownr/1.1.4: - resolution: - { - integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== - } + resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} dev: false /color-convert/1.9.3: - resolution: - { - integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - } + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} dependencies: color-name: 1.1.3 dev: true /color-convert/2.0.1: - resolution: - { - integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - } - engines: { node: '>=7.0.0' } + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} dependencies: color-name: 1.1.4 dev: true /color-name/1.1.3: - resolution: { integrity: sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= } + resolution: {integrity: sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=} dev: true /color-name/1.1.4: - resolution: - { - integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - } + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} dev: true /color-string/1.5.5: - resolution: - { - integrity: sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg== - } + resolution: {integrity: sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg==} dependencies: color-name: 1.1.4 simple-swizzle: 0.2.2 dev: true /color/3.1.3: - resolution: - { - integrity: sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ== - } + resolution: {integrity: sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==} dependencies: color-convert: 1.9.3 color-string: 1.5.5 dev: true /colorette/1.2.2: - resolution: - { - integrity: sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== - } + resolution: {integrity: sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==} dev: true /commander/6.2.1: - resolution: - { - integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== - } - engines: { node: '>= 6' } + resolution: {integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==} + engines: {node: '>= 6'} dev: true /commander/7.2.0: - resolution: - { - integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== - } - engines: { node: '>= 10' } + resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} + engines: {node: '>= 10'} /compare-versions/3.6.0: - resolution: - { - integrity: sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA== - } + resolution: {integrity: sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==} dev: false /concat-map/0.0.1: - resolution: { integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= } + resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} /cookie/0.4.1: - resolution: - { - integrity: sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA== - } - engines: { node: '>= 0.6' } + resolution: {integrity: sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==} + engines: {node: '>= 0.6'} dev: false /core-util-is/1.0.2: - resolution: { integrity: sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= } + resolution: {integrity: sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=} dev: false /cosmiconfig/7.0.0: - resolution: - { - integrity: sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA== - } - engines: { node: '>=10' } + resolution: {integrity: sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==} + engines: {node: '>=10'} dependencies: '@types/parse-json': 4.0.0 import-fresh: 3.3.0 @@ -956,11 +717,8 @@ packages: dev: true /cross-spawn/7.0.3: - resolution: - { - integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - } - engines: { node: '>= 8' } + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} dependencies: path-key: 3.1.1 shebang-command: 2.0.0 @@ -968,22 +726,16 @@ packages: dev: true /css-color-names/0.0.4: - resolution: { integrity: sha1-gIrcLnnPhHOAabZGyyDsJ762KeA= } + resolution: {integrity: sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=} dev: true /css-color-names/1.0.1: - resolution: - { - integrity: sha512-/loXYOch1qU1biStIFsHH8SxTmOseh1IJqFvy8IujXOm1h+QjUdDhkzOrR5HG8K8mlxREj0yfi8ewCHx0eMxzA== - } + resolution: {integrity: sha512-/loXYOch1qU1biStIFsHH8SxTmOseh1IJqFvy8IujXOm1h+QjUdDhkzOrR5HG8K8mlxREj0yfi8ewCHx0eMxzA==} dev: true /css-declaration-sorter/6.0.0_postcss@8.2.15: - resolution: - { - integrity: sha512-S0TE4E0ha5+tBHdLWPc5n+S8E4dFBS5xScPvgHkLNZwWvX4ISoFGhGeerLC9uS1cKA/sC+K2wHq6qEbcagT/fg== - } - engines: { node: '>= 10' } + resolution: {integrity: sha512-S0TE4E0ha5+tBHdLWPc5n+S8E4dFBS5xScPvgHkLNZwWvX4ISoFGhGeerLC9uS1cKA/sC+K2wHq6qEbcagT/fg==} + engines: {node: '>= 10'} peerDependencies: postcss: ^8.0.9 dependencies: @@ -992,10 +744,7 @@ packages: dev: true /css-select/3.1.2: - resolution: - { - integrity: sha512-qmss1EihSuBNWNNhHjxzxSfJoFBM/lERB/Q4EnsJQQC62R2evJDW481091oAdOr9uh46/0n4nrg0It5cAnj1RA== - } + resolution: {integrity: sha512-qmss1EihSuBNWNNhHjxzxSfJoFBM/lERB/Q4EnsJQQC62R2evJDW481091oAdOr9uh46/0n4nrg0It5cAnj1RA==} dependencies: boolbase: 1.0.0 css-what: 4.0.0 @@ -1005,46 +754,31 @@ packages: dev: true /css-tree/1.1.3: - resolution: - { - integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== - } - engines: { node: '>=8.0.0' } + resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==} + engines: {node: '>=8.0.0'} dependencies: mdn-data: 2.0.14 source-map: 0.6.1 dev: true /css-unit-converter/1.1.2: - resolution: - { - integrity: sha512-IiJwMC8rdZE0+xiEZHeru6YoONC4rfPMqGm2W85jMIbkFvv5nFTwJVFHam2eFrN6txmoUYFAFXiv8ICVeTO0MA== - } + resolution: {integrity: sha512-IiJwMC8rdZE0+xiEZHeru6YoONC4rfPMqGm2W85jMIbkFvv5nFTwJVFHam2eFrN6txmoUYFAFXiv8ICVeTO0MA==} dev: true /css-what/4.0.0: - resolution: - { - integrity: sha512-teijzG7kwYfNVsUh2H/YN62xW3KK9YhXEgSlbxMlcyjPNvdKJqFx5lrwlJgoFP1ZHlB89iGDlo/JyshKeRhv5A== - } - engines: { node: '>= 6' } + resolution: {integrity: sha512-teijzG7kwYfNVsUh2H/YN62xW3KK9YhXEgSlbxMlcyjPNvdKJqFx5lrwlJgoFP1ZHlB89iGDlo/JyshKeRhv5A==} + engines: {node: '>= 6'} dev: true /cssesc/3.0.0: - resolution: - { - integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== - } - engines: { node: '>=4' } + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} hasBin: true dev: true /cssnano-preset-default/5.0.1_postcss@8.2.15: - resolution: - { - integrity: sha512-cfmfThYODGqhpQKDq9H0MTAqkMvZ3dGbOUTBKw0xWZiIycMqHid22LsJXJl4r1qX4qzDeKxcSyQ/Xb5Mu3Z//Q== - } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-cfmfThYODGqhpQKDq9H0MTAqkMvZ3dGbOUTBKw0xWZiIycMqHid22LsJXJl4r1qX4qzDeKxcSyQ/Xb5Mu3Z//Q==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.1 dependencies: @@ -1081,11 +815,8 @@ packages: dev: true /cssnano-utils/2.0.0_postcss@8.2.15: - resolution: - { - integrity: sha512-xvxmTszdrvSyTACdPe8VU5J6p4sm3egpgw54dILvNqt5eBUv6TFjACLhSxtRuEsxYrgy8uDy269YjScO5aKbGA== - } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-xvxmTszdrvSyTACdPe8VU5J6p4sm3egpgw54dILvNqt5eBUv6TFjACLhSxtRuEsxYrgy8uDy269YjScO5aKbGA==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.1 dependencies: @@ -1093,11 +824,8 @@ packages: dev: true /cssnano/5.0.2_postcss@8.2.15: - resolution: - { - integrity: sha512-8JK3EnPsjQsULme9/e5M2hF564f/480hwsdcHvQ7ZtAIMfQ1O3SCfs+b8Mjf5KJxhYApyRshR2QSovEJi2K72Q== - } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-8JK3EnPsjQsULme9/e5M2hF564f/480hwsdcHvQ7ZtAIMfQ1O3SCfs+b8Mjf5KJxhYApyRshR2QSovEJi2K72Q==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.1 dependencies: @@ -1108,44 +836,29 @@ packages: dev: true /csso/4.2.0: - resolution: - { - integrity: sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA== - } - engines: { node: '>=8.0.0' } + resolution: {integrity: sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==} + engines: {node: '>=8.0.0'} dependencies: css-tree: 1.1.3 dev: true /cuid/2.1.8: - resolution: - { - integrity: sha512-xiEMER6E7TlTPnDxrM4eRiC6TRgjNX9xzEZ5U/Se2YJKr7Mq4pJn/2XEHjl3STcSh96GmkHPcBXLES8M29wyyg== - } + resolution: {integrity: sha512-xiEMER6E7TlTPnDxrM4eRiC6TRgjNX9xzEZ5U/Se2YJKr7Mq4pJn/2XEHjl3STcSh96GmkHPcBXLES8M29wyyg==} dev: false /dayjs/1.10.4: - resolution: - { - integrity: sha512-RI/Hh4kqRc1UKLOAf/T5zdMMX5DQIlDxwUe3wSyMMnEbGunnpENCdbUgM+dW7kXidZqCttBrmw7BhN4TMddkCw== - } + resolution: {integrity: sha512-RI/Hh4kqRc1UKLOAf/T5zdMMX5DQIlDxwUe3wSyMMnEbGunnpENCdbUgM+dW7kXidZqCttBrmw7BhN4TMddkCw==} dev: false /debug/3.1.0: - resolution: - { - integrity: sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== - } + resolution: {integrity: sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==} dependencies: ms: 2.0.0 dev: false /debug/4.3.1: - resolution: - { - integrity: sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== - } - engines: { node: '>=6.0' } + resolution: {integrity: sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==} + engines: {node: '>=6.0'} peerDependencies: supports-color: '*' peerDependenciesMeta: @@ -1155,11 +868,8 @@ packages: ms: 2.1.2 /debug/4.3.2: - resolution: - { - integrity: sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== - } - engines: { node: '>=6.0' } + resolution: {integrity: sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==} + engines: {node: '>=6.0'} peerDependencies: supports-color: '*' peerDependenciesMeta: @@ -1170,35 +880,26 @@ packages: dev: true /deep-is/0.1.3: - resolution: { integrity: sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= } + resolution: {integrity: sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=} dev: true /defined/1.0.0: - resolution: { integrity: sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM= } + resolution: {integrity: sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=} dev: true /denque/1.5.0: - resolution: - { - integrity: sha512-CYiCSgIF1p6EUByQPlGkKnP1M9g0ZV3qMIrqMqZqdwazygIA/YP2vrbcyl1h/WppKJTdl1F85cXIle+394iDAQ== - } - engines: { node: '>=0.10' } + resolution: {integrity: sha512-CYiCSgIF1p6EUByQPlGkKnP1M9g0ZV3qMIrqMqZqdwazygIA/YP2vrbcyl1h/WppKJTdl1F85cXIle+394iDAQ==} + engines: {node: '>=0.10'} dev: false /detect-indent/6.0.0: - resolution: - { - integrity: sha512-oSyFlqaTHCItVRGK5RmrmjB+CmaMOW7IaNA/kdxqhoa6d17j/5ce9O9eWXmV/KEdRwqpQA+Vqe8a8Bsybu4YnA== - } - engines: { node: '>=8' } + resolution: {integrity: sha512-oSyFlqaTHCItVRGK5RmrmjB+CmaMOW7IaNA/kdxqhoa6d17j/5ce9O9eWXmV/KEdRwqpQA+Vqe8a8Bsybu4YnA==} + engines: {node: '>=8'} dev: true /detective/5.2.0: - resolution: - { - integrity: sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg== - } - engines: { node: '>=0.8.0' } + resolution: {integrity: sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==} + engines: {node: '>=0.8.0'} hasBin: true dependencies: acorn-node: 1.8.2 @@ -1207,32 +908,23 @@ packages: dev: true /didyoumean/1.2.1: - resolution: { integrity: sha1-6S7f2tplN9SE1zwBcv0eugxJdv8= } + resolution: {integrity: sha1-6S7f2tplN9SE1zwBcv0eugxJdv8=} dev: true /dir-glob/3.0.1: - resolution: - { - integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - } - engines: { node: '>=8' } + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} dependencies: path-type: 4.0.0 dev: true /dlv/1.1.3: - resolution: - { - integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA== - } + resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} dev: true /docker-modem/3.0.0: - resolution: - { - integrity: sha512-WwFajJ8I5geZ/dDZ5FDMDA6TBkWa76xWwGIGw8uzUjNUGCN0to83wJ8Oi1AxrJTC0JBn+7fvIxUctnawtlwXeg== - } - engines: { node: '>= 8.0' } + resolution: {integrity: sha512-WwFajJ8I5geZ/dDZ5FDMDA6TBkWa76xWwGIGw8uzUjNUGCN0to83wJ8Oi1AxrJTC0JBn+7fvIxUctnawtlwXeg==} + engines: {node: '>= 8.0'} dependencies: debug: 4.3.1 readable-stream: 3.6.0 @@ -1243,11 +935,8 @@ packages: dev: false /dockerode/3.3.0: - resolution: - { - integrity: sha512-St08lfOjpYCOXEM8XA0VLu3B3hRjtddODphNW5GFoA0AS3JHgoPQKOz0Qmdzg3P+hUPxhb02g1o1Cu1G+U3lRg== - } - engines: { node: '>= 8.0' } + resolution: {integrity: sha512-St08lfOjpYCOXEM8XA0VLu3B3hRjtddODphNW5GFoA0AS3JHgoPQKOz0Qmdzg3P+hUPxhb02g1o1Cu1G+U3lRg==} + engines: {node: '>= 8.0'} dependencies: docker-modem: 3.0.0 tar-fs: 2.0.1 @@ -1256,20 +945,14 @@ packages: dev: false /doctrine/3.0.0: - resolution: - { - integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - } - engines: { node: '>=6.0.0' } + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} dependencies: esutils: 2.0.3 dev: true /dom-serializer/1.3.1: - resolution: - { - integrity: sha512-Pv2ZluG5ife96udGgEDovOOOA5UELkltfJpnIExPrAk1LTvecolUGn6lIaoLh86d83GiB86CjzciMd9BuRB71Q== - } + resolution: {integrity: sha512-Pv2ZluG5ife96udGgEDovOOOA5UELkltfJpnIExPrAk1LTvecolUGn6lIaoLh86d83GiB86CjzciMd9BuRB71Q==} dependencies: domelementtype: 2.2.0 domhandler: 4.2.0 @@ -1277,27 +960,18 @@ packages: dev: true /domelementtype/2.2.0: - resolution: - { - integrity: sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A== - } + resolution: {integrity: sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==} dev: true /domhandler/4.2.0: - resolution: - { - integrity: sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA== - } - engines: { node: '>= 4' } + resolution: {integrity: sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==} + engines: {node: '>= 4'} dependencies: domelementtype: 2.2.0 dev: true /domutils/2.6.0: - resolution: - { - integrity: sha512-y0BezHuy4MDYxh6OvolXYsH+1EMGmFbwv5FKW7ovwMG6zTPWqNPq3WF9ayZssFq+UlKdffGLbOEaghNdaOm1WA== - } + resolution: {integrity: sha512-y0BezHuy4MDYxh6OvolXYsH+1EMGmFbwv5FKW7ovwMG6zTPWqNPq3WF9ayZssFq+UlKdffGLbOEaghNdaOm1WA==} dependencies: dom-serializer: 1.3.1 domelementtype: 2.2.0 @@ -1305,21 +979,15 @@ packages: dev: true /dot-prop/5.3.0: - resolution: - { - integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== - } - engines: { node: '>=8' } + resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} + engines: {node: '>=8'} dependencies: is-obj: 2.0.0 dev: true /dotenv-extended/2.9.0: - resolution: - { - integrity: sha512-MKc4WCqZj6Abx4rpDbQ9LsuBJldRLxLgFkY5qE+4JM7hXVYT/v8zyWGgnBeDjSOGzEecWOFPlosNpxfB9YnsCw== - } - engines: { node: '>=6' } + resolution: {integrity: sha512-MKc4WCqZj6Abx4rpDbQ9LsuBJldRLxLgFkY5qE+4JM7hXVYT/v8zyWGgnBeDjSOGzEecWOFPlosNpxfB9YnsCw==} + engines: {node: '>=6'} hasBin: true dependencies: auto-parse: 1.8.0 @@ -1329,98 +997,71 @@ packages: dev: true /dotenv/8.2.0: - resolution: - { - integrity: sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw== - } - engines: { node: '>=8' } + resolution: {integrity: sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==} + engines: {node: '>=8'} dev: true /ecdsa-sig-formatter/1.0.11: - resolution: - { - integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== - } + resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} dependencies: safe-buffer: 5.2.1 dev: false /electron-to-chromium/1.3.725: - resolution: - { - integrity: sha512-2BbeAESz7kc6KBzs7WVrMc1BY5waUphk4D4DX5dSQXJhsc3tP5ZFaiyuL0AB7vUKzDYpIeYwTYlEfxyjsGUrhw== - } + resolution: {integrity: sha512-2BbeAESz7kc6KBzs7WVrMc1BY5waUphk4D4DX5dSQXJhsc3tP5ZFaiyuL0AB7vUKzDYpIeYwTYlEfxyjsGUrhw==} dev: true /emoji-regex/8.0.0: - resolution: - { - integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - } + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} dev: true /end-of-stream/1.4.4: - resolution: - { - integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - } + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} dependencies: once: 1.4.0 dev: false /enquirer/2.3.6: - resolution: - { - integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== - } - engines: { node: '>=8.6' } + resolution: {integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==} + engines: {node: '>=8.6'} dependencies: ansi-colors: 4.1.1 dev: true /entities/2.2.0: - resolution: - { - integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== - } + resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} dev: true /error-ex/1.3.2: - resolution: - { - integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - } + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} dependencies: is-arrayish: 0.2.1 dev: true /esbuild/0.11.20: - resolution: - { - integrity: sha512-QOZrVpN/Yz74xfat0H6euSgn3RnwLevY1mJTEXneukz1ln9qB+ieaerRMzSeETpz/UJWsBMzRVR/andBht5WKw== - } + resolution: {integrity: sha512-QOZrVpN/Yz74xfat0H6euSgn3RnwLevY1mJTEXneukz1ln9qB+ieaerRMzSeETpz/UJWsBMzRVR/andBht5WKw==} + hasBin: true + requiresBuild: true + dev: true + + /esbuild/0.12.6: + resolution: {integrity: sha512-RDvVLvAjsq/kIZJoneMiUOH7EE7t2QaW7T3Q7EdQij14+bZbDq5sndb0tTanmHIFSqZVMBMMyqzVHkS3dJobeA==} hasBin: true requiresBuild: true dev: true /escalade/3.1.1: - resolution: - { - integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== - } - engines: { node: '>=6' } + resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + engines: {node: '>=6'} dev: true /escape-string-regexp/1.0.5: - resolution: { integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= } - engines: { node: '>=0.8.0' } + resolution: {integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=} + engines: {node: '>=0.8.0'} dev: true /eslint-config-prettier/8.3.0_eslint@7.26.0: - resolution: - { - integrity: sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew== - } + resolution: {integrity: sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==} hasBin: true peerDependencies: eslint: '>=7.0.0' @@ -1429,11 +1070,8 @@ packages: dev: true /eslint-plugin-svelte3/3.2.0_eslint@7.26.0+svelte@3.38.2: - resolution: - { - integrity: sha512-qdWB1QN21dEozsJFdR8XlEhMnsS6aKHjsXWuNmchYwxoet5I6QdCr1Xcq62++IzRBMCNCeH4waXqSOAdqrZzgA== - } - engines: { node: '>=10' } + resolution: {integrity: sha512-qdWB1QN21dEozsJFdR8XlEhMnsS6aKHjsXWuNmchYwxoet5I6QdCr1Xcq62++IzRBMCNCeH4waXqSOAdqrZzgA==} + engines: {node: '>=10'} peerDependencies: eslint: '>=6.0.0' svelte: ^3.2.0 @@ -1443,48 +1081,33 @@ packages: dev: true /eslint-scope/5.1.1: - resolution: - { - integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== - } - engines: { node: '>=8.0.0' } + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} dependencies: esrecurse: 4.3.0 estraverse: 4.3.0 dev: true /eslint-utils/2.1.0: - resolution: - { - integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== - } - engines: { node: '>=6' } + resolution: {integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==} + engines: {node: '>=6'} dependencies: eslint-visitor-keys: 1.3.0 dev: true /eslint-visitor-keys/1.3.0: - resolution: - { - integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== - } - engines: { node: '>=4' } + resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==} + engines: {node: '>=4'} dev: true /eslint-visitor-keys/2.0.0: - resolution: - { - integrity: sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== - } - engines: { node: '>=10' } + resolution: {integrity: sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==} + engines: {node: '>=10'} dev: true /eslint/7.26.0: - resolution: - { - integrity: sha512-4R1ieRf52/izcZE7AlLy56uIHHDLT74Yzz2Iv2l6kDaYvEu9x+wMB5dZArVL8SYGXSYV2YAg70FcW5Y5nGGNIg== - } - engines: { node: ^10.12.0 || >=12.0.0 } + resolution: {integrity: sha512-4R1ieRf52/izcZE7AlLy56uIHHDLT74Yzz2Iv2l6kDaYvEu9x+wMB5dZArVL8SYGXSYV2YAg70FcW5Y5nGGNIg==} + engines: {node: ^10.12.0 || >=12.0.0} hasBin: true dependencies: '@babel/code-frame': 7.12.11 @@ -1529,11 +1152,8 @@ packages: dev: true /espree/7.3.1: - resolution: - { - integrity: sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== - } - engines: { node: ^10.12.0 || >=12.0.0 } + resolution: {integrity: sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==} + engines: {node: ^10.12.0 || >=12.0.0} dependencies: acorn: 7.4.1 acorn-jsx: 5.3.1_acorn@7.4.1 @@ -1541,78 +1161,51 @@ packages: dev: true /esprima/4.0.1: - resolution: - { - integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - } - engines: { node: '>=4' } + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} hasBin: true dev: true /esquery/1.4.0: - resolution: - { - integrity: sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== - } - engines: { node: '>=0.10' } + resolution: {integrity: sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==} + engines: {node: '>=0.10'} dependencies: estraverse: 5.2.0 dev: true /esrecurse/4.3.0: - resolution: - { - integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - } - engines: { node: '>=4.0' } + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} dependencies: estraverse: 5.2.0 dev: true /estraverse/4.3.0: - resolution: - { - integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - } - engines: { node: '>=4.0' } + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} dev: true /estraverse/5.2.0: - resolution: - { - integrity: sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== - } - engines: { node: '>=4.0' } + resolution: {integrity: sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==} + engines: {node: '>=4.0'} dev: true /estree-walker/2.0.2: - resolution: - { - integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== - } + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} dev: true /esutils/2.0.3: - resolution: - { - integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} dev: true /fast-deep-equal/3.1.3: - resolution: - { - integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - } + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} dev: true /fast-glob/3.2.5: - resolution: - { - integrity: sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg== - } - engines: { node: '>=8' } + resolution: {integrity: sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==} + engines: {node: '>=8'} dependencies: '@nodelib/fs.stat': 2.0.4 '@nodelib/fs.walk': 1.2.6 @@ -1623,83 +1216,56 @@ packages: dev: true /fast-json-stable-stringify/2.1.0: - resolution: - { - integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - } + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} dev: true /fast-levenshtein/2.0.6: - resolution: { integrity: sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= } + resolution: {integrity: sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=} dev: true /fastq/1.11.0: - resolution: - { - integrity: sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g== - } + resolution: {integrity: sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==} dependencies: reusify: 1.0.4 dev: true /file-entry-cache/6.0.1: - resolution: - { - integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== - } - engines: { node: ^10.12.0 || >=12.0.0 } + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} dependencies: flat-cache: 3.0.4 dev: true /fill-range/7.0.1: - resolution: - { - integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - } - engines: { node: '>=8' } + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} dependencies: to-regex-range: 5.0.1 dev: true /flat-cache/3.0.4: - resolution: - { - integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== - } - engines: { node: ^10.12.0 || >=12.0.0 } + resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} + engines: {node: ^10.12.0 || >=12.0.0} dependencies: flatted: 3.1.1 rimraf: 3.0.2 dev: true /flatted/3.1.1: - resolution: - { - integrity: sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA== - } + resolution: {integrity: sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==} dev: true /fraction.js/4.0.13: - resolution: - { - integrity: sha512-E1fz2Xs9ltlUp+qbiyx9wmt2n9dRzPsS11Jtdb8D2o+cC7wr9xkkKsVKJuBX0ST+LVS+LhLO+SbLJNtfWcJvXA== - } + resolution: {integrity: sha512-E1fz2Xs9ltlUp+qbiyx9wmt2n9dRzPsS11Jtdb8D2o+cC7wr9xkkKsVKJuBX0ST+LVS+LhLO+SbLJNtfWcJvXA==} dev: true /fs-constants/1.0.0: - resolution: - { - integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== - } + resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} dev: false /fs-extra/10.0.0: - resolution: - { - integrity: sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ== - } - engines: { node: '>=12' } + resolution: {integrity: sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==} + engines: {node: '>=12'} dependencies: graceful-fs: 4.2.6 jsonfile: 6.1.0 @@ -1707,73 +1273,55 @@ packages: dev: true /fs.realpath/1.0.0: - resolution: { integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8= } + resolution: {integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8=} /fsevents/2.3.2: - resolution: - { - integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== - } - engines: { node: ^8.16.0 || ^10.6.0 || >=11.0.0 } + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] dev: true optional: true /function-bind/1.1.1: - resolution: - { - integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - } + resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} /function.name/1.0.13: - resolution: - { - integrity: sha512-mVrqdoy5npWZyoXl4DxCeuVF6delDcQjVS9aPdvLYlBxtMTZDR2B5GVEQEoM1jJyspCqg3C0v4ABkLE7tp9xFA== - } + resolution: {integrity: sha512-mVrqdoy5npWZyoXl4DxCeuVF6delDcQjVS9aPdvLYlBxtMTZDR2B5GVEQEoM1jJyspCqg3C0v4ABkLE7tp9xFA==} dependencies: noop6: 1.0.9 dev: true /functional-red-black-tree/1.0.1: - resolution: { integrity: sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= } + resolution: {integrity: sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=} dev: true /generate-password/1.6.0: - resolution: - { - integrity: sha512-YUJTQkApkLT/fru0QdYWP0lVZdPKhF5kXCP24sgI4gR/vFMJFopCj5t1+9FAKIYcML/nxzx2PMkA1ymO1FC+tQ== - } + resolution: {integrity: sha512-YUJTQkApkLT/fru0QdYWP0lVZdPKhF5kXCP24sgI4gR/vFMJFopCj5t1+9FAKIYcML/nxzx2PMkA1ymO1FC+tQ==} dev: false /glob-base/0.3.0: - resolution: { integrity: sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q= } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=} + engines: {node: '>=0.10.0'} dependencies: glob-parent: 2.0.0 is-glob: 2.0.1 dev: true /glob-parent/2.0.0: - resolution: { integrity: sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg= } + resolution: {integrity: sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=} dependencies: is-glob: 2.0.1 dev: true /glob-parent/5.1.2: - resolution: - { - integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - } - engines: { node: '>= 6' } + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} dependencies: is-glob: 4.0.1 dev: true /glob/7.1.6: - resolution: - { - integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== - } + resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -1784,10 +1332,7 @@ packages: dev: false /glob/7.1.7: - resolution: - { - integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== - } + resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==} dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -1798,31 +1343,22 @@ packages: dev: true /globals/12.4.0: - resolution: - { - integrity: sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== - } - engines: { node: '>=8' } + resolution: {integrity: sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==} + engines: {node: '>=8'} dependencies: type-fest: 0.8.1 dev: true /globals/13.8.0: - resolution: - { - integrity: sha512-rHtdA6+PDBIjeEvA91rpqzEvk/k3/i7EeNQiryiWuJH0Hw9cpyJMAt2jtbAwUaRdhD+573X4vWw6IcjKPasi9Q== - } - engines: { node: '>=8' } + resolution: {integrity: sha512-rHtdA6+PDBIjeEvA91rpqzEvk/k3/i7EeNQiryiWuJH0Hw9cpyJMAt2jtbAwUaRdhD+573X4vWw6IcjKPasi9Q==} + engines: {node: '>=8'} dependencies: type-fest: 0.20.2 dev: true /globby/11.0.3: - resolution: - { - integrity: sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg== - } - engines: { node: '>=10' } + resolution: {integrity: sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg==} + engines: {node: '>=10'} dependencies: array-union: 2.1.0 dir-glob: 3.0.1 @@ -1833,178 +1369,127 @@ packages: dev: true /graceful-fs/4.2.6: - resolution: - { - integrity: sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== - } + resolution: {integrity: sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==} dev: true /has-flag/3.0.0: - resolution: { integrity: sha1-tdRU3CGZriJWmfNGfloH87lVuv0= } - engines: { node: '>=4' } + resolution: {integrity: sha1-tdRU3CGZriJWmfNGfloH87lVuv0=} + engines: {node: '>=4'} dev: true /has-flag/4.0.0: - resolution: - { - integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - } - engines: { node: '>=8' } + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} dev: true /has/1.0.3: - resolution: - { - integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - } - engines: { node: '>= 0.4.0' } + resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} + engines: {node: '>= 0.4.0'} dependencies: function-bind: 1.1.1 /hash-sum/2.0.0: - resolution: - { - integrity: sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg== - } + resolution: {integrity: sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==} dev: true /hex-color-regex/1.1.0: - resolution: - { - integrity: sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ== - } + resolution: {integrity: sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==} dev: true /hsl-regex/1.0.0: - resolution: { integrity: sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4= } + resolution: {integrity: sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=} dev: true /hsla-regex/1.0.0: - resolution: { integrity: sha1-wc56MWjIxmFAM6S194d/OyJfnDg= } + resolution: {integrity: sha1-wc56MWjIxmFAM6S194d/OyJfnDg=} dev: true /html-tags/3.1.0: - resolution: - { - integrity: sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg== - } - engines: { node: '>=8' } + resolution: {integrity: sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==} + engines: {node: '>=8'} dev: true /ieee754/1.2.1: - resolution: - { - integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - } + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} dev: false /ignore/4.0.6: - resolution: - { - integrity: sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== - } - engines: { node: '>= 4' } + resolution: {integrity: sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==} + engines: {node: '>= 4'} dev: true /ignore/5.1.8: - resolution: - { - integrity: sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== - } - engines: { node: '>= 4' } + resolution: {integrity: sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==} + engines: {node: '>= 4'} dev: true /import-cwd/3.0.0: - resolution: - { - integrity: sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg== - } - engines: { node: '>=8' } + resolution: {integrity: sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg==} + engines: {node: '>=8'} dependencies: import-from: 3.0.0 dev: true /import-fresh/3.3.0: - resolution: - { - integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== - } - engines: { node: '>=6' } + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} dependencies: parent-module: 1.0.1 resolve-from: 4.0.0 dev: true /import-from/3.0.0: - resolution: - { - integrity: sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ== - } - engines: { node: '>=8' } + resolution: {integrity: sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==} + engines: {node: '>=8'} dependencies: resolve-from: 5.0.0 dev: true /imurmurhash/0.1.4: - resolution: { integrity: sha1-khi5srkoojixPcT7a21XbyMUU+o= } - engines: { node: '>=0.8.19' } + resolution: {integrity: sha1-khi5srkoojixPcT7a21XbyMUU+o=} + engines: {node: '>=0.8.19'} dev: true /indexes-of/1.0.1: - resolution: { integrity: sha1-8w9xbI4r00bHtn0985FVZqfAVgc= } + resolution: {integrity: sha1-8w9xbI4r00bHtn0985FVZqfAVgc=} dev: true /inflight/1.0.6: - resolution: { integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= } + resolution: {integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=} dependencies: once: 1.4.0 wrappy: 1.0.2 /inherits/2.0.4: - resolution: - { - integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - } + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} /interpret/1.4.0: - resolution: - { - integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== - } - engines: { node: '>= 0.10' } + resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} + engines: {node: '>= 0.10'} dev: false /is-absolute-url/3.0.3: - resolution: - { - integrity: sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q== - } - engines: { node: '>=8' } + resolution: {integrity: sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==} + engines: {node: '>=8'} dev: true /is-arrayish/0.2.1: - resolution: { integrity: sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= } + resolution: {integrity: sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=} dev: true /is-arrayish/0.3.2: - resolution: - { - integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== - } + resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} dev: true /is-binary-path/2.1.0: - resolution: - { - integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - } - engines: { node: '>=8' } + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} dependencies: binary-extensions: 2.2.0 dev: true /is-color-stop/1.1.0: - resolution: { integrity: sha1-z/9HGu5N1cnhWFmPvhKWe1za00U= } + resolution: {integrity: sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=} dependencies: css-color-names: 0.0.4 hex-color-regex: 1.1.0 @@ -2015,96 +1500,72 @@ packages: dev: true /is-core-module/2.4.0: - resolution: - { - integrity: sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A== - } + resolution: {integrity: sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==} dependencies: has: 1.0.3 /is-dotfile/1.0.3: - resolution: { integrity: sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE= } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=} + engines: {node: '>=0.10.0'} dev: true /is-extglob/1.0.0: - resolution: { integrity: sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA= } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=} + engines: {node: '>=0.10.0'} dev: true /is-extglob/2.1.1: - resolution: { integrity: sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=} + engines: {node: '>=0.10.0'} dev: true /is-fullwidth-code-point/3.0.0: - resolution: - { - integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - } - engines: { node: '>=8' } + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} dev: true /is-glob/2.0.1: - resolution: { integrity: sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM= } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=} + engines: {node: '>=0.10.0'} dependencies: is-extglob: 1.0.0 dev: true /is-glob/4.0.1: - resolution: - { - integrity: sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==} + engines: {node: '>=0.10.0'} dependencies: is-extglob: 2.1.1 dev: true /is-number/7.0.0: - resolution: - { - integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - } - engines: { node: '>=0.12.0' } + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} dev: true /is-obj/2.0.0: - resolution: - { - integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== - } - engines: { node: '>=8' } + resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} + engines: {node: '>=8'} dev: true /is-resolvable/1.1.0: - resolution: - { - integrity: sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== - } + resolution: {integrity: sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==} dev: true /isarray/1.0.0: - resolution: { integrity: sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= } + resolution: {integrity: sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=} dev: false /isexe/2.0.0: - resolution: { integrity: sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= } + resolution: {integrity: sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=} dev: true /js-tokens/4.0.0: - resolution: - { - integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - } + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} dev: true /js-yaml/3.14.1: - resolution: - { - integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== - } + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} hasBin: true dependencies: argparse: 1.0.10 @@ -2112,45 +1573,30 @@ packages: dev: true /js-yaml/4.1.0: - resolution: - { - integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== - } + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true dependencies: argparse: 2.0.1 dev: false /json-parse-even-better-errors/2.3.1: - resolution: - { - integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== - } + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} dev: true /json-schema-traverse/0.4.1: - resolution: - { - integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - } + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} dev: true /json-schema-traverse/1.0.0: - resolution: - { - integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== - } + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} dev: true /json-stable-stringify-without-jsonify/1.0.1: - resolution: { integrity: sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= } + resolution: {integrity: sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=} dev: true /jsonfile/6.1.0: - resolution: - { - integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== - } + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} dependencies: universalify: 2.0.0 optionalDependencies: @@ -2158,11 +1604,8 @@ packages: dev: true /jsonwebtoken/8.5.1: - resolution: - { - integrity: sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w== - } - engines: { node: '>=4', npm: '>=1.4.28' } + resolution: {integrity: sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==} + engines: {node: '>=4', npm: '>=1.4.28'} dependencies: jws: 3.2.2 lodash.includes: 4.3.0 @@ -2177,10 +1620,7 @@ packages: dev: false /jwa/1.4.1: - resolution: - { - integrity: sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA== - } + resolution: {integrity: sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==} dependencies: buffer-equal-constant-time: 1.0.1 ecdsa-sig-formatter: 1.0.11 @@ -2188,188 +1628,143 @@ packages: dev: false /jws/3.2.2: - resolution: - { - integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA== - } + resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==} dependencies: jwa: 1.4.1 safe-buffer: 5.2.1 dev: false /kareem/2.3.2: - resolution: - { - integrity: sha512-STHz9P7X2L4Kwn72fA4rGyqyXdmrMSdxqHx9IXon/FXluXieaFA6KJ2upcHAHxQPQ0LeM/OjLrhFxifHewOALQ== - } + resolution: {integrity: sha512-STHz9P7X2L4Kwn72fA4rGyqyXdmrMSdxqHx9IXon/FXluXieaFA6KJ2upcHAHxQPQ0LeM/OjLrhFxifHewOALQ==} dev: false /levn/0.4.1: - resolution: - { - integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== - } - engines: { node: '>= 0.8.0' } + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} dependencies: prelude-ls: 1.2.1 type-check: 0.4.0 dev: true /lines-and-columns/1.1.6: - resolution: { integrity: sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= } + resolution: {integrity: sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=} dev: true /lodash.clonedeep/4.5.0: - resolution: { integrity: sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= } + resolution: {integrity: sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=} dev: true /lodash.flatten/4.4.0: - resolution: { integrity: sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8= } + resolution: {integrity: sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=} dev: true /lodash.includes/4.3.0: - resolution: { integrity: sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8= } + resolution: {integrity: sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=} dev: false /lodash.isboolean/3.0.3: - resolution: { integrity: sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY= } + resolution: {integrity: sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=} dev: false /lodash.isinteger/4.0.4: - resolution: { integrity: sha1-YZwK89A/iwTDH1iChAt3sRzWg0M= } + resolution: {integrity: sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=} dev: false /lodash.isnumber/3.0.3: - resolution: { integrity: sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w= } + resolution: {integrity: sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=} dev: false /lodash.isplainobject/4.0.6: - resolution: { integrity: sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs= } + resolution: {integrity: sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=} dev: false /lodash.isstring/4.0.1: - resolution: { integrity: sha1-1SfftUVuynzJu5XV2ur4i6VKVFE= } + resolution: {integrity: sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=} dev: false /lodash.memoize/4.1.2: - resolution: { integrity: sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= } + resolution: {integrity: sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=} dev: true /lodash.once/4.1.1: - resolution: { integrity: sha1-DdOXEhPHxW34gJd9UEyI+0cal6w= } + resolution: {integrity: sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=} dev: false /lodash.toarray/4.4.0: - resolution: { integrity: sha1-JMS/zWsvuji/0FlNsRedjptlZWE= } + resolution: {integrity: sha1-JMS/zWsvuji/0FlNsRedjptlZWE=} dev: true /lodash.topath/4.5.2: - resolution: { integrity: sha1-NhY1Hzu6YZlKCTGYlmC9AyVP0Ak= } + resolution: {integrity: sha1-NhY1Hzu6YZlKCTGYlmC9AyVP0Ak=} dev: true /lodash.truncate/4.4.2: - resolution: { integrity: sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= } + resolution: {integrity: sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=} dev: true /lodash.uniq/4.5.0: - resolution: { integrity: sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= } + resolution: {integrity: sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=} dev: true /lodash/4.17.21: - resolution: - { - integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - } + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} dev: true /lru-cache/6.0.0: - resolution: - { - integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - } - engines: { node: '>=10' } + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} dependencies: yallist: 4.0.0 dev: true /mdn-data/2.0.14: - resolution: - { - integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== - } + resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==} dev: true /memory-pager/1.5.0: - resolution: - { - integrity: sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg== - } + resolution: {integrity: sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==} dev: false optional: true /merge2/1.4.1: - resolution: - { - integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - } - engines: { node: '>= 8' } + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} dev: true /micromatch/4.0.4: - resolution: - { - integrity: sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== - } - engines: { node: '>=8.6' } + resolution: {integrity: sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==} + engines: {node: '>=8.6'} dependencies: braces: 3.0.2 picomatch: 2.2.3 dev: true /min-indent/1.0.1: - resolution: - { - integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== - } - engines: { node: '>=4' } + resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} + engines: {node: '>=4'} dev: true /minimatch/3.0.4: - resolution: - { - integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - } + resolution: {integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==} dependencies: brace-expansion: 1.1.11 /minimist/1.2.5: - resolution: - { - integrity: sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== - } + resolution: {integrity: sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==} dev: true /mkdirp-classic/0.5.3: - resolution: - { - integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== - } + resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} dev: false /modern-normalize/1.1.0: - resolution: - { - integrity: sha512-2lMlY1Yc1+CUy0gw4H95uNN7vjbpoED7NNRSBHE25nWfLBdmMzFCsPshlzbxHz+gYMcBEUN8V4pU16prcdPSgA== - } - engines: { node: '>=6' } + resolution: {integrity: sha512-2lMlY1Yc1+CUy0gw4H95uNN7vjbpoED7NNRSBHE25nWfLBdmMzFCsPshlzbxHz+gYMcBEUN8V4pU16prcdPSgA==} + engines: {node: '>=6'} dev: true /mongodb/3.6.6: - resolution: - { - integrity: sha512-WlirMiuV1UPbej5JeCMqE93JRfZ/ZzqE7nJTwP85XzjAF4rRSeq2bGCb1cjfoHLOF06+HxADaPGqT0g3SbVT1w== - } - engines: { node: '>=4' } + resolution: {integrity: sha512-WlirMiuV1UPbej5JeCMqE93JRfZ/ZzqE7nJTwP85XzjAF4rRSeq2bGCb1cjfoHLOF06+HxADaPGqT0g3SbVT1w==} + engines: {node: '>=4'} peerDependencies: aws4: '*' bson-ext: '*' @@ -2401,10 +1796,7 @@ packages: dev: false /mongoose-legacy-pluralize/1.0.2_mongoose@5.12.9: - resolution: - { - integrity: sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ== - } + resolution: {integrity: sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ==} peerDependencies: mongoose: '*' dependencies: @@ -2412,11 +1804,8 @@ packages: dev: false /mongoose/5.12.9: - resolution: - { - integrity: sha512-ZSDjW15DmUbHQcZ2PqoXsJeYnpYipISi6QJH/XHR9dcSg3IRNCa86apcTptBux03/YBPiSZlKNYUNDx7iuMWoA== - } - engines: { node: '>=4.0.0' } + resolution: {integrity: sha512-ZSDjW15DmUbHQcZ2PqoXsJeYnpYipISi6QJH/XHR9dcSg3IRNCa86apcTptBux03/YBPiSZlKNYUNDx7iuMWoA==} + engines: {node: '>=4.0.0'} dependencies: '@types/mongodb': 3.6.12 bson: 1.1.6 @@ -2440,19 +1829,13 @@ packages: dev: false /mpath/0.8.3: - resolution: - { - integrity: sha512-eb9rRvhDltXVNL6Fxd2zM9D4vKBxjVVQNLNijlj7uoXUy19zNDsIif5zR+pWmPCWNKwAtqyo4JveQm4nfD5+eA== - } - engines: { node: '>=4.0.0' } + resolution: {integrity: sha512-eb9rRvhDltXVNL6Fxd2zM9D4vKBxjVVQNLNijlj7uoXUy19zNDsIif5zR+pWmPCWNKwAtqyo4JveQm4nfD5+eA==} + engines: {node: '>=4.0.0'} dev: false /mquery/3.2.5: - resolution: - { - integrity: sha512-VjOKHHgU84wij7IUoZzFRU07IAxd5kWJaDmyUzQlbjHjyoeK5TNeeo8ZsFDtTYnSgpW6n/nMNIHvE3u8Lbrf4A== - } - engines: { node: '>=4.0.0' } + resolution: {integrity: sha512-VjOKHHgU84wij7IUoZzFRU07IAxd5kWJaDmyUzQlbjHjyoeK5TNeeo8ZsFDtTYnSgpW6n/nMNIHvE3u8Lbrf4A==} + engines: {node: '>=4.0.0'} dependencies: bluebird: 3.5.1 debug: 3.1.0 @@ -2462,123 +1845,84 @@ packages: dev: false /mri/1.1.6: - resolution: - { - integrity: sha512-oi1b3MfbyGa7FJMP9GmLTttni5JoICpYBRlq+x5V16fZbLsnL9N3wFqqIm/nIG43FjUFkFh9Epzp/kzUGUnJxQ== - } - engines: { node: '>=4' } + resolution: {integrity: sha512-oi1b3MfbyGa7FJMP9GmLTttni5JoICpYBRlq+x5V16fZbLsnL9N3wFqqIm/nIG43FjUFkFh9Epzp/kzUGUnJxQ==} + engines: {node: '>=4'} dev: true /ms/2.0.0: - resolution: { integrity: sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= } + resolution: {integrity: sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=} dev: false /ms/2.1.2: - resolution: - { - integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - } + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} /ms/2.1.3: - resolution: - { - integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - } + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} dev: false /nanoid/3.1.23: - resolution: - { - integrity: sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw== - } - engines: { node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1 } + resolution: {integrity: sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true dev: true /natural-compare/1.4.0: - resolution: { integrity: sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= } + resolution: {integrity: sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=} dev: true /node-emoji/1.10.0: - resolution: - { - integrity: sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw== - } + resolution: {integrity: sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw==} dependencies: lodash.toarray: 4.4.0 dev: true /node-releases/1.1.71: - resolution: - { - integrity: sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg== - } + resolution: {integrity: sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg==} dev: true /noop6/1.0.9: - resolution: - { - integrity: sha512-DB3Hwyd89dPr5HqEPg3YHjzvwh/mCqizC1zZ8vyofqc+TQRyPDnT4wgXXbLGF4z9YAzwwTLi8pNLhGqcbSjgkA== - } + resolution: {integrity: sha512-DB3Hwyd89dPr5HqEPg3YHjzvwh/mCqizC1zZ8vyofqc+TQRyPDnT4wgXXbLGF4z9YAzwwTLi8pNLhGqcbSjgkA==} dev: true /normalize-path/3.0.0: - resolution: - { - integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} dev: true /normalize-range/0.1.2: - resolution: { integrity: sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=} + engines: {node: '>=0.10.0'} dev: true /normalize-url/4.5.0: - resolution: - { - integrity: sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ== - } - engines: { node: '>=8' } + resolution: {integrity: sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==} + engines: {node: '>=8'} dev: true /nth-check/2.0.0: - resolution: - { - integrity: sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q== - } + resolution: {integrity: sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q==} dependencies: boolbase: 1.0.0 dev: true /object-hash/2.1.1: - resolution: - { - integrity: sha512-VOJmgmS+7wvXf8CjbQmimtCnEx3IAoLxI3fp2fbWehxrWBcAQFbk+vcwb6vzR0VZv/eNCJ/27j151ZTwqW/JeQ== - } - engines: { node: '>= 6' } + resolution: {integrity: sha512-VOJmgmS+7wvXf8CjbQmimtCnEx3IAoLxI3fp2fbWehxrWBcAQFbk+vcwb6vzR0VZv/eNCJ/27j151ZTwqW/JeQ==} + engines: {node: '>= 6'} dev: true /once/1.4.0: - resolution: { integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E= } + resolution: {integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E=} dependencies: wrappy: 1.0.2 /optional-require/1.0.3: - resolution: - { - integrity: sha512-RV2Zp2MY2aeYK5G+B/Sps8lW5NHAzE5QClbFP15j+PWmP+T9PxlJXBOOLoSAdgwFvS4t0aMR4vpedMkbHfh0nA== - } - engines: { node: '>=4' } + resolution: {integrity: sha512-RV2Zp2MY2aeYK5G+B/Sps8lW5NHAzE5QClbFP15j+PWmP+T9PxlJXBOOLoSAdgwFvS4t0aMR4vpedMkbHfh0nA==} + engines: {node: '>=4'} dev: false /optionator/0.9.1: - resolution: - { - integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== - } - engines: { node: '>= 0.8.0' } + resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==} + engines: {node: '>= 0.8.0'} dependencies: deep-is: 0.1.3 fast-levenshtein: 2.0.6 @@ -2589,18 +1933,15 @@ packages: dev: true /parent-module/1.0.1: - resolution: - { - integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - } - engines: { node: '>=6' } + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} dependencies: callsites: 3.1.0 dev: true /parse-glob/3.0.4: - resolution: { integrity: sha1-ssN2z7EfNVE7rdFz7wu246OIORw= } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha1-ssN2z7EfNVE7rdFz7wu246OIORw=} + engines: {node: '>=0.10.0'} dependencies: glob-base: 0.3.0 is-dotfile: 1.0.3 @@ -2609,11 +1950,8 @@ packages: dev: true /parse-json/5.2.0: - resolution: - { - integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== - } - engines: { node: '>=8' } + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} dependencies: '@babel/code-frame': 7.12.11 error-ex: 1.3.2 @@ -2622,44 +1960,29 @@ packages: dev: true /path-is-absolute/1.0.1: - resolution: { integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18= } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18=} + engines: {node: '>=0.10.0'} /path-key/3.1.1: - resolution: - { - integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - } - engines: { node: '>=8' } + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} dev: true /path-parse/1.0.6: - resolution: - { - integrity: sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== - } + resolution: {integrity: sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==} /path-type/4.0.0: - resolution: - { - integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - } - engines: { node: '>=8' } + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} dev: true /picomatch/2.2.3: - resolution: - { - integrity: sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg== - } - engines: { node: '>=8.6' } + resolution: {integrity: sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==} + engines: {node: '>=8.6'} dev: true /postcss-calc/8.0.0_postcss@8.2.15: - resolution: - { - integrity: sha512-5NglwDrcbiy8XXfPM11F3HeC6hoT9W7GUH/Zi5U/p7u3Irv4rHhdDcIZwG0llHXV4ftsBjpfWMXAnXNl4lnt8g== - } + resolution: {integrity: sha512-5NglwDrcbiy8XXfPM11F3HeC6hoT9W7GUH/Zi5U/p7u3Irv4rHhdDcIZwG0llHXV4ftsBjpfWMXAnXNl4lnt8g==} peerDependencies: postcss: ^8.2.2 dependencies: @@ -2669,11 +1992,8 @@ packages: dev: true /postcss-colormin/5.0.0_postcss@8.2.15: - resolution: - { - integrity: sha512-Yt84+5V6CgS/AhK7d7MA58vG8dSZ7+ytlRtWLaQhag3HXOncTfmYpuUOX4cDoXjvLfw1sHRCHMiBjYhc35CymQ== - } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-Yt84+5V6CgS/AhK7d7MA58vG8dSZ7+ytlRtWLaQhag3HXOncTfmYpuUOX4cDoXjvLfw1sHRCHMiBjYhc35CymQ==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.1 dependencies: @@ -2684,11 +2004,8 @@ packages: dev: true /postcss-convert-values/5.0.0_postcss@8.2.15: - resolution: - { - integrity: sha512-V5kmYm4xoBAjNs+eHY/6XzXJkkGeg4kwNf2ocfqhLb1WBPEa4oaSmoi1fnVO7Dkblqvus9h+AenDvhCKUCK7uQ== - } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-V5kmYm4xoBAjNs+eHY/6XzXJkkGeg4kwNf2ocfqhLb1WBPEa4oaSmoi1fnVO7Dkblqvus9h+AenDvhCKUCK7uQ==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.1 dependencies: @@ -2697,11 +2014,8 @@ packages: dev: true /postcss-discard-comments/5.0.0_postcss@8.2.15: - resolution: - { - integrity: sha512-Umig6Gxs8m20RihiXY6QkePd6mp4FxkA1Dg+f/Kd6uw0gEMfKRjDeQOyFkLibexbJJGHpE3lrN/Q0R9SMrUMbQ== - } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-Umig6Gxs8m20RihiXY6QkePd6mp4FxkA1Dg+f/Kd6uw0gEMfKRjDeQOyFkLibexbJJGHpE3lrN/Q0R9SMrUMbQ==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.1 dependencies: @@ -2709,11 +2023,8 @@ packages: dev: true /postcss-discard-duplicates/5.0.0_postcss@8.2.15: - resolution: - { - integrity: sha512-vEJJ+Y3pFUnO1FyCBA6PSisGjHtnphL3V6GsNvkASq/VkP3OX5/No5RYXXLxHa2QegStNzg6HYrYdo71uR4caQ== - } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-vEJJ+Y3pFUnO1FyCBA6PSisGjHtnphL3V6GsNvkASq/VkP3OX5/No5RYXXLxHa2QegStNzg6HYrYdo71uR4caQ==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.1 dependencies: @@ -2721,11 +2032,8 @@ packages: dev: true /postcss-discard-empty/5.0.0_postcss@8.2.15: - resolution: - { - integrity: sha512-+wigy099Y1xZxG36WG5L1f2zeH1oicntkJEW4TDIqKKDO2g9XVB3OhoiHTu08rDEjLnbcab4rw0BAccwi2VjiQ== - } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-+wigy099Y1xZxG36WG5L1f2zeH1oicntkJEW4TDIqKKDO2g9XVB3OhoiHTu08rDEjLnbcab4rw0BAccwi2VjiQ==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.1 dependencies: @@ -2733,11 +2041,8 @@ packages: dev: true /postcss-discard-overridden/5.0.0_postcss@8.2.15: - resolution: - { - integrity: sha512-hybnScTaZM2iEA6kzVQ6Spozy7kVdLw+lGw8hftLlBEzt93uzXoltkYp9u0tI8xbfhxDLTOOzHsHQCkYdmzRUg== - } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-hybnScTaZM2iEA6kzVQ6Spozy7kVdLw+lGw8hftLlBEzt93uzXoltkYp9u0tI8xbfhxDLTOOzHsHQCkYdmzRUg==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.1 dependencies: @@ -2745,33 +2050,24 @@ packages: dev: true /postcss-js/3.0.3: - resolution: - { - integrity: sha512-gWnoWQXKFw65Hk/mi2+WTQTHdPD5UJdDXZmX073EY/B3BWnYjO4F4t0VneTCnCGQ5E5GsCdMkzPaTXwl3r5dJw== - } - engines: { node: '>=10.0' } + resolution: {integrity: sha512-gWnoWQXKFw65Hk/mi2+WTQTHdPD5UJdDXZmX073EY/B3BWnYjO4F4t0VneTCnCGQ5E5GsCdMkzPaTXwl3r5dJw==} + engines: {node: '>=10.0'} dependencies: camelcase-css: 2.0.1 postcss: 8.2.15 dev: true /postcss-load-config/3.0.1: - resolution: - { - integrity: sha512-/pDHe30UYZUD11IeG8GWx9lNtu1ToyTsZHnyy45B4Mrwr/Kb6NgYl7k753+05CJNKnjbwh4975amoPJ+TEjHNQ== - } - engines: { node: '>= 10' } + resolution: {integrity: sha512-/pDHe30UYZUD11IeG8GWx9lNtu1ToyTsZHnyy45B4Mrwr/Kb6NgYl7k753+05CJNKnjbwh4975amoPJ+TEjHNQ==} + engines: {node: '>= 10'} dependencies: cosmiconfig: 7.0.0 import-cwd: 3.0.0 dev: true /postcss-merge-longhand/5.0.1_postcss@8.2.15: - resolution: - { - integrity: sha512-H1RO8le5deFGumQzuhJjuL0bIXPRysa+w7xtk5KrHe38oiaSS9ksPXDo24+IOS3SETPhip0J5+1uCOW+ALs3Yw== - } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-H1RO8le5deFGumQzuhJjuL0bIXPRysa+w7xtk5KrHe38oiaSS9ksPXDo24+IOS3SETPhip0J5+1uCOW+ALs3Yw==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.1 dependencies: @@ -2782,11 +2078,8 @@ packages: dev: true /postcss-merge-rules/5.0.0_postcss@8.2.15: - resolution: - { - integrity: sha512-TfsXbKjNYCGfUPEXGIGPySnMiJbdS+3gcVeV8gwmJP4RajyKZHW8E0FYDL1WmggTj3hi+m+WUCAvqRpX2ut4Kg== - } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-TfsXbKjNYCGfUPEXGIGPySnMiJbdS+3gcVeV8gwmJP4RajyKZHW8E0FYDL1WmggTj3hi+m+WUCAvqRpX2ut4Kg==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.1 dependencies: @@ -2799,11 +2092,8 @@ packages: dev: true /postcss-minify-font-values/5.0.0_postcss@8.2.15: - resolution: - { - integrity: sha512-zi2JhFaMOcIaNxhndX5uhsqSY1rexKDp23wV8EOmC9XERqzLbHsoRye3aYF716Zm+hkcR4loqKDt8LZlmihwAg== - } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-zi2JhFaMOcIaNxhndX5uhsqSY1rexKDp23wV8EOmC9XERqzLbHsoRye3aYF716Zm+hkcR4loqKDt8LZlmihwAg==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.1 dependencies: @@ -2812,11 +2102,8 @@ packages: dev: true /postcss-minify-gradients/5.0.0_postcss@8.2.15: - resolution: - { - integrity: sha512-/jPtNgs6JySMwgsE5dPOq8a2xEopWTW3RyqoB9fLqxgR+mDUNLSi7joKd+N1z7FXWgVkc4l/dEBMXHgNAaUbvg== - } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-/jPtNgs6JySMwgsE5dPOq8a2xEopWTW3RyqoB9fLqxgR+mDUNLSi7joKd+N1z7FXWgVkc4l/dEBMXHgNAaUbvg==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.1 dependencies: @@ -2827,11 +2114,8 @@ packages: dev: true /postcss-minify-params/5.0.0_postcss@8.2.15: - resolution: - { - integrity: sha512-KvZYIxTPBVKjdd+XgObq9A+Sfv8lMkXTpbZTsjhr42XbfWIeLaTItMlygsDWfjArEc3muUfDaUFgNSeDiJ5jug== - } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-KvZYIxTPBVKjdd+XgObq9A+Sfv8lMkXTpbZTsjhr42XbfWIeLaTItMlygsDWfjArEc3muUfDaUFgNSeDiJ5jug==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.1 dependencies: @@ -2844,11 +2128,8 @@ packages: dev: true /postcss-minify-selectors/5.0.0_postcss@8.2.15: - resolution: - { - integrity: sha512-cEM0O0eWwFIvmo6nfB0lH0vO/XFwgqIvymODbfPXZ1gTA3i76FKnb7TGUrEpiTxaXH6tgYQ6DcTHwRiRS+YQLQ== - } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-cEM0O0eWwFIvmo6nfB0lH0vO/XFwgqIvymODbfPXZ1gTA3i76FKnb7TGUrEpiTxaXH6tgYQ6DcTHwRiRS+YQLQ==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.1 dependencies: @@ -2858,11 +2139,8 @@ packages: dev: true /postcss-nested/5.0.5_postcss@8.2.15: - resolution: - { - integrity: sha512-GSRXYz5bccobpTzLQZXOnSOfKl6TwVr5CyAQJUPub4nuRJSOECK5AqurxVgmtxP48p0Kc/ndY/YyS1yqldX0Ew== - } - engines: { node: '>=10.0' } + resolution: {integrity: sha512-GSRXYz5bccobpTzLQZXOnSOfKl6TwVr5CyAQJUPub4nuRJSOECK5AqurxVgmtxP48p0Kc/ndY/YyS1yqldX0Ew==} + engines: {node: '>=10.0'} peerDependencies: postcss: ^8.1.13 dependencies: @@ -2871,11 +2149,8 @@ packages: dev: true /postcss-normalize-charset/5.0.0_postcss@8.2.15: - resolution: - { - integrity: sha512-pqsCkgo9KmQP0ew6DqSA+uP9YN6EfsW20pQ3JU5JoQge09Z6Too4qU0TNDsTNWuEaP8SWsMp+19l15210MsDZQ== - } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-pqsCkgo9KmQP0ew6DqSA+uP9YN6EfsW20pQ3JU5JoQge09Z6Too4qU0TNDsTNWuEaP8SWsMp+19l15210MsDZQ==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.1 dependencies: @@ -2883,11 +2158,8 @@ packages: dev: true /postcss-normalize-display-values/5.0.0_postcss@8.2.15: - resolution: - { - integrity: sha512-t4f2d//gH1f7Ns0Jq3eNdnWuPT7TeLuISZ6RQx4j8gpl5XrhkdshdNcOnlrEK48YU6Tcb6jqK7dorME3N4oOGA== - } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-t4f2d//gH1f7Ns0Jq3eNdnWuPT7TeLuISZ6RQx4j8gpl5XrhkdshdNcOnlrEK48YU6Tcb6jqK7dorME3N4oOGA==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.1 dependencies: @@ -2897,11 +2169,8 @@ packages: dev: true /postcss-normalize-positions/5.0.0_postcss@8.2.15: - resolution: - { - integrity: sha512-0o6/qU5ky74X/eWYj/tv4iiKCm3YqJnrhmVADpIMNXxzFZywsSQxl8F7cKs8jQEtF3VrJBgcDHTexZy1zgDoYg== - } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-0o6/qU5ky74X/eWYj/tv4iiKCm3YqJnrhmVADpIMNXxzFZywsSQxl8F7cKs8jQEtF3VrJBgcDHTexZy1zgDoYg==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.1 dependencies: @@ -2910,11 +2179,8 @@ packages: dev: true /postcss-normalize-repeat-style/5.0.0_postcss@8.2.15: - resolution: - { - integrity: sha512-KRT14JbrXKcFMYuc4q7lh8lvv8u22wLyMrq+UpHKLtbx2H/LOjvWXYdoDxmNrrrJzomAWL+ViEXr48/IhSUJnQ== - } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-KRT14JbrXKcFMYuc4q7lh8lvv8u22wLyMrq+UpHKLtbx2H/LOjvWXYdoDxmNrrrJzomAWL+ViEXr48/IhSUJnQ==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.1 dependencies: @@ -2924,11 +2190,8 @@ packages: dev: true /postcss-normalize-string/5.0.0_postcss@8.2.15: - resolution: - { - integrity: sha512-wSO4pf7GNcDZpmelREWYADF1+XZWrAcbFLQCOqoE92ZwYgaP/RLumkUTaamEzdT2YKRZAH8eLLKGWotU/7FNPw== - } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-wSO4pf7GNcDZpmelREWYADF1+XZWrAcbFLQCOqoE92ZwYgaP/RLumkUTaamEzdT2YKRZAH8eLLKGWotU/7FNPw==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.1 dependencies: @@ -2937,11 +2200,8 @@ packages: dev: true /postcss-normalize-timing-functions/5.0.0_postcss@8.2.15: - resolution: - { - integrity: sha512-TwPaDX+wl9wO3MUm23lzGmOzGCGKnpk+rSDgzB2INpakD5dgWR3L6bJq1P1LQYzBAvz8fRIj2NWdnZdV4EV98Q== - } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-TwPaDX+wl9wO3MUm23lzGmOzGCGKnpk+rSDgzB2INpakD5dgWR3L6bJq1P1LQYzBAvz8fRIj2NWdnZdV4EV98Q==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.1 dependencies: @@ -2951,11 +2211,8 @@ packages: dev: true /postcss-normalize-unicode/5.0.0_postcss@8.2.15: - resolution: - { - integrity: sha512-2CpVoz/67rXU5s9tsPZDxG1YGS9OFHwoY9gsLAzrURrCxTAb0H7Vp87/62LvVPgRWTa5ZmvgmqTp2rL8tlm72A== - } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-2CpVoz/67rXU5s9tsPZDxG1YGS9OFHwoY9gsLAzrURrCxTAb0H7Vp87/62LvVPgRWTa5ZmvgmqTp2rL8tlm72A==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.1 dependencies: @@ -2965,11 +2222,8 @@ packages: dev: true /postcss-normalize-url/5.0.0_postcss@8.2.15: - resolution: - { - integrity: sha512-ICDaGFBqLgA3dlrCIRuhblLl80D13YtgEV9NJPTYJtgR72vu61KgxAHv+z/lKMs1EbwfSQa3ALjOFLSmXiE34A== - } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-ICDaGFBqLgA3dlrCIRuhblLl80D13YtgEV9NJPTYJtgR72vu61KgxAHv+z/lKMs1EbwfSQa3ALjOFLSmXiE34A==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.1 dependencies: @@ -2980,11 +2234,8 @@ packages: dev: true /postcss-normalize-whitespace/5.0.0_postcss@8.2.15: - resolution: - { - integrity: sha512-KRnxQvQAVkJfaeXSz7JlnD9nBN9sFZF9lrk9452Q2uRoqrRSkinqifF8Iex7wZGei2DZVG/qpmDFDmRvbNAOGA== - } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-KRnxQvQAVkJfaeXSz7JlnD9nBN9sFZF9lrk9452Q2uRoqrRSkinqifF8Iex7wZGei2DZVG/qpmDFDmRvbNAOGA==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.1 dependencies: @@ -2993,11 +2244,8 @@ packages: dev: true /postcss-ordered-values/5.0.0_postcss@8.2.15: - resolution: - { - integrity: sha512-dPr+SRObiHueCIc4IUaG0aOGQmYkuNu50wQvdXTGKy+rzi2mjmPsbeDsheLk5WPb9Zyf2tp8E+I+h40cnivm6g== - } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-dPr+SRObiHueCIc4IUaG0aOGQmYkuNu50wQvdXTGKy+rzi2mjmPsbeDsheLk5WPb9Zyf2tp8E+I+h40cnivm6g==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.1 dependencies: @@ -3007,11 +2255,8 @@ packages: dev: true /postcss-reduce-initial/5.0.0_postcss@8.2.15: - resolution: - { - integrity: sha512-wR6pXUaFbSMG1oCKx8pKVA+rnSXCHlca5jMrlmkmif+uig0HNUTV9oGN5kjKsM3mATQAldv2PF9Tbl2vqLFjnA== - } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-wR6pXUaFbSMG1oCKx8pKVA+rnSXCHlca5jMrlmkmif+uig0HNUTV9oGN5kjKsM3mATQAldv2PF9Tbl2vqLFjnA==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.1 dependencies: @@ -3021,11 +2266,8 @@ packages: dev: true /postcss-reduce-transforms/5.0.0_postcss@8.2.15: - resolution: - { - integrity: sha512-iHdGODW4YzM3WjVecBhPQt6fpJC4lGQZxJKjkBNHpp2b8dzmvj0ogKThqya+IRodQEFzjfXgYeESkf172FH5Lw== - } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-iHdGODW4YzM3WjVecBhPQt6fpJC4lGQZxJKjkBNHpp2b8dzmvj0ogKThqya+IRodQEFzjfXgYeESkf172FH5Lw==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.1 dependencies: @@ -3035,11 +2277,8 @@ packages: dev: true /postcss-selector-parser/3.1.2: - resolution: - { - integrity: sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA== - } - engines: { node: '>=8' } + resolution: {integrity: sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==} + engines: {node: '>=8'} dependencies: dot-prop: 5.3.0 indexes-of: 1.0.1 @@ -3047,33 +2286,24 @@ packages: dev: true /postcss-selector-parser/6.0.5: - resolution: - { - integrity: sha512-aFYPoYmXbZ1V6HZaSvat08M97A8HqO6Pjz+PiNpw/DhuRrC72XWAdp3hL6wusDCN31sSmcZyMGa2hZEuX+Xfhg== - } - engines: { node: '>=4' } + resolution: {integrity: sha512-aFYPoYmXbZ1V6HZaSvat08M97A8HqO6Pjz+PiNpw/DhuRrC72XWAdp3hL6wusDCN31sSmcZyMGa2hZEuX+Xfhg==} + engines: {node: '>=4'} dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 dev: true /postcss-selector-parser/6.0.6: - resolution: - { - integrity: sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg== - } - engines: { node: '>=4' } + resolution: {integrity: sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==} + engines: {node: '>=4'} dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 dev: true /postcss-svgo/5.0.0_postcss@8.2.15: - resolution: - { - integrity: sha512-M3/VS4sFI1Yp9g0bPL+xzzCNz5iLdRUztoFaugMit5a8sMfkVzzhwqbsOlD8IFFymCdJDmXmh31waYHWw1K4BA== - } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-M3/VS4sFI1Yp9g0bPL+xzzCNz5iLdRUztoFaugMit5a8sMfkVzzhwqbsOlD8IFFymCdJDmXmh31waYHWw1K4BA==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.1 dependencies: @@ -3083,11 +2313,8 @@ packages: dev: true /postcss-unique-selectors/5.0.0_postcss@8.2.15: - resolution: - { - integrity: sha512-o9l4pF8SRn7aCMTmzb/kNv/kjV7wPZpZ8Nlb1Gq8v/Qvw969K1wanz1RVA0ehHzWe9+wHXaC2DvZlak/gdMJ5w== - } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-o9l4pF8SRn7aCMTmzb/kNv/kjV7wPZpZ8Nlb1Gq8v/Qvw969K1wanz1RVA0ehHzWe9+wHXaC2DvZlak/gdMJ5w==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.1 dependencies: @@ -3098,25 +2325,16 @@ packages: dev: true /postcss-value-parser/3.3.1: - resolution: - { - integrity: sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== - } + resolution: {integrity: sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==} dev: true /postcss-value-parser/4.1.0: - resolution: - { - integrity: sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== - } + resolution: {integrity: sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==} dev: true /postcss/8.2.15: - resolution: - { - integrity: sha512-2zO3b26eJD/8rb106Qu2o7Qgg52ND5HPjcyQiK2B98O388h43A448LCslC0dI2P97wCAQRJsFvwTRcXxTKds+Q== - } - engines: { node: ^10 || ^12 || >=14 } + resolution: {integrity: sha512-2zO3b26eJD/8rb106Qu2o7Qgg52ND5HPjcyQiK2B98O388h43A448LCslC0dI2P97wCAQRJsFvwTRcXxTKds+Q==} + engines: {node: ^10 || ^12 || >=14} dependencies: colorette: 1.2.2 nanoid: 3.1.23 @@ -3124,18 +2342,12 @@ packages: dev: true /prelude-ls/1.2.1: - resolution: - { - integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== - } - engines: { node: '>= 0.8.0' } + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} dev: true /prettier-plugin-svelte/2.3.0_prettier@2.3.0+svelte@3.38.2: - resolution: - { - integrity: sha512-HTzXvSq7lWFuLsSaxYOUkGkVNCl3RrSjDCOgQjkBX5FQGmWjL8o3IFACSGhjPMMfWKADpapAr0zdbBWkND9mqw== - } + resolution: {integrity: sha512-HTzXvSq7lWFuLsSaxYOUkGkVNCl3RrSjDCOgQjkBX5FQGmWjL8o3IFACSGhjPMMfWKADpapAr0zdbBWkND9mqw==} peerDependencies: prettier: ^1.16.4 || ^2.0.0 svelte: ^3.2.0 @@ -3145,57 +2357,39 @@ packages: dev: true /prettier/2.3.0: - resolution: - { - integrity: sha512-kXtO4s0Lz/DW/IJ9QdWhAf7/NmPWQXkFr/r/WkR3vyI+0v8amTDxiaQSLzs8NBlytfLWX/7uQUMIW677yLKl4w== - } - engines: { node: '>=10.13.0' } + resolution: {integrity: sha512-kXtO4s0Lz/DW/IJ9QdWhAf7/NmPWQXkFr/r/WkR3vyI+0v8amTDxiaQSLzs8NBlytfLWX/7uQUMIW677yLKl4w==} + engines: {node: '>=10.13.0'} hasBin: true dev: true /pretty-hrtime/1.0.3: - resolution: { integrity: sha1-t+PqQkNaTJsnWdmeDyAesZWALuE= } - engines: { node: '>= 0.8' } + resolution: {integrity: sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=} + engines: {node: '>= 0.8'} dev: true /process-nextick-args/2.0.1: - resolution: - { - integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - } + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} dev: false /progress/2.0.3: - resolution: - { - integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== - } - engines: { node: '>=0.4.0' } + resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} + engines: {node: '>=0.4.0'} dev: true /pump/3.0.0: - resolution: - { - integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - } + resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} dependencies: end-of-stream: 1.4.4 once: 1.4.0 dev: false /punycode/2.1.1: - resolution: - { - integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== - } - engines: { node: '>=6' } + resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==} + engines: {node: '>=6'} dev: true /purgecss/3.1.3: - resolution: - { - integrity: sha512-hRSLN9mguJ2lzlIQtW4qmPS2kh6oMnA9RxdIYK8sz18QYqd6ePp4GNDl18oWHA1f2v2NEQIh51CO8s/E3YGckQ== - } + resolution: {integrity: sha512-hRSLN9mguJ2lzlIQtW4qmPS2kh6oMnA9RxdIYK8sz18QYqd6ePp4GNDl18oWHA1f2v2NEQIh51CO8s/E3YGckQ==} hasBin: true dependencies: commander: 6.2.1 @@ -3205,25 +2399,16 @@ packages: dev: true /queue-microtask/1.2.3: - resolution: - { - integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - } + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} dev: true /quick-lru/5.1.1: - resolution: - { - integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== - } - engines: { node: '>=10' } + resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} + engines: {node: '>=10'} dev: true /readable-stream/2.3.7: - resolution: - { - integrity: sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== - } + resolution: {integrity: sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==} dependencies: core-util-is: 1.0.2 inherits: 2.0.4 @@ -3235,11 +2420,8 @@ packages: dev: false /readable-stream/3.6.0: - resolution: - { - integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== - } - engines: { node: '>= 6' } + resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==} + engines: {node: '>= 6'} dependencies: inherits: 2.0.4 string_decoder: 1.3.0 @@ -3247,223 +2429,154 @@ packages: dev: false /readdirp/3.5.0: - resolution: - { - integrity: sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== - } - engines: { node: '>=8.10.0' } + resolution: {integrity: sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==} + engines: {node: '>=8.10.0'} dependencies: picomatch: 2.2.3 dev: true /rechoir/0.6.2: - resolution: { integrity: sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q= } - engines: { node: '>= 0.10' } + resolution: {integrity: sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=} + engines: {node: '>= 0.10'} dependencies: resolve: 1.20.0 dev: false /reduce-css-calc/2.1.8: - resolution: - { - integrity: sha512-8liAVezDmUcH+tdzoEGrhfbGcP7nOV4NkGE3a74+qqvE7nt9i4sKLGBuZNOnpI4WiGksiNPklZxva80061QiPg== - } + resolution: {integrity: sha512-8liAVezDmUcH+tdzoEGrhfbGcP7nOV4NkGE3a74+qqvE7nt9i4sKLGBuZNOnpI4WiGksiNPklZxva80061QiPg==} dependencies: css-unit-converter: 1.1.2 postcss-value-parser: 3.3.1 dev: true /regexp-clone/1.0.0: - resolution: - { - integrity: sha512-TuAasHQNamyyJ2hb97IuBEif4qBHGjPHBS64sZwytpLEqtBQ1gPJTnOaQ6qmpET16cK14kkjbazl6+p0RRv0yw== - } + resolution: {integrity: sha512-TuAasHQNamyyJ2hb97IuBEif4qBHGjPHBS64sZwytpLEqtBQ1gPJTnOaQ6qmpET16cK14kkjbazl6+p0RRv0yw==} dev: false /regexpp/3.1.0: - resolution: - { - integrity: sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== - } - engines: { node: '>=8' } + resolution: {integrity: sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==} + engines: {node: '>=8'} dev: true /require-from-string/2.0.2: - resolution: - { - integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} dev: true /require-relative/0.8.7: - resolution: { integrity: sha1-eZlTn8ngR6N5KPoZb44VY9q9Nt4= } + resolution: {integrity: sha1-eZlTn8ngR6N5KPoZb44VY9q9Nt4=} dev: true /resolve-from/4.0.0: - resolution: - { - integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - } - engines: { node: '>=4' } + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} dev: true /resolve-from/5.0.0: - resolution: - { - integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== - } - engines: { node: '>=8' } + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} dev: true /resolve/1.20.0: - resolution: - { - integrity: sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== - } + resolution: {integrity: sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==} dependencies: is-core-module: 2.4.0 path-parse: 1.0.6 /reusify/1.0.4: - resolution: - { - integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - } - engines: { iojs: '>=1.0.0', node: '>=0.10.0' } + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} dev: true /rgb-regex/1.0.1: - resolution: { integrity: sha1-wODWiC3w4jviVKR16O3UGRX+rrE= } + resolution: {integrity: sha1-wODWiC3w4jviVKR16O3UGRX+rrE=} dev: true /rgba-regex/1.0.0: - resolution: { integrity: sha1-QzdOLiyglosO8VI0YLfXMP8i7rM= } + resolution: {integrity: sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=} dev: true /rimraf/3.0.2: - resolution: - { - integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - } + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} hasBin: true dependencies: glob: 7.1.7 dev: true /rollup/2.46.0: - resolution: - { - integrity: sha512-qPGoUBNl+Z8uNu0z7pD3WPTABWRbcOwIrO/5ccDJzmrtzn0LVf6Lj91+L5CcWhXl6iWf23FQ6m8Jkl2CmN1O7Q== - } - engines: { node: '>=10.0.0' } + resolution: {integrity: sha512-qPGoUBNl+Z8uNu0z7pD3WPTABWRbcOwIrO/5ccDJzmrtzn0LVf6Lj91+L5CcWhXl6iWf23FQ6m8Jkl2CmN1O7Q==} + engines: {node: '>=10.0.0'} hasBin: true optionalDependencies: fsevents: 2.3.2 dev: true /run-parallel/1.2.0: - resolution: - { - integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - } + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: queue-microtask: 1.2.3 dev: true /sade/1.7.4: - resolution: - { - integrity: sha512-y5yauMD93rX840MwUJr7C1ysLFBgMspsdTo4UVrDg3fXDvtwOyIqykhVAAm6fk/3au77773itJStObgK+LKaiA== - } - engines: { node: '>= 6' } + resolution: {integrity: sha512-y5yauMD93rX840MwUJr7C1ysLFBgMspsdTo4UVrDg3fXDvtwOyIqykhVAAm6fk/3au77773itJStObgK+LKaiA==} + engines: {node: '>= 6'} dependencies: mri: 1.1.6 dev: true /safe-buffer/5.1.2: - resolution: - { - integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - } + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} dev: false /safe-buffer/5.2.1: - resolution: - { - integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - } + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} dev: false /safer-buffer/2.1.2: - resolution: - { - integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - } + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} dev: false /salteen/1.0.0: - resolution: - { - integrity: sha512-hApiOPudRSzM5aD1dWIWlXL8dPUja8GloMzHMlmDtNiU5brFNyjvQ+SiLLxHVQNeZ2HgKBnzrRHp+BXQiA5vGg== - } - engines: { node: '>=6' } + resolution: {integrity: sha512-hApiOPudRSzM5aD1dWIWlXL8dPUja8GloMzHMlmDtNiU5brFNyjvQ+SiLLxHVQNeZ2HgKBnzrRHp+BXQiA5vGg==} + engines: {node: '>=6'} dev: false /saslprep/1.0.3: - resolution: - { - integrity: sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag== - } - engines: { node: '>=6' } + resolution: {integrity: sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==} + engines: {node: '>=6'} dependencies: sparse-bitfield: 3.0.3 dev: false optional: true /semver/5.7.1: - resolution: - { - integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - } + resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} hasBin: true dev: false /semver/7.3.5: - resolution: - { - integrity: sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== - } - engines: { node: '>=10' } + resolution: {integrity: sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==} + engines: {node: '>=10'} hasBin: true dependencies: lru-cache: 6.0.0 dev: true /shebang-command/2.0.0: - resolution: - { - integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - } - engines: { node: '>=8' } + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} dependencies: shebang-regex: 3.0.0 dev: true /shebang-regex/3.0.0: - resolution: - { - integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - } - engines: { node: '>=8' } + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} dev: true /shelljs/0.8.4: - resolution: - { - integrity: sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ== - } - engines: { node: '>=4' } + resolution: {integrity: sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==} + engines: {node: '>=4'} hasBin: true dependencies: glob: 7.1.6 @@ -3472,40 +2585,28 @@ packages: dev: false /sift/13.5.2: - resolution: - { - integrity: sha512-+gxdEOMA2J+AI+fVsCqeNn7Tgx3M9ZN9jdi95939l1IJ8cZsqS8sqpJyOkic2SJk+1+98Uwryt/gL6XDaV+UZA== - } + resolution: {integrity: sha512-+gxdEOMA2J+AI+fVsCqeNn7Tgx3M9ZN9jdi95939l1IJ8cZsqS8sqpJyOkic2SJk+1+98Uwryt/gL6XDaV+UZA==} dev: false /simple-swizzle/0.2.2: - resolution: { integrity: sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo= } + resolution: {integrity: sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=} dependencies: is-arrayish: 0.3.2 dev: true /slash/3.0.0: - resolution: - { - integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - } - engines: { node: '>=8' } + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} dev: true /slash/4.0.0: - resolution: - { - integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== - } - engines: { node: '>=12' } + resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} + engines: {node: '>=12'} dev: true /slice-ansi/4.0.0: - resolution: - { - integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== - } - engines: { node: '>=10' } + resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} + engines: {node: '>=10'} dependencies: ansi-styles: 4.3.0 astral-regex: 2.0.0 @@ -3513,46 +2614,37 @@ packages: dev: true /sliced/1.0.1: - resolution: { integrity: sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E= } + resolution: {integrity: sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=} dev: false /source-map/0.6.1: - resolution: - { - integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} dev: true /source-map/0.7.3: - resolution: - { - integrity: sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== - } - engines: { node: '>= 8' } + resolution: {integrity: sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==} + engines: {node: '>= 8'} dev: true /sparse-bitfield/3.0.3: - resolution: { integrity: sha1-/0rm5oZWBWuks+eSqzM004JzyhE= } + resolution: {integrity: sha1-/0rm5oZWBWuks+eSqzM004JzyhE=} dependencies: memory-pager: 1.5.0 dev: false optional: true /split-ca/1.0.1: - resolution: { integrity: sha1-bIOv82kvphJW4M0ZfgXp3hV2kaY= } + resolution: {integrity: sha1-bIOv82kvphJW4M0ZfgXp3hV2kaY=} dev: false /sprintf-js/1.0.3: - resolution: { integrity: sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= } + resolution: {integrity: sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=} dev: true /ssh2-streams/0.4.10: - resolution: - { - integrity: sha512-8pnlMjvnIZJvmTzUIIA5nT4jr2ZWNNVHwyXfMGdRJbug9TpI3kd99ffglgfSWqujVv/0gxwMsDn9j9RVst8yhQ== - } - engines: { node: '>=5.2.0' } + resolution: {integrity: sha512-8pnlMjvnIZJvmTzUIIA5nT4jr2ZWNNVHwyXfMGdRJbug9TpI3kd99ffglgfSWqujVv/0gxwMsDn9j9RVst8yhQ==} + engines: {node: '>=5.2.0'} dependencies: asn1: 0.2.4 bcrypt-pbkdf: 1.0.2 @@ -3560,33 +2652,24 @@ packages: dev: false /ssh2/0.8.9: - resolution: - { - integrity: sha512-GmoNPxWDMkVpMFa9LVVzQZHF6EW3WKmBwL+4/GeILf2hFmix5Isxm7Amamo8o7bHiU0tC+wXsGcUXOxp8ChPaw== - } - engines: { node: '>=5.2.0' } + resolution: {integrity: sha512-GmoNPxWDMkVpMFa9LVVzQZHF6EW3WKmBwL+4/GeILf2hFmix5Isxm7Amamo8o7bHiU0tC+wXsGcUXOxp8ChPaw==} + engines: {node: '>=5.2.0'} dependencies: ssh2-streams: 0.4.10 dev: false /stable/0.1.8: - resolution: - { - integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== - } + resolution: {integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==} dev: true /streamsearch/0.1.2: - resolution: { integrity: sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo= } - engines: { node: '>=0.8.0' } + resolution: {integrity: sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=} + engines: {node: '>=0.8.0'} dev: false /string-width/4.2.2: - resolution: - { - integrity: sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA== - } - engines: { node: '>=8' } + resolution: {integrity: sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==} + engines: {node: '>=8'} dependencies: emoji-regex: 8.0.0 is-fullwidth-code-point: 3.0.0 @@ -3594,57 +2677,39 @@ packages: dev: true /string_decoder/1.1.1: - resolution: - { - integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - } + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} dependencies: safe-buffer: 5.1.2 dev: false /string_decoder/1.3.0: - resolution: - { - integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - } + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} dependencies: safe-buffer: 5.2.1 dev: false /strip-ansi/6.0.0: - resolution: - { - integrity: sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== - } - engines: { node: '>=8' } + resolution: {integrity: sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==} + engines: {node: '>=8'} dependencies: ansi-regex: 5.0.0 dev: true /strip-indent/3.0.0: - resolution: - { - integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== - } - engines: { node: '>=8' } + resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} + engines: {node: '>=8'} dependencies: min-indent: 1.0.1 dev: true /strip-json-comments/3.1.1: - resolution: - { - integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - } - engines: { node: '>=8' } + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} dev: true /stylehacks/5.0.0_postcss@8.2.15: - resolution: - { - integrity: sha512-QOWm6XivDLb+fqffTZP8jrmPmPITVChl2KCY2R05nsCWwLi3VGhCdVc3IVGNwd1zzTt1jPd67zIKjpQfxzQZeA== - } - engines: { node: ^10 || ^12 || >=14.0 } + resolution: {integrity: sha512-QOWm6XivDLb+fqffTZP8jrmPmPITVChl2KCY2R05nsCWwLi3VGhCdVc3IVGNwd1zzTt1jPd67zIKjpQfxzQZeA==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.1 dependencies: @@ -3654,30 +2719,21 @@ packages: dev: true /supports-color/5.5.0: - resolution: - { - integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - } - engines: { node: '>=4' } + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} dependencies: has-flag: 3.0.0 dev: true /supports-color/7.2.0: - resolution: - { - integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - } - engines: { node: '>=8' } + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} dependencies: has-flag: 4.0.0 dev: true /svelte-hmr/0.14.3_svelte@3.38.2: - resolution: - { - integrity: sha512-N56xX405zLMw2tpGHKRx5h+kmdeZwxI21pvyC6OyBHJDCF6DlwWBm9TifdQmSD4dloWSmpDPzHWYa3CSjfopUg== - } + resolution: {integrity: sha512-N56xX405zLMw2tpGHKRx5h+kmdeZwxI21pvyC6OyBHJDCF6DlwWBm9TifdQmSD4dloWSmpDPzHWYa3CSjfopUg==} peerDependencies: svelte: '>=3.19.0' dependencies: @@ -3685,20 +2741,14 @@ packages: dev: true /svelte-kit-cookie-session/0.4.3: - resolution: - { - integrity: sha512-dffh86haFNNY7+Oqf+hD5fELPva7N7aiAmtkqjWzdoJXgH95Yq3TP3NiLzv9Ep3nZBalYRschh5Hg2L5Jtu2Kg== - } + resolution: {integrity: sha512-dffh86haFNNY7+Oqf+hD5fELPva7N7aiAmtkqjWzdoJXgH95Yq3TP3NiLzv9Ep3nZBalYRschh5Hg2L5Jtu2Kg==} dependencies: salteen: 1.0.0 dev: false /svelte-preprocess/4.7.3_5944bffd99aeae72e0daf7602e6be64e: - resolution: - { - integrity: sha512-Zx1/xLeGOIBlZMGPRCaXtlMe4ZA0faato5Dc3CosEqwu75MIEPuOstdkH6cy+RYTUYynoxzNaDxkPX4DbrPwRA== - } - engines: { node: '>= 9.11.2' } + resolution: {integrity: sha512-Zx1/xLeGOIBlZMGPRCaXtlMe4ZA0faato5Dc3CosEqwu75MIEPuOstdkH6cy+RYTUYynoxzNaDxkPX4DbrPwRA==} + engines: {node: '>= 9.11.2'} requiresBuild: true peerDependencies: '@babel/core': ^7.10.2 @@ -3748,26 +2798,17 @@ packages: dev: true /svelte-select/3.17.0: - resolution: - { - integrity: sha512-ITmX/XUiSdkaILmsTviKRkZPaXckM5/FA7Y8BhiUPoamaZG/ZDyOo6ydjFu9fDVFTbwoAUGUi6HBjs+ZdK2AwA== - } + resolution: {integrity: sha512-ITmX/XUiSdkaILmsTviKRkZPaXckM5/FA7Y8BhiUPoamaZG/ZDyOo6ydjFu9fDVFTbwoAUGUi6HBjs+ZdK2AwA==} dev: false /svelte/3.38.2: - resolution: - { - integrity: sha512-q5Dq0/QHh4BLJyEVWGe7Cej5NWs040LWjMbicBGZ+3qpFWJ1YObRmUDZKbbovddLC9WW7THTj3kYbTOFmU9fbg== - } - engines: { node: '>= 8' } + resolution: {integrity: sha512-q5Dq0/QHh4BLJyEVWGe7Cej5NWs040LWjMbicBGZ+3qpFWJ1YObRmUDZKbbovddLC9WW7THTj3kYbTOFmU9fbg==} + engines: {node: '>= 8'} dev: true /svgo/2.3.0: - resolution: - { - integrity: sha512-fz4IKjNO6HDPgIQxu4IxwtubtbSfGEAJUq/IXyTPIkGhWck/faiiwfkvsB8LnBkKLvSoyNNIY6d13lZprJMc9Q== - } - engines: { node: '>=10.13.0' } + resolution: {integrity: sha512-fz4IKjNO6HDPgIQxu4IxwtubtbSfGEAJUq/IXyTPIkGhWck/faiiwfkvsB8LnBkKLvSoyNNIY6d13lZprJMc9Q==} + engines: {node: '>=10.13.0'} hasBin: true dependencies: '@trysound/sax': 0.1.1 @@ -3780,11 +2821,8 @@ packages: dev: true /table/6.6.0: - resolution: - { - integrity: sha512-iZMtp5tUvcnAdtHpZTWLPF0M7AgiQsURR2DwmxnJwSy8I3+cY+ozzVvYha3BOLG2TB+L0CqjIz+91htuj6yCXg== - } - engines: { node: '>=10.0.0' } + resolution: {integrity: sha512-iZMtp5tUvcnAdtHpZTWLPF0M7AgiQsURR2DwmxnJwSy8I3+cY+ozzVvYha3BOLG2TB+L0CqjIz+91htuj6yCXg==} + engines: {node: '>=10.0.0'} dependencies: ajv: 8.2.0 lodash.clonedeep: 4.5.0 @@ -3795,12 +2833,9 @@ packages: strip-ansi: 6.0.0 dev: true - /tailwindcss/2.2.0-canary.7_797cfc3ceddb49f111b184f6879a433f: - resolution: - { - integrity: sha512-IXhWIUjvuE70W55qpMvpuP4QFPy8dMLYxGwtLQwvZu0m+iBYeBLyWtN+K8vOj3WBbAVbCdJvyFHp+LyhwkyhKw== - } - engines: { node: '>=12.13.0' } + /tailwindcss/2.2.0-canary.8_797cfc3ceddb49f111b184f6879a433f: + resolution: {integrity: sha512-IVgtzCS3HTq4lsK793isUIhbylCoG/WrarYpK8cAlbjOt5TwLJnhfp2GKjfzK3201eM4YawTjuRI+wesEy8XGg==} + engines: {node: '>=12.13.0'} hasBin: true peerDependencies: autoprefixer: ^10.0.2 @@ -3837,10 +2872,7 @@ packages: dev: true /tar-fs/2.0.1: - resolution: - { - integrity: sha512-6tzWDMeroL87uF/+lin46k+Q+46rAJ0SyPGz7OW7wTgblI273hsBqk2C1j0/xNadNLKDTUL9BukSjB7cwgmlPA== - } + resolution: {integrity: sha512-6tzWDMeroL87uF/+lin46k+Q+46rAJ0SyPGz7OW7wTgblI273hsBqk2C1j0/xNadNLKDTUL9BukSjB7cwgmlPA==} dependencies: chownr: 1.1.4 mkdirp-classic: 0.5.3 @@ -3849,11 +2881,8 @@ packages: dev: false /tar-stream/2.2.0: - resolution: - { - integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== - } - engines: { node: '>=6' } + resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} + engines: {node: '>=6'} dependencies: bl: 4.1.0 end-of-stream: 1.4.4 @@ -3863,43 +2892,31 @@ packages: dev: false /text-table/0.2.0: - resolution: { integrity: sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= } + resolution: {integrity: sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=} dev: true /timsort/0.3.0: - resolution: { integrity: sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q= } + resolution: {integrity: sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=} dev: true /to-regex-range/5.0.1: - resolution: - { - integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - } - engines: { node: '>=8.0' } + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} dependencies: is-number: 7.0.0 dev: true /tslib/1.14.1: - resolution: - { - integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - } + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} dev: true /tslib/2.2.0: - resolution: - { - integrity: sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w== - } + resolution: {integrity: sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==} dev: true /tsutils/3.21.0_typescript@4.2.4: - resolution: - { - integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== - } - engines: { node: '>= 6' } + resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} + engines: {node: '>= 6'} peerDependencies: typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' dependencies: @@ -3908,109 +2925,76 @@ packages: dev: true /tweetnacl/0.14.5: - resolution: { integrity: sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= } + resolution: {integrity: sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=} dev: false /type-check/0.4.0: - resolution: - { - integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== - } - engines: { node: '>= 0.8.0' } + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} dependencies: prelude-ls: 1.2.1 dev: true /type-fest/0.20.2: - resolution: - { - integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== - } - engines: { node: '>=10' } + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} dev: true /type-fest/0.8.1: - resolution: - { - integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== - } - engines: { node: '>=8' } + resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} + engines: {node: '>=8'} dev: true /typescript/4.2.4: - resolution: - { - integrity: sha512-V+evlYHZnQkaz8TRBuxTA92yZBPotr5H+WhQ7bD3hZUndx5tGOa1fuCgeSjxAzM1RiN5IzvadIXTVefuuwZCRg== - } - engines: { node: '>=4.2.0' } + resolution: {integrity: sha512-V+evlYHZnQkaz8TRBuxTA92yZBPotr5H+WhQ7bD3hZUndx5tGOa1fuCgeSjxAzM1RiN5IzvadIXTVefuuwZCRg==} + engines: {node: '>=4.2.0'} hasBin: true dev: true /typpy/2.3.11: - resolution: - { - integrity: sha512-Jh/fykZSaxeKO0ceMAs6agki9T5TNA9kiIR6fzKbvafKpIw8UlNlHhzuqKyi5lfJJ5VojJOx9tooIbyy7vHV/g== - } + resolution: {integrity: sha512-Jh/fykZSaxeKO0ceMAs6agki9T5TNA9kiIR6fzKbvafKpIw8UlNlHhzuqKyi5lfJJ5VojJOx9tooIbyy7vHV/g==} dependencies: function.name: 1.0.13 dev: true /uniq/1.0.1: - resolution: { integrity: sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= } + resolution: {integrity: sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=} dev: true /uniqs/2.0.0: - resolution: { integrity: sha1-/+3ks2slKQaW5uFl1KWe25mOawI= } + resolution: {integrity: sha1-/+3ks2slKQaW5uFl1KWe25mOawI=} dev: true /unique-names-generator/4.5.0: - resolution: - { - integrity: sha512-GaiWvo3rKIHi1SyYP8/9cDrPMPSwEiYDUo2p0NQHeCHDXzLn8P6p8bttSS3lX7HHS3Yl5vnw/ulybO4GN85CgQ== - } - engines: { node: '>=8' } + resolution: {integrity: sha512-GaiWvo3rKIHi1SyYP8/9cDrPMPSwEiYDUo2p0NQHeCHDXzLn8P6p8bttSS3lX7HHS3Yl5vnw/ulybO4GN85CgQ==} + engines: {node: '>=8'} dev: false /universalify/2.0.0: - resolution: - { - integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== - } - engines: { node: '>= 10.0.0' } + resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} + engines: {node: '>= 10.0.0'} dev: true /uri-js/4.4.1: - resolution: - { - integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - } + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: punycode: 2.1.1 dev: true /util-deprecate/1.0.2: - resolution: { integrity: sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= } + resolution: {integrity: sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=} /v8-compile-cache/2.3.0: - resolution: - { - integrity: sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== - } + resolution: {integrity: sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==} dev: true /vendors/1.0.4: - resolution: - { - integrity: sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w== - } + resolution: {integrity: sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==} dev: true /vite/2.3.2: - resolution: - { - integrity: sha512-QhLdOompDrfkyryCNTts9HE+eJhvhN9ibKNJ5Q8DpQai+6nOsuIlaveZNg67e1O/2QaWqXeBo82eHnAs1De2bQ== - } - engines: { node: '>=12.0.0' } + resolution: {integrity: sha512-QhLdOompDrfkyryCNTts9HE+eJhvhN9ibKNJ5Q8DpQai+6nOsuIlaveZNg67e1O/2QaWqXeBo82eHnAs1De2bQ==} + engines: {node: '>=12.0.0'} hasBin: true dependencies: esbuild: 0.11.20 @@ -4021,47 +3005,45 @@ packages: fsevents: 2.3.2 dev: true + /vite/2.3.6: + resolution: {integrity: sha512-fsEpNKDHgh3Sn66JH06ZnUBnIgUVUtw6ucDhlOj1CEqxIkymU25yv1/kWDPlIjyYHnalr0cN6V+zzUJ+fmWHYw==} + engines: {node: '>=12.0.0'} + hasBin: true + dependencies: + esbuild: 0.12.6 + postcss: 8.2.15 + resolve: 1.20.0 + rollup: 2.46.0 + optionalDependencies: + fsevents: 2.3.2 + dev: true + /which/2.0.2: - resolution: - { - integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - } - engines: { node: '>= 8' } + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} hasBin: true dependencies: isexe: 2.0.0 dev: true /word-wrap/1.2.3: - resolution: - { - integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} + engines: {node: '>=0.10.0'} dev: true /wrappy/1.0.2: - resolution: { integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= } + resolution: {integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=} /xtend/4.0.2: - resolution: - { - integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - } - engines: { node: '>=0.4' } + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} dev: true /yallist/4.0.0: - resolution: - { - integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - } + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} dev: true /yaml/1.10.2: - resolution: - { - integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== - } - engines: { node: '>= 6' } + resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} + engines: {node: '>= 6'} dev: true diff --git a/src/components/Application/ActiveTab/General.svelte b/src/components/Application/ActiveTab/General.svelte index 74a56676d..1d6bd3991 100644 --- a/src/components/Application/ActiveTab/General.svelte +++ b/src/components/Application/ActiveTab/General.svelte @@ -1,8 +1,17 @@ + +
Pull Requests
+
+ {#if $prApplication.length > 0} +
+ {#each $prApplication as pr} +
+
+ {pr.publish.domain} +
+ + + + + + +
+ {/each} +
+ {:else} +
No PR deployments found
+ {/if} +
diff --git a/src/components/Application/Configuration.svelte b/src/components/Application/Configuration.svelte index 30233ffe6..398859d82 100644 --- a/src/components/Application/Configuration.svelte +++ b/src/components/Application/Configuration.svelte @@ -2,7 +2,14 @@ import { goto } from '$app/navigation'; import { request } from '$lib/request'; import { session } from '$app/stores'; - import { githubRepositories, application, githubInstallations } from '$store'; + import { + githubRepositories, + application, + githubInstallations, + prApplication, + initConf, + isPullRequestPermissionsGranted + } from '$store'; import { fade } from 'svelte/transition'; import Loading from '$components/Loading.svelte'; @@ -18,6 +25,7 @@ }; let branches = []; let relogin = false; + let permissions = {}; function dashify(str: string, options?: any) { if (typeof str !== 'string') return str; return str @@ -110,8 +118,17 @@ $session ); loading.branches = false; + await loadPermissions(); + } + async function loadPermissions() { + const config = await request( + `https://api.github.com/apps/${import.meta.env.VITE_GITHUB_APP_NAME}`, + $session + ); + if (config.permissions['pull_requests'] && config.events.includes('pull_request')) { + $isPullRequestPermissionsGranted = true; + } } - async function modifyGithubAppConfig() { if (browser) { const left = screen.width / 2 - 1020 / 2; @@ -128,20 +145,23 @@ ', toolbar=0, menubar=0, status=0' ); const timer = setInterval(async () => { - if (newWindow.closed) { + if (newWindow?.closed) { clearInterval(timer); loading.github = true; if ($application.repository.name) { try { - const config = await request(`/api/v1/application/config`, $session, { + const { configuration } = await request(`/api/v1/application/config`, $session, { body: { name: $application.repository.name, organization: $application.repository.organization, branch: $application.repository.branch } }); - $application = { ...config }; + + $prApplication = configuration.filter((c) => c.general.pullRequest !== 0); + $application = configuration.find((c) => c.general.pullRequest === 0); + $initConf = JSON.parse(JSON.stringify($application)); } catch (error) { browser && goto('/dashboard/applications', { replaceState: true }); } diff --git a/src/components/Application/Login.svelte b/src/components/Application/Login.svelte index 38646373a..1e3d14527 100644 --- a/src/components/Application/Login.svelte +++ b/src/components/Application/Login.svelte @@ -14,7 +14,7 @@ ', toolbar=0, menubar=0, status=0' ); const timer = setInterval(() => { - if (newWindow.closed) { + if (newWindow?.closed) { clearInterval(timer); location.reload() } diff --git a/src/components/Application/Navbar.svelte b/src/components/Application/Navbar.svelte index 7a074368b..a86433231 100644 --- a/src/components/Application/Navbar.svelte +++ b/src/components/Application/Navbar.svelte @@ -8,17 +8,23 @@ import { goto } from '$app/navigation'; import { browser } from '$app/env'; async function removeApplication() { - await request(`/api/v1/application/remove`, $session, { - body: { - organization: $application.repository.organization, - name: $application.repository.name, - branch: $application.repository.branch - } - }); + const result = window.confirm( + "Are you sure? It will delete all deployments, including PR's - it's NOT reversible!" + ); + if (result) { + await request(`/api/v1/application/remove`, $session, { + body: { + organization: $application.repository.organization, + name: $application.repository.name, + branch: $application.repository.branch, + domain: $application.publish.domain + } + }); - browser && toast.push('Application removed.'); - $application = JSON.parse(JSON.stringify(initialApplication)); - browser && goto(`/dashboard/applications`, { replaceState: true }); + browser && toast.push('Application removed.'); + $application = JSON.parse(JSON.stringify(initialApplication)); + browser && goto(`/dashboard/applications`, { replaceState: true }); + } } onDestroy(() => { @@ -50,6 +56,7 @@ // toast.push(error.error || error || 'Ooops something went wrong.'); } } +
@@ -143,6 +145,8 @@ {:else if activeTab.secrets} + {:else if activeTab.pullRequests && $page.path !== '/application/new'} + {/if}
diff --git a/src/global.d.ts b/src/global.d.ts index e7505ffa0..0d6b6fe6d 100644 --- a/src/global.d.ts +++ b/src/global.d.ts @@ -36,6 +36,8 @@ export type Application = { deployId: string; nickname: string; workdir: string; + isPreviewDeploymentEnabled: boolean; + pullRequest: number; }; build: { pack: string; diff --git a/src/hooks/index.ts b/src/hooks/index.ts index 31edcccee..a5a6b964a 100644 --- a/src/hooks/index.ts +++ b/src/hooks/index.ts @@ -80,9 +80,10 @@ async function connectMongoDB() { 'repository.name': application.configuration.repository.name, 'repository.organization': application.configuration.repository.organization, 'repository.branch': application.configuration.repository.branch, + 'publish.domain': application.configuration.publish.domain }, { ...application.configuration - }, { upsert: true }) + }, { upsert: true, new: true }) } } catch (error) { console.log(error) @@ -90,12 +91,24 @@ async function connectMongoDB() { })() -export async function handle({ request, render }) { +export async function handle({ request, resolve }) { const { SECRETS_ENCRYPTION_KEY } = process.env; - const session = initializeSession(request.headers, { - secret: SECRETS_ENCRYPTION_KEY, - cookie: { path: '/' } - }); + let session; + try { + session = initializeSession(request.headers, { + secret: SECRETS_ENCRYPTION_KEY, + cookie: { path: '/' } + }); + } catch(error) { + return { + status: 302, + headers: { + 'set-cookie': 'kit.session=deleted;path=/;expires=Wed, 21 Oct 2015 07:28:00 GMT', + location: '/' + } + }; + } + request.locals.session = session; if (session?.data?.coolToken) { try { @@ -105,7 +118,7 @@ export async function handle({ request, render }) { request.locals.session.destroy = true; } } - const response = await render(request); + const response = await resolve(request); if (!session['set-cookie']) { if (!session?.data?.coolToken && !publicPages.includes(request.path)) { return { diff --git a/src/lib/api/applications/cleanup.ts b/src/lib/api/applications/cleanup.ts index bb632932f..d1a9076c0 100644 --- a/src/lib/api/applications/cleanup.ts +++ b/src/lib/api/applications/cleanup.ts @@ -11,7 +11,8 @@ export async function deleteSameDeployments(configuration) { const running = JSON.parse(s.Spec.Labels.configuration); if ( running.repository.id === configuration.repository.id && - running.repository.branch === configuration.repository.branch + running.repository.branch === configuration.repository.branch && + running.publish.domain === configuration.publish.domain ) { await execShellAsync(`docker stack rm ${s.Spec.Labels['com.docker.stack.namespace']}`); } diff --git a/src/lib/api/applications/cloneRepository.ts b/src/lib/api/applications/cloneRepository.ts index 5c9b6bda7..a7ecb8f15 100644 --- a/src/lib/api/applications/cloneRepository.ts +++ b/src/lib/api/applications/cloneRepository.ts @@ -4,7 +4,7 @@ import { execShellAsync } from '../common'; export default async function (configuration) { try { const { GITHUB_APP_PRIVATE_KEY } = process.env; - const { workdir } = configuration.general; + const { workdir, isPreviewDeploymentEnabled, pullRequest } = configuration.general; const { organization, name, branch } = configuration.repository; const github = configuration.github; if (!github.installation.id || !github.app.id) { @@ -37,8 +37,12 @@ export default async function (configuration) { await execShellAsync( `mkdir -p ${workdir} && git clone -q -b ${branch} https://x-access-token:${token}@github.com/${organization}/${name}.git ${workdir}/` ); + + if (isPreviewDeploymentEnabled && pullRequest && pullRequest !== 0) { + await execShellAsync(`cd ${workdir} && git fetch origin pull/${pullRequest}/head:pull_${pullRequest} && git checkout pull_${pullRequest}`) + } configuration.build.container.tag = ( - await execShellAsync(`cd ${configuration.general.workdir}/ && git rev-parse HEAD`) + await execShellAsync(`cd ${workdir}/ && git rev-parse HEAD`) ) .replace('\n', '') .slice(0, 7); diff --git a/src/lib/api/applications/configuration.ts b/src/lib/api/applications/configuration.ts index b19a53f30..98d4650a9 100644 --- a/src/lib/api/applications/configuration.ts +++ b/src/lib/api/applications/configuration.ts @@ -10,9 +10,8 @@ function getUniq() { } export function setDefaultConfiguration(configuration) { - const nickname = getUniq(); + const nickname = configuration.general.nickname || getUniq(); const deployId = cuid(); - const shaBase = JSON.stringify({ repository: configuration.repository }); const sha256 = crypto.createHash('sha256').update(shaBase).digest('hex'); @@ -21,12 +20,14 @@ export function setDefaultConfiguration(configuration) { configuration.general.nickname = nickname; configuration.general.deployId = deployId; configuration.general.workdir = `/tmp/${deployId}`; - + if (configuration.general.isPreviewDeploymentEnabled && configuration.general.pullRequest !== 0) { + configuration.build.container.name = `pr${configuration.general.pullRequest}-${sha256.slice(0, 8)}` + configuration.publish.domain = `pr${configuration.general.pullRequest}.${configuration.publish.domain}` + } if (!configuration.publish.path) configuration.publish.path = '/'; if (!configuration.publish.port) { if ( configuration.build.pack === 'nodejs' || - configuration.build.pack === 'vuejs' || configuration.build.pack === 'nuxtjs' || configuration.build.pack === 'rust' || configuration.build.pack === 'nextjs' || @@ -74,20 +75,23 @@ export function setDefaultConfiguration(configuration) { return configuration; } -export async function precheckDeployment({ services, configuration }) { +export async function precheckDeployment(configuration) { + const services = (await docker.engine.listServices()).filter( + (r) => r.Spec.Labels.managedBy === 'coolify' && r.Spec.Labels.type === 'application' && JSON.parse(r.Spec.Labels.configuration).publish.domain === configuration.publish.domain + ); let foundService = false; let configChanged = false; let imageChanged = false; - let forceUpdate = false; - for (const service of services) { const running = JSON.parse(service.Spec.Labels.configuration); if (running) { + if ( running.repository.id === configuration.repository.id && running.repository.branch === configuration.repository.branch ) { + foundService = true; // Base service configuration changed if ( !running.build.container.baseSHA || @@ -107,9 +111,32 @@ export async function precheckDeployment({ services, configuration }) { (n) => n.DesiredState !== 'Running' && n.Image.split(':')[1] === running.build.container.tag ); - if (isError.length > 0) forceUpdate = true; - foundService = true; + if (isError.length > 0) { + forceUpdate = true; + } + const compareObjects = (a, b) => { + if (a === b) return true; + + if (typeof a != 'object' || typeof b != 'object' || a == null || b == null) return false; + + let keysA = Object.keys(a), keysB = Object.keys(b); + + if (keysA.length != keysB.length) return false; + + for (let key of keysA) { + if (!keysB.includes(key)) return false; + + if (typeof a[key] === 'function' || typeof b[key] === 'function') { + if (a[key].toString() != b[key].toString()) return false; + } else { + if (!compareObjects(a[key], b[key])) return false; + } + } + + return true; + } + const runningWithoutContainer = JSON.parse(JSON.stringify(running)); delete runningWithoutContainer.build.container; @@ -118,16 +145,19 @@ export async function precheckDeployment({ services, configuration }) { // If only the configuration changed if ( - JSON.stringify(runningWithoutContainer.build) !== - JSON.stringify(configurationWithoutContainer.build) || - JSON.stringify(runningWithoutContainer.publish) !== - JSON.stringify(configurationWithoutContainer.publish) - ) + !compareObjects(runningWithoutContainer.build,configurationWithoutContainer.build) || + !compareObjects(runningWithoutContainer.publish,configurationWithoutContainer.publish) || + runningWithoutContainer.general.isPreviewDeploymentEnabled !== + configurationWithoutContainer.general.isPreviewDeploymentEnabled + ){ configChanged = true; + } + // If only the image changed if (running.build.container.tag !== configuration.build.container.tag) imageChanged = true; // If build pack changed, forceUpdate the service if (running.build.pack !== configuration.build.pack) forceUpdate = true; + if (configuration.general.isPreviewDeploymentEnabled && configuration.general.pullRequest !== 0) forceUpdate = true } } } @@ -144,28 +174,5 @@ export async function precheckDeployment({ services, configuration }) { } export async function updateServiceLabels(configuration) { - // In case of any failure during deployment, still update the current configuration. - const services = (await docker.engine.listServices()).filter( - (r) => r.Spec.Labels.managedBy === 'coolify' && r.Spec.Labels.type === 'application' - ); - const found = services.find((s) => { - const config = JSON.parse(s.Spec.Labels.configuration); - if ( - config.repository.id === configuration.repository.id && - config.repository.branch === configuration.repository.branch - ) { - return config; - } - return null; - }); - if (found) { - const { ID } = found; - const Labels = { ...JSON.parse(found.Spec.Labels.configuration), ...configuration }; - await execShellAsync( - `docker service update --label-add configuration='${JSON.stringify( - Labels - )}' --label-add com.docker.stack.image='${configuration.build.container.name}:${configuration.build.container.tag - }' ${ID}` - ); - } + return await execShellAsync(`docker service update --label-add configuration='${JSON.stringify(configuration)}' ${configuration.build.container.name}_${configuration.build.container.name}`) } diff --git a/src/lib/api/applications/deploy.ts b/src/lib/api/applications/deploy.ts index 774d9894e..225880533 100644 --- a/src/lib/api/applications/deploy.ts +++ b/src/lib/api/applications/deploy.ts @@ -1,9 +1,9 @@ import { docker } from '$lib/api/docker'; import { saveAppLog } from './logging'; import { promises as fs } from 'fs'; -import { deleteSameDeployments } from './cleanup'; +import { deleteSameDeployments, purgeImagesContainers } from './cleanup'; import yaml from 'js-yaml'; -import { execShellAsync } from '../common'; +import { delay, execShellAsync } from '../common'; export default async function (configuration, imageChanged) { const generateEnvs = {}; @@ -11,6 +11,7 @@ export default async function (configuration, imageChanged) { generateEnvs[secret.name] = secret.value; } const containerName = configuration.build.container.name; + const containerTag = configuration.build.container.tag; // Only save SHA256 of it in the configuration label const baseServiceConfiguration = configuration.baseServiceConfiguration; @@ -20,7 +21,7 @@ export default async function (configuration, imageChanged) { version: '3.8', services: { [containerName]: { - image: `${configuration.build.container.name}:${configuration.build.container.tag}`, + image: `${containerName}:${containerTag}`, networks: [`${docker.network}`], environment: generateEnvs, deploy: { @@ -31,21 +32,21 @@ export default async function (configuration, imageChanged) { 'configuration=' + JSON.stringify(configuration), 'traefik.enable=true', 'traefik.http.services.' + - configuration.build.container.name + + containerName + `.loadbalancer.server.port=${configuration.publish.port}`, - 'traefik.http.routers.' + configuration.build.container.name + '.entrypoints=websecure', + 'traefik.http.routers.' + containerName + '.entrypoints=websecure', 'traefik.http.routers.' + - configuration.build.container.name + + containerName + '.rule=Host(`' + configuration.publish.domain + '`) && PathPrefix(`' + configuration.publish.path + '`)', 'traefik.http.routers.' + - configuration.build.container.name + + containerName + '.tls.certresolver=letsencrypt', 'traefik.http.routers.' + - configuration.build.container.name + + containerName + '.middlewares=global-compress' ] } @@ -62,7 +63,7 @@ export default async function (configuration, imageChanged) { if (imageChanged) { // console.log('image changed') await execShellAsync( - `docker service update --image ${configuration.build.container.name}:${configuration.build.container.tag} ${configuration.build.container.name}_${configuration.build.container.name}` + `docker service update --image ${containerName}:${containerTag} ${containerName}_${containerName}` ); } else { // console.log('new deployment or force deployment or config changed') @@ -71,6 +72,11 @@ export default async function (configuration, imageChanged) { `cat ${configuration.general.workdir}/stack.yml | docker stack deploy --prune -c - ${containerName}` ); } + async function purgeImagesAsync(found) { + await delay(10000); + await purgeImagesContainers(found, true); + } + purgeImagesAsync(configuration) await saveAppLog('### Published done!', configuration); } diff --git a/src/lib/api/applications/packs/templates.ts b/src/lib/api/applications/packs/templates.ts index dd48f47f7..07d0faaa6 100644 --- a/src/lib/api/applications/packs/templates.ts +++ b/src/lib/api/applications/packs/templates.ts @@ -46,6 +46,7 @@ const templates = { pack: 'vuejs', ...defaultBuildAndDeploy, directory: 'dist', + port: 80, name: 'Vue' }, gatsby: { diff --git a/src/lib/api/applications/queueAndBuild.ts b/src/lib/api/applications/queueAndBuild.ts index e8705fa25..2b71d29ca 100644 --- a/src/lib/api/applications/queueAndBuild.ts +++ b/src/lib/api/applications/queueAndBuild.ts @@ -10,7 +10,7 @@ import { saveAppLog } from './logging'; export default async function (configuration, imageChanged) { const { id, organization, name, branch } = configuration.repository; const { domain } = configuration.publish; - const { deployId} = configuration.general; + const { deployId } = configuration.general; try { await saveAppLog(`${dayjs().format('YYYY-MM-DD HH:mm:ss.SSS')} Queued.`, configuration); await copyFiles(configuration); @@ -20,6 +20,7 @@ export default async function (configuration, imageChanged) { { repoId: id, branch, deployId, organization, name, domain }, { repoId: id, branch, deployId, organization, name, domain, progress: 'done' } ); + await updateServiceLabels(configuration); } catch (error) { await Deployment.findOneAndUpdate( diff --git a/src/lib/consts.ts b/src/lib/consts.ts index de4694694..94d98b030 100644 --- a/src/lib/consts.ts +++ b/src/lib/consts.ts @@ -1 +1,2 @@ export const publicPages = ['/', '/api/v1/login/github/app', '/api/v1/webhooks/deploy', '/success']; +export const VITE_GITHUB_APP_NAME = import.meta.env.VITE_GITHUB_APP_NAME diff --git a/src/lib/request.ts b/src/lib/request.ts index dea12898a..a271422ad 100644 --- a/src/lib/request.ts +++ b/src/lib/request.ts @@ -63,7 +63,6 @@ export async function request( } else { if (response.headers.get('content-disposition')) { const blob = await response.blob(); - console.log(blob); const link = document.createElement('a'); link.href = URL.createObjectURL(blob); link.download = response.headers.get('content-disposition').split('=')[1] || 'backup.gz'; diff --git a/src/models/Configuration.ts b/src/models/Configuration.ts index 8d071918f..3eac6e66d 100644 --- a/src/models/Configuration.ts +++ b/src/models/Configuration.ts @@ -13,12 +13,14 @@ const ConfigurationSchema = new Schema({ id: { type: Number, required: true }, organization: { type: String, required: true }, name: { type: String, required: true }, - branch: { type: String, required: true }, + branch: { type: String, required: true } }, general: { deployId: { type: String, required: true }, nickname: { type: String, required: true }, workdir: { type: String, required: true }, + isPreviewDeploymentEnabled: { type: Boolean, required: true, default: false }, + pullRequest: { type: Number, required: true, default: 0 }, }, build: { pack: { type: String, required: true }, diff --git a/src/routes/__layout.svelte b/src/routes/__layout.svelte index b61fa79df..c18fd3b84 100644 --- a/src/routes/__layout.svelte +++ b/src/routes/__layout.svelte @@ -306,7 +306,7 @@ > {:else} {/if} diff --git a/src/routes/api/v1/application/check.ts b/src/routes/api/v1/application/check.ts index cd0f94f0c..5bf2c5a51 100644 --- a/src/routes/api/v1/application/check.ts +++ b/src/routes/api/v1/application/check.ts @@ -1,32 +1,18 @@ import { setDefaultConfiguration } from '$lib/api/applications/configuration'; import { saveServerLog } from '$lib/api/applications/logging'; import { docker } from '$lib/api/docker'; +import Configuration from '$models/Configuration'; import type { Request } from '@sveltejs/kit'; export async function post(request: Request) { try { const { DOMAIN } = process.env; const configuration = setDefaultConfiguration(request.body); - - const services = (await docker.engine.listServices()).filter( - (r) => r.Spec.Labels.managedBy === 'coolify' && r.Spec.Labels.type === 'application' - ); - let foundDomain = false; - - for (const service of services) { - const running = JSON.parse(service.Spec.Labels.configuration); - if (running) { - if ( - running.publish.domain === configuration.publish.domain && - running.repository.id !== configuration.repository.id && - running.publish.path === configuration.publish.path - ) { - foundDomain = true; - } - } - } - if (DOMAIN === configuration.publish.domain) foundDomain = true; - if (foundDomain) { + const configurationFound = await Configuration.find({ + 'repository.id': { '$ne': configuration.repository.id }, + 'publish.domain': configuration.publish.domain + }).select('-_id -__v -createdAt -updatedAt') + if (configurationFound.length > 0 || configuration.publish.domain === DOMAIN) { return { status: 200, body: { @@ -38,7 +24,7 @@ export async function post(request: Request) { return { status: 200, body: { success: true, message: 'OK' } - }; + } } catch (error) { await saveServerLog(error); return { diff --git a/src/routes/api/v1/application/config.ts b/src/routes/api/v1/application/config/index.ts similarity index 88% rename from src/routes/api/v1/application/config.ts rename to src/routes/api/v1/application/config/index.ts index eab2dba6f..5327262a7 100644 --- a/src/routes/api/v1/application/config.ts +++ b/src/routes/api/v1/application/config/index.ts @@ -5,17 +5,17 @@ import type { Request } from '@sveltejs/kit'; export async function post(request: Request) { const { name, organization, branch }: any = request.body || {}; if (name && organization && branch) { - const configurationFound = await Configuration.findOne({ + const configurationFound = await Configuration.find({ 'repository.name': name, 'repository.organization': organization, - 'repository.branch': branch, - }).lean() + 'repository.branch': branch + }).select('-_id -__v -createdAt -updatedAt') + if (configurationFound) { return { status: 200, body: { - success: true, - ...configurationFound + configuration: [...configurationFound] } }; } @@ -46,6 +46,7 @@ export async function post(request: Request) { } return null; }); + if (found) { return { status: 200, diff --git a/src/routes/api/v1/application/config/previewDeployment.ts b/src/routes/api/v1/application/config/previewDeployment.ts new file mode 100644 index 000000000..fd7ed21fe --- /dev/null +++ b/src/routes/api/v1/application/config/previewDeployment.ts @@ -0,0 +1,62 @@ +import { updateServiceLabels } from '$lib/api/applications/configuration'; +import { execShellAsync } from '$lib/api/common'; +import { docker } from '$lib/api/docker'; +import ApplicationLog from '$models/ApplicationLog'; +import Configuration from '$models/Configuration'; +import Deployment from '$models/Deployment'; +import type { Request } from '@sveltejs/kit'; + +export async function post(request: Request) { + const { name, organization, branch, isPreviewDeploymentEnabled }: any = request.body || {}; + if (name && organization && branch) { + const configuration = await Configuration.findOneAndUpdate({ + 'repository.name': name, + 'repository.organization': organization, + 'repository.branch': branch + }, { $set: { 'general.isPreviewDeploymentEnabled': isPreviewDeploymentEnabled, 'general.pullRequest': 0 } }, { new: true }).select('-_id -__v -createdAt -updatedAt') + if (!isPreviewDeploymentEnabled) { + const found = await Configuration.find({ + 'repository.name': name, + 'repository.organization': organization, + 'repository.branch': branch, + 'general.pullRequest': { '$ne': 0 } + }) + for (const prDeployment of found) { + await Configuration.findOneAndRemove({ + 'repository.name': name, + 'repository.organization': organization, + 'repository.branch': branch, + 'publish.domain': prDeployment.publish.domain + }) + const deploys = await Deployment.find({ organization, branch, name, domain: prDeployment.publish.domain }); + for (const deploy of deploys) { + await ApplicationLog.deleteMany({ deployId: deploy.deployId }); + await Deployment.deleteMany({ deployId: deploy.deployId }); + } + await execShellAsync(`docker stack rm ${prDeployment.build.container.name}`); + } + return { + status: 200, + body: { + organization, + name, + branch + } + }; + } + updateServiceLabels(configuration); + return { + status: 200, + body: { + success: true + } + }; + + } + return { + status: 500, + body: { + error: 'Cannot save.' + } + }; +} diff --git a/src/routes/api/v1/application/deploy/index.ts b/src/routes/api/v1/application/deploy/index.ts index f32230802..467d630bd 100644 --- a/src/routes/api/v1/application/deploy/index.ts +++ b/src/routes/api/v1/application/deploy/index.ts @@ -1,32 +1,24 @@ import type { Request } from '@sveltejs/kit'; import Deployment from '$models/Deployment'; -import { docker } from '$lib/api/docker'; import { precheckDeployment, setDefaultConfiguration } from '$lib/api/applications/configuration'; import cloneRepository from '$lib/api/applications/cloneRepository'; import { cleanupTmp } from '$lib/api/common'; import queueAndBuild from '$lib/api/applications/queueAndBuild'; import Configuration from '$models/Configuration'; -export async function post(request: Request) { - let configuration; - try { - const services = (await docker.engine.listServices()).filter( - (r) => r.Spec.Labels.managedBy === 'coolify' && r.Spec.Labels.type === 'application' - ); - configuration = setDefaultConfiguration(request.body); - if (!configuration) { - return { - status: 500, - body: { - error: 'Whaaat?' - } - }; - } +export async function post(request: Request) { + const configuration = setDefaultConfiguration(request.body); + if (!configuration) { + return { + status: 500, + body: { + error: 'Whaaat?' + } + }; + } + try { await cloneRepository(configuration); - const { foundService, imageChanged, configChanged, forceUpdate } = await precheckDeployment({ - services, - configuration - }); + const { foundService, imageChanged, configChanged, forceUpdate } = await precheckDeployment(configuration); if (foundService && !forceUpdate && !imageChanged && !configChanged) { cleanupTmp(configuration.general.workdir); return { @@ -56,7 +48,8 @@ export async function post(request: Request) { } const { id, organization, name, branch } = configuration.repository; const { domain } = configuration.publish; - const { deployId, nickname } = configuration.general; + const { deployId, nickname, pullRequest } = configuration.general; + await new Deployment({ repoId: id, branch, @@ -66,11 +59,13 @@ export async function post(request: Request) { name, nickname }).save(); + await Configuration.findOneAndUpdate({ 'repository.id': id, 'repository.organization': organization, 'repository.name': name, 'repository.branch': branch, + 'general.pullRequest': 0, }, { ...configuration }, { upsert: true, new: true }) @@ -86,6 +81,7 @@ export async function post(request: Request) { } }; } catch (error) { + console.log(error) await Deployment.findOneAndUpdate( { repoId: configuration.repository.id, diff --git a/src/routes/api/v1/application/deploy/logs/[deployId].ts b/src/routes/api/v1/application/deploy/logs/[deployId].ts index baf5b3fae..e369ca57b 100644 --- a/src/routes/api/v1/application/deploy/logs/[deployId].ts +++ b/src/routes/api/v1/application/deploy/logs/[deployId].ts @@ -12,8 +12,6 @@ export async function get(request: Request) { const deploy: any = await Deployment.findOne({ deployId }) .select('-_id -__v') - .sort({ createdAt: 'desc' }); - const finalLogs: any = {}; finalLogs.progress = deploy.progress; finalLogs.events = logs.map((log) => log.event); diff --git a/src/routes/api/v1/application/deploy/logs/index.ts b/src/routes/api/v1/application/deploy/logs/index.ts index f62d716d5..b536050b8 100644 --- a/src/routes/api/v1/application/deploy/logs/index.ts +++ b/src/routes/api/v1/application/deploy/logs/index.ts @@ -16,12 +16,12 @@ export async function get(request: Request) { .select('-_id -__v -repoId') .sort({ createdAt: 'desc' }) .limit(show); - const finalLogs = deploy.map((d) => { const finalLogs = { ...d._doc }; const updatedAt = dayjs(d.updatedAt).utc(); finalLogs.took = updatedAt.diff(dayjs(d.createdAt)) / 1000; finalLogs.since = updatedAt.fromNow(); + finalLogs.isPr = d.domain.startsWith('pr') return finalLogs; }); return { diff --git a/src/routes/api/v1/application/remove.ts b/src/routes/api/v1/application/remove.ts index 2b4ab5daa..710bdfeaa 100644 --- a/src/routes/api/v1/application/remove.ts +++ b/src/routes/api/v1/application/remove.ts @@ -1,61 +1,69 @@ import { purgeImagesContainers } from '$lib/api/applications/cleanup'; -import { docker } from '$lib/api/docker'; import Deployment from '$models/Deployment'; import ApplicationLog from '$models/ApplicationLog'; import { delay, execShellAsync } from '$lib/api/common'; import Configuration from '$models/Configuration'; -async function call(found) { +async function purgeImagesAsync(found) { await delay(10000); await purgeImagesContainers(found, true); } export async function post(request: Request) { - const { organization, name, branch } = request.body; - let found = false; + const { organization, name, branch, domain } = request.body; try { - (await docker.engine.listServices()) - .filter((r) => r.Spec.Labels.managedBy === 'coolify' && r.Spec.Labels.type === 'application') - .map((s) => { - const running = JSON.parse(s.Spec.Labels.configuration); - if ( - running.repository.organization === organization && - running.repository.name === name && - running.repository.branch === branch - ) { - found = running; + const configurationFound = await Configuration.findOne({ + 'repository.organization': organization, + 'repository.name': name, + 'repository.branch': branch, + 'publish.domain': domain + }) + if (configurationFound) { + const id = configurationFound._id + if (configurationFound?.general?.pullRequest === 0) { + // Main deployment deletion request; deleting main + PRs + const allConfiguration = await Configuration.find({ + 'repository.name': name, + 'repository.organization': organization, + 'repository.branch': branch, + }) + for (const config of allConfiguration) { + await Configuration.findOneAndRemove({ + 'repository.name': config.repository.name, + 'repository.organization': config.repository.organization, + 'repository.branch': config.repository.branch, + }) + await execShellAsync(`docker stack rm ${config.build.container.name}`); } - return null; - }); - if (found) { - await Configuration.findOneAndRemove({ - 'repository.name': name, - 'repository.organization': organization, - 'repository.branch': branch, - }) - const deploys = await Deployment.find({ organization, branch, name }); - for (const deploy of deploys) { - await ApplicationLog.deleteMany({ deployId: deploy.deployId }); - await Deployment.deleteMany({ deployId: deploy.deployId }); + const deploys = await Deployment.find({ organization, branch, name }) + for (const deploy of deploys) { + await ApplicationLog.deleteMany({ deployId: deploy.deployId }); + await Deployment.deleteMany({ deployId: deploy.deployId }); + } + + purgeImagesAsync(configurationFound); + } else { + // Delete only PRs + await Configuration.findByIdAndRemove(id) + await execShellAsync(`docker stack rm ${configurationFound.build.container.name}`); + const deploys = await Deployment.find({ organization, branch, name, domain }) + for (const deploy of deploys) { + await ApplicationLog.deleteMany({ deployId: deploy.deployId }); + await Deployment.deleteMany({ deployId: deploy.deployId }); + } + purgeImagesAsync(configurationFound); } - await execShellAsync(`docker stack rm ${found.build.container.name}`); - call(found); - return { - status: 200, - body: { - organization, - name, - branch - } - }; - } else { - return { - status: 500, - error: { - message: 'Nothing to do.' - } - }; } + + return { + status: 200, + body: { + organization, + name, + branch + } + }; } catch (error) { + console.log(error) return { status: 500, error: { diff --git a/src/routes/api/v1/dashboard/index.ts b/src/routes/api/v1/dashboard/index.ts index 8186be26c..89a54bab8 100644 --- a/src/routes/api/v1/dashboard/index.ts +++ b/src/routes/api/v1/dashboard/index.ts @@ -1,14 +1,9 @@ import { docker } from '$lib/api/docker'; import type { Request } from '@sveltejs/kit'; - +import Configuration from '$models/Configuration' export async function get(request: Request) { + // Should update this to get data from mongodb and update db with the currently running services on start! const dockerServices = await docker.engine.listServices(); - let applications: any = dockerServices.filter( - (r) => - r.Spec.Labels.managedBy === 'coolify' && - r.Spec.Labels.type === 'application' && - r.Spec.Labels.configuration - ); let databases: any = dockerServices.filter( (r) => r.Spec.Labels.managedBy === 'coolify' && @@ -21,15 +16,6 @@ export async function get(request: Request) { r.Spec.Labels.type === 'service' && r.Spec.Labels.configuration ); - applications = applications.map((r) => { - if (JSON.parse(r.Spec.Labels.configuration)) { - return { - configuration: JSON.parse(r.Spec.Labels.configuration), - UpdatedAt: r.UpdatedAt - }; - } - return {}; - }); databases = databases.map((r) => { if (JSON.parse(r.Spec.Labels.configuration)) { return { @@ -47,14 +33,23 @@ export async function get(request: Request) { } return {}; }); - applications = [ - ...new Map( - applications.map((item) => [ - item.configuration.publish.domain + item.configuration.publish.path, - item - ]) - ).values() - ]; + const configurations = await Configuration.find({ + 'general.pullRequest': { '$in': [null, 0] } + }).select('-_id -__v -createdAt') + const applications = [] + for (const configuration of configurations) { + const foundPRDeployments = await Configuration.find({ + 'repository.id': configuration.repository.id, + 'repository.branch': configuration.repository.branch, + 'general.pullRequest': { '$ne': 0 } + }).select('-_id -__v -createdAt') + const payload = { + configuration, + UpdatedAt: configuration.updatedAt, + prBuilds: foundPRDeployments.length > 0 ? true : false, + } + applications.push(payload) + } return { status: 200, body: { diff --git a/src/routes/api/v1/webhooks/deploy.ts b/src/routes/api/v1/webhooks/deploy.ts index 57a4a837e..e0b87cd63 100644 --- a/src/routes/api/v1/webhooks/deploy.ts +++ b/src/routes/api/v1/webhooks/deploy.ts @@ -4,11 +4,16 @@ import Deployment from '$models/Deployment'; import { docker } from '$lib/api/docker'; import { precheckDeployment, setDefaultConfiguration } from '$lib/api/applications/configuration'; import cloneRepository from '$lib/api/applications/cloneRepository'; -import { cleanupTmp } from '$lib/api/common'; +import { cleanupTmp, execShellAsync } from '$lib/api/common'; import queueAndBuild from '$lib/api/applications/queueAndBuild'; import Configuration from '$models/Configuration'; +import ApplicationLog from '$models/ApplicationLog'; +import { cleanupStuckedDeploymentsInDB } from '$lib/api/applications/cleanup'; export async function post(request: Request) { let configuration; + const allowedGithubEvents = ['push', 'pull_request'] + const allowedPRActions = ['opened', , 'reopened', 'synchronize', 'closed'] + const githubEvent = request.headers['x-github-event'] const { GITHUP_APP_WEBHOOK_SECRET } = process.env; const hmac = crypto.createHmac('sha256', GITHUP_APP_WEBHOOK_SECRET); const digest = Buffer.from( @@ -20,52 +25,92 @@ export async function post(request: Request) { return { status: 500, body: { - error: 'Invalid request' + error: 'Invalid request.' } }; } - if (request.headers['x-github-event'] !== 'push') { + if (!allowedGithubEvents.includes(githubEvent)) { return { status: 500, body: { - error: 'Not a push event.' + error: 'Event not allowed.' } }; } + try { - const services = (await docker.engine.listServices()).filter( - (r) => r.Spec.Labels.managedBy === 'coolify' && r.Spec.Labels.type === 'application' - ); - - configuration = services.find((r) => { - if (request.body.ref.startsWith('refs')) { - const branch = request.body.ref.split('/')[2]; - if ( - JSON.parse(r.Spec.Labels.configuration).repository.id === request.body.repository.id && - JSON.parse(r.Spec.Labels.configuration).repository.branch === branch - ) { - return r; + const applications = await Configuration.find({ + 'repository.id': request.body.repository.id, + }).select('-_id -__v -createdAt -updatedAt') + if (githubEvent === 'push') { + configuration = applications.find((r) => { + if (request.body.ref.startsWith('refs')) { + if (r.repository.branch === request.body.ref.split('/')[2]) { + return r; + } } + return null; + }); + } else if (githubEvent === 'pull_request') { + if (!allowedPRActions.includes(request.body.action)) { + return { + status: 500, + body: { + error: 'PR action is not allowed.' + } + }; } - - return null; - }); - configuration = setDefaultConfiguration(JSON.parse(configuration.Spec.Labels.configuration)); - + configuration = applications.find((r) => r.repository.branch === request.body['pull_request'].base.ref); + if (configuration) { + if (!configuration.general.isPreviewDeploymentEnabled) { + return { + status: 500, + body: { + error: 'PR deployments are not enabled.' + } + }; + } + configuration.general.pullRequest = request.body.number + } + } if (!configuration) { return { status: 500, body: { - error: 'Whaaat?' + error: 'No configuration found.' + } + }; + } + configuration = setDefaultConfiguration(configuration); + const { id, organization, name, branch } = configuration.repository; + const { domain } = configuration.publish; + const { deployId, nickname, pullRequest } = configuration.general; + + if (request.body.action === 'closed') { + const deploys = await Deployment.find({ organization, branch, name, domain }); + for (const deploy of deploys) { + await ApplicationLog.deleteMany({ deployId: deploy.deployId }); + await Deployment.deleteMany({ deployId: deploy.deployId }); + } + await Configuration.findOneAndRemove({ + 'repository.id': id, + 'repository.organization': organization, + 'repository.name': name, + 'repository.branch': branch, + 'general.pullRequest': pullRequest + }) + await execShellAsync(`docker stack rm ${configuration.build.container.name}`); + return { + status: 200, + body: { + success: true, + message: 'Removed' } }; } await cloneRepository(configuration); - const { foundService, imageChanged, configChanged, forceUpdate } = await precheckDeployment({ - services, - configuration - }); + const { foundService, imageChanged, configChanged, forceUpdate } = await precheckDeployment(configuration); if (foundService && !forceUpdate && !imageChanged && !configChanged) { cleanupTmp(configuration.general.workdir); return { @@ -77,11 +122,11 @@ export async function post(request: Request) { }; } const alreadyQueued = await Deployment.find({ - repoId: configuration.repository.id, - branch: configuration.repository.branch, - organization: configuration.repository.organization, - name: configuration.repository.name, - domain: configuration.publish.domain, + repoId: id, + branch: branch, + organization: organization, + name: name, + domain: domain, progress: { $in: ['queued', 'inprogress'] } }); if (alreadyQueued.length > 0) { @@ -93,9 +138,7 @@ export async function post(request: Request) { } }; } - const { id, organization, name, branch } = configuration.repository; - const { domain } = configuration.publish; - const { deployId, nickname } = configuration.general; + await new Deployment({ repoId: id, branch, @@ -105,14 +148,29 @@ export async function post(request: Request) { name, nickname }).save(); - await Configuration.findOneAndUpdate({ - 'repository.id': id, - 'repository.organization': organization, - 'repository.name': name, - 'repository.branch': branch, - }, - { ...configuration }, - { upsert: true, new: true }) + + + if (githubEvent === 'pull_request') { + await Configuration.findOneAndUpdate({ + 'repository.id': id, + 'repository.organization': organization, + 'repository.name': name, + 'repository.branch': branch, + 'general.pullRequest': pullRequest + }, + { ...configuration }, + { upsert: true, new: true }) + } else { + await Configuration.findOneAndUpdate({ + 'repository.id': id, + 'repository.organization': organization, + 'repository.name': name, + 'repository.branch': branch, + 'general.pullRequest': { '$in': [null, 0] } + }, + { ...configuration }, + { upsert: true, new: true }) + } queueAndBuild(configuration, imageChanged); return { @@ -125,28 +183,40 @@ export async function post(request: Request) { } }; } catch (error) { - await Deployment.findOneAndUpdate( - { - repoId: configuration.repository.id, - branch: configuration.repository.branch, - organization: configuration.repository.organization, - name: configuration.repository.name, - domain: configuration.publish.domain - }, - { - repoId: configuration.repository.id, - branch: configuration.repository.branch, - organization: configuration.repository.organization, - name: configuration.repository.name, - domain: configuration.publish.domain, - progress: 'failed' - } - ); + console.log(error) + // console.log(configuration) + if (configuration) { + cleanupTmp(configuration.general.workdir); + await Deployment.findOneAndUpdate( + { + repoId: configuration.repository.id, + branch: configuration.repository.branch, + organization: configuration.repository.organization, + name: configuration.repository.name, + domain: configuration.publish.domain + }, + { + repoId: configuration.repository.id, + branch: configuration.repository.branch, + organization: configuration.repository.organization, + name: configuration.repository.name, + domain: configuration.publish.domain, + progress: 'failed' + } + ); + } + return { status: 500, body: { error: error.message || error } }; + } finally { + try { + await cleanupStuckedDeploymentsInDB(); + } catch (error) { + console.log(error) + } } } diff --git a/src/routes/application/[organization]/[name]/[branch]/logs/index.svelte b/src/routes/application/[organization]/[name]/[branch]/logs/index.svelte index 1d99f7b76..4fa0717c6 100644 --- a/src/routes/application/[organization]/[name]/[branch]/logs/index.svelte +++ b/src/routes/application/[organization]/[name]/[branch]/logs/index.svelte @@ -84,13 +84,15 @@ deployment.progress !== 'failed'} class:bg-warmGray-800={deployment.progress !== 'done' && deployment.progress !== 'failed'} - class:hover:bg-red-200={deployment.progress === 'failed'} class:hover:border-red-500={deployment.progress === 'failed'} on:click={() => goto(`./logs/${deployment.deployId}`)} > -
- {deployment.branch} +
+
+ {deployment.branch}
+
{deployment.isPr ? 'PR' : ''}
+
- import { application, initialApplication, initConf, dashboard } from '$store'; + import { application, initialApplication, initConf, dashboard, prApplication } from '$store'; import { onDestroy } from 'svelte'; import Loading from '$components/Loading.svelte'; import Navbar from '$components/Application/Navbar.svelte'; @@ -14,15 +14,16 @@ async function setConfiguration() { try { - const config = await request(`/api/v1/application/config`, $session, { + const { configuration } = await request(`/api/v1/application/config`, $session, { body: { name: $application.repository.name, organization: $application.repository.organization, branch: $application.repository.branch } }); - $application = { ...config }; - $initConf = JSON.parse(JSON.stringify($application)); + $prApplication = configuration.filter((c) => c.general.pullRequest !== 0); + $application = configuration.find((c) => c.general.pullRequest === 0); + if (!$application) browser && goto('/dashboard/applications'); } catch (error) { browser && goto('/dashboard/applications'); } diff --git a/src/routes/database/[name]/configuration.svelte b/src/routes/database/[name]/configuration.svelte index 86bc4079f..2288d6b12 100644 --- a/src/routes/database/[name]/configuration.svelte +++ b/src/routes/database/[name]/configuration.svelte @@ -67,9 +67,7 @@
Database
- {#if $database.config.general.type !== 'redis'} -
Connection string
- {/if} +
Connection string
{#if $database.config.general.type === 'mongodb'} + {:else if $database.config.general.type === 'redis'} + {:else if $database.config.general.type === 'clickhouse'}